From owner-svn-src-head@freebsd.org Sun Apr 29 10:45:10 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1E334FA940D; Sun, 29 Apr 2018 10:45:10 +0000 (UTC) (envelope-from trasz@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B2A63700ED; Sun, 29 Apr 2018 10:45:09 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AD7FB234CE; Sun, 29 Apr 2018 10:45:09 +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 w3TAj96v090371; Sun, 29 Apr 2018 10:45:09 GMT (envelope-from trasz@FreeBSD.org) Received: (from trasz@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3TAj9vg090370; Sun, 29 Apr 2018 10:45:09 GMT (envelope-from trasz@FreeBSD.org) Message-Id: <201804291045.w3TAj9vg090370@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: trasz set sender to trasz@FreeBSD.org using -f From: Edward Tomasz Napierala Date: Sun, 29 Apr 2018 10:45:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333089 - head/usr.sbin/usbconfig X-SVN-Group: head X-SVN-Commit-Author: trasz X-SVN-Commit-Paths: head/usr.sbin/usbconfig X-SVN-Commit-Revision: 333089 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 29 Apr 2018 10:45:10 -0000 Author: trasz Date: Sun Apr 29 10:45:09 2018 New Revision: 333089 URL: https://svnweb.freebsd.org/changeset/base/333089 Log: Clean up the EXAMPLES section of usbconfig(8). This removes parts that become redundant after documenting all the subcommands, and switches to the new syntax, without the '-d'. Reviewed by: hselasky@ MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Modified: head/usr.sbin/usbconfig/usbconfig.8 Modified: head/usr.sbin/usbconfig/usbconfig.8 ============================================================================== --- head/usr.sbin/usbconfig/usbconfig.8 Sun Apr 29 05:37:46 2018 (r333088) +++ head/usr.sbin/usbconfig/usbconfig.8 Sun Apr 29 10:45:09 2018 (r333089) @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd April 17, 2018 +.Dd April 29, 2018 .Dt USBCONFIG 8 .Os .Sh NAME @@ -146,33 +146,21 @@ See for more information. .El .Sh EXAMPLES -Show information about the device on USB bus 1 at address 2: +List all connected USB devices and their attached interface drivers: .Pp -.Dl usbconfig -d ugen1.2 dump_info +.Dl usbconfig show_ifdrv .Pp -Dump HID descriptor for device on USB bus 1 at address 2: +Dump device and configuration descriptors for device on USB bus 1 at address 2: .Pp -.Dl usbconfig -d ugen1.2 do_request 0x81 0x06 0x2200 0 0x100 +.Dl usbconfig ugen1.2 dump_all_desc .Pp -Dump string descriptor at index Z for device on USB bus 1 at address 2: +Dump HID descriptor for device on USB bus 1 at address 2: .Pp -.Dl usbconfig -d ugen1.2 dump_string Z +.Dl usbconfig ugen1.2 do_request 0x81 0x06 0x2200 0 0x100 .Pp -Dump current configuration descriptor for device on USB bus 1 at address 2: +Power off the device on USB bus 1 at address 2: .Pp -.Dl usbconfig -d ugen1.2 dump_curr_config_desc -.Pp -Dump device descriptor for device on USB bus 1 at address 2: -.Pp -.Dl usbconfig -d ugen1.2 dump_device_desc -.Pp -Program the device on USB bus 1 at address 2 to suspend, resume, power off, go into power save, or power on: -.Pp -.Dl usbconfig -d ugen1.2 suspend -.Dl usbconfig -d ugen1.2 resume -.Dl usbconfig -d ugen1.2 power_off -.Dl usbconfig -d ugen1.2 power_save -.Dl usbconfig -d ugen1.2 power_on +.Dl usbconfig ugen1.2 power_off .Sh SEE ALSO .Xr usb 4 , .Xr usb_quirk 4 , From owner-svn-src-head@freebsd.org Sun Apr 29 12:43:09 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2B848FAC324; Sun, 29 Apr 2018 12:43:09 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D41C668435; Sun, 29 Apr 2018 12:43:08 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CED0724800; Sun, 29 Apr 2018 12:43: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 w3TCh8Th051163; Sun, 29 Apr 2018 12:43:08 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3TCh8Yj051162; Sun, 29 Apr 2018 12:43:08 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201804291243.w3TCh8Yj051162@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Sun, 29 Apr 2018 12:43:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333091 - head/sys/vm X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: head/sys/vm X-SVN-Commit-Revision: 333091 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 29 Apr 2018 12:43:09 -0000 Author: kib Date: Sun Apr 29 12:43:08 2018 New Revision: 333091 URL: https://svnweb.freebsd.org/changeset/base/333091 Log: Eliminate some vm object relocks in vm fault. For the vm_fault_prefault() call from vm_fault_soft_fast(), extend the scope of the object rlock to avoid re-taking it inside vm_fault_prefault(). It causes pmap_enter_quick() sometimes called with shadow object lock as well as the page lock, but this looks innocent. Noted and measured by: mjg Reviewed by: alc, markj (as part of the larger patch) Tested by: pho (as part of the larger patch) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D15122 Modified: head/sys/vm/vm_fault.c Modified: head/sys/vm/vm_fault.c ============================================================================== --- head/sys/vm/vm_fault.c Sun Apr 29 11:46:20 2018 (r333090) +++ head/sys/vm/vm_fault.c Sun Apr 29 12:43:08 2018 (r333091) @@ -132,7 +132,7 @@ struct faultstate { static void vm_fault_dontneed(const struct faultstate *fs, vm_offset_t vaddr, int ahead); static void vm_fault_prefault(const struct faultstate *fs, vm_offset_t addra, - int backward, int forward); + int backward, int forward, bool obj_locked); static inline void release_page(struct faultstate *fs) @@ -320,9 +320,9 @@ vm_fault_soft_fast(struct faultstate *fs, vm_offset_t return (rv); vm_fault_fill_hold(m_hold, m); vm_fault_dirty(fs->entry, m, prot, fault_type, fault_flags, false); - VM_OBJECT_RUNLOCK(fs->first_object); if (psind == 0 && !wired) - vm_fault_prefault(fs, vaddr, PFBAK, PFFOR); + vm_fault_prefault(fs, vaddr, PFBAK, PFFOR, true); + VM_OBJECT_RUNLOCK(fs->first_object); vm_map_lookup_done(fs->map, fs->entry); curthread->td_ru.ru_minflt++; return (KERN_SUCCESS); @@ -1262,7 +1262,7 @@ readrest: wired == 0) vm_fault_prefault(&fs, vaddr, faultcount > 0 ? behind : PFBAK, - faultcount > 0 ? ahead : PFFOR); + faultcount > 0 ? ahead : PFFOR, false); VM_OBJECT_WLOCK(fs.object); vm_page_lock(fs.m); @@ -1395,7 +1395,7 @@ vm_fault_dontneed(const struct faultstate *fs, vm_offs */ static void vm_fault_prefault(const struct faultstate *fs, vm_offset_t addra, - int backward, int forward) + int backward, int forward, bool obj_locked) { pmap_t pmap; vm_map_entry_t entry; @@ -1441,7 +1441,8 @@ vm_fault_prefault(const struct faultstate *fs, vm_offs pindex = ((addr - entry->start) + entry->offset) >> PAGE_SHIFT; lobject = entry->object.vm_object; - VM_OBJECT_RLOCK(lobject); + if (!obj_locked) + VM_OBJECT_RLOCK(lobject); while ((m = vm_page_lookup(lobject, pindex)) == NULL && lobject->type == OBJT_DEFAULT && (backing_object = lobject->backing_object) != NULL) { @@ -1449,17 +1450,20 @@ vm_fault_prefault(const struct faultstate *fs, vm_offs 0, ("vm_fault_prefault: unaligned object offset")); pindex += lobject->backing_object_offset >> PAGE_SHIFT; VM_OBJECT_RLOCK(backing_object); - VM_OBJECT_RUNLOCK(lobject); + if (!obj_locked || lobject != entry->object.vm_object) + VM_OBJECT_RUNLOCK(lobject); lobject = backing_object; } if (m == NULL) { - VM_OBJECT_RUNLOCK(lobject); + if (!obj_locked || lobject != entry->object.vm_object) + VM_OBJECT_RUNLOCK(lobject); break; } if (m->valid == VM_PAGE_BITS_ALL && (m->flags & PG_FICTITIOUS) == 0) pmap_enter_quick(pmap, addr, m, entry->protection); - VM_OBJECT_RUNLOCK(lobject); + if (!obj_locked || lobject != entry->object.vm_object) + VM_OBJECT_RUNLOCK(lobject); } } From owner-svn-src-head@freebsd.org Sun Apr 29 17:46:09 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 48031FB2FCE; Sun, 29 Apr 2018 17:46:09 +0000 (UTC) (envelope-from jilles@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EC562845C3; Sun, 29 Apr 2018 17:46:08 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E527E277E2; Sun, 29 Apr 2018 17:46:08 +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 w3THk8uu003065; Sun, 29 Apr 2018 17:46:08 GMT (envelope-from jilles@FreeBSD.org) Received: (from jilles@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3THk8L8003062; Sun, 29 Apr 2018 17:46:08 GMT (envelope-from jilles@FreeBSD.org) Message-Id: <201804291746.w3THk8L8003062@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jilles set sender to jilles@FreeBSD.org using -f From: Jilles Tjoelker Date: Sun, 29 Apr 2018 17:46:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333092 - in head/bin/sh: . tests/builtins X-SVN-Group: head X-SVN-Commit-Author: jilles X-SVN-Commit-Paths: in head/bin/sh: . tests/builtins X-SVN-Commit-Revision: 333092 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 29 Apr 2018 17:46:09 -0000 Author: jilles Date: Sun Apr 29 17:46:08 2018 New Revision: 333092 URL: https://svnweb.freebsd.org/changeset/base/333092 Log: sh: Don't have [ match any [[:class:]] Submitted by: Robert Elz MFC after: 3 days Added: head/bin/sh/tests/builtins/case23.0 (contents, props changed) Modified: head/bin/sh/expand.c head/bin/sh/tests/builtins/Makefile Modified: head/bin/sh/expand.c ============================================================================== --- head/bin/sh/expand.c Sun Apr 29 12:43:08 2018 (r333091) +++ head/bin/sh/expand.c Sun Apr 29 17:46:08 2018 (r333092) @@ -1342,8 +1342,10 @@ patmatch(const char *pattern, const char *string) } if (c == '[' && *p == ':') { found |= match_charclass(p, chr, &end); - if (end != NULL) + if (end != NULL) { p = end; + continue; + } } if (c == CTLESC) c = *p++; Modified: head/bin/sh/tests/builtins/Makefile ============================================================================== --- head/bin/sh/tests/builtins/Makefile Sun Apr 29 12:43:08 2018 (r333091) +++ head/bin/sh/tests/builtins/Makefile Sun Apr 29 17:46:08 2018 (r333092) @@ -42,6 +42,7 @@ ${PACKAGE}FILES+= case19.0 ${PACKAGE}FILES+= case20.0 ${PACKAGE}FILES+= case21.0 ${PACKAGE}FILES+= case22.0 +${PACKAGE}FILES+= case23.0 ${PACKAGE}FILES+= cd1.0 ${PACKAGE}FILES+= cd2.0 ${PACKAGE}FILES+= cd3.0 Added: head/bin/sh/tests/builtins/case23.0 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/bin/sh/tests/builtins/case23.0 Sun Apr 29 17:46:08 2018 (r333092) @@ -0,0 +1,5 @@ +# $FreeBSD$ + +case [ in +[[:alpha:]]) echo bad +esac From owner-svn-src-head@freebsd.org Mon Apr 30 01:58:25 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8A11CFBFC19; Mon, 30 Apr 2018 01:58:25 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 37F8E75865; Mon, 30 Apr 2018 01:58:25 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 328BC4BAC; Mon, 30 Apr 2018 01:58:25 +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 w3U1wPle049710; Mon, 30 Apr 2018 01:58:25 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U1wPun049709; Mon, 30 Apr 2018 01:58:25 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201804300158.w3U1wPun049709@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 30 Apr 2018 01:58:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333095 - head/sys/dev/usb/net X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/sys/dev/usb/net X-SVN-Commit-Revision: 333095 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 01:58:25 -0000 Author: emaste Date: Mon Apr 30 01:58:24 2018 New Revision: 333095 URL: https://svnweb.freebsd.org/changeset/base/333095 Log: if_smsc: fix reset check In smsc_phy_init function, when the driver was trying to reset PHY, it didn't poll for the correct bit (BMCR_RESET) to be cleared. Instead, it anded it with MII_BMCR (which is 0), so it just exited the loop. This issue was fixed in Linux in commit d94609200069. Submitted by: Arshan Khanifar MFC after: 1 week Sponsored by: The FreeBSD Foundation Modified: head/sys/dev/usb/net/if_smsc.c Modified: head/sys/dev/usb/net/if_smsc.c ============================================================================== --- head/sys/dev/usb/net/if_smsc.c Mon Apr 30 00:07:41 2018 (r333094) +++ head/sys/dev/usb/net/if_smsc.c Mon Apr 30 01:58:24 2018 (r333095) @@ -1306,7 +1306,7 @@ smsc_phy_init(struct smsc_softc *sc) do { uether_pause(&sc->sc_ue, hz / 100); bmcr = smsc_miibus_readreg(sc->sc_ue.ue_dev, sc->sc_phyno, MII_BMCR); - } while ((bmcr & MII_BMCR) && ((ticks - start_ticks) < max_ticks)); + } while ((bmcr & BMCR_RESET) && ((ticks - start_ticks) < max_ticks)); if (((usb_ticks_t)(ticks - start_ticks)) >= max_ticks) { smsc_err_printf(sc, "PHY reset timed-out"); From owner-svn-src-head@freebsd.org Mon Apr 30 02:18:19 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BF273FC0259; Mon, 30 Apr 2018 02:18:19 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 75E7B79DBD; Mon, 30 Apr 2018 02:18:19 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 70E954EDE; Mon, 30 Apr 2018 02:18:19 +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 w3U2IJcY059600; Mon, 30 Apr 2018 02:18:19 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U2IJgE059599; Mon, 30 Apr 2018 02:18:19 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201804300218.w3U2IJgE059599@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 30 Apr 2018 02:18:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333096 - head/sys/dev/usb/net X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/sys/dev/usb/net X-SVN-Commit-Revision: 333096 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 02:18:19 -0000 Author: emaste Date: Mon Apr 30 02:18:19 2018 New Revision: 333096 URL: https://svnweb.freebsd.org/changeset/base/333096 Log: if_smsc: set MII BUSY bit to read/write PHY regs Per the datasheet, the BUSY bit must be set when reading or writing PHY registers. From Linux commit 80928805babf. Submitted by: Arshan Khanifar MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D15217 Modified: head/sys/dev/usb/net/if_smsc.c Modified: head/sys/dev/usb/net/if_smsc.c ============================================================================== --- head/sys/dev/usb/net/if_smsc.c Mon Apr 30 01:58:24 2018 (r333095) +++ head/sys/dev/usb/net/if_smsc.c Mon Apr 30 02:18:19 2018 (r333096) @@ -452,7 +452,7 @@ smsc_miibus_readreg(device_t dev, int phy, int reg) goto done; } - addr = (phy << 11) | (reg << 6) | SMSC_MII_READ; + addr = (phy << 11) | (reg << 6) | SMSC_MII_READ | SMSC_MII_BUSY; smsc_write_reg(sc, SMSC_MII_ADDR, addr); if (smsc_wait_for_bits(sc, SMSC_MII_ADDR, SMSC_MII_BUSY) != 0) @@ -505,7 +505,7 @@ smsc_miibus_writereg(device_t dev, int phy, int reg, i val = htole32(val); smsc_write_reg(sc, SMSC_MII_DATA, val); - addr = (phy << 11) | (reg << 6) | SMSC_MII_WRITE; + addr = (phy << 11) | (reg << 6) | SMSC_MII_WRITE | SMSC_MII_BUSY; smsc_write_reg(sc, SMSC_MII_ADDR, addr); if (smsc_wait_for_bits(sc, SMSC_MII_ADDR, SMSC_MII_BUSY) != 0) From owner-svn-src-head@freebsd.org Mon Apr 30 04:02:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 43E02FC230E; Mon, 30 Apr 2018 04:02:49 +0000 (UTC) (envelope-from bcran@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E92056FEC0; Mon, 30 Apr 2018 04:02:48 +0000 (UTC) (envelope-from bcran@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E2DBA615B; Mon, 30 Apr 2018 04:02:48 +0000 (UTC) (envelope-from bcran@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3U42mVQ014963; Mon, 30 Apr 2018 04:02:48 GMT (envelope-from bcran@FreeBSD.org) Received: (from bcran@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U42mFS014962; Mon, 30 Apr 2018 04:02:48 GMT (envelope-from bcran@FreeBSD.org) Message-Id: <201804300402.w3U42mFS014962@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: bcran set sender to bcran@FreeBSD.org using -f From: Rebecca Cran Date: Mon, 30 Apr 2018 04:02:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333097 - head/share/misc X-SVN-Group: head X-SVN-Commit-Author: bcran X-SVN-Commit-Paths: head/share/misc X-SVN-Commit-Revision: 333097 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 04:02:49 -0000 Author: bcran Date: Mon Apr 30 04:02:48 2018 New Revision: 333097 URL: https://svnweb.freebsd.org/changeset/base/333097 Log: Add back the historical information about being mentored by rrs Reviewed by: imp, eadler Differential Revision: https://reviews.freebsd.org/D15230 Modified: head/share/misc/committers-src.dot Modified: head/share/misc/committers-src.dot ============================================================================== --- head/share/misc/committers-src.dot Mon Apr 30 02:18:19 2018 (r333096) +++ head/share/misc/committers-src.dot Mon Apr 30 04:02:48 2018 (r333097) @@ -753,6 +753,7 @@ rpaulo -> jmmv rpaulo -> lidl rpaulo -> ngie +rrs -> bcran rrs -> jchandra rrs -> tuexen From owner-svn-src-head@freebsd.org Mon Apr 30 05:57:56 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A202AFC4806; Mon, 30 Apr 2018 05:57:56 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4C6888660D; Mon, 30 Apr 2018 05:57:56 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 46E957309; Mon, 30 Apr 2018 05:57:56 +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 w3U5vu2J070030; Mon, 30 Apr 2018 05:57:56 GMT (envelope-from delphij@FreeBSD.org) Received: (from delphij@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U5vucZ070029; Mon, 30 Apr 2018 05:57:56 GMT (envelope-from delphij@FreeBSD.org) Message-Id: <201804300557.w3U5vucZ070029@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: delphij set sender to delphij@FreeBSD.org using -f From: Xin LI Date: Mon, 30 Apr 2018 05:57:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333098 - head/sbin/fsck_msdosfs X-SVN-Group: head X-SVN-Commit-Author: delphij X-SVN-Commit-Paths: head/sbin/fsck_msdosfs X-SVN-Commit-Revision: 333098 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 05:57:56 -0000 Author: delphij Date: Mon Apr 30 05:57:55 2018 New Revision: 333098 URL: https://svnweb.freebsd.org/changeset/base/333098 Log: Don't bail out from the check if readboot() returns !FSFATAL. This can happen when the fsinfo signature is invalid, and the user have choose to fix it, in which case the code would return FSBOOTMOD (not FSOK but not FSFATAL either). All other (fatal) cases would return FSFATAL. Obtained from: Android Open Source Project Obtained from: https://android.googlesource.com/platform/external/fsck_msdos/+/d8775a29ea7eac2e5f1504dd21da3725b93b3036 MFC after: 2 weeks Modified: head/sbin/fsck_msdosfs/check.c Modified: head/sbin/fsck_msdosfs/check.c ============================================================================== --- head/sbin/fsck_msdosfs/check.c Mon Apr 30 04:02:48 2018 (r333097) +++ head/sbin/fsck_msdosfs/check.c Mon Apr 30 05:57:55 2018 (r333098) @@ -74,7 +74,7 @@ checkfilesys(const char *fname) return 8; } - if (readboot(dosfs, &boot) != FSOK) { + if (readboot(dosfs, &boot) == FSFATAL) { close(dosfs); printf("\n"); return 8; From owner-svn-src-head@freebsd.org Mon Apr 30 07:22:20 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0ECC0FC62D0; Mon, 30 Apr 2018 07:22:20 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from mail.strugglingcoder.info (strugglingcoder.info [104.236.146.68]) by mx1.freebsd.org (Postfix) with ESMTP id A59B77725B; Mon, 30 Apr 2018 07:22:19 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from localhost (unknown [10.1.1.3]) (Authenticated sender: hiren@strugglingcoder.info) by mail.strugglingcoder.info (Postfix) with ESMTPA id 67DD21708B; Mon, 30 Apr 2018 00:16:46 -0700 (PDT) Date: Mon, 30 Apr 2018 00:16:46 -0700 From: hiren panchasara To: Randall Stewart Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r332770 - in head/sys: conf netinet netinet/tcp_stacks sys Message-ID: <20180430071646.GE3653@strugglingcoder.info> References: <201804191338.w3JDc0to002106@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="4Epv4kl9IRBfg3rk" Content-Disposition: inline In-Reply-To: <201804191338.w3JDc0to002106@repo.freebsd.org> User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 30 Apr 2018 07:22:20 -0000 --4Epv4kl9IRBfg3rk Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 04/19/18 at 01:38P, Randall Stewart wrote: > Author: rrs > Date: Thu Apr 19 13:37:59 2018 > New Revision: 332770 > URL: https://svnweb.freebsd.org/changeset/base/332770 >=20 > Log: > This commit brings in the TCP high precision timer system (tcp_hpts). > It is the forerunner/foundational work of bringing in both Rack and BBR > which use hpts for pacing out packets. The feature is optional and requ= ires > the TCPHPTS option to be enabled before the feature will be active. TCP > modules that use it must assure that the base component is compile in > the kernel in which they are loaded. > =20 > MFC after: Never > Sponsored by: Netflix Inc. > Differential Revision: https://reviews.freebsd.org/D15020 Randall, In my understanding, default stack currently cannot use this mechanism. Whe= n do you think that'll be possible? Thanks for your work, Hiren --4Epv4kl9IRBfg3rk Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQF8BAABCgBmBQJa5sLaXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBNEUyMEZBMUQ4Nzg4RjNGMTdFNjZGMDI4 QjkyNTBFMTU2M0VERkU1AAoJEIuSUOFWPt/lN+cH/3wztDLrSUdJA36+08boOVYE ry0NesRMScRzUEiljS+pe5SugHHV/dcn1Nj160a26aJW4PGjcnERjLQjdXyAqv3g oKSvPyoDupeJaU/c7PHc4GJkZG/lN80tj21YGqD/7A0peAT4kYSYD3v7ZE56sCON ZmqOuS1h/rjiPEehXNzd2fDY2B1ScMGws0B5Oa+XGsjqUpZU+AZsGmHjA5WdjPg9 mpSWK7Fd/tmAV7RfRXfF0Rn2bZKT6xoP6xPVuL/Pg7riNAz/lS/kNlMHO6/E0yGC sADBPRK+a0E6/TY/H4HR1rXfohfl9AhoqJSuKkJOUCWGNZHGQ/MxG1N0oIapvzo= =fois -----END PGP SIGNATURE----- --4Epv4kl9IRBfg3rk-- From owner-svn-src-head@freebsd.org Mon Apr 30 07:24:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5663BFC63E5; Mon, 30 Apr 2018 07:24:32 +0000 (UTC) (envelope-from ram@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EDD2877450; Mon, 30 Apr 2018 07:24:31 +0000 (UTC) (envelope-from ram@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E8C4C10170; Mon, 30 Apr 2018 07:24:31 +0000 (UTC) (envelope-from ram@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3U7OVNY014280; Mon, 30 Apr 2018 07:24:31 GMT (envelope-from ram@FreeBSD.org) Received: (from ram@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U7OVKn014279; Mon, 30 Apr 2018 07:24:31 GMT (envelope-from ram@FreeBSD.org) Message-Id: <201804300724.w3U7OVKn014279@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ram set sender to ram@FreeBSD.org using -f From: Ram Kishore Vegesna Date: Mon, 30 Apr 2018 07:24:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333099 - head/sys/modules/ocs_fc X-SVN-Group: head X-SVN-Commit-Author: ram X-SVN-Commit-Paths: head/sys/modules/ocs_fc X-SVN-Commit-Revision: 333099 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 07:24:32 -0000 Author: ram Date: Mon Apr 30 07:24:31 2018 New Revision: 333099 URL: https://svnweb.freebsd.org/changeset/base/333099 Log: Included opt_stack.h in Makefile, to fix module build. PR: 227823 Reported by: eugen Approved by: mav MFC after: 3 days Modified: head/sys/modules/ocs_fc/Makefile Modified: head/sys/modules/ocs_fc/Makefile ============================================================================== --- head/sys/modules/ocs_fc/Makefile Mon Apr 30 05:57:55 2018 (r333098) +++ head/sys/modules/ocs_fc/Makefile Mon Apr 30 07:24:31 2018 (r333099) @@ -8,6 +8,7 @@ SRCS = \ bus_if.h \ pci_if.h \ opt_scsi.h \ + opt_stack.h \ opt_cam.h # OS From owner-svn-src-head@freebsd.org Mon Apr 30 07:30:38 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9002FFC6548; Mon, 30 Apr 2018 07:30:38 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3E1A577648; Mon, 30 Apr 2018 07:30:38 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 38DB010184; Mon, 30 Apr 2018 07:30:38 +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 w3U7UcjC014565; Mon, 30 Apr 2018 07:30:38 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U7Ub7W014561; Mon, 30 Apr 2018 07:30:37 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201804300730.w3U7Ub7W014561@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 30 Apr 2018 07:30:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333100 - head/sys/dev/usb/controller X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: head/sys/dev/usb/controller X-SVN-Commit-Revision: 333100 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 07:30:38 -0000 Author: hselasky Date: Mon Apr 30 07:30:37 2018 New Revision: 333100 URL: https://svnweb.freebsd.org/changeset/base/333100 Log: Improve fix in r304629 by allowing configuration of the behaviour through a SYSCTL instead of a compile time define. Add quirk by default for all LynxPoint XHCI controllers. PR: 227602 MFC after: 3 days Sponsored by: Mellanox Technologies Modified: head/sys/dev/usb/controller/xhci.c head/sys/dev/usb/controller/xhci.h head/sys/dev/usb/controller/xhci_pci.c Modified: head/sys/dev/usb/controller/xhci.c ============================================================================== --- head/sys/dev/usb/controller/xhci.c Mon Apr 30 07:24:31 2018 (r333099) +++ head/sys/dev/usb/controller/xhci.c Mon Apr 30 07:30:37 2018 (r333100) @@ -100,6 +100,7 @@ static int xhcidebug; static int xhciroute; static int xhcipolling; static int xhcidma32; +static int xhcictlstep; SYSCTL_INT(_hw_usb_xhci, OID_AUTO, debug, CTLFLAG_RWTUN, &xhcidebug, 0, "Debug level"); @@ -109,9 +110,12 @@ SYSCTL_INT(_hw_usb_xhci, OID_AUTO, use_polling, CTLFLA &xhcipolling, 0, "Set to enable software interrupt polling for the XHCI controller"); SYSCTL_INT(_hw_usb_xhci, OID_AUTO, dma32, CTLFLAG_RWTUN, &xhcidma32, 0, "Set to only use 32-bit DMA for the XHCI controller"); +SYSCTL_INT(_hw_usb_xhci, OID_AUTO, ctlstep, CTLFLAG_RWTUN, + &xhcictlstep, 0, "Set to enable control endpoint status stage stepping"); #else #define xhciroute 0 #define xhcidma32 0 +#define xhcictlstep 0 #endif #define XHCI_INTR_ENDPT 1 @@ -2240,11 +2244,17 @@ xhci_setup_generic_chain(struct usb_xfer *xfer) * Send a DATA1 message and invert the current * endpoint direction. */ -#ifdef XHCI_STEP_STATUS_STAGE - temp.step_td = (xfer->nframes != 0); -#else - temp.step_td = 0; -#endif + if (xhcictlstep || temp.sc->sc_ctlstep) { + /* + * Some XHCI controllers will not delay the + * status stage until the next SOF. Force this + * behaviour to avoid failed control + * transfers. + */ + temp.step_td = (xfer->nframes != 0); + } else { + temp.step_td = 0; + } temp.direction = UE_GET_DIR(xfer->endpointno) ^ UE_DIR_IN; temp.len = 0; temp.pc = NULL; Modified: head/sys/dev/usb/controller/xhci.h ============================================================================== --- head/sys/dev/usb/controller/xhci.h Mon Apr 30 07:24:31 2018 (r333099) +++ head/sys/dev/usb/controller/xhci.h Mon Apr 30 07:30:37 2018 (r333100) @@ -509,6 +509,8 @@ struct xhci_softc { uint8_t sc_noport; /* root HUB device configuration */ uint8_t sc_conf; + /* step status stage of all control transfers */ + uint8_t sc_ctlstep; /* root HUB port event bitmap, max 256 ports */ uint8_t sc_hub_idata[32]; Modified: head/sys/dev/usb/controller/xhci_pci.c ============================================================================== --- head/sys/dev/usb/controller/xhci_pci.c Mon Apr 30 07:24:31 2018 (r333099) +++ head/sys/dev/usb/controller/xhci_pci.c Mon Apr 30 07:30:37 2018 (r333100) @@ -256,6 +256,7 @@ xhci_pci_attach(device_t self) */ sc->sc_port_route = &xhci_pci_port_route; sc->sc_imod_default = XHCI_IMOD_DEFAULT_LP; + sc->sc_ctlstep = 1; break; } From owner-svn-src-head@freebsd.org Mon Apr 30 09:31:10 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A8DBCFC9343; Mon, 30 Apr 2018 09:31:10 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B5C26A478; Mon, 30 Apr 2018 09:31:10 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 465DF115B2; Mon, 30 Apr 2018 09:31:10 +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 w3U9VAuG076335; Mon, 30 Apr 2018 09:31:10 GMT (envelope-from hselasky@FreeBSD.org) Received: (from hselasky@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3U9VA9l076334; Mon, 30 Apr 2018 09:31:10 GMT (envelope-from hselasky@FreeBSD.org) Message-Id: <201804300931.w3U9VA9l076334@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: hselasky set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky Date: Mon, 30 Apr 2018 09:31:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333108 - head/sys/compat/linuxkpi/common/include/linux X-SVN-Group: head X-SVN-Commit-Author: hselasky X-SVN-Commit-Paths: head/sys/compat/linuxkpi/common/include/linux X-SVN-Commit-Revision: 333108 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 09:31:10 -0000 Author: hselasky Date: Mon Apr 30 09:31:09 2018 New Revision: 333108 URL: https://svnweb.freebsd.org/changeset/base/333108 Log: Define USEC_PER_MSEC and USEC_PER_SEC in the LinuxKPI. MFC after: 1 week Sponsored by: Mellanox Technologies Modified: head/sys/compat/linuxkpi/common/include/linux/time.h Modified: head/sys/compat/linuxkpi/common/include/linux/time.h ============================================================================== --- head/sys/compat/linuxkpi/common/include/linux/time.h Mon Apr 30 08:51:04 2018 (r333107) +++ head/sys/compat/linuxkpi/common/include/linux/time.h Mon Apr 30 09:31:09 2018 (r333108) @@ -32,6 +32,9 @@ #define NSEC_PER_MSEC 1000000L #define NSEC_PER_SEC 1000000000L +#define USEC_PER_MSEC 1000L +#define USEC_PER_SEC 1000000L + #include #include From owner-svn-src-head@freebsd.org Mon Apr 30 10:15:59 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AC2D2FCA5D9; Mon, 30 Apr 2018 10:15:59 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5DA6474601; Mon, 30 Apr 2018 10:15:59 +0000 (UTC) (envelope-from wulf@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 57E5E11D9F; Mon, 30 Apr 2018 10:15:59 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UAFxTi000663; Mon, 30 Apr 2018 10:15:59 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UAFwe1000660; Mon, 30 Apr 2018 10:15:58 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <201804301015.w3UAFwe1000660@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 30 Apr 2018 10:15:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333109 - head/lib/libsdp X-SVN-Group: head X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: head/lib/libsdp X-SVN-Commit-Revision: 333109 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 10:15:59 -0000 Author: wulf Date: Mon Apr 30 10:15:58 2018 New Revision: 333109 URL: https://svnweb.freebsd.org/changeset/base/333109 Log: libsdp: Add method that returns actual source BD_ADDR of SDP session. Reviewed by: emax, wblock (docs) Differential Revision: https://reviews.freebsd.org/D13456 Modified: head/lib/libsdp/sdp.3 head/lib/libsdp/sdp.h head/lib/libsdp/session.c Modified: head/lib/libsdp/sdp.3 ============================================================================== --- head/lib/libsdp/sdp.3 Mon Apr 30 09:31:09 2018 (r333108) +++ head/lib/libsdp/sdp.3 Mon Apr 30 10:15:58 2018 (r333109) @@ -25,7 +25,7 @@ .\" $Id: sdp.3,v 1.1 2003/09/07 20:34:19 max Exp $ .\" $FreeBSD$ .\" -.Dd May 27, 2005 +.Dd April 30, 2018 .Dt SDP 3 .Os .Sh NAME @@ -45,6 +45,7 @@ .Nm sdp_open_local , .Nm sdp_close , .Nm sdp_error , +.Nm sdp_get_lcaddr , .Nm sdp_search , .Nm sdp_attr2desc , .Nm sdp_uuid2desc @@ -75,6 +76,8 @@ .Ft int32_t .Fn sdp_error "void *xs" .Ft int32_t +.Fn sdp_get_lcaddr "void *xs" "bdaddr_t *l" +.Ft int32_t .Fo sdp_search .Fa "void *xs" "uint32_t plen" "uint16_t const *pp" "uint32_t alen" .Fa "uint32_t const *ap" "uint32_t vlen" "sdp_attr_t *vp" @@ -188,6 +191,22 @@ calling function. .Pp The +.Fn sdp_get_lcaddr +function returns the SDP session actual source BD_ADDR. +The +.Fa xs +parameter should point to a valid SDP session object created with +.Fn sdp_open . +The +.Fa l +parameter should point to a buffer in which the value for the requested BD_ADDR +is to be returned. +.Fn sdp_get_lcaddr +function is useful if the current SDP session has been opened with the +.Dv NG_HCI_BDADDR_ANY +value passed as a source address. +.Pp +The .Fn sdp_search function is used to perform SDP Service Search Attribute Request. The @@ -394,9 +413,10 @@ If the new SDP object was created then caller is still to check if there was connection error. .Pp The +.Fn sdp_get_lcaddr , .Fn sdp_search , .Fn sdp_register_service , -.Fn sdp_unregister_service +.Fn sdp_unregister_service , and .Fn sdp_change_service functions return non-zero value on error. Modified: head/lib/libsdp/sdp.h ============================================================================== --- head/lib/libsdp/sdp.h Mon Apr 30 09:31:09 2018 (r333108) +++ head/lib/libsdp/sdp.h Mon Apr 30 10:15:58 2018 (r333109) @@ -532,6 +532,7 @@ void * sdp_open (bdaddr_t const *l, void * sdp_open_local (char const *control); int32_t sdp_close (void *xs); int32_t sdp_error (void *xs); +int32_t sdp_get_lcaddr (void *xs, bdaddr_t *l); int32_t sdp_search (void *xs, uint32_t plen, uint16_t const *pp, Modified: head/lib/libsdp/session.c ============================================================================== --- head/lib/libsdp/session.c Mon Apr 30 09:31:09 2018 (r333108) +++ head/lib/libsdp/session.c Mon Apr 30 10:15:58 2018 (r333109) @@ -180,3 +180,25 @@ sdp_error(void *xss) return ((ss != NULL)? ss->error : EINVAL); } + +int32_t +sdp_get_lcaddr(void *xss, bdaddr_t *l) +{ + sdp_session_p ss = (sdp_session_p) xss; + struct sockaddr_l2cap sa; + socklen_t size; + + if (l == NULL || ss == NULL || ss->flags & SDP_SESSION_LOCAL) { + ss->error = EINVAL; + goto fail; + } + + size = sizeof(sa); + if (getsockname(ss->s, (struct sockaddr *)&sa, &size) == 0) { + bdaddr_copy(l, &sa.l2cap_bdaddr); + ss->error = 0; + } else + ss->error = errno; +fail: + return ((ss->error == 0) ? 0 : -1); +} From owner-svn-src-head@freebsd.org Mon Apr 30 10:24:51 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 26052FCA8A4; Mon, 30 Apr 2018 10:24:51 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CB8A774EA9; Mon, 30 Apr 2018 10:24:50 +0000 (UTC) (envelope-from wulf@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C66CE11F5B; Mon, 30 Apr 2018 10:24:50 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UAOoF4006244; Mon, 30 Apr 2018 10:24:50 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UAOoIq006240; Mon, 30 Apr 2018 10:24:50 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <201804301024.w3UAOoIq006240@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 30 Apr 2018 10:24:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333110 - head/lib/libbluetooth X-SVN-Group: head X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: head/lib/libbluetooth X-SVN-Commit-Revision: 333110 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 10:24:51 -0000 Author: wulf Date: Mon Apr 30 10:24:50 2018 New Revision: 333110 URL: https://svnweb.freebsd.org/changeset/base/333110 Log: bluetooth(3): Add helper functions that performs Bluetooth Remote Name Request procedure to obtain the user-friendly name of another Bluetooth unit. Reviewed by: emax, wblock (docs) Differential Revision: https://reviews.freebsd.org/D13456 Modified: head/lib/libbluetooth/bluetooth.3 head/lib/libbluetooth/bluetooth.h head/lib/libbluetooth/hci.c Modified: head/lib/libbluetooth/bluetooth.3 ============================================================================== --- head/lib/libbluetooth/bluetooth.3 Mon Apr 30 10:15:58 2018 (r333109) +++ head/lib/libbluetooth/bluetooth.3 Mon Apr 30 10:24:50 2018 (r333110) @@ -25,7 +25,7 @@ .\" $Id: bluetooth.3,v 1.5 2003/05/20 23:04:30 max Exp $ .\" $FreeBSD$ .\" -.Dd April 9, 2009 +.Dd April 30, 2018 .Dt BLUETOOTH 3 .Os .Sh NAME @@ -58,6 +58,8 @@ .Nm bt_devfilter_evt_clr , .Nm bt_devfilter_evt_tst , .Nm bt_devinquiry , +.Nm bt_devremote_name , +.Nm bt_devremote_name_gen , .Nm bdaddr_same , .Nm bdaddr_any , .Nm bdaddr_copy @@ -126,6 +128,11 @@ .Fn bt_devfilter_evt_tst "struct bt_devfilter const *filter" "uint8_t event" .Ft int .Fn bt_devinquiry "char const *devname" "time_t length" "int num_rsp" "struct bt_devinquiry **ii" +.Ft char * +.Fn bt_devremote_name "char const *devname" "const bdaddr_t *remote" \ +"time_t to" "uint16_t clk_off" "uint8_t ps_rep_mode" "uint8_t ps_mode" +.Ft char * +.Fn bt_devremote_name_gen "char const *devname" "const bdaddr_t *remote" .Ft int .Fn bdaddr_same "const bdaddr_t *a" "const bdaddr_t *b" .Ft int @@ -589,8 +596,54 @@ struct bt_devinquiry { .Ed .Pp The +.Fn bt_devremote_name +function performs Bluetooth Remote Name Request procedure to obtain the +user-friendly name of another Bluetooth unit. +The +.Fa devname +parameter specifies which local Bluetooth device should perform the request. +If not specified +.Dv ( NULL ) , +the first available device is used. +The +.Fa remote +parameter specifies the Bluetooth BD_ADDR of the remote device to query. +The +.Fa to +parameter specifies response timeout in seconds. +If not specified (0), the default value is taken from the +net.bluetooth.hci.command_timeout +.Xr sysctl 8 +value. +The +.Fa clk_off , +.Fa ps_rep_mode , +and +.Fa ps_mode +parameters specify Clock_Offset, Page_Scan_Repetition_Mode, and Page_Scan_Mode +fields of HCI_Remote_Name_Request respectively. +On success, the function returns a pointer to dynamically allocated +NUL-terminated string or +.Dv NULL +if an error occurred. +It is up to the caller to release returned string using +.Xr free 3 . +.Pp +The +.Fn bt_devremote_name_gen +function is a shortcut to +.Fn bt_devremote_name +that passes generic defaults for +.Fa to , +.Fa clk_off , +.Fa ps_rep_mode , +and +.Fa ps_mode +parameters. +.Pp +The .Fn bdaddr_same , -.Fn bdaddr_any +.Fn bdaddr_any , and .Fn bdaddr_copy are handy shorthand Bluetooth address utility functions. Modified: head/lib/libbluetooth/bluetooth.h ============================================================================== --- head/lib/libbluetooth/bluetooth.h Mon Apr 30 10:15:58 2018 (r333109) +++ head/lib/libbluetooth/bluetooth.h Mon Apr 30 10:24:50 2018 (r333110) @@ -182,8 +182,18 @@ void bt_devfilter_evt_clr(struct bt_devfilter *filter int bt_devfilter_evt_tst(struct bt_devfilter const *filter, uint8_t event); int bt_devinquiry(char const *devname, time_t length, int num_rsp, struct bt_devinquiry **ii); +char * bt_devremote_name(char const *devname, const bdaddr_t *remote, + time_t to, uint16_t clk_off, + uint8_t ps_rep_mode, uint8_t ps_mode); int bt_devinfo (struct bt_devinfo *di); int bt_devenum (bt_devenum_cb_t cb, void *arg); + +static __inline char * +bt_devremote_name_gen(char const *devname, const bdaddr_t *remote) +{ + return (bt_devremote_name(devname, remote, 0, 0x0000, + NG_HCI_SCAN_REP_MODE0, NG_HCI_MANDATORY_PAGE_SCAN_MODE)); +} /* * bdaddr utility functions (from NetBSD) Modified: head/lib/libbluetooth/hci.c ============================================================================== --- head/lib/libbluetooth/hci.c Mon Apr 30 10:15:58 2018 (r333109) +++ head/lib/libbluetooth/hci.c Mon Apr 30 10:24:50 2018 (r333110) @@ -32,6 +32,9 @@ * $FreeBSD$ */ +#include +#include + #include #define L2CAP_SOCKET_CHECKED #include @@ -39,6 +42,7 @@ #include #include #include +#include #include #undef MIN @@ -46,6 +50,7 @@ static int bt_devany_cb(int s, struct bt_devinfo const *di, void *xdevname); static char * bt_dev2node (char const *devname, char *nodename, int nnlen); +static time_t bt_get_default_hci_command_timeout(void); int bt_devopen(char const *devname) @@ -534,6 +539,63 @@ wait_for_more: return (i - *ii); } +char * +bt_devremote_name(char const *devname, const bdaddr_t *remote, time_t to, + uint16_t clk_off, uint8_t ps_rep_mode, uint8_t ps_mode) +{ + char _devname[HCI_DEVNAME_SIZE]; + struct bt_devreq r; + ng_hci_remote_name_req_cp cp; + ng_hci_remote_name_req_compl_ep ep; + int s; + char *remote_name = NULL; + + if (remote == NULL || to < 0) { + errno = EINVAL; + goto out; + } + + if (to == 0) { + to = bt_get_default_hci_command_timeout(); + if (to < 0) + goto out; + } + to++; + + if (devname == NULL) { + memset(_devname, 0, sizeof(_devname)); + devname = _devname; + if (bt_devenum(bt_devany_cb, _devname) <= 0) + goto out; + } + + memset(&r, 0, sizeof(r)); + memset(&cp, 0, sizeof(cp)); + memset(&ep, 0, sizeof(ep)); + cp.clock_offset = htole16(clk_off); + cp.page_scan_rep_mode = ps_rep_mode; + cp.page_scan_mode = ps_mode; + bdaddr_copy(&cp.bdaddr, remote); + r.opcode = NG_HCI_OPCODE(NG_HCI_OGF_LINK_CONTROL, + NG_HCI_OCF_REMOTE_NAME_REQ); + r.event = NG_HCI_EVENT_REMOTE_NAME_REQ_COMPL; + r.cparam = &cp; + r.clen = sizeof(cp); + r.rparam = &ep; + r.rlen = sizeof(ep); + + s = bt_devopen(devname); + if (s < 0) + goto out; + + if (bt_devreq(s, &r, to) == 0 || ep.status == 0x00) + remote_name = strndup((const char *)&ep.name, sizeof(ep.name)); + + bt_devclose(s); +out: + return (remote_name); +} + int bt_devinfo(struct bt_devinfo *di) { @@ -735,3 +797,21 @@ bt_dev2node(char const *devname, char *nodename, int n return (NULL); } +static time_t +bt_get_default_hci_command_timeout(void) +{ + int to; + size_t to_size = sizeof(to); + + if (sysctlbyname("net.bluetooth.hci.command_timeout", + &to, &to_size, NULL, 0) < 0) + return (-1); + + /* Should not happen */ + if (to <= 0) { + errno = ERANGE; + return (-1); + } + + return ((time_t)to); +} From owner-svn-src-head@freebsd.org Mon Apr 30 10:34:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 84893FCAB97; Mon, 30 Apr 2018 10:34:17 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2D06E77740; Mon, 30 Apr 2018 10:34:17 +0000 (UTC) (envelope-from wulf@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 23FFE120EE; Mon, 30 Apr 2018 10:34:17 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UAYGHA011010; Mon, 30 Apr 2018 10:34:16 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UAYGUh011007; Mon, 30 Apr 2018 10:34:16 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <201804301034.w3UAYGUh011007@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 30 Apr 2018 10:34:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333111 - head/sys/dev/evdev X-SVN-Group: head X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: head/sys/dev/evdev X-SVN-Commit-Revision: 333111 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 10:34:17 -0000 Author: wulf Date: Mon Apr 30 10:34:16 2018 New Revision: 333111 URL: https://svnweb.freebsd.org/changeset/base/333111 Log: uinput: Add FreeBSD specific ioctl to set unique identifier of input device. Reviewed by: gonzo Differential Revision: https://reviews.freebsd.org/D13456 Modified: head/sys/dev/evdev/uinput.c head/sys/dev/evdev/uinput.h Modified: head/sys/dev/evdev/uinput.c ============================================================================== --- head/sys/dev/evdev/uinput.c Mon Apr 30 10:24:50 2018 (r333110) +++ head/sys/dev/evdev/uinput.c Mon Apr 30 10:34:16 2018 (r333111) @@ -604,6 +604,15 @@ uinput_ioctl_sub(struct uinput_cdev_state *state, u_lo evdev_set_phys(state->ucs_evdev, buf); return (0); + case UI_SET_BSDUNIQ: + if (state->ucs_state == UINPUT_RUNNING) + return (EINVAL); + ret = copyinstr(*(void **)data, buf, sizeof(buf), NULL); + if (ret != 0) + return (ret); + evdev_set_serial(state->ucs_evdev, buf); + return (0); + case UI_SET_SWBIT: if (state->ucs_state == UINPUT_RUNNING || intdata > SW_MAX || intdata < 0) Modified: head/sys/dev/evdev/uinput.h ============================================================================== --- head/sys/dev/evdev/uinput.h Mon Apr 30 10:24:50 2018 (r333110) +++ head/sys/dev/evdev/uinput.h Mon Apr 30 10:34:16 2018 (r333111) @@ -90,6 +90,13 @@ struct uinput_abs_setup { #define UI_BEGIN_FF_ERASE _IOWR(UINPUT_IOCTL_BASE, 202, struct uinput_ff_erase) #define UI_END_FF_ERASE _IOW(UINPUT_IOCTL_BASE, 203, struct uinput_ff_erase) +/* + * FreeBSD specific. Set unique identifier of input device. + * Name and magic are chosen to reduce chances of clashing + * with possible future Linux extensions. + */ +#define UI_SET_BSDUNIQ _IO(UINPUT_IOCTL_BASE, 109) + #define EV_UINPUT 0x0101 #define UI_FF_UPLOAD 1 #define UI_FF_ERASE 2 From owner-svn-src-head@freebsd.org Mon Apr 30 10:49:31 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1E4DFFA432D; Mon, 30 Apr 2018 10:49:31 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A9DE57A810; Mon, 30 Apr 2018 10:49:30 +0000 (UTC) (envelope-from wulf@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A492E1229F; Mon, 30 Apr 2018 10:49:30 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UAnUSN016145; Mon, 30 Apr 2018 10:49:30 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UAnU1O016139; Mon, 30 Apr 2018 10:49:30 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <201804301049.w3UAnU1O016139@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 30 Apr 2018 10:49:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333112 - in head/usr.sbin/bluetooth: bthidcontrol bthidd X-SVN-Group: head X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: in head/usr.sbin/bluetooth: bthidcontrol bthidd X-SVN-Commit-Revision: 333112 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 10:49:31 -0000 Author: wulf Date: Mon Apr 30 10:49:29 2018 New Revision: 333112 URL: https://svnweb.freebsd.org/changeset/base/333112 Log: bthidd(8): Add internal support for user-friendly name of remote devices. Extend bthidd.conf format to store name of remote Bluetooth HID devices and implement querying of this information with bthidcontrol(8) "Query" command. Reviewed by: emax Differential Revision: https://reviews.freebsd.org/D13456 Modified: head/usr.sbin/bluetooth/bthidcontrol/Makefile head/usr.sbin/bluetooth/bthidcontrol/sdp.c head/usr.sbin/bluetooth/bthidd/bthid_config.h head/usr.sbin/bluetooth/bthidd/bthidd.conf.sample head/usr.sbin/bluetooth/bthidd/lexer.l head/usr.sbin/bluetooth/bthidd/parser.y Modified: head/usr.sbin/bluetooth/bthidcontrol/Makefile ============================================================================== --- head/usr.sbin/bluetooth/bthidcontrol/Makefile Mon Apr 30 10:34:16 2018 (r333111) +++ head/usr.sbin/bluetooth/bthidcontrol/Makefile Mon Apr 30 10:49:29 2018 (r333112) @@ -7,7 +7,8 @@ PROG= bthidcontrol MAN= bthidcontrol.8 SRCS= bthidcontrol.c hid.c lexer.l parser.y sdp.c WARNS?= 1 -CFLAGS+= -DBTHIDCONTROL=1 -I${.CURDIR:H}/bthidd +CFLAGS+= -DBTHIDCONTROL=1 -I${.CURDIR:H}/bthidd -I${SRCTOP}/lib/libsdp \ + -I${SRCTOP}/lib/libbluetooth LIBADD+= bluetooth sdp usbhid Modified: head/usr.sbin/bluetooth/bthidcontrol/sdp.c ============================================================================== --- head/usr.sbin/bluetooth/bthidcontrol/sdp.c Mon Apr 30 10:34:16 2018 (r333111) +++ head/usr.sbin/bluetooth/bthidcontrol/sdp.c Mon Apr 30 10:49:29 2018 (r333112) @@ -31,7 +31,9 @@ * $FreeBSD$ */ +#include #include +#include #define L2CAP_SOCKET_CHECKED #include #include @@ -114,13 +116,15 @@ hid_init_return_values() { static int32_t hid_sdp_query(bdaddr_t const *local, struct hid_device *hd, int32_t *error) { - void *ss = NULL; - uint8_t *hid_descriptor = NULL, *v; - int32_t i, control_psm = -1, interrupt_psm = -1, - reconnect_initiate = -1, - normally_connectable = 0, battery_power = 0, - hid_descriptor_length = -1, type; - int16_t vendor_id = 0, product_id = 0, version = 0; + void *ss = NULL; + uint8_t *hid_descriptor = NULL, *v; + int32_t i, control_psm = -1, interrupt_psm = -1, + reconnect_initiate = -1, + normally_connectable = 0, battery_power = 0, + hid_descriptor_length = -1, type; + int16_t vendor_id = 0, product_id = 0, version = 0; + bdaddr_t sdp_local; + char devname[HCI_DEVNAME_SIZE]; if (local == NULL) local = NG_HCI_BDADDR_ANY; @@ -175,6 +179,11 @@ hid_sdp_query(bdaddr_t const *local, struct hid_device if (sdp_search(ss, 1, &service_devid, 1, &attrs_devid, nvalues, values) != 0) hid_sdp_query_exit(sdp_error(ss)); + /* Try extract HCI bdaddr from opened SDP session */ + if (sdp_get_lcaddr(ss, &sdp_local) != 0 || + bt_devname(devname, &sdp_local) == 0) + hid_sdp_query_exit(ENOATTR); + sdp_close(ss); ss = NULL; @@ -212,6 +221,7 @@ hid_sdp_query(bdaddr_t const *local, struct hid_device reconnect_initiate == -1 || hid_descriptor == NULL || hid_descriptor_length == -1) hid_sdp_query_exit(ENOATTR); + hd->name = bt_devremote_name_gen(devname, &hd->bdaddr); hd->vendor_id = vendor_id; hd->product_id = product_id; hd->version = version; Modified: head/usr.sbin/bluetooth/bthidd/bthid_config.h ============================================================================== --- head/usr.sbin/bluetooth/bthidd/bthid_config.h Mon Apr 30 10:34:16 2018 (r333111) +++ head/usr.sbin/bluetooth/bthidd/bthid_config.h Mon Apr 30 10:49:29 2018 (r333112) @@ -42,6 +42,7 @@ struct hid_device { bdaddr_t bdaddr; /* HID device BDADDR */ + char * name; /* HID device name */ uint16_t control_psm; /* control PSM */ uint16_t interrupt_psm; /* interrupt PSM */ uint16_t vendor_id; /* primary vendor id */ Modified: head/usr.sbin/bluetooth/bthidd/bthidd.conf.sample ============================================================================== --- head/usr.sbin/bluetooth/bthidd/bthidd.conf.sample Mon Apr 30 10:34:16 2018 (r333111) +++ head/usr.sbin/bluetooth/bthidd/bthidd.conf.sample Mon Apr 30 10:49:29 2018 (r333112) @@ -2,6 +2,7 @@ device { bdaddr 00:50:f2:e5:68:84; + name "Bluetooth Mouse"; vendor_id 0x0000; product_id 0x0000; version 0x0000; @@ -27,6 +28,7 @@ device { device { bdaddr 00:50:f2:e3:fb:e1; + name "Bluetooth Keyboard"; vendor_id 0x0000; product_id 0x0000; version 0x0000; Modified: head/usr.sbin/bluetooth/bthidd/lexer.l ============================================================================== --- head/usr.sbin/bluetooth/bthidd/lexer.l Mon Apr 30 10:34:16 2018 (r333111) +++ head/usr.sbin/bluetooth/bthidd/lexer.l Mon Apr 30 10:49:29 2018 (r333112) @@ -56,6 +56,7 @@ hexword {hexdigit}{hexdigit}?{hexdigit}?{hexdigit}? device_word device bdaddr_word bdaddr +name_word name vendor_id_word vendor_id product_id_word product_id version_word version @@ -71,6 +72,7 @@ false_word false bdaddrstring {hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte}:{hexbyte} hexbytestring 0x{hexbyte} hexwordstring 0x{hexword} +string \".+\" %% @@ -85,6 +87,7 @@ hexwordstring 0x{hexword} {device_word} return (T_DEVICE); {bdaddr_word} return (T_BDADDR); +{name_word} return (T_NAME); {vendor_id_word} return (T_VENDOR_ID); {product_id_word} return (T_PRODUCT_ID); {version_word} return (T_VERSION); @@ -116,6 +119,12 @@ hexwordstring 0x{hexword} yylval.num = strtoul(yytext, &ep, 16); return (*ep == '\0'? T_HEXWORD : T_ERROR); + } + +{string} { + yytext[strlen(yytext) - 1] = 0; + yylval.string = &yytext[1]; + return (T_STRING); } . return (T_ERROR); Modified: head/usr.sbin/bluetooth/bthidd/parser.y ============================================================================== --- head/usr.sbin/bluetooth/bthidd/parser.y Mon Apr 30 10:34:16 2018 (r333111) +++ head/usr.sbin/bluetooth/bthidd/parser.y Mon Apr 30 10:49:29 2018 (r333112) @@ -63,6 +63,8 @@ #define EOL "\n" #endif /* ndef BTHIDCONTROL */ +#define NAMELESS_DEVICE "No Name" + #include "bthid_config.h" int yylex (void); @@ -85,11 +87,14 @@ static LIST_HEAD(, hid_device) hid_devices; %union { bdaddr_t bdaddr; int32_t num; + char *string; } %token T_BDADDRSTRING %token T_HEXBYTE %token T_HEXWORD +%token T_STRING +%token T_NAME %token T_DEVICE T_BDADDR T_VENDOR_ID T_PRODUCT_ID T_VERSION T_CONTROL_PSM %token T_INTERRUPT_PSM T_RECONNECT_INITIATE T_BATTERY_POWER %token T_NORMALLY_CONNECTABLE T_HID_DESCRIPTOR @@ -128,6 +133,7 @@ options: option ';' ; option: bdaddr + | name | vendor_id | product_id | version @@ -146,6 +152,24 @@ bdaddr: T_BDADDR T_BDADDRSTRING } ; +name: T_NAME T_STRING + { + if (hid_device->name != NULL) { + free(hid_device->name); + hid_device->name = NULL; + } + + if (strcmp($2, NAMELESS_DEVICE)) { + hid_device->name = strdup($2); + if (hid_device->name == NULL) { + SYSLOG(LOGCRIT, "Could not allocate new " \ + "device name" EOL); + YYABORT; + } + } + } + ; + vendor_id: T_VENDOR_ID T_HEXWORD { hid_device->vendor_id = $2; @@ -332,6 +356,7 @@ print_hid_device(hid_device_p d, FILE *f) fprintf(f, "device {\n" \ " bdaddr %s;\n" \ +" name \"%s\";\n" \ " vendor_id 0x%04x;\n" \ " product_id 0x%04x;\n" \ " version 0x%04x;\n" \ @@ -342,6 +367,7 @@ print_hid_device(hid_device_p d, FILE *f) " normally_connectable %s;\n" \ " hid_descriptor {", bt_ntoa(&d->bdaddr, NULL), + (d->name != NULL)? d->name : NAMELESS_DEVICE, d->vendor_id, d->product_id, d->version, d->control_psm, d->interrupt_psm, d->reconnect_initiate? "true" : "false", @@ -419,6 +445,7 @@ free_hid_device(hid_device_p d) if (d->desc != NULL) hid_dispose_report_desc(d->desc); + free(d->name); memset(d, 0, sizeof(*d)); free(d); } From owner-svn-src-head@freebsd.org Mon Apr 30 12:16:56 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7C03FFA8609; Mon, 30 Apr 2018 12:16:56 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 26D636C941; Mon, 30 Apr 2018 12:16:56 +0000 (UTC) (envelope-from wulf@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 085671310E; Mon, 30 Apr 2018 12:16:56 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UCGt25060986; Mon, 30 Apr 2018 12:16:55 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UCGsao060973; Mon, 30 Apr 2018 12:16:54 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <201804301216.w3UCGsao060973@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Mon, 30 Apr 2018 12:16:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333113 - in head: etc/defaults etc/rc.d usr.sbin/bluetooth/bthidd X-SVN-Group: head X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: in head: etc/defaults etc/rc.d usr.sbin/bluetooth/bthidd X-SVN-Commit-Revision: 333113 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 12:16:57 -0000 Author: wulf Date: Mon Apr 30 12:16:54 2018 New Revision: 333113 URL: https://svnweb.freebsd.org/changeset/base/333113 Log: bthidd(8): Add evdev protocol support for bluetooth keyboards and mouses User-visible changes: "-u" is added to to list of command line options supported by bthidd. Use it to enable evdev support. uinput and evdev modules should be kld-loaded or compiled into the kernel in that case. bthidd_evdev_support rc.conf variable is added to control enabling of evdev support in bthidd startup script. Possible values are: "YES", "NO", "AUTO"(default). Setting bthidd_evdev_support to "AUTO" inserts "-u" option if kernel is compiled with EVDEV_SUPPORT option enabled. Support for consumer HID usage page keyboard events is implemented. Most of them are available only through evdev protocol. kern.evdev.rcpt_mask sysctl is checked, so "sysctl kern.evdev.rcpt_mask=12" should be executed if EVDEV_SUPPORT is compiled into kernel. It is recommended to regenerate bthidd.conf entries with bthidcontrol(8) "Query" command to set user-friendly names of bluetooth devices. Reviewed by: emax, gonzo, wblock (docs), bcr (docs, early version) Differential Revision: https://reviews.freebsd.org/D13456 Added: head/usr.sbin/bluetooth/bthidd/btuinput.c (contents, props changed) head/usr.sbin/bluetooth/bthidd/btuinput.h (contents, props changed) Modified: head/etc/defaults/rc.conf head/etc/rc.d/bthidd head/usr.sbin/bluetooth/bthidd/Makefile head/usr.sbin/bluetooth/bthidd/bthid_config.h head/usr.sbin/bluetooth/bthidd/bthidd.8 head/usr.sbin/bluetooth/bthidd/bthidd.c head/usr.sbin/bluetooth/bthidd/bthidd.h head/usr.sbin/bluetooth/bthidd/client.c head/usr.sbin/bluetooth/bthidd/hid.c head/usr.sbin/bluetooth/bthidd/kbd.c head/usr.sbin/bluetooth/bthidd/parser.y head/usr.sbin/bluetooth/bthidd/server.c head/usr.sbin/bluetooth/bthidd/session.c Modified: head/etc/defaults/rc.conf ============================================================================== --- head/etc/defaults/rc.conf Mon Apr 30 10:49:29 2018 (r333112) +++ head/etc/defaults/rc.conf Mon Apr 30 12:16:54 2018 (r333113) @@ -433,6 +433,7 @@ sdpd_username="nobody" # it initializes bthidd_enable="NO" # Enable bthidd(8) (or NO) bthidd_config="/etc/bluetooth/bthidd.conf" # bthidd(8) configuration file bthidd_hids="/var/db/bthidd.hids" # bthidd(8) known HID devices file +bthidd_evdev_support="AUTO" # AUTO depends on EVDEV_SUPPORT kernel option rfcomm_pppd_server_enable="NO" # Enable rfcomm_pppd(8) in server mode (or NO) rfcomm_pppd_server_profile="one two" # Profile to use from /etc/ppp/ppp.conf Modified: head/etc/rc.d/bthidd ============================================================================== --- head/etc/rc.d/bthidd Mon Apr 30 10:49:29 2018 (r333112) +++ head/etc/rc.d/bthidd Mon Apr 30 12:16:54 2018 (r333113) @@ -17,8 +17,25 @@ command="/usr/sbin/${name}" pidfile="/var/run/${name}.pid" start_precmd="bthidd_prestart" +evdev_enabled() +{ + case ${bthidd_evdev_support} in + [Aa][Uu][Tt][Oo]) + check_kern_features evdev_support + return $? + ;; + *) + checkyesno bthidd_evdev_support + return $? + ;; + esac +} + bthidd_prestart() { + if evdev_enabled; then + load_kld -m uinput uinput + fi load_kld -m kbdmux kbdmux load_kld -m vkbd vkbd load_kld -m ng_btsocket ng_btsocket @@ -29,6 +46,9 @@ load_rc_config $name config="${bthidd_config:-/etc/bluetooth/${name}.conf}" hids="${bthidd_hids:-/var/db/${name}.hids}" command_args="-c ${config} -H ${hids} -p ${pidfile}" +if evdev_enabled; then + command_args="$command_args -u" +fi required_files="${config}" run_rc_command "$1" Modified: head/usr.sbin/bluetooth/bthidd/Makefile ============================================================================== --- head/usr.sbin/bluetooth/bthidd/Makefile Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/Makefile Mon Apr 30 12:16:54 2018 (r333113) @@ -4,8 +4,8 @@ PROG= bthidd MAN= bthidd.8 # bthidd.conf.5 -SRCS= bthidd.c client.c hid.c kbd.c lexer.l parser.y server.c \ - session.c +SRCS= bthidd.c btuinput.c client.c hid.c kbd.c lexer.l parser.y \ + server.c session.c CFLAGS+= -I${.CURDIR} Modified: head/usr.sbin/bluetooth/bthidd/bthid_config.h ============================================================================== --- head/usr.sbin/bluetooth/bthidd/bthid_config.h Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/bthid_config.h Mon Apr 30 12:16:54 2018 (r333113) @@ -53,7 +53,11 @@ struct hid_device unsigned battery_power : 1; unsigned normally_connectable : 1; unsigned keyboard : 1; - unsigned reserved : 11; + unsigned mouse : 1; + unsigned has_wheel : 1; + unsigned has_hwheel : 1; + unsigned has_cons : 1; + unsigned reserved : 7; report_desc_t desc; /* HID report descriptor */ LIST_ENTRY(hid_device) next; /* link to the next */ }; Modified: head/usr.sbin/bluetooth/bthidd/bthidd.8 ============================================================================== --- head/usr.sbin/bluetooth/bthidd/bthidd.8 Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/bthidd.8 Mon Apr 30 12:16:54 2018 (r333113) @@ -25,7 +25,7 @@ .\" $Id: bthidd.8,v 1.1 2006/09/07 21:36:55 max Exp $ .\" $FreeBSD$ .\" -.Dd September 7, 2006 +.Dd April 30, 2018 .Dt BTHIDD 8 .Os .Sh NAME @@ -40,6 +40,7 @@ .Op Fl H Ar file .Op Fl p Ar file .Op Fl t Ar val +.Op Fl u .Sh DESCRIPTION The .Nm @@ -82,6 +83,11 @@ disconnected .Dq passive Bluetooth HID devices and will attempt to establish an outgoing connection. The default rescan interval is 10 seconds. +.It Fl u +Enable support for input event device protocol. +Requires evdev and uinput drivers to be loaded with +.Xr kldload 8 +or compiled into the kernel. .El .Sh KNOWN LIMITATIONS The Modified: head/usr.sbin/bluetooth/bthidd/bthidd.c ============================================================================== --- head/usr.sbin/bluetooth/bthidd/bthidd.c Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/bthidd.c Mon Apr 30 12:16:54 2018 (r333113) @@ -69,14 +69,15 @@ main(int32_t argc, char *argv[]) struct sigaction sa; char const *pid_file = BTHIDD_PIDFILE; char *ep; - int32_t opt, detach, tval; + int32_t opt, detach, tval, uinput; memset(&srv, 0, sizeof(srv)); memset(&srv.bdaddr, 0, sizeof(srv.bdaddr)); detach = 1; tval = 10; /* sec */ + uinput = 0; - while ((opt = getopt(argc, argv, "a:c:dH:hp:t:")) != -1) { + while ((opt = getopt(argc, argv, "a:c:dH:hp:t:u")) != -1) { switch (opt) { case 'a': /* BDADDR */ if (!bt_aton(optarg, &srv.bdaddr)) { @@ -111,6 +112,10 @@ main(int32_t argc, char *argv[]) usage(); break; + case 'u': /* enable evdev support */ + uinput = 1; + break; + case 'h': default: usage(); @@ -158,6 +163,8 @@ main(int32_t argc, char *argv[]) server_init(&srv) < 0 || write_pid_file(pid_file) < 0) exit(1); + srv.uinput = uinput; + for (done = 0; !done; ) { if (elapsed(tval)) client_rescan(&srv); @@ -263,6 +270,7 @@ usage(void) " -h display this message\n" \ " -p file specify PID file name\n" \ " -t tval specify client rescan interval (sec)\n" \ +" -u enable evdev protocol support\n" \ "", BTHIDD_IDENT); exit(255); } Modified: head/usr.sbin/bluetooth/bthidd/bthidd.h ============================================================================== --- head/usr.sbin/bluetooth/bthidd/bthidd.h Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/bthidd.h Mon Apr 30 12:16:54 2018 (r333113) @@ -48,6 +48,7 @@ struct bthid_server int32_t ctrl; /* control channel (listen) */ int32_t intr; /* intr. channel (listen) */ int32_t maxfd; /* max fd in sets */ + int32_t uinput; /* enable evdev support */ fd_set rfdset; /* read descriptor set */ fd_set wfdset; /* write descriptor set */ LIST_HEAD(, bthid_session) sessions; @@ -63,6 +64,10 @@ struct bthid_session int32_t intr; /* interrupt channel */ int32_t vkbd; /* virual keyboard */ void *ctx; /* product specific dev state */ + int32_t ukbd; /* evdev user input */ + int32_t umouse;/* evdev user input */ + int32_t obutt; /* previous mouse buttons */ + int32_t consk; /* last consumer page key */ bdaddr_t bdaddr;/* remote bdaddr */ uint16_t state; /* session state */ #define CLOSED 0 @@ -87,6 +92,7 @@ int32_t client_connect (bthid_server_p srv, int fd) bthid_session_p session_open (bthid_server_p srv, hid_device_p const d); bthid_session_p session_by_bdaddr(bthid_server_p srv, bdaddr_p bdaddr); bthid_session_p session_by_fd (bthid_server_p srv, int32_t fd); +int32_t session_run (bthid_session_p s); void session_close (bthid_session_p s); void hid_initialise (bthid_session_p s); Added: head/usr.sbin/bluetooth/bthidd/btuinput.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/bluetooth/bthidd/btuinput.c Mon Apr 30 12:16:54 2018 (r333113) @@ -0,0 +1,618 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2015-2017 Vladimir Kondratyev + * 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 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 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. + * + * $FreeBSD$ + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#define L2CAP_SOCKET_CHECKED +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bthid_config.h" +#include "bthidd.h" +#include "btuinput.h" + +static int16_t const mbuttons[8] = { + BTN_LEFT, + BTN_MIDDLE, + BTN_RIGHT, + BTN_SIDE, + BTN_EXTRA, + BTN_FORWARD, + BTN_BACK, + BTN_TASK +}; + +static uint16_t const led_codes[3] = { + LED_CAPSL, /* CLKED */ + LED_NUML, /* NLKED */ + LED_SCROLLL, /* SLKED */ +}; + +#define NONE KEY_RESERVED + +static uint16_t const keymap[0x100] = { + /* 0x00 - 0x27 */ + NONE, NONE, NONE, NONE, KEY_A, KEY_B, KEY_C, KEY_D, + KEY_E, KEY_F, KEY_G, KEY_H, KEY_I, KEY_J, KEY_K, KEY_L, + KEY_M, KEY_N, KEY_O, KEY_P, KEY_Q, KEY_R, KEY_S, KEY_T, + KEY_U, KEY_V, KEY_W, KEY_X, KEY_Y, KEY_Z, KEY_1, KEY_2, + KEY_3, KEY_4, KEY_5, KEY_6, KEY_7, KEY_8, KEY_9, KEY_0, + /* 0x28 - 0x3f */ + KEY_ENTER, KEY_ESC, KEY_BACKSPACE, KEY_TAB, + KEY_SPACE, KEY_MINUS, KEY_EQUAL, KEY_LEFTBRACE, + KEY_RIGHTBRACE, KEY_BACKSLASH, KEY_BACKSLASH, KEY_SEMICOLON, + KEY_APOSTROPHE, KEY_GRAVE, KEY_COMMA, KEY_DOT, + KEY_SLASH, KEY_CAPSLOCK, KEY_F1, KEY_F2, + KEY_F3, KEY_F4, KEY_F5, KEY_F6, + /* 0x40 - 0x5f */ + KEY_F7, KEY_F8, KEY_F9, KEY_F10, + KEY_F11, KEY_F12, KEY_SYSRQ, KEY_SCROLLLOCK, + KEY_PAUSE, KEY_INSERT, KEY_HOME, KEY_PAGEUP, + KEY_DELETE, KEY_END, KEY_PAGEDOWN, KEY_RIGHT, + KEY_LEFT, KEY_DOWN, KEY_UP, KEY_NUMLOCK, + KEY_KPSLASH, KEY_KPASTERISK, KEY_KPMINUS, KEY_KPPLUS, + KEY_KPENTER, KEY_KP1, KEY_KP2, KEY_KP3, + KEY_KP4, KEY_KP5, KEY_KP6, KEY_KP7, + /* 0x60 - 0x7f */ + KEY_KP8, KEY_KP9, KEY_KP0, KEY_KPDOT, + KEY_102ND, KEY_COMPOSE, KEY_POWER, KEY_KPEQUAL, + KEY_F13, KEY_F14, KEY_F15, KEY_F16, + KEY_F17, KEY_F18, KEY_F19, KEY_F20, + KEY_F21, KEY_F22, KEY_F23, KEY_F24, + KEY_OPEN, KEY_HELP, KEY_PROPS, KEY_FRONT, + KEY_STOP, KEY_AGAIN, KEY_UNDO, KEY_CUT, + KEY_COPY, KEY_PASTE, KEY_FIND, KEY_MUTE, + /* 0x80 - 0x9f */ + KEY_VOLUMEUP, KEY_VOLUMEDOWN, NONE, NONE, + NONE, KEY_KPCOMMA, NONE, KEY_RO, + KEY_KATAKANAHIRAGANA, KEY_YEN,KEY_HENKAN, KEY_MUHENKAN, + KEY_KPJPCOMMA, NONE, NONE, NONE, + KEY_HANGEUL, KEY_HANJA, KEY_KATAKANA, KEY_HIRAGANA, + KEY_ZENKAKUHANKAKU, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + /* 0xa0 - 0xbf */ + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + /* 0xc0 - 0xdf */ + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + NONE, NONE, NONE, NONE, + /* 0xe0 - 0xff */ + KEY_LEFTCTRL, KEY_LEFTSHIFT, KEY_LEFTALT, KEY_LEFTMETA, + KEY_RIGHTCTRL, KEY_RIGHTSHIFT, KEY_RIGHTALT, KEY_RIGHTMETA, + KEY_PLAYPAUSE, KEY_STOPCD, KEY_PREVIOUSSONG,KEY_NEXTSONG, + KEY_EJECTCD, KEY_VOLUMEUP, KEY_VOLUMEDOWN, KEY_MUTE, + KEY_WWW, KEY_BACK, KEY_FORWARD, KEY_STOP, + KEY_FIND, KEY_SCROLLUP, KEY_SCROLLDOWN, KEY_EDIT, + KEY_SLEEP, KEY_COFFEE, KEY_REFRESH, KEY_CALC, + NONE, NONE, NONE, NONE, +}; + +/* Consumer page usage mapping */ +static uint16_t const consmap[0x300] = { + [0x030] = KEY_POWER, + [0x031] = KEY_RESTART, + [0x032] = KEY_SLEEP, + [0x034] = KEY_SLEEP, + [0x035] = KEY_KBDILLUMTOGGLE, + [0x036] = BTN_MISC, + [0x040] = KEY_MENU, + [0x041] = KEY_SELECT, + [0x042] = KEY_UP, + [0x043] = KEY_DOWN, + [0x044] = KEY_LEFT, + [0x045] = KEY_RIGHT, + [0x046] = KEY_ESC, + [0x047] = KEY_KPPLUS, + [0x048] = KEY_KPMINUS, + [0x060] = KEY_INFO, + [0x061] = KEY_SUBTITLE, + [0x063] = KEY_VCR, + [0x065] = KEY_CAMERA, + [0x069] = KEY_RED, + [0x06a] = KEY_GREEN, + [0x06b] = KEY_BLUE, + [0x06c] = KEY_YELLOW, + [0x06d] = KEY_ZOOM, + [0x06f] = KEY_BRIGHTNESSUP, + [0x070] = KEY_BRIGHTNESSDOWN, + [0x072] = KEY_BRIGHTNESS_TOGGLE, + [0x073] = KEY_BRIGHTNESS_MIN, + [0x074] = KEY_BRIGHTNESS_MAX, + [0x075] = KEY_BRIGHTNESS_AUTO, + [0x082] = KEY_VIDEO_NEXT, + [0x083] = KEY_LAST, + [0x084] = KEY_ENTER, + [0x088] = KEY_PC, + [0x089] = KEY_TV, + [0x08a] = KEY_WWW, + [0x08b] = KEY_DVD, + [0x08c] = KEY_PHONE, + [0x08d] = KEY_PROGRAM, + [0x08e] = KEY_VIDEOPHONE, + [0x08f] = KEY_GAMES, + [0x090] = KEY_MEMO, + [0x091] = KEY_CD, + [0x092] = KEY_VCR, + [0x093] = KEY_TUNER, + [0x094] = KEY_EXIT, + [0x095] = KEY_HELP, + [0x096] = KEY_TAPE, + [0x097] = KEY_TV2, + [0x098] = KEY_SAT, + [0x09a] = KEY_PVR, + [0x09c] = KEY_CHANNELUP, + [0x09d] = KEY_CHANNELDOWN, + [0x0a0] = KEY_VCR2, + [0x0b0] = KEY_PLAY, + [0x0b1] = KEY_PAUSE, + [0x0b2] = KEY_RECORD, + [0x0b3] = KEY_FASTFORWARD, + [0x0b4] = KEY_REWIND, + [0x0b5] = KEY_NEXTSONG, + [0x0b6] = KEY_PREVIOUSSONG, + [0x0b7] = KEY_STOPCD, + [0x0b8] = KEY_EJECTCD, + [0x0bc] = KEY_MEDIA_REPEAT, + [0x0b9] = KEY_SHUFFLE, + [0x0bf] = KEY_SLOW, + [0x0cd] = KEY_PLAYPAUSE, + [0x0cf] = KEY_VOICECOMMAND, + [0x0e2] = KEY_MUTE, + [0x0e5] = KEY_BASSBOOST, + [0x0e9] = KEY_VOLUMEUP, + [0x0ea] = KEY_VOLUMEDOWN, + [0x0f5] = KEY_SLOW, + [0x181] = KEY_BUTTONCONFIG, + [0x182] = KEY_BOOKMARKS, + [0x183] = KEY_CONFIG, + [0x184] = KEY_WORDPROCESSOR, + [0x185] = KEY_EDITOR, + [0x186] = KEY_SPREADSHEET, + [0x187] = KEY_GRAPHICSEDITOR, + [0x188] = KEY_PRESENTATION, + [0x189] = KEY_DATABASE, + [0x18a] = KEY_MAIL, + [0x18b] = KEY_NEWS, + [0x18c] = KEY_VOICEMAIL, + [0x18d] = KEY_ADDRESSBOOK, + [0x18e] = KEY_CALENDAR, + [0x18f] = KEY_TASKMANAGER, + [0x190] = KEY_JOURNAL, + [0x191] = KEY_FINANCE, + [0x192] = KEY_CALC, + [0x193] = KEY_PLAYER, + [0x194] = KEY_FILE, + [0x196] = KEY_WWW, + [0x199] = KEY_CHAT, + [0x19c] = KEY_LOGOFF, + [0x19e] = KEY_COFFEE, + [0x19f] = KEY_CONTROLPANEL, + [0x1a2] = KEY_APPSELECT, + [0x1a3] = KEY_NEXT, + [0x1a4] = KEY_PREVIOUS, + [0x1a6] = KEY_HELP, + [0x1a7] = KEY_DOCUMENTS, + [0x1ab] = KEY_SPELLCHECK, + [0x1ae] = KEY_KEYBOARD, + [0x1b1] = KEY_SCREENSAVER, + [0x1b4] = KEY_FILE, + [0x1b6] = KEY_IMAGES, + [0x1b7] = KEY_AUDIO, + [0x1b8] = KEY_VIDEO, + [0x1bc] = KEY_MESSENGER, + [0x1bd] = KEY_INFO, + [0x201] = KEY_NEW, + [0x202] = KEY_OPEN, + [0x203] = KEY_CLOSE, + [0x204] = KEY_EXIT, + [0x207] = KEY_SAVE, + [0x208] = KEY_PRINT, + [0x209] = KEY_PROPS, + [0x21a] = KEY_UNDO, + [0x21b] = KEY_COPY, + [0x21c] = KEY_CUT, + [0x21d] = KEY_PASTE, + [0x21f] = KEY_FIND, + [0x221] = KEY_SEARCH, + [0x222] = KEY_GOTO, + [0x223] = KEY_HOMEPAGE, + [0x224] = KEY_BACK, + [0x225] = KEY_FORWARD, + [0x226] = KEY_STOP, + [0x227] = KEY_REFRESH, + [0x22a] = KEY_BOOKMARKS, + [0x22d] = KEY_ZOOMIN, + [0x22e] = KEY_ZOOMOUT, + [0x22f] = KEY_ZOOMRESET, + [0x233] = KEY_SCROLLUP, + [0x234] = KEY_SCROLLDOWN, + [0x23d] = KEY_EDIT, + [0x25f] = KEY_CANCEL, + [0x269] = KEY_INSERT, + [0x26a] = KEY_DELETE, + [0x279] = KEY_REDO, + [0x289] = KEY_REPLY, + [0x28b] = KEY_FORWARDMAIL, + [0x28c] = KEY_SEND, + [0x2c7] = KEY_KBDINPUTASSIST_PREV, + [0x2c8] = KEY_KBDINPUTASSIST_NEXT, + [0x2c9] = KEY_KBDINPUTASSIST_PREVGROUP, + [0x2ca] = KEY_KBDINPUTASSIST_NEXTGROUP, + [0x2cb] = KEY_KBDINPUTASSIST_ACCEPT, + [0x2cc] = KEY_KBDINPUTASSIST_CANCEL, +}; + +static int32_t +uinput_open_common(hid_device_p const p, bdaddr_p local, const uint8_t *name) +{ + struct uinput_setup uisetup; + uint8_t phys[UINPUT_MAX_NAME_SIZE]; + uint8_t uniq[UINPUT_MAX_NAME_SIZE]; + int32_t fd; + + /* Take local and remote bdaddr */ + bt_ntoa(local, phys); + bt_ntoa(&p->bdaddr, uniq); + + /* Take device name from bthidd.conf. Fallback to generic name. */ + if (p->name != NULL) + name = p->name; + + /* Set device name and bus/vendor information */ + memset(&uisetup, 0, sizeof(uisetup)); + snprintf(uisetup.name, UINPUT_MAX_NAME_SIZE, + "%s, bdaddr %s", name, uniq); + uisetup.id.bustype = BUS_BLUETOOTH; + uisetup.id.vendor = p->vendor_id; + uisetup.id.product = p->product_id; + uisetup.id.version = p->version; + + fd = open("/dev/uinput", O_RDWR | O_NONBLOCK); + + if (ioctl(fd, UI_SET_PHYS, phys) < 0 || + ioctl(fd, UI_SET_BSDUNIQ, uniq) < 0 || + ioctl(fd, UI_DEV_SETUP, &uisetup) < 0) + return (-1); + + return (fd); +} + +/* + * Setup uinput device as 8button mouse with wheel(s) + * TODO: bring in more feature detection code from ums + */ +int32_t +uinput_open_mouse(hid_device_p const p, bdaddr_p local) +{ + size_t i; + int32_t fd; + + assert(p != NULL); + + if ((fd = uinput_open_common(p, local, "Bluetooth Mouse")) < 0) + goto bail_out; + + /* Advertise events and axes */ + if (ioctl(fd, UI_SET_EVBIT, EV_SYN) < 0 || + ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0 || + ioctl(fd, UI_SET_EVBIT, EV_REL) < 0 || + ioctl(fd, UI_SET_RELBIT, REL_X) < 0 || + ioctl(fd, UI_SET_RELBIT, REL_Y) < 0 || + (p->has_wheel && ioctl(fd, UI_SET_RELBIT, REL_WHEEL) < 0) || + (p->has_hwheel && ioctl(fd, UI_SET_RELBIT, REL_HWHEEL) < 0) || + ioctl(fd, UI_SET_PROPBIT, INPUT_PROP_POINTER) < 0) + goto bail_out; + + /* Advertise mouse buttons */ + for (i = 0; i < nitems(mbuttons); i++) + if (ioctl(fd, UI_SET_KEYBIT, mbuttons[i]) < 0) + goto bail_out; + + if (ioctl(fd, UI_DEV_CREATE) >= 0) + return (fd); /* SUCCESS */ + +bail_out: + if (fd >= 0) + close(fd); + return (-1); +} + +/* + * Setup uinput keyboard + */ +int32_t +uinput_open_keyboard(hid_device_p const p, bdaddr_p local) +{ + size_t i; + int32_t fd; + + assert(p != NULL); + + if ((fd = uinput_open_common(p, local, "Bluetooth Keyboard")) < 0) + goto bail_out; + + /* Advertise key events and LEDs */ + if (ioctl(fd, UI_SET_EVBIT, EV_KEY) < 0 || + ioctl(fd, UI_SET_EVBIT, EV_LED) < 0 || + ioctl(fd, UI_SET_EVBIT, EV_SYN) < 0 || + ioctl(fd, UI_SET_EVBIT, EV_REP) < 0 || + ioctl(fd, UI_SET_LEDBIT, LED_CAPSL) < 0 || + ioctl(fd, UI_SET_LEDBIT, LED_NUML) < 0 || + ioctl(fd, UI_SET_LEDBIT, LED_SCROLLL)) + goto bail_out; + + /* Advertise keycodes */ + for (i = 0; i < nitems(keymap); i++) + if (keymap[i] != NONE && + ioctl(fd, UI_SET_KEYBIT, keymap[i]) < 0) + goto bail_out; + + /* Advertise consumer page keys if any */ + if (p->has_cons) { + for (i = 0; i < nitems(consmap); i++) { + if (consmap[i] != NONE && + ioctl(fd, UI_SET_KEYBIT, consmap[i]) < 0) + goto bail_out; + } + } + + if (ioctl(fd, UI_DEV_CREATE) >= 0) + return (fd); /* SUCCESS */ + +bail_out: + if (fd >= 0) + close(fd); + return (-1); +} + +/* from sys/dev/evdev/evdev.h */ +#define EVDEV_RCPT_HW_MOUSE (1<<2) +#define EVDEV_RCPT_HW_KBD (1<<3) + +#define MASK_POLL_INTERVAL 5 /* seconds */ +#define MASK_SYSCTL "kern.evdev.rcpt_mask" + +static int32_t +uinput_get_rcpt_mask(void) +{ + static struct timespec last = { 0, 0 }; + struct timespec now; + static int32_t mask = 0; + size_t len; + time_t elapsed; + + if (clock_gettime(CLOCK_MONOTONIC_FAST, &now) == -1) + return mask; + + elapsed = now.tv_sec - last.tv_sec; + if (now.tv_nsec < last.tv_nsec) + elapsed--; + + if (elapsed >= MASK_POLL_INTERVAL) { + len = sizeof(mask); + if (sysctlbyname(MASK_SYSCTL, &mask, &len, NULL, 0) < 0) { + if (errno == ENOENT) + /* kernel is compiled w/o EVDEV_SUPPORT */ + mask = EVDEV_RCPT_HW_MOUSE | EVDEV_RCPT_HW_KBD; + else + mask = 0; + } + last = now; + } + return mask; +} + +static int32_t +uinput_write_event(int32_t fd, uint16_t type, uint16_t code, int32_t value) +{ + struct input_event ie; + + assert(fd >= 0); + + memset(&ie, 0, sizeof(ie)); + ie.type = type; + ie.code = code; + ie.value = value; + return (write(fd, &ie, sizeof(ie))); +} + +int32_t +uinput_rep_mouse(int32_t fd, int32_t x, int32_t y, int32_t z, int32_t t, + int32_t buttons, int32_t obuttons) +{ + size_t i; + int32_t rcpt_mask, mask; + + assert(fd >= 0); + + rcpt_mask = uinput_get_rcpt_mask(); + if (!(rcpt_mask & EVDEV_RCPT_HW_MOUSE)) + return (0); + + if ((x != 0 && uinput_write_event(fd, EV_REL, REL_X, x) < 0) || + (y != 0 && uinput_write_event(fd, EV_REL, REL_Y, y) < 0) || + (z != 0 && uinput_write_event(fd, EV_REL, REL_WHEEL, -z) < 0) || + (t != 0 && uinput_write_event(fd, EV_REL, REL_HWHEEL, t) < 0)) + return (-1); + + for (i = 0; i < nitems(mbuttons); i++) { + mask = 1 << i; + if ((buttons & mask) == (obuttons & mask)) + continue; + if (uinput_write_event(fd, EV_KEY, mbuttons[i], + (buttons & mask) != 0) < 0) + return (-1); + } + + if (uinput_write_event(fd, EV_SYN, SYN_REPORT, 0) < 0) + return (-1); + + return (0); +} + +/* + * Translate and report keyboard page key events + */ +int32_t +uinput_rep_key(int32_t fd, int32_t key, int32_t make) +{ + int32_t rcpt_mask; + + assert(fd >= 0); + + rcpt_mask = uinput_get_rcpt_mask(); + if (!(rcpt_mask & EVDEV_RCPT_HW_KBD)) + return (0); + + if (key >= 0 && key < (int32_t)nitems(keymap) && + keymap[key] != NONE) { + if (uinput_write_event(fd, EV_KEY, keymap[key], make) > 0 && + uinput_write_event(fd, EV_SYN, SYN_REPORT, 0) > 0) + return (0); + } + return (-1); +} + +/* + * Translate and report consumer page key events + */ +int32_t +uinput_rep_cons(int32_t fd, int32_t key, int32_t make) +{ + int32_t rcpt_mask; + + assert(fd >= 0); + + rcpt_mask = uinput_get_rcpt_mask(); + if (!(rcpt_mask & EVDEV_RCPT_HW_KBD)) + return (0); + + if (key >= 0 && key < (int32_t)nitems(consmap) && + consmap[key] != NONE) { + if (uinput_write_event(fd, EV_KEY, consmap[key], make) > 0 && + uinput_write_event(fd, EV_SYN, SYN_REPORT, 0) > 0) + return (0); + } + return (-1); +} + +/* + * Translate and report LED events + */ +int32_t +uinput_rep_leds(int32_t fd, int state, int mask) +{ + size_t i; + int32_t rcpt_mask; + + assert(fd >= 0); + + rcpt_mask = uinput_get_rcpt_mask(); + if (!(rcpt_mask & EVDEV_RCPT_HW_KBD)) + return (0); + + for (i = 0; i < nitems(led_codes); i++) { + if (mask & (1 << i) && + uinput_write_event(fd, EV_LED, led_codes[i], + state & (1 << i) ? 1 : 0) < 0) + return (-1); + } + + return (0); +} + +/* + * Process status change from evdev + */ +int32_t +uinput_kbd_status_changed(bthid_session_p s, uint8_t *data, int32_t len) +{ + struct input_event ie; + int32_t leds, oleds; + size_t i; + + assert(s != NULL); + assert(s->vkbd >= 0); + assert(len == sizeof(struct input_event)); + + memcpy(&ie, data, sizeof(ie)); + switch (ie.type) { + case EV_LED: + ioctl(s->vkbd, KDGETLED, &oleds); + leds = oleds; + for (i = 0; i < nitems(led_codes); i++) { + if (led_codes[i] == ie.code) { + if (ie.value) + leds |= 1 << i; + else + leds &= ~(1 << i); + if (leds != oleds) + ioctl(s->vkbd, KDSETLED, leds); + break; + } + } + break; + case EV_REP: + /* FALLTHROUGH. Repeats are handled by evdev subsystem */ + default: + break; + } + + return (0); +} Added: head/usr.sbin/bluetooth/bthidd/btuinput.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/bluetooth/bthidd/btuinput.h Mon Apr 30 12:16:54 2018 (r333113) @@ -0,0 +1,44 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2015-2017 Vladimir Kondratyev + * 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 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 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. + * + * $FreeBSD$ + */ + +#ifndef _UINPUT_H_ +#define _UINPUT_H_ + +int32_t uinput_open_mouse(hid_device_p const d, bdaddr_p local); +int32_t uinput_open_keyboard(hid_device_p const d, bdaddr_p local); +int32_t uinput_rep_mouse(int32_t fd, int32_t x, int32_t y, int32_t z, + int32_t t, int32_t buttons, int32_t obuttons); +int32_t uinput_rep_key(int32_t fd, int32_t key, int32_t make); +int32_t uinput_rep_cons(int32_t fd, int32_t key, int32_t make); +int32_t uinput_rep_leds(int32_t fd, int state, int mask); +int32_t uinput_kbd_status_changed(bthid_session_p s, uint8_t *data, + int32_t len); + +#endif /* ndef _UINPUT_H_ */ Modified: head/usr.sbin/bluetooth/bthidd/client.c ============================================================================== --- head/usr.sbin/bluetooth/bthidd/client.c Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/client.c Mon Apr 30 12:16:54 2018 (r333113) @@ -188,14 +188,11 @@ client_connect(bthid_server_p srv, int32_t fd) s->state = OPEN; connect_in_progress = 0; - /* Register session's vkbd descriptor (if any) for read */ - if (s->state == OPEN && d->keyboard) { - assert(s->vkbd != -1); - - FD_SET(s->vkbd, &srv->rfdset); - if (s->vkbd > srv->maxfd) - srv->maxfd = s->vkbd; - } + /* Create kbd/mouse after both channels are established */ + if (session_run(s) < 0) { + session_close(s); + return (-1); + } break; default: Modified: head/usr.sbin/bluetooth/bthidd/hid.c ============================================================================== --- head/usr.sbin/bluetooth/bthidd/hid.c Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/hid.c Mon Apr 30 12:16:54 2018 (r333113) @@ -50,6 +50,7 @@ #include #include "bthid_config.h" #include "bthidd.h" +#include "btuinput.h" #include "kbd.h" /* @@ -280,6 +281,19 @@ hid_interrupt(bthid_session_p s, uint8_t *data, int32_ break; case HUP_CONSUMER: + if (hid_device->keyboard && s->srv->uinput) { + if (h.flags & HIO_VARIABLE) { + uinput_rep_cons(s->ukbd, usage, !!val); + } else { + if (s->consk > 0) + uinput_rep_cons(s->ukbd, + s->consk, 0); + if (uinput_rep_cons(s->ukbd, val, 1) + == 0) + s->consk = val; + } + } + if (!val) break; @@ -551,6 +565,14 @@ check_middle_button: syslog(LOG_ERR, "Could not process mouse events from " \ "%s. %s (%d)", bt_ntoa(&s->bdaddr, NULL), strerror(errno), errno); + + if (hid_device->mouse && s->srv->uinput && + uinput_rep_mouse(s->umouse, mouse_x, mouse_y, mouse_z, + mouse_t, mouse_butt, s->obutt) < 0) + syslog(LOG_ERR, "Could not process mouse events from " \ + "%s. %s (%d)", bt_ntoa(&s->bdaddr, NULL), + strerror(errno), errno); + s->obutt = mouse_butt; } return (0); Modified: head/usr.sbin/bluetooth/bthidd/kbd.c ============================================================================== --- head/usr.sbin/bluetooth/bthidd/kbd.c Mon Apr 30 10:49:29 2018 (r333112) +++ head/usr.sbin/bluetooth/bthidd/kbd.c Mon Apr 30 12:16:54 2018 (r333113) @@ -56,10 +56,12 @@ #include #include "bthid_config.h" #include "bthidd.h" +#include "btuinput.h" #include "kbd.h" static void kbd_write(bitstr_t *m, int32_t fb, int32_t make, int32_t fd); static int32_t kbd_xlate(int32_t code, int32_t make, int32_t *b, int32_t const *eob); +static void uinput_kbd_write(bitstr_t *m, int32_t fb, int32_t make, int32_t fd); /* * HID code to PS/2 set 1 code translation table. @@ -354,6 +356,7 @@ kbd_process_keys(bthid_session_p s) if (f2 != -1) { /* release old keys */ kbd_write(s->keys2, f2, 0, s->vkbd); + uinput_kbd_write(s->keys2, f2, 0, s->ukbd); memset(s->keys2, 0, bitstr_size(xsize)); } @@ -366,6 +369,7 @@ kbd_process_keys(bthid_session_p s) memcpy(s->keys2, s->keys1, bitstr_size(xsize)); kbd_write(s->keys1, f1, 1, s->vkbd); + uinput_kbd_write(s->keys1, f1, 1, s->ukbd); memset(s->keys1, 0, bitstr_size(xsize)); return (0); @@ -393,12 +397,15 @@ kbd_process_keys(bthid_session_p s) } bit_ffs(diff, xsize, &f2); - if (f2 > 0) + if (f2 > 0) { kbd_write(diff, f2, 0, s->vkbd); + uinput_kbd_write(diff, f2, 0, s->ukbd); + } bit_ffs(s->keys1, xsize, &f1); if (f1 > 0) { kbd_write(s->keys1, f1, 1, s->vkbd); + uinput_kbd_write(s->keys1, f1, 1, s->ukbd); memset(s->keys1, 0, bitstr_size(xsize)); } @@ -407,6 +414,22 @@ kbd_process_keys(bthid_session_p s) /* * Translate given keymap and write keyscodes + */ +void +uinput_kbd_write(bitstr_t *m, int32_t fb, int32_t make, int32_t fd) +{ + int32_t i; + + if (fd >= 0) { + for (i = fb; i < xsize; i++) { + if (bit_test(m, i)) + uinput_rep_key(fd, i, make); + } + } +} + +/* + * Translate given keymap and write keyscodes */ static void @@ -520,6 +543,7 @@ kbd_status_changed(bthid_session_p s, uint8_t *data, i hid_device_p hid_device; hid_data_t d; hid_item_t h; + uint8_t leds_mask = 0; assert(s != NULL); assert(len == sizeof(vkbd_status_t)); @@ -553,16 +577,19 @@ kbd_status_changed(bthid_session_p s, uint8_t *data, i case 0x01: /* Num Lock LED */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Mon Apr 30 15:18:40 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CF2F6FAE072; Mon, 30 Apr 2018 15:18:39 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7D5A57747B; Mon, 30 Apr 2018 15:18:39 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5E1F814E8F; Mon, 30 Apr 2018 15:18:39 +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 w3UFIdR4051879; Mon, 30 Apr 2018 15:18:39 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UFIc28051872; Mon, 30 Apr 2018 15:18:38 GMT (envelope-from np@FreeBSD.org) Message-Id: <201804301518.w3UFIc28051872@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Mon, 30 Apr 2018 15:18:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333114 - in head/sys/dev/cxgbe: . tom X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: in head/sys/dev/cxgbe: . tom X-SVN-Commit-Revision: 333114 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 15:18:40 -0000 Author: np Date: Mon Apr 30 15:18:38 2018 New Revision: 333114 URL: https://svnweb.freebsd.org/changeset/base/333114 Log: cxgbe(4): Use opaque cookies or tid range-checks to determine the intended recipient of a CPL when it can't be determined solely from the opcode. Retire the per-queue handlers for such CPLs in favor of the new scheme. Sponsored by: Chelsio Communications Modified: head/sys/dev/cxgbe/adapter.h head/sys/dev/cxgbe/t4_main.c head/sys/dev/cxgbe/t4_sge.c head/sys/dev/cxgbe/tom/t4_cpl_io.c head/sys/dev/cxgbe/tom/t4_ddp.c head/sys/dev/cxgbe/tom/t4_tom.c head/sys/dev/cxgbe/tom/t4_tom.h Modified: head/sys/dev/cxgbe/adapter.h ============================================================================== --- head/sys/dev/cxgbe/adapter.h Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/adapter.h Mon Apr 30 15:18:38 2018 (r333114) @@ -365,6 +365,19 @@ enum { NM_BUSY = 2, }; +enum { + CPL_COOKIE_RESERVED = 0, + CPL_COOKIE_FILTER, + CPL_COOKIE_DDP0, + CPL_COOKIE_DDP1, + CPL_COOKIE_TOM, + CPL_COOKIE_AVAILABLE1, + CPL_COOKIE_AVAILABLE2, + CPL_COOKIE_AVAILABLE3, + + NUM_CPL_COOKIES = 8 /* Limited by M_COOKIE. Do not increase. */ +}; + struct sge_iq; struct rss_header; typedef int (*cpl_handler_t)(struct sge_iq *, const struct rss_header *, @@ -379,8 +392,6 @@ struct sge_iq { uint32_t flags; volatile int state; struct adapter *adapter; - cpl_handler_t set_tcb_rpl; - cpl_handler_t l2t_write_rpl; struct iq_desc *desc; /* KVA of descriptor ring */ int8_t intr_pktc_idx; /* packet count threshold index */ uint8_t gen; /* generation bit */ @@ -1203,9 +1214,10 @@ int parse_pkt(struct adapter *, struct mbuf **); void *start_wrq_wr(struct sge_wrq *, int, struct wrq_cookie *); void commit_wrq_wr(struct sge_wrq *, void *, struct wrq_cookie *); int tnl_cong(struct port_info *, int); -int t4_register_an_handler(an_handler_t); -int t4_register_fw_msg_handler(int, fw_msg_handler_t); -int t4_register_cpl_handler(int, cpl_handler_t); +void t4_register_an_handler(an_handler_t); +void t4_register_fw_msg_handler(int, fw_msg_handler_t); +void t4_register_cpl_handler(int, cpl_handler_t); +void t4_register_shared_cpl_handler(int, cpl_handler_t, int); /* t4_tracer.c */ struct t4_tracer; Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/t4_main.c Mon Apr 30 15:18:38 2018 (r333114) @@ -617,8 +617,6 @@ static int del_filter(struct adapter *, struct t4_filt static void clear_filter(struct filter_entry *); static int set_filter_wr(struct adapter *, int); static int del_filter_wr(struct adapter *, int); -static int set_tcb_rpl(struct sge_iq *, const struct rss_header *, - struct mbuf *); static int get_sge_context(struct adapter *, struct t4_sge_context *); static int load_fw(struct adapter *, struct t4_data *); static int load_cfg(struct adapter *, struct t4_data *); @@ -9270,22 +9268,6 @@ t4_filter_rpl(struct sge_iq *iq, const struct rss_head } static int -set_tcb_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) -{ - - MPASS(iq->set_tcb_rpl != NULL); - return (iq->set_tcb_rpl(iq, rss, m)); -} - -static int -l2t_write_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) -{ - - MPASS(iq->l2t_write_rpl != NULL); - return (iq->l2t_write_rpl(iq, rss, m)); -} - -static int get_sge_context(struct adapter *sc, struct t4_sge_context *cntxt) { int rc; @@ -10556,8 +10538,10 @@ mod_event(module_t mod, int cmd, void *arg) sx_xlock(&mlu); if (loaded++ == 0) { t4_sge_modload(); - t4_register_cpl_handler(CPL_SET_TCB_RPL, set_tcb_rpl); - t4_register_cpl_handler(CPL_L2T_WRITE_RPL, l2t_write_rpl); + t4_register_shared_cpl_handler(CPL_SET_TCB_RPL, + t4_filter_rpl, CPL_COOKIE_FILTER); + t4_register_shared_cpl_handler(CPL_L2T_WRITE_RPL, + do_l2t_write_rpl, CPL_COOKIE_FILTER); t4_register_cpl_handler(CPL_TRACE_PKT, t4_trace_pkt); t4_register_cpl_handler(CPL_T5_TRACE_PKT, t5_trace_pkt); sx_init(&t4_list_lock, "T4/T5 adapters"); Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/t4_sge.c Mon Apr 30 15:18:38 2018 (r333114) @@ -285,98 +285,122 @@ static counter_u64_t extfree_rels; an_handler_t t4_an_handler; fw_msg_handler_t t4_fw_msg_handler[NUM_FW6_TYPES]; cpl_handler_t t4_cpl_handler[NUM_CPL_CMDS]; +cpl_handler_t set_tcb_rpl_handlers[NUM_CPL_COOKIES]; +cpl_handler_t l2t_write_rpl_handlers[NUM_CPL_COOKIES]; - -static int -an_not_handled(struct sge_iq *iq, const struct rsp_ctrl *ctrl) +void +t4_register_an_handler(an_handler_t h) { + uintptr_t *loc; -#ifdef INVARIANTS - panic("%s: async notification on iq %p (ctrl %p)", __func__, iq, ctrl); -#else - log(LOG_ERR, "%s: async notification on iq %p (ctrl %p)\n", - __func__, iq, ctrl); -#endif - return (EDOOFUS); + MPASS(h == NULL || t4_an_handler == NULL); + + loc = (uintptr_t *)&t4_an_handler; + atomic_store_rel_ptr(loc, (uintptr_t)h); } -int -t4_register_an_handler(an_handler_t h) +void +t4_register_fw_msg_handler(int type, fw_msg_handler_t h) { - uintptr_t *loc, new; + uintptr_t *loc; - new = h ? (uintptr_t)h : (uintptr_t)an_not_handled; - loc = (uintptr_t *) &t4_an_handler; - atomic_store_rel_ptr(loc, new); + MPASS(type < nitems(t4_fw_msg_handler)); + MPASS(h == NULL || t4_fw_msg_handler[type] == NULL); + /* + * These are dispatched by the handler for FW{4|6}_CPL_MSG using the CPL + * handler dispatch table. Reject any attempt to install a handler for + * this subtype. + */ + MPASS(type != FW_TYPE_RSSCPL); + MPASS(type != FW6_TYPE_RSSCPL); - return (0); + loc = (uintptr_t *)&t4_fw_msg_handler[type]; + atomic_store_rel_ptr(loc, (uintptr_t)h); } -static int -fw_msg_not_handled(struct adapter *sc, const __be64 *rpl) +void +t4_register_cpl_handler(int opcode, cpl_handler_t h) { - const struct cpl_fw6_msg *cpl = - __containerof(rpl, struct cpl_fw6_msg, data[0]); + uintptr_t *loc; -#ifdef INVARIANTS - panic("%s: fw_msg type %d", __func__, cpl->type); -#else - log(LOG_ERR, "%s: fw_msg type %d\n", __func__, cpl->type); -#endif - return (EDOOFUS); + MPASS(opcode < nitems(t4_cpl_handler)); + MPASS(h == NULL || t4_cpl_handler[opcode] == NULL); + + loc = (uintptr_t *)&t4_cpl_handler[opcode]; + atomic_store_rel_ptr(loc, (uintptr_t)h); } -int -t4_register_fw_msg_handler(int type, fw_msg_handler_t h) +static int +set_tcb_rpl_handler(struct sge_iq *iq, const struct rss_header *rss, + struct mbuf *m) { - uintptr_t *loc, new; + const struct cpl_set_tcb_rpl *cpl = (const void *)(rss + 1); + u_int tid; + int cookie; - if (type >= nitems(t4_fw_msg_handler)) - return (EINVAL); + MPASS(m == NULL); - /* - * These are dispatched by the handler for FW{4|6}_CPL_MSG using the CPL - * handler dispatch table. Reject any attempt to install a handler for - * this subtype. - */ - if (type == FW_TYPE_RSSCPL || type == FW6_TYPE_RSSCPL) - return (EINVAL); + tid = GET_TID(cpl); + if (is_ftid(iq->adapter, tid)) { + /* + * The return code for filter-write is put in the CPL cookie so + * we have to rely on the hardware tid (is_ftid) to determine + * that this is a response to a filter. + */ + cookie = CPL_COOKIE_FILTER; + } else { + cookie = G_COOKIE(cpl->cookie); + } + MPASS(cookie > CPL_COOKIE_RESERVED); + MPASS(cookie < nitems(set_tcb_rpl_handlers)); - new = h ? (uintptr_t)h : (uintptr_t)fw_msg_not_handled; - loc = (uintptr_t *) &t4_fw_msg_handler[type]; - atomic_store_rel_ptr(loc, new); - - return (0); + return (set_tcb_rpl_handlers[cookie](iq, rss, m)); } static int -cpl_not_handled(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +l2t_write_rpl_handler(struct sge_iq *iq, const struct rss_header *rss, + struct mbuf *m) { + const struct cpl_l2t_write_rpl *rpl = (const void *)(rss + 1); + unsigned int cookie; -#ifdef INVARIANTS - panic("%s: opcode 0x%02x on iq %p with payload %p", - __func__, rss->opcode, iq, m); -#else - log(LOG_ERR, "%s: opcode 0x%02x on iq %p with payload %p\n", - __func__, rss->opcode, iq, m); - m_freem(m); -#endif - return (EDOOFUS); + MPASS(m == NULL); + + cookie = GET_TID(rpl) & F_SYNC_WR ? CPL_COOKIE_TOM : CPL_COOKIE_FILTER; + return (l2t_write_rpl_handlers[cookie](iq, rss, m)); } -int -t4_register_cpl_handler(int opcode, cpl_handler_t h) +static void +t4_init_shared_cpl_handlers(void) { - uintptr_t *loc, new; - if (opcode >= nitems(t4_cpl_handler)) - return (EINVAL); + t4_register_cpl_handler(CPL_SET_TCB_RPL, set_tcb_rpl_handler); + t4_register_cpl_handler(CPL_L2T_WRITE_RPL, l2t_write_rpl_handler); +} - new = h ? (uintptr_t)h : (uintptr_t)cpl_not_handled; - loc = (uintptr_t *) &t4_cpl_handler[opcode]; - atomic_store_rel_ptr(loc, new); +void +t4_register_shared_cpl_handler(int opcode, cpl_handler_t h, int cookie) +{ + uintptr_t *loc; - return (0); + MPASS(opcode < nitems(t4_cpl_handler)); + MPASS(cookie > CPL_COOKIE_RESERVED); + MPASS(cookie < NUM_CPL_COOKIES); + MPASS(t4_cpl_handler[opcode] != NULL); + + switch (opcode) { + case CPL_SET_TCB_RPL: + loc = (uintptr_t *)&set_tcb_rpl_handlers[cookie]; + break; + case CPL_L2T_WRITE_RPL: + loc = (uintptr_t *)&l2t_write_rpl_handlers[cookie]; + break; + default: + MPASS(0); + return; + } + MPASS(h == NULL || *loc == (uintptr_t)NULL); + atomic_store_rel_ptr(loc, (uintptr_t)h); } /* @@ -385,7 +409,6 @@ t4_register_cpl_handler(int opcode, cpl_handler_t h) void t4_sge_modload(void) { - int i; if (fl_pktshift < 0 || fl_pktshift > 7) { printf("Invalid hw.cxgbe.fl_pktshift value (%d)," @@ -425,12 +448,7 @@ t4_sge_modload(void) counter_u64_zero(extfree_refs); counter_u64_zero(extfree_rels); - t4_an_handler = an_not_handled; - for (i = 0; i < nitems(t4_fw_msg_handler); i++) - t4_fw_msg_handler[i] = fw_msg_not_handled; - for (i = 0; i < nitems(t4_cpl_handler); i++) - t4_cpl_handler[i] = cpl_not_handled; - + t4_init_shared_cpl_handlers(); t4_register_cpl_handler(CPL_FW4_MSG, handle_fw_msg); t4_register_cpl_handler(CPL_FW6_MSG, handle_fw_msg); t4_register_cpl_handler(CPL_SGE_EGR_UPDATE, handle_sge_egr_update); @@ -2901,11 +2919,8 @@ alloc_fwq(struct adapter *sc) init_iq(fwq, sc, 0, 0, FW_IQ_QSIZE); if (sc->flags & IS_VF) intr_idx = 0; - else { + else intr_idx = sc->intr_count > 1 ? 1 : 0; - fwq->set_tcb_rpl = t4_filter_rpl; - fwq->l2t_write_rpl = do_l2t_write_rpl; - } rc = alloc_iq_fl(&sc->port[0]->vi[0], fwq, NULL, intr_idx, -1); if (rc != 0) { device_printf(sc->dev, Modified: head/sys/dev/cxgbe/tom/t4_cpl_io.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_cpl_io.c Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/tom/t4_cpl_io.c Mon Apr 30 15:18:38 2018 (r333114) @@ -1902,44 +1902,6 @@ do_fw4_ack(struct sge_iq *iq, const struct rss_header return (0); } -int -do_set_tcb_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) -{ - struct adapter *sc = iq->adapter; - const struct cpl_set_tcb_rpl *cpl = (const void *)(rss + 1); - unsigned int tid = GET_TID(cpl); - struct toepcb *toep; -#ifdef INVARIANTS - unsigned int opcode = G_CPL_OPCODE(be32toh(OPCODE_TID(cpl))); -#endif - - KASSERT(opcode == CPL_SET_TCB_RPL, - ("%s: unexpected opcode 0x%x", __func__, opcode)); - KASSERT(m == NULL, ("%s: wasn't expecting payload", __func__)); - MPASS(iq != &sc->sge.fwq); - - toep = lookup_tid(sc, tid); - if (toep->ulp_mode == ULP_MODE_TCPDDP) { - handle_ddp_tcb_rpl(toep, cpl); - return (0); - } - - /* - * TOM and/or other ULPs don't request replies for CPL_SET_TCB or - * CPL_SET_TCB_FIELD requests. This can easily change and when it does - * the dispatch code will go here. - */ -#ifdef INVARIANTS - panic("%s: Unexpected CPL_SET_TCB_RPL for tid %u on iq %p", __func__, - tid, iq); -#else - log(LOG_ERR, "%s: Unexpected CPL_SET_TCB_RPL for tid %u on iq %p\n", - __func__, tid, iq); -#endif - - return (0); -} - void t4_set_tcb_field(struct adapter *sc, struct sge_wrq *wrq, struct toepcb *toep, uint16_t word, uint64_t mask, uint64_t val, int reply, int cookie) @@ -1949,6 +1911,9 @@ t4_set_tcb_field(struct adapter *sc, struct sge_wrq *w struct ofld_tx_sdesc *txsd; MPASS((cookie & ~M_COOKIE) == 0); + if (reply) { + MPASS(cookie != CPL_COOKIE_RESERVED); + } wr = alloc_wrqe(sizeof(*req), wrq); if (wr == NULL) { Modified: head/sys/dev/cxgbe/tom/t4_ddp.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_ddp.c Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/tom/t4_ddp.c Mon Apr 30 15:18:38 2018 (r333114) @@ -626,11 +626,17 @@ enum { DDP_BUF1_INVALIDATED }; -void -handle_ddp_tcb_rpl(struct toepcb *toep, const struct cpl_set_tcb_rpl *cpl) +CTASSERT(DDP_BUF0_INVALIDATED == CPL_COOKIE_DDP0); + +static int +do_ddp_tcb_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) { + struct adapter *sc = iq->adapter; + const struct cpl_set_tcb_rpl *cpl = (const void *)(rss + 1); + unsigned int tid = GET_TID(cpl); unsigned int db_idx; - struct inpcb *inp = toep->inp; + struct toepcb *toep; + struct inpcb *inp; struct ddp_buffer *db; struct kaiocb *job; long copied; @@ -638,6 +644,8 @@ handle_ddp_tcb_rpl(struct toepcb *toep, const struct c if (cpl->status != CPL_ERR_NONE) panic("XXX: tcp_rpl failed: %d", cpl->status); + toep = lookup_tid(sc, tid); + inp = toep->inp; switch (cpl->cookie) { case V_WORD(W_TCB_RX_DDP_FLAGS) | V_COOKIE(DDP_BUF0_INVALIDATED): case V_WORD(W_TCB_RX_DDP_FLAGS) | V_COOKIE(DDP_BUF1_INVALIDATED): @@ -645,6 +653,7 @@ handle_ddp_tcb_rpl(struct toepcb *toep, const struct c * XXX: This duplicates a lot of code with handle_ddp_data(). */ db_idx = G_COOKIE(cpl->cookie) - DDP_BUF0_INVALIDATED; + MPASS(db_idx < nitems(toep->ddp.db)); INP_WLOCK(inp); DDP_LOCK(toep); db = &toep->ddp.db[db_idx]; @@ -689,6 +698,8 @@ handle_ddp_tcb_rpl(struct toepcb *toep, const struct c panic("XXX: unknown tcb_rpl offset %#x, cookie %#x", G_WORD(cpl->cookie), G_COOKIE(cpl->cookie)); } + + return (0); } void @@ -1941,6 +1952,10 @@ void t4_ddp_mod_load(void) { + t4_register_shared_cpl_handler(CPL_SET_TCB_RPL, do_ddp_tcb_rpl, + CPL_COOKIE_DDP0); + t4_register_shared_cpl_handler(CPL_SET_TCB_RPL, do_ddp_tcb_rpl, + CPL_COOKIE_DDP1); t4_register_cpl_handler(CPL_RX_DATA_DDP, do_rx_data_ddp); t4_register_cpl_handler(CPL_RX_DDP_COMPLETE, do_rx_ddp_complete); TAILQ_INIT(&ddp_orphan_pagesets); Modified: head/sys/dev/cxgbe/tom/t4_tom.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_tom.c Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/tom/t4_tom.c Mon Apr 30 15:18:38 2018 (r333114) @@ -1330,8 +1330,7 @@ t4_tom_activate(struct adapter *sc) struct tom_data *td; struct toedev *tod; struct vi_info *vi; - struct sge_ofld_rxq *ofld_rxq; - int i, j, rc, v; + int i, rc, v; ASSERT_SYNCHRONIZED_OP(sc); @@ -1398,10 +1397,6 @@ t4_tom_activate(struct adapter *sc) for_each_port(sc, i) { for_each_vi(sc->port[i], v, vi) { TOEDEV(vi->ifp) = &td->tod; - for_each_ofld_rxq(vi, j, ofld_rxq) { - ofld_rxq->iq.set_tcb_rpl = do_set_tcb_rpl; - ofld_rxq->iq.l2t_write_rpl = do_l2t_write_rpl2; - } } } @@ -1504,6 +1499,8 @@ t4_tom_mod_load(void) struct protosw *tcp_protosw, *tcp6_protosw; /* CPL handlers */ + t4_register_shared_cpl_handler(CPL_L2T_WRITE_RPL, do_l2t_write_rpl2, + CPL_COOKIE_TOM); t4_init_connect_cpl_handlers(); t4_init_listen_cpl_handlers(); t4_init_cpl_io_handlers(); @@ -1568,6 +1565,7 @@ t4_tom_mod_unload(void) t4_uninit_connect_cpl_handlers(); t4_uninit_listen_cpl_handlers(); t4_uninit_cpl_io_handlers(); + t4_register_shared_cpl_handler(CPL_L2T_WRITE_RPL, NULL, CPL_COOKIE_TOM); return (0); } Modified: head/sys/dev/cxgbe/tom/t4_tom.h ============================================================================== --- head/sys/dev/cxgbe/tom/t4_tom.h Mon Apr 30 12:16:54 2018 (r333113) +++ head/sys/dev/cxgbe/tom/t4_tom.h Mon Apr 30 15:18:38 2018 (r333114) @@ -390,7 +390,6 @@ void t4_set_tcb_field(struct adapter *, struct sge_wrq uint16_t, uint64_t, uint64_t, int, int); void t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop); void t4_push_pdus(struct adapter *sc, struct toepcb *toep, int drop); -int do_set_tcb_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *); /* t4_ddp.c */ int t4_init_ppod_region(struct ppod_region *, struct t4_range *, u_int, @@ -416,7 +415,6 @@ void ddp_queue_toep(struct toepcb *); void release_ddp_resources(struct toepcb *toep); void handle_ddp_close(struct toepcb *, struct tcpcb *, uint32_t); void handle_ddp_indicate(struct toepcb *); -void handle_ddp_tcb_rpl(struct toepcb *, const struct cpl_set_tcb_rpl *); void insert_ddp_data(struct toepcb *, uint32_t); const struct offload_settings *lookup_offload_policy(struct adapter *, int, struct mbuf *, uint16_t, struct inpcb *); From owner-svn-src-head@freebsd.org Mon Apr 30 15:23:46 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4180EFAE3ED; Mon, 30 Apr 2018 15:23:46 +0000 (UTC) (envelope-from slavash@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E7CE179306; Mon, 30 Apr 2018 15:23:45 +0000 (UTC) (envelope-from slavash@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E215415022; Mon, 30 Apr 2018 15:23:45 +0000 (UTC) (envelope-from slavash@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UFNjvI056721; Mon, 30 Apr 2018 15:23:45 GMT (envelope-from slavash@FreeBSD.org) Received: (from slavash@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UFNjF9056720; Mon, 30 Apr 2018 15:23:45 GMT (envelope-from slavash@FreeBSD.org) Message-Id: <201804301523.w3UFNjF9056720@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: slavash set sender to slavash@FreeBSD.org using -f From: Slava Shwartsman Date: Mon, 30 Apr 2018 15:23:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333115 - head/contrib/ofed/libibumad X-SVN-Group: head X-SVN-Commit-Author: slavash X-SVN-Commit-Paths: head/contrib/ofed/libibumad X-SVN-Commit-Revision: 333115 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 15:23:46 -0000 Author: slavash Date: Mon Apr 30 15:23:45 2018 New Revision: 333115 URL: https://svnweb.freebsd.org/changeset/base/333115 Log: libibumad/umad.c: In get_port, ignore sysctl get rate errors This can cause ibpanic in ibstat when width is not set properly as can occur when Ethernet port is connected to InfiniBand fabric. ibpanic: [8167] main: stat of IB device 'mlx5_0' failed: m With this change, Rate is displayed as 0 with ibstat for this scenario. MFC after: 3 days Approved by: hselasky (mentor), kib (mentor) Sponsored by: Mellanox Technologies Modified: head/contrib/ofed/libibumad/umad.c Modified: head/contrib/ofed/libibumad/umad.c ============================================================================== --- head/contrib/ofed/libibumad/umad.c Mon Apr 30 15:18:38 2018 (r333114) +++ head/contrib/ofed/libibumad/umad.c Mon Apr 30 15:23:45 2018 (r333115) @@ -138,6 +138,7 @@ static int get_port(const char *ca_name, const char *d strncpy(port->ca_name, ca_name, sizeof port->ca_name - 1); port->portnum = portnum; port->pkeys = NULL; + port->rate = 0; len = snprintf(port_dir, sizeof(port_dir), "%s/%d", dir, portnum); if (len < 0 || len > sizeof(port_dir)) @@ -155,8 +156,12 @@ static int get_port(const char *ca_name, const char *d goto clean; if (sys_read_uint(port_dir, SYS_PORT_PHY_STATE, &port->phys_state) < 0) goto clean; - if (sys_read_uint(port_dir, SYS_PORT_RATE, &port->rate) < 0) - goto clean; + /* + * If width was not set properly this read may fail. + * Instead of failing everything, we will just skip the check + * and it will be set to 0. + */ + sys_read_uint(port_dir, SYS_PORT_RATE, &port->rate); if (sys_read_uint(port_dir, SYS_PORT_CAPMASK, &capmask) < 0) goto clean; From owner-svn-src-head@freebsd.org Mon Apr 30 17:16:18 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 86298FB0FF3; Mon, 30 Apr 2018 17:16:18 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3368973A39; Mon, 30 Apr 2018 17:16:18 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0F5C11623D; Mon, 30 Apr 2018 17:16:18 +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 w3UHGH8D014864; Mon, 30 Apr 2018 17:16:17 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UHGH3j014862; Mon, 30 Apr 2018 17:16:17 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201804301716.w3UHGH3j014862@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 30 Apr 2018 17:16:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333119 - head/lib/libc/sys X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/lib/libc/sys X-SVN-Commit-Revision: 333119 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 17:16:18 -0000 Author: emaste Date: Mon Apr 30 17:16:17 2018 New Revision: 333119 URL: https://svnweb.freebsd.org/changeset/base/333119 Log: Clarify bindat/connectat use with AT_FDCWD Discovered during investigation into the PR - the description of AT_FDCWD was somewhat confusing. PR: 222632 Submitted by: Jan Kokemüller MFC after: 1 week Modified: head/lib/libc/sys/bindat.2 head/lib/libc/sys/connectat.2 Modified: head/lib/libc/sys/bindat.2 ============================================================================== --- head/lib/libc/sys/bindat.2 Mon Apr 30 15:55:58 2018 (r333118) +++ head/lib/libc/sys/bindat.2 Mon Apr 30 17:16:17 2018 (r333119) @@ -46,7 +46,15 @@ The .Fn bindat system call assigns the local protocol address to a socket. -It works just like the +When passed the special value +.Dv AT_FDCWD +in the +.Fa fd +parameter, the behavior is identical to a call to +.Xr bind 2 . +Otherwise, +.Fn bindat +works like the .Xr bind 2 system call with two exceptions: .Pp @@ -60,15 +68,6 @@ If the file path stored in the field of the sockaddr_un structure is a relative path, it is located relative to the directory associated with the file descriptor .Fa fd . -If -.Fn bindat -is passed the special value -.Dv AT_FDCWD -in the -.Fa fd -parameter, the current working directory is used and the behavior is identical -to a call to -.Xr bind 2 . .El .Sh RETURN VALUES .Rv -std bindat @@ -77,7 +76,7 @@ The .Fn bindat system call may fail with the same errors as the .Xr bind 2 -system call for a UNIX domain socket or with the following errors: +system call or with the following errors: .Bl -tag -width Er .It Bq Er EBADF The Modified: head/lib/libc/sys/connectat.2 ============================================================================== --- head/lib/libc/sys/connectat.2 Mon Apr 30 15:55:58 2018 (r333118) +++ head/lib/libc/sys/connectat.2 Mon Apr 30 17:16:17 2018 (r333119) @@ -46,7 +46,15 @@ The .Fn connectat system call initiates a connection on a socket. -It works just like the +When passed the special value +.Dv AT_FDCWD +in the +.Fa fd +parameter, the behavior is identical to a call to +.Xr connect 2 . +Otherwise, +.Fn connectat +works like the .Xr connect 2 system call with two exceptions: .Pp @@ -60,15 +68,6 @@ If the file path stored in the field of the sockaddr_un structure is a relative path, it is located relative to the directory associated with the file descriptor .Fa fd . -If -.Fn connectat -is passed the special value -.Dv AT_FDCWD -in the -.Fa fd -parameter, the current working directory is used and the behavior is identical -to a call to -.Xr connect 2 . .El .Sh RETURN VALUES .Rv -std connectat @@ -77,7 +76,7 @@ The .Fn connectat system call may fail with the same errors as the .Xr connect 2 -system call for a UNIX domain socket or with the following errors: +system call or with the following errors: .Bl -tag -width Er .It Bq Er EBADF The From owner-svn-src-head@freebsd.org Mon Apr 30 17:31:08 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E30DFFB1639; Mon, 30 Apr 2018 17:31:07 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 93E7F76ADB; Mon, 30 Apr 2018 17:31:07 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8EEE71642A; Mon, 30 Apr 2018 17:31:07 +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 w3UHV7R0021463; Mon, 30 Apr 2018 17:31:07 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UHV7kG021459; Mon, 30 Apr 2018 17:31:07 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201804301731.w3UHV7kG021459@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Mon, 30 Apr 2018 17:31:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333120 - in head: share/man/man4 sys/kern tests/sys/capsicum X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: in head: share/man/man4 sys/kern tests/sys/capsicum X-SVN-Commit-Revision: 333120 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 17:31:08 -0000 Author: emaste Date: Mon Apr 30 17:31:06 2018 New Revision: 333120 URL: https://svnweb.freebsd.org/changeset/base/333120 Log: Disable connectat/bindat with AT_FDCWD in capmode Previously it was possible to connect a socket (which had the CAP_CONNECT right) by calling "connectat(AT_FDCWD, ...)" even in capabilties mode. This combination should be treated the same as a call to connect (i.e. forbidden in capabilities mode). Similarly for bindat. Disable connectat/bindat with AT_FDCWD in capabilities mode, fix up the documentation and add tests. PR: 222632 Submitted by: Jan Kokemüller Reviewed by: Domagoj Stolfa MFC after: 1 week Relnotes: Yes Differential Revision: https://reviews.freebsd.org/D15221 Added: head/tests/sys/capsicum/bindat_connectat.c (contents, props changed) Modified: head/share/man/man4/rights.4 head/sys/kern/uipc_syscalls.c head/tests/sys/capsicum/Makefile Modified: head/share/man/man4/rights.4 ============================================================================== --- head/share/man/man4/rights.4 Mon Apr 30 17:16:17 2018 (r333119) +++ head/share/man/man4/rights.4 Mon Apr 30 17:31:06 2018 (r333120) @@ -32,7 +32,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 17, 2016 +.Dd April 30, 2018 .Dt RIGHTS 4 .Os .Sh NAME @@ -94,8 +94,15 @@ Permit and .Xr acl_set_fd_np 3 . .It Dv CAP_BIND -Permit -.Xr bind 2 . +When not in capabilities mode, permit +.Xr bind 2 +and +.Xr bindat 2 +with special value +.Dv AT_FDCWD +in the +.Fa fd +parameter. Note that sockets can also become bound implicitly as a result of .Xr connect 2 or @@ -116,9 +123,16 @@ An alias to and .Dv CAP_LOOKUP . .It Dv CAP_CONNECT -Permit -.Xr connect 2 ; -also required for +When not in capabilities mode, permit +.Xr connect 2 +and +.Xr connectat 2 +with special value +.Dv AT_FDCWD +in the +.Fa fd +parameter. +This right is also required for .Xr sendto 2 with a non-NULL destination address. .It Dv CAP_CONNECTAT Modified: head/sys/kern/uipc_syscalls.c ============================================================================== --- head/sys/kern/uipc_syscalls.c Mon Apr 30 17:16:17 2018 (r333119) +++ head/sys/kern/uipc_syscalls.c Mon Apr 30 17:31:06 2018 (r333120) @@ -187,6 +187,11 @@ kern_bindat(struct thread *td, int dirfd, int fd, stru cap_rights_t rights; int error; +#ifdef CAPABILITY_MODE + if (IN_CAPABILITY_MODE(td) && (dirfd == AT_FDCWD)) + return (ECAPMODE); +#endif + AUDIT_ARG_FD(fd); AUDIT_ARG_SOCKADDR(td, dirfd, sa); error = getsock_cap(td, fd, cap_rights_init(&rights, CAP_BIND), @@ -482,6 +487,11 @@ kern_connectat(struct thread *td, int dirfd, int fd, s struct file *fp; cap_rights_t rights; int error, interrupted = 0; + +#ifdef CAPABILITY_MODE + if (IN_CAPABILITY_MODE(td) && (dirfd == AT_FDCWD)) + return (ECAPMODE); +#endif AUDIT_ARG_FD(fd); AUDIT_ARG_SOCKADDR(td, dirfd, sa); Modified: head/tests/sys/capsicum/Makefile ============================================================================== --- head/tests/sys/capsicum/Makefile Mon Apr 30 17:16:17 2018 (r333119) +++ head/tests/sys/capsicum/Makefile Mon Apr 30 17:31:06 2018 (r333120) @@ -2,7 +2,10 @@ TESTSDIR= ${TESTSBASE}/sys/capsicum +ATF_TESTS_C+= bindat_connectat ATF_TESTS_C+= ioctls_test + +CFLAGS.bindat_connectat.c+= -I${SRCTOP}/tests WARNS?= 6 Added: head/tests/sys/capsicum/bindat_connectat.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/tests/sys/capsicum/bindat_connectat.c Mon Apr 30 17:31:06 2018 (r333120) @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2017 Jan Kokemüller + * + * 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 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 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 +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "freebsd_test_suite/macros.h" + +static int rootfd = -1; + +/* circumvent bug 215690 */ +int +open(const char *path, int flags, ...) +{ + mode_t mode = 0; + + if (flags & O_CREAT) { + va_list ap; + va_start(ap, flags); + mode = (mode_t) va_arg(ap, int); + va_end(ap); + } + + if (path && path[0] == '/' && rootfd >= 0) { + return (openat(rootfd, path + 1, flags, mode)); + } else { + return (openat(AT_FDCWD, path, flags, mode)); + } +} + +static void +check_capsicum(void) +{ + ATF_REQUIRE_FEATURE("security_capabilities"); + ATF_REQUIRE_FEATURE("security_capability_mode"); + + ATF_REQUIRE((rootfd = open("/", O_EXEC | O_CLOEXEC)) >= 0); +} + +typedef int (*socket_fun)(int, const struct sockaddr *, socklen_t); + +static int +connectat_fdcwd(int s, const struct sockaddr *name, socklen_t namelen) +{ + + return (connectat(AT_FDCWD, s, name, namelen)); +} + +static int +bindat_fdcwd(int s, const struct sockaddr *name, socklen_t namelen) +{ + + return (bindat(AT_FDCWD, s, name, namelen)); +} + + +ATF_TC(bindat_connectat_1); +ATF_TC_HEAD(bindat_connectat_1, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Verify that connect/bind work in normal case"); +} + +static void +check_1(socket_fun f, int s, const struct sockaddr_in *name) +{ + + ATF_REQUIRE((s = socket(AF_INET, SOCK_STREAM, 0)) >= 0); + ATF_REQUIRE_ERRNO(EAFNOSUPPORT, + f(s, (const struct sockaddr *)(name), + sizeof(struct sockaddr_in)) < 0); +} + +ATF_TC_BODY(bindat_connectat_1, tc) +{ + struct sockaddr_in sin; + + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_port = htons(0); + sin.sin_addr.s_addr = htonl(0xE0000000); + + check_1(bindat_fdcwd, 0, &sin); + check_1(bind, 0, &sin); + check_1(connectat_fdcwd, 0, &sin); + check_1(connect, 0, &sin); +} + + +ATF_TC(bindat_connectat_2); +ATF_TC_HEAD(bindat_connectat_2, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Verify that connect/bind are disabled in cap-mode"); +} + +static void +check_2(socket_fun f, int s, const struct sockaddr_in *name) +{ + + ATF_REQUIRE_ERRNO(ECAPMODE, + f(s, (const struct sockaddr *)name, + sizeof(struct sockaddr_in)) < 0); +} + +ATF_TC_BODY(bindat_connectat_2, tc) +{ + int sock; + struct sockaddr_in sin; + + check_capsicum(); + + ATF_REQUIRE(cap_enter() >= 0); + + /* note: sock is created _after_ cap_enter() and contains all rights */ + ATF_REQUIRE((sock = socket(AF_INET, SOCK_STREAM, 0)) >= 0); + + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + /* dummy port and multicast address (224.0.0.0) to distinguish two + * cases: + * - ECAPMODE/ENOTCAPABLE --> call blocked by capsicum + * - EAFNOSUPPORT --> call went through to protocol layer + */ + sin.sin_port = htons(0); + sin.sin_addr.s_addr = htonl(0xE0000000); + + check_2(bindat_fdcwd, sock, &sin); + check_2(bind, sock, &sin); + check_2(connectat_fdcwd, sock, &sin); + check_2(connect, sock, &sin); +} + + +ATF_TC(bindat_connectat_3); +ATF_TC_HEAD(bindat_connectat_3, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Check that taking away CAP_BIND/CAP_CONNECT " + "sabotages bind/connect"); +} + +static void +check_3(socket_fun f, int s, const struct sockaddr_in *name, + cap_rights_t *rights, cap_rights_t *sub_rights) +{ + + ATF_REQUIRE((s = socket(AF_INET, SOCK_STREAM, 0)) >= 0); + ATF_REQUIRE(cap_rights_limit(s, rights) >= 0); + ATF_REQUIRE_ERRNO(EAFNOSUPPORT, + f(s, (const struct sockaddr *)name, + sizeof(struct sockaddr_in)) < 0); + ATF_REQUIRE(cap_rights_limit(s, + cap_rights_remove(rights, sub_rights)) >= 0); + ATF_REQUIRE_ERRNO(ENOTCAPABLE, + f(s, (const struct sockaddr *)name, + sizeof(struct sockaddr_in)) < 0); +} + +ATF_TC_BODY(bindat_connectat_3, tc) +{ + struct sockaddr_in sin; + cap_rights_t rights, sub_rights; + + check_capsicum(); + + memset(&sin, 0, sizeof(sin)); + sin.sin_family = AF_INET; + sin.sin_port = htons(0); + sin.sin_addr.s_addr = htonl(0xE0000000); + + check_3(bindat_fdcwd, 0, &sin, + cap_rights_init(&rights, CAP_SOCK_SERVER), + cap_rights_init(&sub_rights, CAP_BIND)); + check_3(bind, 0, &sin, + cap_rights_init(&rights, CAP_SOCK_SERVER), + cap_rights_init(&sub_rights, CAP_BIND)); + check_3(connectat_fdcwd, 0, &sin, + cap_rights_init(&rights, CAP_SOCK_CLIENT), + cap_rights_init(&sub_rights, CAP_CONNECT)); + check_3(connect, 0, &sin, + cap_rights_init(&rights, CAP_SOCK_CLIENT), + cap_rights_init(&sub_rights, CAP_CONNECT)); +} + + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, bindat_connectat_1); + ATF_TP_ADD_TC(tp, bindat_connectat_2); + ATF_TP_ADD_TC(tp, bindat_connectat_3); + + return (atf_no_error()); +} From owner-svn-src-head@freebsd.org Mon Apr 30 17:33:44 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D6EFFFB1892; Mon, 30 Apr 2018 17:33:44 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7FA8D782FE; Mon, 30 Apr 2018 17:33:44 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 77D3D165BC; Mon, 30 Apr 2018 17:33:44 +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 w3UHXiXs024587; Mon, 30 Apr 2018 17:33:44 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UHXiho024586; Mon, 30 Apr 2018 17:33:44 GMT (envelope-from np@FreeBSD.org) Message-Id: <201804301733.w3UHXiho024586@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Mon, 30 Apr 2018 17:33:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333121 - head/sys/dev/cxgbe/tom X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: head/sys/dev/cxgbe/tom X-SVN-Commit-Revision: 333121 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 17:33:45 -0000 Author: np Date: Mon Apr 30 17:33:44 2018 New Revision: 333121 URL: https://svnweb.freebsd.org/changeset/base/333121 Log: cxgbe/t4_tom: Use appropriate macros instead of magic math while constructing the atid of an active open work request. Sponsored by: Chelsio Communications Modified: head/sys/dev/cxgbe/tom/t4_connect.c Modified: head/sys/dev/cxgbe/tom/t4_connect.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_connect.c Mon Apr 30 17:31:06 2018 (r333120) +++ head/sys/dev/cxgbe/tom/t4_connect.c Mon Apr 30 17:33:44 2018 (r333121) @@ -418,7 +418,7 @@ t4_connect(struct toedev *tod, struct socket *so, stru else rscale = 0; mtu_idx = find_best_mtu_idx(sc, &inp->inp_inc, &settings); - qid_atid = (toep->ofld_rxq->iq.abs_id << 14) | toep->tid; + qid_atid = V_TID_QID(toep->ofld_rxq->iq.abs_id) | V_TID_TID(toep->tid); if (isipv6) { struct cpl_act_open_req6 *cpl = wrtod(wr); From owner-svn-src-head@freebsd.org Mon Apr 30 18:55:03 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DDEF8FB3991; Mon, 30 Apr 2018 18:55:02 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 852876884C; Mon, 30 Apr 2018 18:55:02 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 65224172B0; Mon, 30 Apr 2018 18:55:02 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UIt2HE065009; Mon, 30 Apr 2018 18:55:02 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UIt2UK065006; Mon, 30 Apr 2018 18:55:02 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201804301855.w3UIt2UK065006@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Mon, 30 Apr 2018 18:55:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333122 - head/usr.bin/seq X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/usr.bin/seq X-SVN-Commit-Revision: 333122 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 18:55:03 -0000 Author: kevans Date: Mon Apr 30 18:55:01 2018 New Revision: 333122 URL: https://svnweb.freebsd.org/changeset/base/333122 Log: seq(1): Provide some long options These match GNU seq(1) names where applicable for compatibility purposes. MFC after: 1 month Modified: head/usr.bin/seq/seq.1 head/usr.bin/seq/seq.c Modified: head/usr.bin/seq/seq.1 ============================================================================== --- head/usr.bin/seq/seq.1 Mon Apr 30 17:33:44 2018 (r333121) +++ head/usr.bin/seq/seq.1 Mon Apr 30 18:55:01 2018 (r333122) @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 12, 2016 +.Dd April 30, 2018 .Dt SEQ 1 .Os .Sh NAME @@ -72,7 +72,7 @@ The .Nm utility accepts the following options: .Bl -tag -width Ar -.It Fl f Ar format +.It Fl f Ar format , Fl -format Ar format Use a .Xr printf 3 style @@ -98,7 +98,7 @@ defined in .St -ansiC . The default is .Cm %g . -.It Fl s Ar string +.It Fl s Ar string , Fl -separator Ar string Use .Ar string to separate numbers. @@ -109,7 +109,7 @@ defined in .St -ansiC . The default is .Cm \en . -.It Fl t Ar string +.It Fl t Ar string , Fl -terminator Ar string Use .Ar string to terminate sequence of numbers. @@ -121,7 +121,7 @@ defined in This option is useful when the default separator does not contain a .Cm \en . -.It Fl w +.It Fl w , Fl -fixed-width Equalize the widths of all numbers by padding with zeros as necessary. This option has no effect with the .Fl f Modified: head/usr.bin/seq/seq.c ============================================================================== --- head/usr.bin/seq/seq.c Mon Apr 30 17:33:44 2018 (r333121) +++ head/usr.bin/seq/seq.c Mon Apr 30 18:55:01 2018 (r333122) @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -67,6 +68,15 @@ static int valid_format(const char *); static char *generate_format(double, double, double, int, char); static char *unescape(char *); +static const struct option long_opts[] = +{ + {"format", required_argument, NULL, 'f'}, + {"separator", required_argument, NULL, 's'}, + {"terminator", required_argument, NULL, 't'}, + {"equal-width", no_argument, NULL, 'w'}, + {NULL, no_argument, NULL, 0} +}; + /* * The seq command will print out a numeric sequence from 1, the default, * to a user specified upper limit by 1. The lower bound and increment @@ -100,7 +110,7 @@ main(int argc, char *argv[]) * least they trip up getopt(3). */ while ((optind < argc) && !numeric(argv[optind]) && - (c = getopt(argc, argv, "f:hs:t:w")) != -1) { + (c = getopt_long(argc, argv, "+f:hs:t:w", long_opts, NULL)) != -1) { switch (c) { case 'f': /* format (plan9) */ From owner-svn-src-head@freebsd.org Mon Apr 30 19:21:21 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 07429FB40A9; Mon, 30 Apr 2018 19:21:21 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B08286F8A5; Mon, 30 Apr 2018 19:21:20 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id AB66717610; Mon, 30 Apr 2018 19:21:20 +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 w3UJLKqw075848; Mon, 30 Apr 2018 19:21:20 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UJLKKV075847; Mon, 30 Apr 2018 19:21:20 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201804301921.w3UJLKKV075847@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 30 Apr 2018 19:21:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333123 - head/sys/dev/nvme X-SVN-Group: head X-SVN-Commit-Author: mav X-SVN-Commit-Paths: head/sys/dev/nvme X-SVN-Commit-Revision: 333123 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 19:21:21 -0000 Author: mav Date: Mon Apr 30 19:21:20 2018 New Revision: 333123 URL: https://svnweb.freebsd.org/changeset/base/333123 Log: Set si_drv1 for nvmeXnsY in a new race-free way. r332897 switched to new KPI, but havent used its main benefit. Sponsored by: iXsystems, Inc. Modified: head/sys/dev/nvme/nvme_ns.c Modified: head/sys/dev/nvme/nvme_ns.c ============================================================================== --- head/sys/dev/nvme/nvme_ns.c Mon Apr 30 18:55:01 2018 (r333122) +++ head/sys/dev/nvme/nvme_ns.c Mon Apr 30 19:21:20 2018 (r333123) @@ -596,6 +596,7 @@ nvme_ns_construct(struct nvme_namespace *ns, uint32_t md_args.mda_devsw = &nvme_ns_cdevsw; md_args.mda_unit = unit; md_args.mda_mode = 0600; + md_args.mda_si_drv1 = ns; res = make_dev_s(&md_args, &ns->cdev, "nvme%dns%d", device_get_unit(ctrlr->dev), ns->id); if (res != 0) @@ -604,8 +605,6 @@ nvme_ns_construct(struct nvme_namespace *ns, uint32_t #ifdef NVME_UNMAPPED_BIO_SUPPORT ns->cdev->si_flags |= SI_UNMAPPED; #endif - - ns->cdev->si_drv1 = ns; return (0); } From owner-svn-src-head@freebsd.org Mon Apr 30 19:37:33 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3957DFB4CB7; Mon, 30 Apr 2018 19:37:33 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DD0B571B12; Mon, 30 Apr 2018 19:37:32 +0000 (UTC) (envelope-from nwhitehorn@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D80781790E; Mon, 30 Apr 2018 19:37:32 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UJbWZr086041; Mon, 30 Apr 2018 19:37:32 GMT (envelope-from nwhitehorn@FreeBSD.org) Received: (from nwhitehorn@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UJbWqj086040; Mon, 30 Apr 2018 19:37:32 GMT (envelope-from nwhitehorn@FreeBSD.org) Message-Id: <201804301937.w3UJbWqj086040@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: nwhitehorn set sender to nwhitehorn@FreeBSD.org using -f From: Nathan Whitehorn Date: Mon, 30 Apr 2018 19:37:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333124 - head/sys/powerpc/powermac X-SVN-Group: head X-SVN-Commit-Author: nwhitehorn X-SVN-Commit-Paths: head/sys/powerpc/powermac X-SVN-Commit-Revision: 333124 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 19:37:33 -0000 Author: nwhitehorn Date: Mon Apr 30 19:37:32 2018 New Revision: 333124 URL: https://svnweb.freebsd.org/changeset/base/333124 Log: Fix null pointer dereference on nodes without a "compatible" property. MFC after: 1 week Modified: head/sys/powerpc/powermac/macio.c Modified: head/sys/powerpc/powermac/macio.c ============================================================================== --- head/sys/powerpc/powermac/macio.c Mon Apr 30 19:21:20 2018 (r333123) +++ head/sys/powerpc/powermac/macio.c Mon Apr 30 19:37:32 2018 (r333124) @@ -399,7 +399,8 @@ macio_attach(device_t dev) continue; if (strcmp(ofw_bus_get_name(cdev), "bmac") == 0 || - strcmp(ofw_bus_get_compat(cdev), "bmac+") == 0) { + (ofw_bus_get_compat(cdev) != NULL && + strcmp(ofw_bus_get_compat(cdev), "bmac+") == 0)) { uint32_t fcr; fcr = bus_read_4(sc->sc_memr, HEATHROW_FCR); From owner-svn-src-head@freebsd.org Mon Apr 30 20:18:33 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 09172FB5A3B; Mon, 30 Apr 2018 20:18:33 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AA41C7B778; Mon, 30 Apr 2018 20:18:32 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A0B6317F86; Mon, 30 Apr 2018 20:18:32 +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 w3UKIWfU006124; Mon, 30 Apr 2018 20:18:32 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UKIW0n006122; Mon, 30 Apr 2018 20:18:32 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201804302018.w3UKIW0n006122@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Mon, 30 Apr 2018 20:18:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333125 - in head/sys/x86: acpica include X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: in head/sys/x86: acpica include X-SVN-Commit-Revision: 333125 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 20:18:33 -0000 Author: kib Date: Mon Apr 30 20:18:32 2018 New Revision: 333125 URL: https://svnweb.freebsd.org/changeset/base/333125 Log: Turn off IBRS on suspend. Resume starts CPU from the init state, which clears any loaded microcode updates. As result, IBRS MSRs are no longer available, until the microcode is reloaded. I have to forcibly clear cpu_stdext_feature3, which assumes that CPUID leaf 7 reg %ebx does not report anything except Meltdown/Spectre bugs bits. If future CPUs add new bits there, hw_ibrs_recalculate() and identify_cpu1()/identify_cpu2() need to be adjusted for that. Submitted and tested by: Michael Danilov PR: 227866 Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D15236 Modified: head/sys/x86/acpica/acpi_wakeup.c head/sys/x86/include/x86_var.h Modified: head/sys/x86/acpica/acpi_wakeup.c ============================================================================== --- head/sys/x86/acpica/acpi_wakeup.c Mon Apr 30 19:37:32 2018 (r333124) +++ head/sys/x86/acpica/acpi_wakeup.c Mon Apr 30 20:18:32 2018 (r333125) @@ -209,6 +209,10 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state) { ACPI_STATUS status; struct pcb *pcb; +#ifdef __amd64__ + struct pcpu *pc; + int i; +#endif if (sc->acpi_wakeaddr == 0ul) return (-1); /* couldn't alloc wake memory */ @@ -236,6 +240,14 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state) if (!CPU_EMPTY(&suspcpus) && suspend_cpus(suspcpus) == 0) { device_printf(sc->acpi_dev, "Failed to suspend APs\n"); return (0); /* couldn't sleep */ + } +#endif +#ifdef __amd64__ + hw_ibrs_active = 0; + cpu_stdext_feature3 = 0; + CPU_FOREACH(i) { + pc = pcpu_find(i); + pc->pc_ibpb_set = 0; } #endif Modified: head/sys/x86/include/x86_var.h ============================================================================== --- head/sys/x86/include/x86_var.h Mon Apr 30 19:37:32 2018 (r333124) +++ head/sys/x86/include/x86_var.h Mon Apr 30 20:18:32 2018 (r333125) @@ -83,7 +83,8 @@ extern int _ugssel; extern int use_xsave; extern uint64_t xsave_mask; extern u_int max_apic_id; -extern int pti; +extern int pti; +extern int hw_ibrs_active; struct pcb; struct thread; From owner-svn-src-head@freebsd.org Mon Apr 30 21:28:11 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E2ABDFB761C; Mon, 30 Apr 2018 21:28:10 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8A6296B742; Mon, 30 Apr 2018 21:28:10 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8100E18AC7; Mon, 30 Apr 2018 21:28:10 +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 w3ULSAD1041009; Mon, 30 Apr 2018 21:28:10 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3ULSAAt041008; Mon, 30 Apr 2018 21:28:10 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201804302128.w3ULSAAt041008@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 30 Apr 2018 21:28:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333127 - head/sys/dev/nvme X-SVN-Group: head X-SVN-Commit-Author: mav X-SVN-Commit-Paths: head/sys/dev/nvme X-SVN-Commit-Revision: 333127 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 21:28:11 -0000 Author: mav Date: Mon Apr 30 21:28:10 2018 New Revision: 333127 URL: https://svnweb.freebsd.org/changeset/base/333127 Log: Fix use-after-free in nvme_qpair_destroy(). dma_tag_payload should not be destroyed before payload_dma_map, and seems it should be used there instead of dma_tag to match creation. Sponsored by: iXsystems, Inc. Modified: head/sys/dev/nvme/nvme_qpair.c Modified: head/sys/dev/nvme/nvme_qpair.c ============================================================================== --- head/sys/dev/nvme/nvme_qpair.c Mon Apr 30 20:29:28 2018 (r333126) +++ head/sys/dev/nvme/nvme_qpair.c Mon Apr 30 21:28:10 2018 (r333127) @@ -690,21 +690,22 @@ nvme_qpair_destroy(struct nvme_qpair *qpair) qpair->queuemem_map); } - if (qpair->dma_tag) - bus_dma_tag_destroy(qpair->dma_tag); - - if (qpair->dma_tag_payload) - bus_dma_tag_destroy(qpair->dma_tag_payload); - if (qpair->act_tr) free(qpair->act_tr, M_NVME); while (!TAILQ_EMPTY(&qpair->free_tr)) { tr = TAILQ_FIRST(&qpair->free_tr); TAILQ_REMOVE(&qpair->free_tr, tr, tailq); - bus_dmamap_destroy(qpair->dma_tag, tr->payload_dma_map); + bus_dmamap_destroy(qpair->dma_tag_payload, + tr->payload_dma_map); free(tr, M_NVME); } + + if (qpair->dma_tag) + bus_dma_tag_destroy(qpair->dma_tag); + + if (qpair->dma_tag_payload) + bus_dma_tag_destroy(qpair->dma_tag_payload); } static void From owner-svn-src-head@freebsd.org Mon Apr 30 21:47:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 29786FB7B45; Mon, 30 Apr 2018 21:47:32 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C25706FD99; Mon, 30 Apr 2018 21:47:31 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B8BF818E1C; Mon, 30 Apr 2018 21:47:31 +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 w3ULlVAG050995; Mon, 30 Apr 2018 21:47:31 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3ULlVWV050990; Mon, 30 Apr 2018 21:47:31 GMT (envelope-from np@FreeBSD.org) Message-Id: <201804302147.w3ULlVWV050990@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Mon, 30 Apr 2018 21:47:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333128 - in head/sys/dev/cxgbe: . common tom X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: in head/sys/dev/cxgbe: . common tom X-SVN-Commit-Revision: 333128 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 21:47:32 -0000 Author: np Date: Mon Apr 30 21:47:30 2018 New Revision: 333128 URL: https://svnweb.freebsd.org/changeset/base/333128 Log: cxgbe(4): Convert ACT_OPEN_RPL to a shared CPL. Reserve 3b in the 14b atid to identify the owner and use it to dispatch the CPL. This allows all CPLs that use an atid to be used as shared CPLs, although ACT_OPEN_RPL is the only one being converted in this revision. Sponsored by: Chelsio Communications Modified: head/sys/dev/cxgbe/common/t4_msg.h head/sys/dev/cxgbe/offload.h head/sys/dev/cxgbe/t4_main.c head/sys/dev/cxgbe/t4_sge.c head/sys/dev/cxgbe/tom/t4_connect.c Modified: head/sys/dev/cxgbe/common/t4_msg.h ============================================================================== --- head/sys/dev/cxgbe/common/t4_msg.h Mon Apr 30 21:28:10 2018 (r333127) +++ head/sys/dev/cxgbe/common/t4_msg.h Mon Apr 30 21:47:30 2018 (r333128) @@ -308,9 +308,14 @@ union opcode_tid { /* partitioning of TID fields that also carry a queue id */ #define S_TID_TID 0 -#define M_TID_TID 0x3fff +#define M_TID_TID 0x7ff #define V_TID_TID(x) ((x) << S_TID_TID) #define G_TID_TID(x) (((x) >> S_TID_TID) & M_TID_TID) + +#define S_TID_COOKIE 11 +#define M_TID_COOKIE 0x7 +#define V_TID_COOKIE(x) ((x) << S_TID_COOKIE) +#define G_TID_COOKIE(x) (((x) >> S_TID_COOKIE) & M_TID_COOKIE) #define S_TID_QID 14 #define M_TID_QID 0x3ff Modified: head/sys/dev/cxgbe/offload.h ============================================================================== --- head/sys/dev/cxgbe/offload.h Mon Apr 30 21:28:10 2018 (r333127) +++ head/sys/dev/cxgbe/offload.h Mon Apr 30 21:47:30 2018 (r333128) @@ -66,9 +66,10 @@ struct stid_region { }; /* - * Max # of ATIDs. The absolute HW max is 16K but we keep it lower. + * Max # of ATIDs. The absolute HW max is 14b (enough for 16K) but we reserve + * the upper 3b for use as a cookie to demux the reply. */ -#define MAX_ATIDS 8192U +#define MAX_ATIDS 2048U union aopen_entry { void *data; Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Mon Apr 30 21:28:10 2018 (r333127) +++ head/sys/dev/cxgbe/t4_main.c Mon Apr 30 21:47:30 2018 (r333128) @@ -2504,6 +2504,7 @@ alloc_atid(struct adapter *sc, void *ctx) union aopen_entry *p = t->afree; atid = p - t->atid_tab; + MPASS(atid <= M_TID_TID); t->afree = p->next; p->data = ctx; t->atids_in_use++; Modified: head/sys/dev/cxgbe/t4_sge.c ============================================================================== --- head/sys/dev/cxgbe/t4_sge.c Mon Apr 30 21:28:10 2018 (r333127) +++ head/sys/dev/cxgbe/t4_sge.c Mon Apr 30 21:47:30 2018 (r333128) @@ -287,6 +287,7 @@ fw_msg_handler_t t4_fw_msg_handler[NUM_FW6_TYPES]; cpl_handler_t t4_cpl_handler[NUM_CPL_CMDS]; cpl_handler_t set_tcb_rpl_handlers[NUM_CPL_COOKIES]; cpl_handler_t l2t_write_rpl_handlers[NUM_CPL_COOKIES]; +cpl_handler_t act_open_rpl_handlers[NUM_CPL_COOKIES]; void t4_register_an_handler(an_handler_t h) @@ -370,12 +371,26 @@ l2t_write_rpl_handler(struct sge_iq *iq, const struct return (l2t_write_rpl_handlers[cookie](iq, rss, m)); } +static int +act_open_rpl_handler(struct sge_iq *iq, const struct rss_header *rss, + struct mbuf *m) +{ + const struct cpl_act_open_rpl *cpl = (const void *)(rss + 1); + u_int cookie = G_TID_COOKIE(G_AOPEN_ATID(be32toh(cpl->atid_status))); + + MPASS(m == NULL); + MPASS(cookie != CPL_COOKIE_RESERVED); + + return (act_open_rpl_handlers[cookie](iq, rss, m)); +} + static void t4_init_shared_cpl_handlers(void) { t4_register_cpl_handler(CPL_SET_TCB_RPL, set_tcb_rpl_handler); t4_register_cpl_handler(CPL_L2T_WRITE_RPL, l2t_write_rpl_handler); + t4_register_cpl_handler(CPL_ACT_OPEN_RPL, act_open_rpl_handler); } void @@ -394,6 +409,9 @@ t4_register_shared_cpl_handler(int opcode, cpl_handler break; case CPL_L2T_WRITE_RPL: loc = (uintptr_t *)&l2t_write_rpl_handlers[cookie]; + break; + case CPL_ACT_OPEN_RPL: + loc = (uintptr_t *)&act_open_rpl_handlers[cookie]; break; default: MPASS(0); Modified: head/sys/dev/cxgbe/tom/t4_connect.c ============================================================================== --- head/sys/dev/cxgbe/tom/t4_connect.c Mon Apr 30 21:28:10 2018 (r333127) +++ head/sys/dev/cxgbe/tom/t4_connect.c Mon Apr 30 21:47:30 2018 (r333128) @@ -281,7 +281,8 @@ t4_init_connect_cpl_handlers(void) { t4_register_cpl_handler(CPL_ACT_ESTABLISH, do_act_establish); - t4_register_cpl_handler(CPL_ACT_OPEN_RPL, do_act_open_rpl); + t4_register_shared_cpl_handler(CPL_ACT_OPEN_RPL, do_act_open_rpl, + CPL_COOKIE_TOM); } void @@ -289,7 +290,7 @@ t4_uninit_connect_cpl_handlers(void) { t4_register_cpl_handler(CPL_ACT_ESTABLISH, NULL); - t4_register_cpl_handler(CPL_ACT_OPEN_RPL, NULL); + t4_register_shared_cpl_handler(CPL_ACT_OPEN_RPL, NULL, CPL_COOKIE_TOM); } #define DONT_OFFLOAD_ACTIVE_OPEN(x) do { \ @@ -418,7 +419,8 @@ t4_connect(struct toedev *tod, struct socket *so, stru else rscale = 0; mtu_idx = find_best_mtu_idx(sc, &inp->inp_inc, &settings); - qid_atid = V_TID_QID(toep->ofld_rxq->iq.abs_id) | V_TID_TID(toep->tid); + qid_atid = V_TID_QID(toep->ofld_rxq->iq.abs_id) | V_TID_TID(toep->tid) | + V_TID_COOKIE(CPL_COOKIE_TOM); if (isipv6) { struct cpl_act_open_req6 *cpl = wrtod(wr); From owner-svn-src-head@freebsd.org Mon Apr 30 23:05:58 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B9E05FB8FAA; Mon, 30 Apr 2018 23:05:58 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5A91E7FB59; Mon, 30 Apr 2018 23:05:58 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4FABE19B89; Mon, 30 Apr 2018 23:05:58 +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 w3UN5wxC090695; Mon, 30 Apr 2018 23:05:58 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UN5weM090694; Mon, 30 Apr 2018 23:05:58 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201804302305.w3UN5weM090694@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Mon, 30 Apr 2018 23:05:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333130 - head/sys/dev/nvme X-SVN-Group: head X-SVN-Commit-Author: mav X-SVN-Commit-Paths: head/sys/dev/nvme X-SVN-Commit-Revision: 333130 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 23:05:59 -0000 Author: mav Date: Mon Apr 30 23:05:57 2018 New Revision: 333130 URL: https://svnweb.freebsd.org/changeset/base/333130 Log: Improve nvme(4) attach/detach sequences. This change allows clean device detach on attach failures and driver unload, while previous code tried to talk to already shut down controller, or even accessed resources failed to allocate. Sponsored by: iXsystems, Inc. Modified: head/sys/dev/nvme/nvme_ctrlr.c Modified: head/sys/dev/nvme/nvme_ctrlr.c ============================================================================== --- head/sys/dev/nvme/nvme_ctrlr.c Mon Apr 30 21:56:08 2018 (r333129) +++ head/sys/dev/nvme/nvme_ctrlr.c Mon Apr 30 23:05:57 2018 (r333130) @@ -1203,6 +1203,7 @@ nvme_ctrlr_setup_interrupts(struct nvme_controller *ct int nvme_ctrlr_construct(struct nvme_controller *ctrlr, device_t dev) { + struct make_dev_args md_args; uint32_t cap_lo; uint32_t cap_hi; uint8_t to; @@ -1254,14 +1255,6 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, de if (nvme_ctrlr_construct_admin_qpair(ctrlr) != 0) return (ENXIO); - ctrlr->cdev = make_dev(&nvme_ctrlr_cdevsw, device_get_unit(dev), - UID_ROOT, GID_WHEEL, 0600, "nvme%d", device_get_unit(dev)); - - if (ctrlr->cdev == NULL) - return (ENXIO); - - ctrlr->cdev->si_drv1 = (void *)ctrlr; - ctrlr->taskqueue = taskqueue_create("nvme_taskq", M_WAITOK, taskqueue_thread_enqueue, &ctrlr->taskqueue); taskqueue_start_threads(&ctrlr->taskqueue, 1, PI_DISK, "nvme taskq"); @@ -1270,11 +1263,22 @@ nvme_ctrlr_construct(struct nvme_controller *ctrlr, de ctrlr->is_initialized = 0; ctrlr->notification_sent = 0; TASK_INIT(&ctrlr->reset_task, 0, nvme_ctrlr_reset_task, ctrlr); - TASK_INIT(&ctrlr->fail_req_task, 0, nvme_ctrlr_fail_req_task, ctrlr); STAILQ_INIT(&ctrlr->fail_req); ctrlr->is_failed = FALSE; + make_dev_args_init(&md_args); + md_args.mda_devsw = &nvme_ctrlr_cdevsw; + md_args.mda_uid = UID_ROOT; + md_args.mda_gid = GID_WHEEL; + md_args.mda_mode = 0600; + md_args.mda_unit = device_get_unit(dev); + md_args.mda_si_drv1 = (void *)ctrlr; + status = make_dev_s(&md_args, &ctrlr->cdev, "nvme%d", + device_get_unit(dev)); + if (status != 0) + return (ENXIO); + return (0); } @@ -1283,18 +1287,9 @@ nvme_ctrlr_destruct(struct nvme_controller *ctrlr, dev { int i; - /* - * Notify the controller of a shutdown, even though this is due to - * a driver unload, not a system shutdown (this path is not invoked - * during shutdown). This ensures the controller receives a - * shutdown notification in case the system is shutdown before - * reloading the driver. - */ - nvme_ctrlr_shutdown(ctrlr); + if (ctrlr->resource == NULL) + goto nores; - nvme_ctrlr_disable(ctrlr); - taskqueue_free(ctrlr->taskqueue); - for (i = 0; i < NVME_MAX_NAMESPACES; i++) nvme_ns_destruct(&ctrlr->ns[i]); @@ -1305,21 +1300,24 @@ nvme_ctrlr_destruct(struct nvme_controller *ctrlr, dev nvme_ctrlr_destroy_qpair(ctrlr, &ctrlr->ioq[i]); nvme_io_qpair_destroy(&ctrlr->ioq[i]); } - free(ctrlr->ioq, M_NVME); nvme_admin_qpair_destroy(&ctrlr->adminq); - if (ctrlr->resource != NULL) { - bus_release_resource(dev, SYS_RES_MEMORY, - ctrlr->resource_id, ctrlr->resource); - } + /* + * Notify the controller of a shutdown, even though this is due to + * a driver unload, not a system shutdown (this path is not invoked + * during shutdown). This ensures the controller receives a + * shutdown notification in case the system is shutdown before + * reloading the driver. + */ + nvme_ctrlr_shutdown(ctrlr); - if (ctrlr->bar4_resource != NULL) { - bus_release_resource(dev, SYS_RES_MEMORY, - ctrlr->bar4_resource_id, ctrlr->bar4_resource); - } + nvme_ctrlr_disable(ctrlr); + if (ctrlr->taskqueue) + taskqueue_free(ctrlr->taskqueue); + if (ctrlr->tag) bus_teardown_intr(ctrlr->dev, ctrlr->res, ctrlr->tag); @@ -1329,6 +1327,17 @@ nvme_ctrlr_destruct(struct nvme_controller *ctrlr, dev if (ctrlr->msix_enabled) pci_release_msi(dev); + + if (ctrlr->bar4_resource != NULL) { + bus_release_resource(dev, SYS_RES_MEMORY, + ctrlr->bar4_resource_id, ctrlr->bar4_resource); + } + + bus_release_resource(dev, SYS_RES_MEMORY, + ctrlr->resource_id, ctrlr->resource); + +nores: + mtx_destroy(&ctrlr->lock); } void From owner-svn-src-head@freebsd.org Mon Apr 30 23:53:28 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2D107FB9989; Mon, 30 Apr 2018 23:53:28 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D59A06A962; Mon, 30 Apr 2018 23:53:27 +0000 (UTC) (envelope-from gallatin@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D07D81A35C; Mon, 30 Apr 2018 23:53:27 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w3UNrRmU015490; Mon, 30 Apr 2018 23:53:27 GMT (envelope-from gallatin@FreeBSD.org) Received: (from gallatin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w3UNrREN015489; Mon, 30 Apr 2018 23:53:27 GMT (envelope-from gallatin@FreeBSD.org) Message-Id: <201804302353.w3UNrREN015489@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gallatin set sender to gallatin@FreeBSD.org using -f From: Andrew Gallatin Date: Mon, 30 Apr 2018 23:53:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333131 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: gallatin X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 333131 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 30 Apr 2018 23:53:28 -0000 Author: gallatin Date: Mon Apr 30 23:53:27 2018 New Revision: 333131 URL: https://svnweb.freebsd.org/changeset/base/333131 Log: Fix iflib_encap() EFBIG handling bugs 1) Don't give up if m_collapse() fails. Rather than giving up, try m_defrag() immediately. 2) Fix a leak where, if the NIC driver rejected the defrag'ed chain as having too many segments, we would fail to free the chain. Reviewed by: Matthew Macy (this version of patch) Submitted by: Matthew Macy (early version of leak fix) Modified: head/sys/net/iflib.c Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Mon Apr 30 23:05:57 2018 (r333130) +++ head/sys/net/iflib.c Mon Apr 30 23:53:27 2018 (r333131) @@ -3244,8 +3244,12 @@ defrag: switch (err) { case EFBIG: /* try collapse once and defrag once */ - if (remap == 0) + if (remap == 0) { m_head = m_collapse(*m_headp, M_NOWAIT, max_segs); + /* try defrag if collapsing fails */ + if (m_head == NULL) + remap++; + } if (remap == 1) m_head = m_defrag(*m_headp, M_NOWAIT); remap++; @@ -3333,13 +3337,18 @@ defrag: */ txq->ift_pidx = pi.ipi_new_pidx; txq->ift_npending += pi.ipi_ndescs; - } else if (__predict_false(err == EFBIG && remap < 2)) { + } else { *m_headp = m_head = iflib_remove_mbuf(txq); - remap = 1; - txq->ift_txd_encap_efbig++; - goto defrag; - } else + if (err == EFBIG) { + txq->ift_txd_encap_efbig++; + if (remap < 2) { + remap = 1; + goto defrag; + } + } DBG_COUNTER_INC(encap_txd_encap_fail); + goto defrag_failed; + } return (err); defrag_failed: From owner-svn-src-head@freebsd.org Tue May 1 00:36:57 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 06D70FBA848; Tue, 1 May 2018 00:36:57 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A4609731C8; Tue, 1 May 2018 00:36:56 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 98EB31A9CB; Tue, 1 May 2018 00:36:56 +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 w410auTU035906; Tue, 1 May 2018 00:36:56 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w410auKV035905; Tue, 1 May 2018 00:36:56 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201805010036.w410auKV035905@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Tue, 1 May 2018 00:36:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333132 - head/share/man/man4 X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/share/man/man4 X-SVN-Commit-Revision: 333132 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 00:36:57 -0000 Author: emaste Date: Tue May 1 00:36:56 2018 New Revision: 333132 URL: https://svnweb.freebsd.org/changeset/base/333132 Log: Install smartpqi.4 only on amd64, as with the driver Sponsored by: The FreeBSD Foundation Modified: head/share/man/man4/Makefile Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Mon Apr 30 23:53:27 2018 (r333131) +++ head/share/man/man4/Makefile Tue May 1 00:36:56 2018 (r333132) @@ -479,7 +479,7 @@ MAN= aac.4 \ sio.4 \ sis.4 \ sk.4 \ - smartpqi.4 \ + ${_smartpqi.4} \ smb.4 \ smbus.4 \ smp.4 \ @@ -879,6 +879,7 @@ _qlxgb.4= qlxgb.4 _qlxgbe.4= qlxgbe.4 _qlnxe.4= qlnxe.4 _sfxge.4= sfxge.4 +_smartpqi.4= smartpqi.4 MLINKS+=qlxge.4 if_qlxge.4 MLINKS+=qlxgb.4 if_qlxgb.4 From owner-svn-src-head@freebsd.org Tue May 1 00:53:47 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1968DFBAD32; Tue, 1 May 2018 00:53:47 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BA9CE7544A; Tue, 1 May 2018 00:53:46 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B58C51AD2A; Tue, 1 May 2018 00:53:46 +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 w410rk6M046228; Tue, 1 May 2018 00:53:46 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w410rkGi046226; Tue, 1 May 2018 00:53:46 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201805010053.w410rkGi046226@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Tue, 1 May 2018 00:53:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333133 - head/usr.sbin/pwd_mkdb X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/usr.sbin/pwd_mkdb X-SVN-Commit-Revision: 333133 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 00:53:47 -0000 Author: emaste Date: Tue May 1 00:53:46 2018 New Revision: 333133 URL: https://svnweb.freebsd.org/changeset/base/333133 Log: pwd_mkdb: retire legacy v3 db support (-l option) pwd_mkdb has emitted v4 password database records since 2003 (r113596) in addition to v3, and as of r283981 by default it emitted only v4. As described in r283981, retire the -l legacy option. The -B and -L options were originally added to set the endianness of v3 records emitted by pwd_mkdb, but they also set the db hash endiannes and so have been retained temporarily. Announced on the FreeBSD-Current and FreeBSD-Stable lists. In stable/11 the man page contains a deprecation notice, and pwd_mkdb will emit a deprecation notice if the -l option is specified. Reviewed by: delphij, lidl, rgrimes Relnotes: Yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D15144 Modified: head/usr.sbin/pwd_mkdb/pwd_mkdb.8 head/usr.sbin/pwd_mkdb/pwd_mkdb.c Modified: head/usr.sbin/pwd_mkdb/pwd_mkdb.8 ============================================================================== --- head/usr.sbin/pwd_mkdb/pwd_mkdb.8 Tue May 1 00:36:56 2018 (r333132) +++ head/usr.sbin/pwd_mkdb/pwd_mkdb.8 Tue May 1 00:53:46 2018 (r333133) @@ -28,7 +28,7 @@ .\" @(#)pwd_mkdb.8 8.1 (Berkeley) 6/6/93 .\" $FreeBSD$ .\" -.Dd April 22, 2018 +.Dd April 30, 2018 .Dt PWD_MKDB 8 .Os .Sh NAME @@ -36,7 +36,7 @@ .Nd "generate the password databases" .Sh SYNOPSIS .Nm -.Op Fl BCilLNp +.Op Fl BCiLNp .Op Fl d Ar directory .Op Fl s Ar cachesize .Op Fl u Ar username @@ -112,31 +112,8 @@ encrypted password and the insecure version has an ast The databases are used by the C library password routines (see .Xr getpwent 3 ) . .Pp -By default, -the -.Nm -utility generates new, -machine independent format -.Pq v4 -entries only. -For compatibility with -.Fx 5.0 -and earlier releases, -the -.Fl l -option may be specified, -which enables generation of legacy format -.Pq v3 -entries. -The legacy format entries are endianness dependent. -The -.Fl l -option is deprecated and is not present in -.Fx 12.0 -and later. -.Pp -The following options may be specified and will affect the -generation of legacy entries. +The following options affected the generation of legacy entries, +and are now deprecated. .Bl -tag -width flag .It Fl B Store data in big-endian format. Modified: head/usr.sbin/pwd_mkdb/pwd_mkdb.c ============================================================================== --- head/usr.sbin/pwd_mkdb/pwd_mkdb.c Tue May 1 00:36:56 2018 (r333132) +++ head/usr.sbin/pwd_mkdb/pwd_mkdb.c Tue May 1 00:53:46 2018 (r333133) @@ -115,26 +115,25 @@ main(int argc, char *argv[]) char sbuf2[MAXPATHLEN]; char *username; u_int method, methoduid; - int Cflag, dflag, iflag, lflag; + int Cflag, dflag, iflag; int nblock = 0; - iflag = dflag = Cflag = lflag = 0; + iflag = dflag = Cflag = 0; strcpy(prefix, _PATH_PWD); makeold = 0; username = NULL; oldfp = NULL; - while ((ch = getopt(argc, argv, "BCLlNd:ips:u:v")) != -1) + while ((ch = getopt(argc, argv, "BCLNd:ips:u:v")) != -1) switch(ch) { case 'B': /* big-endian output */ + warnx("endiannes options (-B/-L) are deprecated"); openinfo.lorder = BIG_ENDIAN; break; case 'C': /* verify only */ Cflag = 1; break; - case 'l': /* generate legacy entries */ - lflag = 1; - break; case 'L': /* little-endian output */ + warnx("endiannes options (-B/-L) are deprecated"); openinfo.lorder = LITTLE_ENDIAN; break; case 'N': /* do not wait for lock */ @@ -166,8 +165,6 @@ main(int argc, char *argv[]) if (argc != 1 || (username && (*username == '+' || *username == '-'))) usage(); - if (lflag) - warnx("legacy (v3) database format support is deprecated"); /* * This could be changed to allow the user to interrupt. @@ -472,98 +469,6 @@ main(int argc, char *argv[]) if ((sdp->put)(sdp, &key, &sdata, method) == -1) error("put"); } - - if (lflag) { - /* Create insecure data. (legacy version) */ - p = buf; - COMPACT(pwd.pw_name); - COMPACT("*"); - LSCALAR(pwd.pw_uid); - LSCALAR(pwd.pw_gid); - LSCALAR(pwd.pw_change); - COMPACT(pwd.pw_class); - COMPACT(pwd.pw_gecos); - COMPACT(pwd.pw_dir); - COMPACT(pwd.pw_shell); - LSCALAR(pwd.pw_expire); - LSCALAR(pwd.pw_fields); - data.size = p - buf; - - /* Create secure data. (legacy version) */ - p = sbuf; - COMPACT(pwd.pw_name); - COMPACT(pwd.pw_passwd); - LSCALAR(pwd.pw_uid); - LSCALAR(pwd.pw_gid); - LSCALAR(pwd.pw_change); - COMPACT(pwd.pw_class); - COMPACT(pwd.pw_gecos); - COMPACT(pwd.pw_dir); - COMPACT(pwd.pw_shell); - LSCALAR(pwd.pw_expire); - LSCALAR(pwd.pw_fields); - sdata.size = p - sbuf; - - /* Store insecure by name. */ - tbuf[0] = LEGACY_VERSION(_PW_KEYBYNAME); - len = strlen(pwd.pw_name); - memmove(tbuf + 1, pwd.pw_name, len); - key.size = len + 1; - if ((dp->put)(dp, &key, &data, method) == -1) - error("put"); - - /* Store insecure by number. */ - tbuf[0] = LEGACY_VERSION(_PW_KEYBYNUM); - store = HTOL(cnt); - memmove(tbuf + 1, &store, sizeof(store)); - key.size = sizeof(store) + 1; - if ((dp->put)(dp, &key, &data, method) == -1) - error("put"); - - /* Store insecure by uid. */ - tbuf[0] = LEGACY_VERSION(_PW_KEYBYUID); - store = HTOL(pwd.pw_uid); - memmove(tbuf + 1, &store, sizeof(store)); - key.size = sizeof(store) + 1; - if ((dp->put)(dp, &key, &data, methoduid) == -1) - error("put"); - - /* Store secure by name. */ - tbuf[0] = LEGACY_VERSION(_PW_KEYBYNAME); - len = strlen(pwd.pw_name); - memmove(tbuf + 1, pwd.pw_name, len); - key.size = len + 1; - if ((sdp->put)(sdp, &key, &sdata, method) == -1) - error("put"); - - /* Store secure by number. */ - tbuf[0] = LEGACY_VERSION(_PW_KEYBYNUM); - store = HTOL(cnt); - memmove(tbuf + 1, &store, sizeof(store)); - key.size = sizeof(store) + 1; - if ((sdp->put)(sdp, &key, &sdata, method) == -1) - error("put"); - - /* Store secure by uid. */ - tbuf[0] = LEGACY_VERSION(_PW_KEYBYUID); - store = HTOL(pwd.pw_uid); - memmove(tbuf + 1, &store, sizeof(store)); - key.size = sizeof(store) + 1; - if ((sdp->put)(sdp, &key, &sdata, methoduid) == -1) - error("put"); - - /* Store insecure and secure special plus and special minus */ - if (pwd.pw_name[0] == '+' || pwd.pw_name[0] == '-') { - tbuf[0] = LEGACY_VERSION(_PW_KEYYPBYNUM); - store = HTOL(ypcnt); - memmove(tbuf + 1, &store, sizeof(store)); - key.size = sizeof(store) + 1; - if ((dp->put)(dp, &key, &data, method) == -1) - error("put"); - if ((sdp->put)(sdp, &key, &sdata, method) == -1) - error("put"); - } - } } /* Create original format password file entry */ if (is_comment && makeold){ /* copy comments */ @@ -593,14 +498,6 @@ main(int argc, char *argv[]) error("put"); if ((sdp->put)(sdp, &key, &data, method) == -1) error("put"); - if (lflag) { - tbuf[0] = LEGACY_VERSION(_PW_KEYYPENABLED); - key.size = 1; - if ((dp->put)(dp, &key, &data, method) == -1) - error("put"); - if ((sdp->put)(sdp, &key, &data, method) == -1) - error("put"); - } } if ((dp->close)(dp) == -1) From owner-svn-src-head@freebsd.org Tue May 1 04:06:59 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A91F4FC4096; Tue, 1 May 2018 04:06:59 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5B3797FE1A; Tue, 1 May 2018 04:06:59 +0000 (UTC) (envelope-from nwhitehorn@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 550121CF42; Tue, 1 May 2018 04:06:59 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w4146xRc041838; Tue, 1 May 2018 04:06:59 GMT (envelope-from nwhitehorn@FreeBSD.org) Received: (from nwhitehorn@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4146xEv041837; Tue, 1 May 2018 04:06:59 GMT (envelope-from nwhitehorn@FreeBSD.org) Message-Id: <201805010406.w4146xEv041837@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: nwhitehorn set sender to nwhitehorn@FreeBSD.org using -f From: Nathan Whitehorn Date: Tue, 1 May 2018 04:06:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333134 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: nwhitehorn X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 333134 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 04:06:59 -0000 Author: nwhitehorn Date: Tue May 1 04:06:59 2018 New Revision: 333134 URL: https://svnweb.freebsd.org/changeset/base/333134 Log: Report the kernel base address properly in kldstat when using PowerPC kernels loaded at addresses other than their link address. Modified: head/sys/kern/link_elf.c Modified: head/sys/kern/link_elf.c ============================================================================== --- head/sys/kern/link_elf.c Tue May 1 00:53:46 2018 (r333133) +++ head/sys/kern/link_elf.c Tue May 1 04:06:59 2018 (r333134) @@ -383,7 +383,7 @@ link_elf_link_common_finish(linker_file_t lf) return (0); } -extern vm_offset_t __startkernel; +extern vm_offset_t __startkernel, __endkernel; static void link_elf_init(void* arg) @@ -424,8 +424,13 @@ link_elf_init(void* arg) if (dp != NULL) parse_dynamic(ef); +#ifdef __powerpc__ + linker_kernel_file->address = (caddr_t)__startkernel; + linker_kernel_file->size = (intptr_t)(__endkernel - __startkernel); +#else linker_kernel_file->address += KERNBASE; linker_kernel_file->size = -(intptr_t)linker_kernel_file->address; +#endif if (modptr != NULL) { ef->modptr = modptr; From owner-svn-src-head@freebsd.org Tue May 1 04:31:18 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0CFF2FC49A8; Tue, 1 May 2018 04:31:18 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B2A0985D0E; Tue, 1 May 2018 04:31:17 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id ABEA71D436; Tue, 1 May 2018 04:31:17 +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 w414VHq9054091; Tue, 1 May 2018 04:31:17 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w414VHnE054086; Tue, 1 May 2018 04:31:17 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201805010431.w414VHnE054086@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Tue, 1 May 2018 04:31:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333135 - in head/sys/powerpc: booke mpc85xx X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: in head/sys/powerpc: booke mpc85xx X-SVN-Commit-Revision: 333135 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 04:31:18 -0000 Author: jhibbits Date: Tue May 1 04:31:17 2018 New Revision: 333135 URL: https://svnweb.freebsd.org/changeset/base/333135 Log: Remove dead errata fixup code This code caused more problems than it should have fixed (boot failures) on the machines I tested, so has been commented out for a while now. Remove it, and assume the errata fixups were done by the bootloader where they belong. Modified: head/sys/powerpc/booke/locore.S head/sys/powerpc/mpc85xx/mpc85xx.c head/sys/powerpc/mpc85xx/mpc85xx.h head/sys/powerpc/mpc85xx/platform_mpc85xx.c Modified: head/sys/powerpc/booke/locore.S ============================================================================== --- head/sys/powerpc/booke/locore.S Tue May 1 04:06:59 2018 (r333134) +++ head/sys/powerpc/booke/locore.S Tue May 1 04:31:17 2018 (r333135) @@ -906,68 +906,6 @@ ENTRY(bpred_enable) isync blr -ENTRY(dataloss_erratum_access) - /* Lock two cache lines into I-Cache */ - sync - mfspr %r11, SPR_L1CSR1 - rlwinm %r11, %r11, 0, ~L1CSR1_ICUL - sync - isync - mtspr SPR_L1CSR1, %r11 - isync - - lis %r8, 2f@h - ori %r8, %r8, 2f@l - icbtls 0, 0, %r8 - addi %r9, %r8, 64 - - sync - mfspr %r11, SPR_L1CSR1 -3: andi. %r11, %r11, L1CSR1_ICUL - bne 3b - - icbtls 0, 0, %r9 - - sync - mfspr %r11, SPR_L1CSR1 -3: andi. %r11, %r11, L1CSR1_ICUL - bne 3b - - b 2f - .align 6 - /* Inside a locked cacheline, wait a while, write, then wait a while */ -2: sync - - mfspr %r5, TBR_TBL -4: addis %r11, %r5, 0x100000@h /* wait around one million timebase ticks */ - mfspr %r5, TBR_TBL - subf. %r5, %r5, %r11 - bgt 4b - - stw %r4, 0(%r3) - - mfspr %r5, TBR_TBL -4: addis %r11, %r5, 0x100000@h /* wait around one million timebase ticks */ - mfspr %r5, TBR_TBL - subf. %r5, %r5, %r11 - bgt 4b - - sync - - /* - * Fill out the rest of this cache line and the next with nops, - * to ensure that nothing outside the locked area will be - * fetched due to a branch. - */ - .rept 19 - nop - .endr - - icblc 0, 0, %r8 - icblc 0, 0, %r9 - - blr - /* * XXX: This should be moved to a shared AIM/booke asm file, if one ever is * created. Modified: head/sys/powerpc/mpc85xx/mpc85xx.c ============================================================================== --- head/sys/powerpc/mpc85xx/mpc85xx.c Tue May 1 04:06:59 2018 (r333134) +++ head/sys/powerpc/mpc85xx/mpc85xx.c Tue May 1 04:31:17 2018 (r333135) @@ -329,120 +329,6 @@ mpc85xx_is_qoriq(void) return (0); } -static void -mpc85xx_dataloss_erratum_spr976(void) -{ - uint32_t svr = SVR_VER(mfspr(SPR_SVR)); - - /* Ignore whether it's the E variant */ - svr &= ~0x8; - - if (svr != SVR_P3041 && svr != SVR_P4040 && - svr != SVR_P4080 && svr != SVR_P5020) - return; - - mb(); - isync(); - mtspr(976, (mfspr(976) & ~0x1f8) | 0x48); - isync(); -} - -static vm_offset_t -mpc85xx_map_dcsr(void) -{ - phandle_t node; - u_long b, s; - int err; - - /* - * Try to access the dcsr node directly i.e. through /aliases/. - */ - if ((node = OF_finddevice("dcsr")) != -1) - if (fdt_is_compatible_strict(node, "fsl,dcsr")) - goto moveon; - /* - * Find the node the long way. - */ - if ((node = OF_finddevice("/")) == -1) - return (0); - - if ((node = ofw_bus_find_compatible(node, "fsl,dcsr")) == 0) - return (0); - -moveon: - err = fdt_get_range(node, 0, &b, &s); - - if (err != 0) - return (0); - - law_enable(OCP85XX_TGTIF_DCSR, b, 0x400000); - return pmap_early_io_map(b, 0x400000); -} - - - -void -mpc85xx_fix_errata(vm_offset_t va_ccsr) -{ - uint32_t svr = SVR_VER(mfspr(SPR_SVR)); - vm_offset_t va_dcsr; - - /* Ignore whether it's the E variant */ - svr &= ~0x8; - - if (svr != SVR_P3041 && svr != SVR_P4040 && - svr != SVR_P4080 && svr != SVR_P5020) - return; - - if (mfmsr() & PSL_EE) - return; - - /* - * dcsr region need to be mapped thus patch can refer to. - * Align dcsr right after ccsbar. - */ - va_dcsr = mpc85xx_map_dcsr(); - if (va_dcsr == 0) - goto err; - - /* - * As A004510 errata specify, special purpose register 976 - * SPR976[56:60] = 6'b001001 must be set. e500mc core reference manual - * does not document SPR976 register. - */ - mpc85xx_dataloss_erratum_spr976(); - - /* - * Specific settings in the CCF and core platform cache (CPC) - * are required to reconfigure the CoreNet coherency fabric. - * The register settings that should be updated are described - * in errata and relay on base address, offset and updated value. - * Special conditions must be used to update these registers correctly. - */ - dataloss_erratum_access(va_dcsr + 0xb0e08, 0xe0201800); - dataloss_erratum_access(va_dcsr + 0xb0e18, 0xe0201800); - dataloss_erratum_access(va_dcsr + 0xb0e38, 0xe0400000); - dataloss_erratum_access(va_dcsr + 0xb0008, 0x00900000); - dataloss_erratum_access(va_dcsr + 0xb0e40, 0xe00a0000); - - switch (svr) { - case SVR_P5020: - dataloss_erratum_access(va_ccsr + 0x18600, 0xc0000000); - break; - case SVR_P4040: - case SVR_P4080: - dataloss_erratum_access(va_ccsr + 0x18600, 0xff000000); - break; - case SVR_P3041: - dataloss_erratum_access(va_ccsr + 0x18600, 0xf0000000); - } - dataloss_erratum_access(va_ccsr + 0x10f00, 0x415e5000); - dataloss_erratum_access(va_ccsr + 0x11f00, 0x415e5000); - -err: - return; -} - uint32_t mpc85xx_get_platform_clock(void) { Modified: head/sys/powerpc/mpc85xx/mpc85xx.h ============================================================================== --- head/sys/powerpc/mpc85xx/mpc85xx.h Tue May 1 04:06:59 2018 (r333134) +++ head/sys/powerpc/mpc85xx/mpc85xx.h Tue May 1 04:31:17 2018 (r333135) @@ -170,8 +170,6 @@ DECLARE_CLASS(mpc85xx_platform); int mpc85xx_attach(platform_t); void mpc85xx_enable_l3_cache(void); -void mpc85xx_fix_errata(vm_offset_t); -void dataloss_erratum_access(vm_offset_t, uint32_t); int mpc85xx_is_qoriq(void); uint32_t mpc85xx_get_platform_clock(void); uint32_t mpc85xx_get_system_clock(void); Modified: head/sys/powerpc/mpc85xx/platform_mpc85xx.c ============================================================================== --- head/sys/powerpc/mpc85xx/platform_mpc85xx.c Tue May 1 04:06:59 2018 (r333134) +++ head/sys/powerpc/mpc85xx/platform_mpc85xx.c Tue May 1 04:31:17 2018 (r333135) @@ -199,9 +199,6 @@ mpc85xx_attach(platform_t plat) ccsrbar_pa = ccsrbar; ccsrbar_size = ccsrsize; -#if 0 - mpc85xx_fix_errata(ccsrbar_va); -#endif mpc85xx_enable_l3_cache(); return (0); From owner-svn-src-head@freebsd.org Tue May 1 08:03:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 883F7FB545F; Tue, 1 May 2018 08:03:13 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 37D147FF10; Tue, 1 May 2018 08:03:13 +0000 (UTC) (envelope-from wulf@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 301981F6CE; Tue, 1 May 2018 08:03:13 +0000 (UTC) (envelope-from wulf@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w4183DpW060831; Tue, 1 May 2018 08:03:13 GMT (envelope-from wulf@FreeBSD.org) Received: (from wulf@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4183C9U060829; Tue, 1 May 2018 08:03:12 GMT (envelope-from wulf@FreeBSD.org) Message-Id: <201805010803.w4183C9U060829@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: wulf set sender to wulf@FreeBSD.org using -f From: Vladimir Kondratyev Date: Tue, 1 May 2018 08:03:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333136 - head/lib/libbluetooth X-SVN-Group: head X-SVN-Commit-Author: wulf X-SVN-Commit-Paths: head/lib/libbluetooth X-SVN-Commit-Revision: 333136 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 08:03:13 -0000 Author: wulf Date: Tue May 1 08:03:12 2018 New Revision: 333136 URL: https://svnweb.freebsd.org/changeset/base/333136 Log: Fix bthidd build with GCC 4.2 after r333110 Rename inlined function parameter to avoid shadowing of devname libc function declared in stdlib.h header Reported by: lwhsu Tested by: lwhsu Modified: head/lib/libbluetooth/bluetooth.3 head/lib/libbluetooth/bluetooth.h Modified: head/lib/libbluetooth/bluetooth.3 ============================================================================== --- head/lib/libbluetooth/bluetooth.3 Tue May 1 04:31:17 2018 (r333135) +++ head/lib/libbluetooth/bluetooth.3 Tue May 1 08:03:12 2018 (r333136) @@ -25,7 +25,7 @@ .\" $Id: bluetooth.3,v 1.5 2003/05/20 23:04:30 max Exp $ .\" $FreeBSD$ .\" -.Dd April 30, 2018 +.Dd May 1, 2018 .Dt BLUETOOTH 3 .Os .Sh NAME @@ -132,7 +132,7 @@ .Fn bt_devremote_name "char const *devname" "const bdaddr_t *remote" \ "time_t to" "uint16_t clk_off" "uint8_t ps_rep_mode" "uint8_t ps_mode" .Ft char * -.Fn bt_devremote_name_gen "char const *devname" "const bdaddr_t *remote" +.Fn bt_devremote_name_gen "char const *btooth_devname" "const bdaddr_t *remote" .Ft int .Fn bdaddr_same "const bdaddr_t *a" "const bdaddr_t *b" .Ft int Modified: head/lib/libbluetooth/bluetooth.h ============================================================================== --- head/lib/libbluetooth/bluetooth.h Tue May 1 04:31:17 2018 (r333135) +++ head/lib/libbluetooth/bluetooth.h Tue May 1 08:03:12 2018 (r333136) @@ -189,9 +189,9 @@ int bt_devinfo (struct bt_devinfo *di); int bt_devenum (bt_devenum_cb_t cb, void *arg); static __inline char * -bt_devremote_name_gen(char const *devname, const bdaddr_t *remote) +bt_devremote_name_gen(char const *btooth_devname, const bdaddr_t *remote) { - return (bt_devremote_name(devname, remote, 0, 0x0000, + return (bt_devremote_name(btooth_devname, remote, 0, 0x0000, NG_HCI_SCAN_REP_MODE0, NG_HCI_MANDATORY_PAGE_SCAN_MODE)); } From owner-svn-src-head@freebsd.org Tue May 1 12:58:02 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0942FFAB138; Tue, 1 May 2018 12:58:02 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A3AD07EE0F; Tue, 1 May 2018 12:58:01 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8FB7822502; Tue, 1 May 2018 12:58:01 +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 w41Cw1DY005527; Tue, 1 May 2018 12:58:01 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41Cw1su005525; Tue, 1 May 2018 12:58:01 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201805011258.w41Cw1su005525@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Tue, 1 May 2018 12:58:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333137 - in head: share/man/man4 sys/dev/ixgb X-SVN-Group: head X-SVN-Commit-Author: sbruno X-SVN-Commit-Paths: in head: share/man/man4 sys/dev/ixgb X-SVN-Commit-Revision: 333137 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 12:58:02 -0000 Author: sbruno Date: Tue May 1 12:58:01 2018 New Revision: 333137 URL: https://svnweb.freebsd.org/changeset/base/333137 Log: ixgb(4): Add deprecation notice for this old and busted 10GE adapter. This is a prequisite before we remove the driver from -current. Reviewed by: emaste kbowling imp Relnotes: yes Differential Revision: https://reviews.freebsd.org/D15244 Modified: head/share/man/man4/ixgb.4 head/sys/dev/ixgb/if_ixgb.c Modified: head/share/man/man4/ixgb.4 ============================================================================== --- head/share/man/man4/ixgb.4 Tue May 1 08:03:12 2018 (r333136) +++ head/share/man/man4/ixgb.4 Tue May 1 12:58:01 2018 (r333137) @@ -31,7 +31,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 18, 2006 +.Dd April 30, 2018 .Dt IXGB 4 .Os .Sh NAME @@ -51,6 +51,12 @@ module at boot time, place the following line in .Bd -literal -offset indent if_ixgb_load="YES" .Ed +.Sh DEPRECATION NOTICE +The +.Nm +driver is not present in +.Fx 12.0 +and later. .Sh DESCRIPTION The .Nm Modified: head/sys/dev/ixgb/if_ixgb.c ============================================================================== --- head/sys/dev/ixgb/if_ixgb.c Tue May 1 08:03:12 2018 (r333136) +++ head/sys/dev/ixgb/if_ixgb.c Tue May 1 12:58:01 2018 (r333137) @@ -350,6 +350,7 @@ ixgb_attach(device_t dev) ixgb_clear_hw_cntrs(&adapter->hw); ixgb_update_stats_counters(adapter); + gone_in_dev(dev, 12, "ixgb(4) driver"); INIT_DEBUGOUT("ixgb_attach: end"); return (0); From owner-svn-src-head@freebsd.org Tue May 1 13:01:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E911CFAB224; Tue, 1 May 2018 13:01:16 +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 80AED7F155; Tue, 1 May 2018 13:01:16 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1fDUu4-000EOY-6U; Tue, 01 May 2018 16:01:08 +0300 Date: Tue, 1 May 2018 16:01:08 +0300 From: Slawa Olhovchenkov To: Ed Maste Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333133 - head/usr.sbin/pwd_mkdb Message-ID: <20180501130108.GC80496@zxy.spb.ru> References: <201805010053.w410rkGi046226@repo.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201805010053.w410rkGi046226@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.25 Precedence: list List-Id: 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, 01 May 2018 13:01:17 -0000 On Tue, May 01, 2018 at 12:53:46AM +0000, Ed Maste wrote: > Author: emaste > Date: Tue May 1 00:53:46 2018 > New Revision: 333133 > URL: https://svnweb.freebsd.org/changeset/base/333133 > > Log: > pwd_mkdb: retire legacy v3 db support (-l option) > > pwd_mkdb has emitted v4 password database records since 2003 (r113596) > in addition to v3, and as of r283981 by default it emitted only v4. > As described in r283981, retire the -l legacy option. > > The -B and -L options were originally added to set the endianness of v3 > records emitted by pwd_mkdb, but they also set the db hash endiannes and > so have been retained temporarily. > > Announced on the FreeBSD-Current and FreeBSD-Stable lists. In stable/11 > the man page contains a deprecation notice, and pwd_mkdb will emit a > deprecation notice if the -l option is specified. > > Reviewed by: delphij, lidl, rgrimes > Relnotes: Yes > Sponsored by: The FreeBSD Foundation > Differential Revision: https://reviews.freebsd.org/D15144 May be good idea to check db version before install new binary? From owner-svn-src-head@freebsd.org Tue May 1 13:57:09 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3F9E9FAC722; Tue, 1 May 2018 13:57:09 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E8D126C62B; Tue, 1 May 2018 13:57:08 +0000 (UTC) (envelope-from manu@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CAEBA22EA0; Tue, 1 May 2018 13:57:08 +0000 (UTC) (envelope-from manu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41Dv8Pv035115; Tue, 1 May 2018 13:57:08 GMT (envelope-from manu@FreeBSD.org) Received: (from manu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41Dv8f5035113; Tue, 1 May 2018 13:57:08 GMT (envelope-from manu@FreeBSD.org) Message-Id: <201805011357.w41Dv8f5035113@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: manu set sender to manu@FreeBSD.org using -f From: Emmanuel Vadot Date: Tue, 1 May 2018 13:57:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333138 - in head/sys: arm/allwinner dev/uart X-SVN-Group: head X-SVN-Commit-Author: manu X-SVN-Commit-Paths: in head/sys: arm/allwinner dev/uart X-SVN-Commit-Revision: 333138 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 13:57:09 -0000 Author: manu Date: Tue May 1 13:57:08 2018 New Revision: 333138 URL: https://svnweb.freebsd.org/changeset/base/333138 Log: uart_snps: Add early printf support Move the allwinner early printf support to the snps driver as it should work with all implementation. While here add instruction for enabling it on 64bits SoCs. Modified: head/sys/arm/allwinner/aw_machdep.c head/sys/dev/uart/uart_dev_snps.c Modified: head/sys/arm/allwinner/aw_machdep.c ============================================================================== --- head/sys/arm/allwinner/aw_machdep.c Tue May 1 12:58:01 2018 (r333137) +++ head/sys/arm/allwinner/aw_machdep.c Tue May 1 13:57:08 2018 (r333138) @@ -164,30 +164,6 @@ allwinner_cpu_reset(platform_t plat) while (1); } -/* - * To use early printf on Allwinner SoC, add to kernel config - * options SOCDEV_PA=0x01C00000 - * options SOCDEV_VA=0x10000000 - * options EARLY_PRINTF - * And remove the if 0 -*/ -#if 0 -#ifdef EARLY_PRINTF -static void -allwinner_early_putc(int c) -{ - volatile uint32_t * UART_STAT_REG = (uint32_t *)0x1002807C; - volatile uint32_t * UART_TX_REG = (uint32_t *)0x10028000; - const uint32_t UART_TXRDY = (1 << 2); - - while ((*UART_STAT_REG & UART_TXRDY) == 0) - continue; - *UART_TX_REG = c; -} -early_putc_t *early_putc = allwinner_early_putc; -#endif /* EARLY_PRINTF */ -#endif - #if defined(SOC_ALLWINNER_A10) static platform_method_t a10_methods[] = { PLATFORMMETHOD(platform_attach, a10_attach), Modified: head/sys/dev/uart/uart_dev_snps.c ============================================================================== --- head/sys/dev/uart/uart_dev_snps.c Tue May 1 12:58:01 2018 (r333137) +++ head/sys/dev/uart/uart_dev_snps.c Tue May 1 13:57:08 2018 (r333138) @@ -61,6 +61,44 @@ struct snps_softc { #endif }; +/* + * To use early printf on 64 bits Allwinner SoC, add to kernel config + * options SOCDEV_PA=0x0 + * options SOCDEV_VA=0x40000000 + * options EARLY_PRINTF + * + * To use early printf on 32 bits Allwinner SoC, add to kernel config + * options SOCDEV_PA=0x01C00000 + * options SOCDEV_VA=0x10000000 + * options EARLY_PRINTF + * + * remove the if 0 +*/ +#if 0 +#ifdef EARLY_PRINTF +static void +uart_snps_early_putc(int c) +{ + volatile uint32_t *stat; + volatile uint32_t *tx; + +#ifdef ALLWINNER_64 + stat = (uint32_t *) (SOCDEV_VA + 0x1C2807C); + tx = (uint32_t *) (SOCDEV_VA + 0x1C28000); +#endif +#ifdef ALLWINNER_32 + stat = (uint32_t *) (SOCDEV_VA + 0x2807C); + tx = (uint32_t *) (SOCDEV_VA + 0x28000); +#endif + + while ((*stat & (1 << 2)) == 0) + continue; + *tx = c; +} +early_putc_t *early_putc = uart_snps_early_putc; +#endif /* EARLY_PRINTF */ +#endif + static int snps_uart_attach(struct uart_softc *uart_sc) { From owner-svn-src-head@freebsd.org Tue May 1 14:59:39 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8C3D0FAD88B; Tue, 1 May 2018 14:59:39 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2F0617986C; Tue, 1 May 2018 14:59:39 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1DD822387A; Tue, 1 May 2018 14:59:39 +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 w41Exc47064926; Tue, 1 May 2018 14:59:38 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41ExcaF064925; Tue, 1 May 2018 14:59:38 GMT (envelope-from np@FreeBSD.org) Message-Id: <201805011459.w41ExcaF064925@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Tue, 1 May 2018 14:59:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333139 - head/sys/dev/cxgbe X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: head/sys/dev/cxgbe X-SVN-Commit-Revision: 333139 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 14:59:39 -0000 Author: np Date: Tue May 1 14:59:38 2018 New Revision: 333139 URL: https://svnweb.freebsd.org/changeset/base/333139 Log: cxgbe(4): Destroy the cdev before disabling interrupts in driver detach. Filter work requests are submitted in the nexus cdev's ioctl which then blocks waiting for a reply. If driver detach runs in this state and disables interrupts the ioctl will never complete and detach will hang in destroy_cdev. Sponsored by: Chelsio Communications Modified: head/sys/dev/cxgbe/t4_main.c Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Tue May 1 13:57:08 2018 (r333138) +++ head/sys/dev/cxgbe/t4_main.c Tue May 1 14:59:38 2018 (r333139) @@ -1317,15 +1317,15 @@ t4_detach_common(device_t dev) sc = device_get_softc(dev); + if (sc->cdev) { + destroy_dev(sc->cdev); + sc->cdev = NULL; + } + sc->flags &= ~CHK_MBOX_ACCESS; if (sc->flags & FULL_INIT_DONE) { if (!(sc->flags & IS_VF)) t4_intr_disable(sc); - } - - if (sc->cdev) { - destroy_dev(sc->cdev); - sc->cdev = NULL; } if (device_is_attached(dev)) { From owner-svn-src-head@freebsd.org Tue May 1 15:17:48 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C753CFADE5A; Tue, 1 May 2018 15:17:47 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7A15B7DA51; Tue, 1 May 2018 15:17:47 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7411223BAE; Tue, 1 May 2018 15:17:47 +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 w41FHlPh075281; Tue, 1 May 2018 15:17:47 GMT (envelope-from jhb@FreeBSD.org) Received: (from jhb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41FHlqI075276; Tue, 1 May 2018 15:17:47 GMT (envelope-from jhb@FreeBSD.org) Message-Id: <201805011517.w41FHlqI075276@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhb set sender to jhb@FreeBSD.org using -f From: John Baldwin Date: Tue, 1 May 2018 15:17:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333140 - head/usr.sbin/bhyve X-SVN-Group: head X-SVN-Commit-Author: jhb X-SVN-Commit-Paths: head/usr.sbin/bhyve X-SVN-Commit-Revision: 333140 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 15:17:48 -0000 Author: jhb Date: Tue May 1 15:17:46 2018 New Revision: 333140 URL: https://svnweb.freebsd.org/changeset/base/333140 Log: Initial debug server for bhyve. This commit adds a new debug server to bhyve. Unlike the existing -g option which provides an efficient connection to a debug server running in the guest OS, this debug server permits inspection and control of the guest from within the hypervisor itself without requiring any cooperation from the guest. It is similar to the debug server provided by qemu. To avoid conflicting with the existing -g option, a new -G option has been added that accepts a TCP port. An IPv4 socket is bound to this port and listens for connections from debuggers. In addition, if the port begins with the character 'w', the hypervisor will pause the guest at the first instruction until a debugger attaches and explicitly continues the guest. Note that only a single debugger can attach to a guest at a time. Virtual CPUs are exposed to the remote debugger as threads. General purpose register values can be read for each virtual CPU. Other registers cannot currently be read, and no register values can be changed by the debugger. The remote debugger can read guest memory but not write to guest memory. To facilitate source-level debugging of the guest, memory addresses from the debugger are treated as virtual addresses (rather than physical addresses) and are resolved to a physical address using the active virtual address translation of the current virtual CPU. Memory reads should honor memory mapped I/O regions, though the debug server does not attempt to honor any alignment or size constraints when accessing MMIO. The debug server provides limited support for controlling the guest. The guest is suspended when a debugger is attached and resumes when a debugger detaches. A debugger can suspend a guest by sending a Ctrl-C request (e.g. via Ctrl-C in GDB). A debugger can also continue a suspended guest while remaining attached. Breakpoints are not yet supported. Single stepping is supported on Intel CPUs that support MTRAP VM exits, but is not available on other systems. While the current debug server has limited functionality, it should at least be usable for basic debugging now. It is also a useful checkpoint to serve as a base for adding additional features. Reviewed by: grehan Differential Revision: https://reviews.freebsd.org/D15022 Added: head/usr.sbin/bhyve/gdb.c (contents, props changed) head/usr.sbin/bhyve/gdb.h (contents, props changed) Modified: head/usr.sbin/bhyve/Makefile head/usr.sbin/bhyve/bhyve.8 head/usr.sbin/bhyve/bhyverun.c head/usr.sbin/bhyve/mem.c head/usr.sbin/bhyve/mem.h Modified: head/usr.sbin/bhyve/Makefile ============================================================================== --- head/usr.sbin/bhyve/Makefile Tue May 1 14:59:38 2018 (r333139) +++ head/usr.sbin/bhyve/Makefile Tue May 1 15:17:46 2018 (r333140) @@ -24,6 +24,7 @@ SRCS= \ consport.c \ dbgport.c \ fwctl.c \ + gdb.c \ inout.c \ ioapic.c \ mem.c \ @@ -74,6 +75,10 @@ LIBADD+= crypto CFLAGS+= -I${BHYVE_SYSDIR}/sys/dev/e1000 CFLAGS+= -I${BHYVE_SYSDIR}/sys/dev/mii CFLAGS+= -I${BHYVE_SYSDIR}/sys/dev/usb/controller + +.ifdef GDB_LOG +CFLAGS+=-DGDB_LOG +.endif WARNS?= 2 Modified: head/usr.sbin/bhyve/bhyve.8 ============================================================================== --- head/usr.sbin/bhyve/bhyve.8 Tue May 1 14:59:38 2018 (r333139) +++ head/usr.sbin/bhyve/bhyve.8 Tue May 1 15:17:46 2018 (r333140) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd April 6, 2018 +.Dd May 1, 2018 .Dt BHYVE 8 .Os .Sh NAME @@ -48,6 +48,7 @@ .Op Fl m Ar memsize Ns Op Ar K|k|M|m|G|g|T|t .Op Fl p Ar vcpu:hostcpu .Op Fl s Ar slot,emulation Ns Op , Ns Ar conf +.Op Fl G Ar port .Op Fl U Ar uuid .Ar vmname .Sh DESCRIPTION @@ -125,6 +126,19 @@ kernels compiled with allow a remote kernel kgdb to be relayed to the guest kernel gdb stub via a local IPv4 address and this port. This option will be deprecated in a future version. +.It Fl G Ar port +Start a debug server that uses the GDB protocol to export guest state to a +debugger. +An IPv4 TCP socket will be bound to the supplied +.Ar port +to listen for debugger connections. +Only a single debugger may be attached to the debug server at a time. +If +.Ar port +begins with +.Sq w , +.Nm +will pause execution at the first instruction waiting for a debugger to attach. .It Fl h Print help message and exit. .It Fl H @@ -438,6 +452,24 @@ Alphanumeric name of the guest. This should be the same as that created by .Xr bhyveload 8 . .El +.Sh DEBUG SERVER +The current debug server provides limited support for debuggers. +.Ss Registers +Each virtual CPU is exposed to the debugger as a thread. +.Pp +General purpose registers can be queried for each virtual CPU, but other +registers such as floating-point and system registers cannot be queried. +.Ss Memory +Memory (including memory mapped I/O regions) can be read by the debugger, +but not written. Memory operations use virtual addresses that are resolved +to physical addresses via the current virtual CPU's active address translation. +.Ss Control +The running guest can be interrupted by the debugger at any time +.Pq for example, by pressing Ctrl-C in the debugger . +.Pp +Single stepping is only supported on Intel CPUs supporting the MTRAP VM exit. +.Pp +Breakpoints are not supported. .Sh SIGNAL HANDLING .Nm deals with the following signals: Modified: head/usr.sbin/bhyve/bhyverun.c ============================================================================== --- head/usr.sbin/bhyve/bhyverun.c Tue May 1 14:59:38 2018 (r333139) +++ head/usr.sbin/bhyve/bhyverun.c Tue May 1 15:17:46 2018 (r333140) @@ -71,6 +71,7 @@ __FBSDID("$FreeBSD$"); #include "inout.h" #include "dbgport.h" #include "fwctl.h" +#include "gdb.h" #include "ioapic.h" #include "mem.h" #include "mevent.h" @@ -338,6 +339,8 @@ fbsdrun_start_thread(void *param) snprintf(tname, sizeof(tname), "vcpu %d", vcpu); pthread_set_name_np(mtp->mt_thr, tname); + gdb_cpu_add(vcpu); + vm_loop(mtp->mt_ctx, vcpu, vmexit[vcpu].rip); /* not reached */ @@ -601,6 +604,8 @@ vmexit_mtrap(struct vmctx *ctx, struct vm_exit *vmexit stats.vmexit_mtrap++; + gdb_cpu_mtrap(*pvcpu); + return (VMEXIT_CONTINUE); } @@ -675,6 +680,14 @@ vmexit_suspend(struct vmctx *ctx, struct vm_exit *vmex return (0); /* NOTREACHED */ } +static int +vmexit_debug(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) +{ + + gdb_cpu_suspend(*pvcpu); + return (VMEXIT_CONTINUE); +} + static vmexit_handler_t handler[VM_EXITCODE_MAX] = { [VM_EXITCODE_INOUT] = vmexit_inout, [VM_EXITCODE_INOUT_STR] = vmexit_inout, @@ -689,6 +702,7 @@ static vmexit_handler_t handler[VM_EXITCODE_MAX] = { [VM_EXITCODE_SPINUP_AP] = vmexit_spinup_ap, [VM_EXITCODE_SUSPENDED] = vmexit_suspend, [VM_EXITCODE_TASK_SWITCH] = vmexit_task_switch, + [VM_EXITCODE_DEBUG] = vmexit_debug, }; static void @@ -877,9 +891,10 @@ do_open(const char *vmname) int main(int argc, char *argv[]) { - int c, error, gdb_port, err, bvmcons; + int c, error, dbg_port, gdb_port, err, bvmcons; int max_vcpus, mptgen, memflags; int rtc_localtime; + bool gdb_stop; struct vmctx *ctx; uint64_t rip; size_t memsize; @@ -887,7 +902,9 @@ main(int argc, char *argv[]) bvmcons = 0; progname = basename(argv[0]); + dbg_port = 0; gdb_port = 0; + gdb_stop = false; guest_ncpus = 1; sockets = cores = threads = 1; maxcpus = 0; @@ -896,7 +913,7 @@ main(int argc, char *argv[]) rtc_localtime = 1; memflags = 0; - optstr = "abehuwxACHIPSWYp:g:c:s:m:l:U:"; + optstr = "abehuwxACHIPSWYp:g:G:c:s:m:l:U:"; while ((c = getopt(argc, argv, optstr)) != -1) { switch (c) { case 'a': @@ -924,6 +941,13 @@ main(int argc, char *argv[]) memflags |= VM_MEM_F_INCORE; break; case 'g': + dbg_port = atoi(optarg); + break; + case 'G': + if (optarg[0] == 'w') { + gdb_stop = true; + optarg++; + } gdb_port = atoi(optarg); break; case 'l': @@ -1033,8 +1057,11 @@ main(int argc, char *argv[]) if (init_pci(ctx) != 0) exit(1); + if (dbg_port != 0) + init_dbgport(dbg_port); + if (gdb_port != 0) - init_dbgport(gdb_port); + init_gdb(ctx, gdb_port, gdb_stop); if (bvmcons) init_bvmcons(); Added: head/usr.sbin/bhyve/gdb.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/usr.sbin/bhyve/gdb.c Tue May 1 15:17:46 2018 (r333140) @@ -0,0 +1,1313 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2017-2018 John H. Baldwin + * 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 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 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 +__FBSDID("$FreeBSD$"); + +#include +#ifndef WITHOUT_CAPSICUM +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#ifndef WITHOUT_CAPSICUM +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "bhyverun.h" +#include "mem.h" +#include "mevent.h" + +/* + * GDB_SIGNAL_* numbers are part of the GDB remote protocol. Most stops + * use SIGTRAP. + */ +#define GDB_SIGNAL_TRAP 5 + +static void gdb_resume_vcpus(void); +static void check_command(int fd); + +static struct mevent *read_event, *write_event; + +static cpuset_t vcpus_active, vcpus_suspended, vcpus_waiting; +static pthread_mutex_t gdb_lock; +static pthread_cond_t idle_vcpus; +static bool stop_pending, first_stop; +static int stepping_vcpu, stopped_vcpu; + +/* + * An I/O buffer contains 'capacity' bytes of room at 'data'. For a + * read buffer, 'start' is unused and 'len' contains the number of + * valid bytes in the buffer. For a write buffer, 'start' is set to + * the index of the next byte in 'data' to send, and 'len' contains + * the remaining number of valid bytes to send. + */ +struct io_buffer { + uint8_t *data; + size_t capacity; + size_t start; + size_t len; +}; + +static struct io_buffer cur_comm, cur_resp; +static uint8_t cur_csum; +static int cur_vcpu; +static struct vmctx *ctx; +static int cur_fd = -1; + +const int gdb_regset[] = { + VM_REG_GUEST_RAX, + VM_REG_GUEST_RBX, + VM_REG_GUEST_RCX, + VM_REG_GUEST_RDX, + VM_REG_GUEST_RSI, + VM_REG_GUEST_RDI, + VM_REG_GUEST_RBP, + VM_REG_GUEST_RSP, + VM_REG_GUEST_R8, + VM_REG_GUEST_R9, + VM_REG_GUEST_R10, + VM_REG_GUEST_R11, + VM_REG_GUEST_R12, + VM_REG_GUEST_R13, + VM_REG_GUEST_R14, + VM_REG_GUEST_R15, + VM_REG_GUEST_RIP, + VM_REG_GUEST_RFLAGS, + VM_REG_GUEST_CS, + VM_REG_GUEST_SS, + VM_REG_GUEST_DS, + VM_REG_GUEST_ES, + VM_REG_GUEST_FS, + VM_REG_GUEST_GS +}; + +const int gdb_regsize[] = { + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 4, + 4, + 4, + 4, + 4, + 4, + 4 +}; + +#ifdef GDB_LOG +#include +#include + +static void __printflike(1, 2) +debug(const char *fmt, ...) +{ + static FILE *logfile; + va_list ap; + + if (logfile == NULL) { + logfile = fopen("/tmp/bhyve_gdb.log", "w"); + if (logfile == NULL) + return; +#ifndef WITHOUT_CAPSICUM + if (caph_limit_stream(fileno(logfile), CAPH_WRITE) == -1) { + fclose(logfile); + logfile = NULL; + return; + } +#endif + setlinebuf(logfile); + } + va_start(ap, fmt); + vfprintf(logfile, fmt, ap); + va_end(ap); +} +#else +#define debug(...) +#endif + +static int +guest_paging_info(int vcpu, struct vm_guest_paging *paging) +{ + uint64_t regs[4]; + const int regset[4] = { + VM_REG_GUEST_CR0, + VM_REG_GUEST_CR3, + VM_REG_GUEST_CR4, + VM_REG_GUEST_EFER + }; + + if (vm_get_register_set(ctx, vcpu, nitems(regset), regset, regs) == -1) + return (-1); + + /* + * For the debugger, always pretend to be the kernel (CPL 0), + * and if long-mode is enabled, always parse addresses as if + * in 64-bit mode. + */ + paging->cr3 = regs[1]; + paging->cpl = 0; + if (regs[3] & EFER_LMA) + paging->cpu_mode = CPU_MODE_64BIT; + else if (regs[0] & CR0_PE) + paging->cpu_mode = CPU_MODE_PROTECTED; + else + paging->cpu_mode = CPU_MODE_REAL; + if (!(regs[0] & CR0_PG)) + paging->paging_mode = PAGING_MODE_FLAT; + else if (!(regs[2] & CR4_PAE)) + paging->paging_mode = PAGING_MODE_32; + else if (regs[3] & EFER_LME) + paging->paging_mode = PAGING_MODE_64; + else + paging->paging_mode = PAGING_MODE_PAE; + return (0); +} + +/* + * Map a guest virtual address to a physical address (for a given vcpu). + * If a guest virtual address is valid, return 1. If the address is + * not valid, return 0. If an error occurs obtaining the mapping, + * return -1. + */ +static int +guest_vaddr2paddr(int vcpu, uint64_t vaddr, uint64_t *paddr) +{ + struct vm_guest_paging paging; + int fault; + + if (guest_paging_info(vcpu, &paging) == -1) + return (-1); + + /* + * Always use PROT_READ. We really care if the VA is + * accessible, not if the current vCPU can write. + */ + if (vm_gla2gpa_nofault(ctx, vcpu, &paging, vaddr, PROT_READ, paddr, + &fault) == -1) + return (-1); + if (fault) + return (0); + return (1); +} + +static void +io_buffer_reset(struct io_buffer *io) +{ + + io->start = 0; + io->len = 0; +} + +/* Available room for adding data. */ +static size_t +io_buffer_avail(struct io_buffer *io) +{ + + return (io->capacity - (io->start + io->len)); +} + +static uint8_t * +io_buffer_head(struct io_buffer *io) +{ + + return (io->data + io->start); +} + +static uint8_t * +io_buffer_tail(struct io_buffer *io) +{ + + return (io->data + io->start + io->len); +} + +static void +io_buffer_advance(struct io_buffer *io, size_t amount) +{ + + assert(amount <= io->len); + io->start += amount; + io->len -= amount; +} + +static void +io_buffer_consume(struct io_buffer *io, size_t amount) +{ + + io_buffer_advance(io, amount); + if (io->len == 0) { + io->start = 0; + return; + } + + /* + * XXX: Consider making this move optional and compacting on a + * future read() before realloc(). + */ + memmove(io->data, io_buffer_head(io), io->len); + io->start = 0; +} + +static void +io_buffer_grow(struct io_buffer *io, size_t newsize) +{ + uint8_t *new_data; + size_t avail, new_cap; + + avail = io_buffer_avail(io); + if (newsize <= avail) + return; + + new_cap = io->capacity + (newsize - avail); + new_data = realloc(io->data, new_cap); + if (new_data == NULL) + err(1, "Failed to grow GDB I/O buffer"); + io->data = new_data; + io->capacity = new_cap; +} + +static bool +response_pending(void) +{ + + if (cur_resp.start == 0 && cur_resp.len == 0) + return (false); + if (cur_resp.start + cur_resp.len == 1 && cur_resp.data[0] == '+') + return (false); + return (true); +} + +static void +close_connection(void) +{ + + /* + * XXX: This triggers a warning because mevent does the close + * before the EV_DELETE. + */ + pthread_mutex_lock(&gdb_lock); + mevent_delete(write_event); + mevent_delete_close(read_event); + write_event = NULL; + read_event = NULL; + io_buffer_reset(&cur_comm); + io_buffer_reset(&cur_resp); + cur_fd = -1; + + /* Resume any stopped vCPUs. */ + gdb_resume_vcpus(); + pthread_mutex_unlock(&gdb_lock); +} + +static uint8_t +hex_digit(uint8_t nibble) +{ + + if (nibble <= 9) + return (nibble + '0'); + else + return (nibble + 'a' - 10); +} + +static uint8_t +parse_digit(uint8_t v) +{ + + if (v >= '0' && v <= '9') + return (v - '0'); + if (v >= 'a' && v <= 'f') + return (v - 'a' + 10); + if (v >= 'A' && v <= 'F') + return (v - 'A' + 10); + return (0xF); +} + +/* Parses big-endian hexadecimal. */ +static uintmax_t +parse_integer(const uint8_t *p, size_t len) +{ + uintmax_t v; + + v = 0; + while (len > 0) { + v <<= 4; + v |= parse_digit(*p); + p++; + len--; + } + return (v); +} + +static uint8_t +parse_byte(const uint8_t *p) +{ + + return (parse_digit(p[0]) << 4 | parse_digit(p[1])); +} + +static void +send_pending_data(int fd) +{ + ssize_t nwritten; + + if (cur_resp.len == 0) { + mevent_disable(write_event); + return; + } + nwritten = write(fd, io_buffer_head(&cur_resp), cur_resp.len); + if (nwritten == -1) { + warn("Write to GDB socket failed"); + close_connection(); + } else { + io_buffer_advance(&cur_resp, nwritten); + if (cur_resp.len == 0) + mevent_disable(write_event); + else + mevent_enable(write_event); + } +} + +/* Append a single character to the output buffer. */ +static void +send_char(uint8_t data) +{ + io_buffer_grow(&cur_resp, 1); + *io_buffer_tail(&cur_resp) = data; + cur_resp.len++; +} + +/* Append an array of bytes to the output buffer. */ +static void +send_data(const uint8_t *data, size_t len) +{ + + io_buffer_grow(&cur_resp, len); + memcpy(io_buffer_tail(&cur_resp), data, len); + cur_resp.len += len; +} + +static void +format_byte(uint8_t v, uint8_t *buf) +{ + + buf[0] = hex_digit(v >> 4); + buf[1] = hex_digit(v & 0xf); +} + +/* + * Append a single byte (formatted as two hex characters) to the + * output buffer. + */ +static void +send_byte(uint8_t v) +{ + uint8_t buf[2]; + + format_byte(v, buf); + send_data(buf, sizeof(buf)); +} + +static void +start_packet(void) +{ + + send_char('$'); + cur_csum = 0; +} + +static void +finish_packet(void) +{ + + send_char('#'); + send_byte(cur_csum); + debug("-> %.*s\n", (int)cur_resp.len, io_buffer_head(&cur_resp)); +} + +/* + * Append a single character (for the packet payload) and update the + * checksum. + */ +static void +append_char(uint8_t v) +{ + + send_char(v); + cur_csum += v; +} + +/* + * Append an array of bytes (for the packet payload) and update the + * checksum. + */ +static void +append_packet_data(const uint8_t *data, size_t len) +{ + + send_data(data, len); + while (len > 0) { + cur_csum += *data; + data++; + len--; + } +} + +static void +append_string(const char *str) +{ + + append_packet_data(str, strlen(str)); +} + +static void +append_byte(uint8_t v) +{ + uint8_t buf[2]; + + format_byte(v, buf); + append_packet_data(buf, sizeof(buf)); +} + +static void +append_unsigned_native(uintmax_t value, size_t len) +{ + size_t i; + + for (i = 0; i < len; i++) { + append_byte(value); + value >>= 8; + } +} + +static void +append_unsigned_be(uintmax_t value, size_t len) +{ + char buf[len * 2]; + size_t i; + + for (i = 0; i < len; i++) { + format_byte(value, buf + (len - i - 1) * 2); + value >>= 8; + } + append_packet_data(buf, sizeof(buf)); +} + +static void +append_integer(unsigned int value) +{ + + if (value == 0) + append_char('0'); + else + append_unsigned_be(value, fls(value) + 7 / 8); +} + +static void +append_asciihex(const char *str) +{ + + while (*str != '\0') { + append_byte(*str); + str++; + } +} + +static void +send_empty_response(void) +{ + + start_packet(); + finish_packet(); +} + +static void +send_error(int error) +{ + + start_packet(); + append_char('E'); + append_byte(error); + finish_packet(); +} + +static void +send_ok(void) +{ + + start_packet(); + append_string("OK"); + finish_packet(); +} + +static int +parse_threadid(const uint8_t *data, size_t len) +{ + + if (len == 1 && *data == '0') + return (0); + if (len == 2 && memcmp(data, "-1", 2) == 0) + return (-1); + if (len == 0) + return (-2); + return (parse_integer(data, len)); +} + +static void +report_stop(void) +{ + + start_packet(); + if (stopped_vcpu == -1) + append_char('S'); + else + append_char('T'); + append_byte(GDB_SIGNAL_TRAP); + if (stopped_vcpu != -1) { + append_string("thread:"); + append_integer(stopped_vcpu + 1); + append_char(';'); + } + stopped_vcpu = -1; + finish_packet(); +} + +static void +gdb_finish_suspend_vcpus(void) +{ + + if (first_stop) { + first_stop = false; + stopped_vcpu = -1; + } else if (response_pending()) + stop_pending = true; + else { + report_stop(); + send_pending_data(cur_fd); + } +} + +static void +_gdb_cpu_suspend(int vcpu, bool report_stop) +{ + + debug("$vCPU %d suspending\n", vcpu); + CPU_SET(vcpu, &vcpus_waiting); + if (report_stop && CPU_CMP(&vcpus_waiting, &vcpus_suspended) == 0) + gdb_finish_suspend_vcpus(); + while (CPU_ISSET(vcpu, &vcpus_suspended) && vcpu != stepping_vcpu) + pthread_cond_wait(&idle_vcpus, &gdb_lock); + CPU_CLR(vcpu, &vcpus_waiting); + debug("$vCPU %d resuming\n", vcpu); +} + +void +gdb_cpu_add(int vcpu) +{ + + debug("$vCPU %d starting\n", vcpu); + pthread_mutex_lock(&gdb_lock); + CPU_SET(vcpu, &vcpus_active); + + /* + * If a vcpu is added while vcpus are stopped, suspend the new + * vcpu so that it will pop back out with a debug exit before + * executing the first instruction. + */ + if (!CPU_EMPTY(&vcpus_suspended)) { + CPU_SET(vcpu, &vcpus_suspended); + _gdb_cpu_suspend(vcpu, false); + } + pthread_mutex_unlock(&gdb_lock); +} + +void +gdb_cpu_suspend(int vcpu) +{ + + pthread_mutex_lock(&gdb_lock); + _gdb_cpu_suspend(vcpu, true); + pthread_mutex_unlock(&gdb_lock); +} + +void +gdb_cpu_mtrap(int vcpu) +{ + + debug("$vCPU %d MTRAP\n", vcpu); + pthread_mutex_lock(&gdb_lock); + if (vcpu == stepping_vcpu) { + stepping_vcpu = -1; + vm_set_capability(ctx, vcpu, VM_CAP_MTRAP_EXIT, 0); + vm_suspend_cpu(ctx, vcpu); + assert(stopped_vcpu == -1); + stopped_vcpu = vcpu; + _gdb_cpu_suspend(vcpu, true); + } + pthread_mutex_unlock(&gdb_lock); +} + +static void +gdb_suspend_vcpus(void) +{ + + assert(pthread_mutex_isowned_np(&gdb_lock)); + debug("suspending all CPUs\n"); + vcpus_suspended = vcpus_active; + vm_suspend_cpu(ctx, -1); + if (CPU_CMP(&vcpus_waiting, &vcpus_suspended) == 0) + gdb_finish_suspend_vcpus(); +} + +static bool +gdb_step_vcpu(int vcpu) +{ + int error, val; + + debug("$vCPU %d step\n", vcpu); + error = vm_get_capability(ctx, vcpu, VM_CAP_MTRAP_EXIT, &val); + if (error < 0) + return (false); + error = vm_set_capability(ctx, vcpu, VM_CAP_MTRAP_EXIT, 1); + vm_resume_cpu(ctx, vcpu); + stepping_vcpu = vcpu; + pthread_cond_broadcast(&idle_vcpus); + return (true); +} + +static void +gdb_resume_vcpus(void) +{ + + assert(pthread_mutex_isowned_np(&gdb_lock)); + vm_resume_cpu(ctx, -1); + debug("resuming all CPUs\n"); + CPU_ZERO(&vcpus_suspended); + pthread_cond_broadcast(&idle_vcpus); +} + +static void +gdb_read_regs(void) +{ + uint64_t regvals[nitems(gdb_regset)]; + int i; + + if (vm_get_register_set(ctx, cur_vcpu, nitems(gdb_regset), + gdb_regset, regvals) == -1) { + send_error(errno); + return; + } + start_packet(); + for (i = 0; i < nitems(regvals); i++) + append_unsigned_native(regvals[i], gdb_regsize[i]); + finish_packet(); +} + +static void +gdb_read_mem(const uint8_t *data, size_t len) +{ + uint64_t gpa, gva, val; + uint8_t *cp; + size_t resid, todo, bytes; + bool started; + int error; + + cp = memchr(data, ',', len); + if (cp == NULL) { + send_error(EINVAL); + return; + } + gva = parse_integer(data + 1, cp - (data + 1)); + resid = parse_integer(cp + 1, len - (cp + 1 - data)); + started = false; + + while (resid > 0) { + error = guest_vaddr2paddr(cur_vcpu, gva, &gpa); + if (error == -1) { + if (started) + finish_packet(); + else + send_error(errno); + return; + } + if (error == 0) { + if (started) + finish_packet(); + else + send_error(EFAULT); + return; + } + + /* Read bytes from current page. */ + todo = getpagesize() - gpa % getpagesize(); + if (todo > resid) + todo = resid; + + cp = paddr_guest2host(ctx, gpa, todo); + if (cp != NULL) { *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Tue May 1 15:31:39 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 72EFDFAE634; Tue, 1 May 2018 15:31:39 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from smtp.freebsd.org (unknown [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1C92A7FE23; Tue, 1 May 2018 15:31:39 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (ralph.baldwin.cx [66.234.199.215]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: jhb) by smtp.freebsd.org (Postfix) with ESMTPSA id EA0062A8BE; Tue, 1 May 2018 15:31:38 +0000 (UTC) (envelope-from jhb@freebsd.org) From: John Baldwin To: src-committers@freebsd.org Cc: svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve Date: Tue, 01 May 2018 08:31:28 -0700 Message-ID: <1760664.chHeORK2x4@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.1-STABLE; KDE/4.14.30; amd64; ; ) In-Reply-To: <201805011517.w41FHlqI075276@repo.freebsd.org> References: <201805011517.w41FHlqI075276@repo.freebsd.org> 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.25 Precedence: list List-Id: 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, 01 May 2018 15:31:39 -0000 On Tuesday, May 01, 2018 03:17:47 PM John Baldwin wrote: > Author: jhb > Date: Tue May 1 15:17:46 2018 > New Revision: 333140 > URL: https://svnweb.freebsd.org/changeset/base/333140 > > Log: > Initial debug server for bhyve. This is definitely "early" work and there are still many things to improve. Note that if you aren't using a file gdb you will need to explicitly set the architecture. Here is an example of booting a VM with -G w1234 which stops at the first instruction: (gdb) set architecture i386:x86-64 The target architecture is assumed to be i386:x86-64 (gdb) target remote localhost:1234 Remote debugging using localhost:1234 warning: No executable has been specified and target does not support determining executable automatically. Try using the "file" command. 0xffffffff8029e9a0 in ?? () (gdb) x/i $pc => 0xffffffff8029e9a0: movw $0x1234,0x472 (gdb) si 0xffffffff8029e9aa in ?? () (gdb) info threads Id Target Id Frame * 1 Thread 1 (vCPU 0) 0xffffffff8029e9aa in ?? () (gdb) c Continuing. ^C[New Thread 2] Thread 1 received signal SIGTRAP, Trace/breakpoint trap. 0xffffffff807e0673 in ?? () (gdb) info threads Id Target Id Frame * 1 Thread 1 (vCPU 0) 0xffffffff807e0673 in ?? () 2 Thread 2 (vCPU 1) 0xffffffff807f4fa2 in ?? () (gdb) info registers rax 0x0 0 rbx 0xffffffff80d75400 -2133371904 rcx 0x0 0 rdx 0x40024 262180 rsi 0x1 1 rdi 0xffffffffffffffff -1 rbp 0xfffffe0015282980 0xfffffe0015282980 rsp 0xfffffe0015282970 0xfffffe0015282970 r8 0xfffff80002148000 -8796058124288 r9 0xffffffff80d49090 -2133553008 r10 0xfffff80002148000 -8796058124288 r11 0x1 1 r12 0x0 0 r13 0xfffff80002144000 -8796058140672 r14 0xffffffffffffffff -1 r15 0xffffffff80c30a00 -2134701568 rip 0xffffffff807e0673 0xffffffff807e0673 eflags 0x246 [ PF ZF IF ] cs 0x20 32 ss 0x28 40 ds 0x3b 59 es 0x3b 59 fs 0x13 19 gs 0x28 40 fs_base gs_base (gdb) detach Detaching from program: , Remote target Ending remote debugging. Stepping will only work on Intel CPUs currently and not AMD. (Implementing single-stepping on AMD will prove "interesting" as it will mean raising single-step debug exceptions in the guest and then hiding them from the guest as well as properly shadowing the TF flag in %rflags in the guest and injecting suitable DB# exceptions in the guest if it is also tracing itself, etc.) There is a lot more to work on, but I think this is a useful initial checkpoint. Note that just as with the debug server in QEMU, kgdb does not currently know how to enumerate kernel threads on top of the virtual CPU "threads", so commands like 'tid' and 'proc' will not work if using kgdb. -- John Baldwin From owner-svn-src-head@freebsd.org Tue May 1 15:33:22 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2D09FFAE74F; Tue, 1 May 2018 15:33:22 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D2D6480A92; Tue, 1 May 2018 15:33:21 +0000 (UTC) (envelope-from gallatin@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CC52623F03; Tue, 1 May 2018 15:33:21 +0000 (UTC) (envelope-from gallatin@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41FXLKd084623; Tue, 1 May 2018 15:33:21 GMT (envelope-from gallatin@FreeBSD.org) Received: (from gallatin@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41FXLpo084622; Tue, 1 May 2018 15:33:21 GMT (envelope-from gallatin@FreeBSD.org) Message-Id: <201805011533.w41FXLpo084622@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gallatin set sender to gallatin@FreeBSD.org using -f From: Andrew Gallatin Date: Tue, 1 May 2018 15:33:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333141 - head/sys/dev/cxgbe X-SVN-Group: head X-SVN-Commit-Author: gallatin X-SVN-Commit-Paths: head/sys/dev/cxgbe X-SVN-Commit-Revision: 333141 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 15:33:22 -0000 Author: gallatin Date: Tue May 1 15:33:21 2018 New Revision: 333141 URL: https://svnweb.freebsd.org/changeset/base/333141 Log: Optionally panic when cxgbe encounters a fatal error Sometimes it is better to panic than to leave a machine unreachable. Reviewed by: np Sponsored by: Netflix Modified: head/sys/dev/cxgbe/t4_main.c Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Tue May 1 15:17:46 2018 (r333140) +++ head/sys/dev/cxgbe/t4_main.c Tue May 1 15:33:21 2018 (r333141) @@ -469,6 +469,8 @@ TUNABLE_INT("hw.cxgbe.num_vis", &t4_num_vis); static int pcie_relaxed_ordering = -1; TUNABLE_INT("hw.cxgbe.pcie_relaxed_ordering", &pcie_relaxed_ordering); +static int t4_panic_on_fatal_err = 0; +TUNABLE_INT("hw.cxgbe.panic_on_fatal_err", &t4_panic_on_fatal_err); #ifdef TCP_OFFLOAD /* @@ -2222,6 +2224,8 @@ t4_fatal_err(struct adapter *sc) t4_intr_disable(sc); log(LOG_EMERG, "%s: encountered fatal error, adapter stopped.\n", device_get_nameunit(sc->dev)); + if (t4_panic_on_fatal_err) + panic("panic requested on fatal error"); } void From owner-svn-src-head@freebsd.org Tue May 1 15:59:34 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 13D1EFAEE8E; Tue, 1 May 2018 15:59:34 +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 6C6E386B06; Tue, 1 May 2018 15:59:33 +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 w41FxUBG026648; Tue, 1 May 2018 08:59:30 -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 w41FxUr7026647; Tue, 1 May 2018 08:59:30 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805011559.w41FxUr7026647@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve In-Reply-To: <201805011517.w41FHlqI075276@repo.freebsd.org> To: John Baldwin Date: Tue, 1 May 2018 08:59:30 -0700 (PDT) CC: 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.25 Precedence: list List-Id: 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, 01 May 2018 15:59:34 -0000 > Author: jhb > Date: Tue May 1 15:17:46 2018 > New Revision: 333140 > URL: https://svnweb.freebsd.org/changeset/base/333140 > > Log: > Initial debug server for bhyve. ... > > Added: head/usr.sbin/bhyve/gdb.c > ============================================================================== > --- /dev/null 00:00:00 1970 (empty, because file is newly added) > +++ head/usr.sbin/bhyve/gdb.c Tue May 1 15:17:46 2018 (r333140) > @@ -0,0 +1,1313 @@ > +/*- > + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD > + * > + * Copyright (c) 2017-2018 John H. Baldwin > + * All rights reserved. The All rights reserved clause is an obsolete requirement from the 1910 Buenos Aires Convention, and should not be used on new code since 2000. Regards, -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Tue May 1 16:21:07 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 10804FAF404; Tue, 1 May 2018 16:21:07 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B8B3269C85; Tue, 1 May 2018 16:21:06 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B265A245B8; Tue, 1 May 2018 16:21:06 +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 w41GL6h1008189; Tue, 1 May 2018 16:21:06 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41GL17P008142; Tue, 1 May 2018 16:21:01 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201805011621.w41GL17P008142@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Tue, 1 May 2018 16:21:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333142 - in head/sys/arm: at91 conf include X-SVN-Group: head X-SVN-Commit-Author: imp X-SVN-Commit-Paths: in head/sys/arm: at91 conf include X-SVN-Commit-Revision: 333142 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 16:21:07 -0000 Author: imp Date: Tue May 1 16:21:01 2018 New Revision: 333142 URL: https://svnweb.freebsd.org/changeset/base/333142 Log: Remove 'All Rights Reserved.' from all of my Copyrights in sys/arm and always use 'M. Warner Losh' for consistency. 'All Rights Reserved.' was prescribed by the Buenos Aires Copyright Convention of 1910, but has been mostly dead since the early 1990's and completely meaningless since 2000 when Nicaragua ratified the Berne convention. Some files not done due to ambiguity of various types. Modified: head/sys/arm/at91/at91_aic.c head/sys/arm/at91/at91_common.c head/sys/arm/at91/at91_gpio.h head/sys/arm/at91/at91_mci.c head/sys/arm/at91/at91_mcireg.h head/sys/arm/at91/at91_ohci.c head/sys/arm/at91/at91_ohci_fdt.c head/sys/arm/at91/at91_pdcreg.h head/sys/arm/at91/at91_pinctrl.c head/sys/arm/at91/at91_pio.c head/sys/arm/at91/at91_pioreg.h head/sys/arm/at91/at91_piovar.h head/sys/arm/at91/at91_pmc.c head/sys/arm/at91/at91_pmcreg.h head/sys/arm/at91/at91_pmcvar.h head/sys/arm/at91/at91_rtc.c head/sys/arm/at91/at91_rtcreg.h head/sys/arm/at91/at91_sdramc.c head/sys/arm/at91/at91_shdwc.c head/sys/arm/at91/at91_smc.c head/sys/arm/at91/at91_smc.h head/sys/arm/at91/at91_spireg.h head/sys/arm/at91/at91_ssc.c head/sys/arm/at91/at91_sscreg.h head/sys/arm/at91/at91_streg.h head/sys/arm/at91/at91_tcb.c head/sys/arm/at91/at91_twi.c head/sys/arm/at91/at91_twiio.h head/sys/arm/at91/at91_twireg.h head/sys/arm/at91/at91board.h head/sys/arm/at91/at91rm9200_devices.c head/sys/arm/at91/at91rm9200var.h head/sys/arm/at91/at91sam9x5.c head/sys/arm/at91/at91soc.c head/sys/arm/at91/at91soc.h head/sys/arm/at91/board_bwct.c head/sys/arm/at91/board_eb9200.c head/sys/arm/at91/board_hl200.c head/sys/arm/at91/board_hl201.c head/sys/arm/at91/board_kb920x.c head/sys/arm/at91/board_tsc4370.c head/sys/arm/at91/if_ate.c head/sys/arm/at91/if_atereg.h head/sys/arm/conf/genboardid.awk head/sys/arm/include/_bus.h head/sys/arm/include/at91_gpio.h head/sys/arm/include/atags.h head/sys/arm/include/board.h Modified: head/sys/arm/at91/at91_aic.c ============================================================================== --- head/sys/arm/at91/at91_aic.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_aic.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_common.c ============================================================================== --- head/sys/arm/at91/at91_common.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_common.c Tue May 1 16:21:01 2018 (r333142) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2014 M. Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_gpio.h ============================================================================== --- head/sys/arm/at91/at91_gpio.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_gpio.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 M. Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_mci.c ============================================================================== --- head/sys/arm/at91/at91_mci.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_mci.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2006 Bernd Walter. All rights reserved. - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * Copyright (c) 2010 Greg Ansley. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/at91/at91_mcireg.h ============================================================================== --- head/sys/arm/at91/at91_mcireg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_mcireg.h Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2006 Berndt Walter. All rights reserved. - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_ohci.c ============================================================================== --- head/sys/arm/at91/at91_ohci.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_ohci.c Tue May 1 16:21:01 2018 (r333142) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_ohci_fdt.c ============================================================================== --- head/sys/arm/at91/at91_ohci_fdt.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_ohci_fdt.c Tue May 1 16:21:01 2018 (r333142) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_pdcreg.h ============================================================================== --- head/sys/arm/at91/at91_pdcreg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pdcreg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_pinctrl.c ============================================================================== --- head/sys/arm/at91/at91_pinctrl.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pinctrl.c Tue May 1 16:21:01 2018 (r333142) @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2014 Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_pio.c ============================================================================== --- head/sys/arm/at91/at91_pio.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pio.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * Copyright (C) 2012 Ian Lepore. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/at91/at91_pioreg.h ============================================================================== --- head/sys/arm/at91/at91_pioreg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pioreg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_piovar.h ============================================================================== --- head/sys/arm/at91/at91_piovar.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_piovar.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_pmc.c ============================================================================== --- head/sys/arm/at91/at91_pmc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pmc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * Copyright (c) 2010 Greg Ansley. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/at91/at91_pmcreg.h ============================================================================== --- head/sys/arm/at91/at91_pmcreg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pmcreg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2005 M. Warner Losh. All rights reserved. + * Copyright (c) 2005 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_pmcvar.h ============================================================================== --- head/sys/arm/at91/at91_pmcvar.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_pmcvar.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2005 M. Warner Losh. All rights reserved. + * Copyright (c) 2005 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_rtc.c ============================================================================== --- head/sys/arm/at91/at91_rtc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_rtc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * Copyright (c) 2012 Ian Lepore. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/at91/at91_rtcreg.h ============================================================================== --- head/sys/arm/at91/at91_rtcreg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_rtcreg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_sdramc.c ============================================================================== --- head/sys/arm/at91/at91_sdramc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_sdramc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_shdwc.c ============================================================================== --- head/sys/arm/at91/at91_shdwc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_shdwc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_smc.c ============================================================================== --- head/sys/arm/at91/at91_smc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_smc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 M. Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_smc.h ============================================================================== --- head/sys/arm/at91/at91_smc.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_smc.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 M. Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_spireg.h ============================================================================== --- head/sys/arm/at91/at91_spireg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_spireg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_ssc.c ============================================================================== --- head/sys/arm/at91/at91_ssc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_ssc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_sscreg.h ============================================================================== --- head/sys/arm/at91/at91_sscreg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_sscreg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_streg.h ============================================================================== --- head/sys/arm/at91/at91_streg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_streg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2005 M. Warner Losh. All rights reserved. + * Copyright (c) 2005 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_tcb.c ============================================================================== --- head/sys/arm/at91/at91_tcb.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_tcb.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2014 Warner Losh. All rights reserved. + * Copyright (c) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_twi.c ============================================================================== --- head/sys/arm/at91/at91_twi.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_twi.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_twiio.h ============================================================================== --- head/sys/arm/at91/at91_twiio.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_twiio.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91_twireg.h ============================================================================== --- head/sys/arm/at91/at91_twireg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91_twireg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91board.h ============================================================================== --- head/sys/arm/at91/at91board.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91board.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2008 Warner Losh. All rights reserved. + * Copyright (c) 2008 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91rm9200_devices.c ============================================================================== --- head/sys/arm/at91/at91rm9200_devices.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91rm9200_devices.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2012 M. Warner Losh. All Rights Reserved. + * Copyright (c) 2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91rm9200var.h ============================================================================== --- head/sys/arm/at91/at91rm9200var.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91rm9200var.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2012 M. Warner Losh. All rights reserved. + * Copyright (c) 2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91sam9x5.c ============================================================================== --- head/sys/arm/at91/at91sam9x5.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91sam9x5.c Tue May 1 16:21:01 2018 (r333142) @@ -3,7 +3,7 @@ * * Copyright (c) 2005 Olivier Houchard. All rights reserved. * Copyright (c) 2010 Greg Ansley. All rights reserved. - * Copyright (c) 2012 M. Warner Losh.. All rights reserved. + * Copyright (c) 2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91soc.c ============================================================================== --- head/sys/arm/at91/at91soc.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91soc.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2012 Warner Losh. All rights reserved. + * Copyright (c) 2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/at91soc.h ============================================================================== --- head/sys/arm/at91/at91soc.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/at91soc.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2012 Warner Losh. All rights reserved. + * Copyright (c) 2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/board_bwct.c ============================================================================== --- head/sys/arm/at91/board_bwct.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/board_bwct.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2012 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/board_eb9200.c ============================================================================== --- head/sys/arm/at91/board_eb9200.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/board_eb9200.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2012 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/board_hl200.c ============================================================================== --- head/sys/arm/at91/board_hl200.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/board_hl200.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2012 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/board_hl201.c ============================================================================== --- head/sys/arm/at91/board_hl201.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/board_hl201.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2008 Warner Losh. All rights reserved. + * Copyright (c) 2005-2008 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/board_kb920x.c ============================================================================== --- head/sys/arm/at91/board_kb920x.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/board_kb920x.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2012 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/at91/board_tsc4370.c ============================================================================== --- head/sys/arm/at91/board_tsc4370.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/board_tsc4370.c Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,7 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005-2008 Olivier Houchard. All rights reserved. - * Copyright (c) 2005-2012 Warner Losh. All rights reserved. + * Copyright (c) 2005-2012 M. Warner Losh. * Copyright (c) 2007-2014 Ian Lepore. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/at91/if_ate.c ============================================================================== --- head/sys/arm/at91/if_ate.c Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/if_ate.c Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * Copyright (c) 2009 Greg Ansley. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/at91/if_atereg.h ============================================================================== --- head/sys/arm/at91/if_atereg.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/at91/if_atereg.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 M. Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/conf/genboardid.awk ============================================================================== --- head/sys/arm/conf/genboardid.awk Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/conf/genboardid.awk Tue May 1 16:21:01 2018 (r333142) @@ -4,7 +4,7 @@ #- # SPDX-License-Identifier: BSD-2-Clause-FreeBSD # -# Copyright (c) 2012 M. Warner Losh. All Rights Reserved. +# Copyright (c) 2012 M. Warner Losh. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions Modified: head/sys/arm/include/_bus.h ============================================================================== --- head/sys/arm/include/_bus.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/include/_bus.h Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,6 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2005 M. Warner Losh. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/include/at91_gpio.h ============================================================================== --- head/sys/arm/include/at91_gpio.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/include/at91_gpio.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (C) 2006 M. Warner Losh. All rights reserved. + * Copyright (C) 2006 M. Warner Losh. * Copyright (C) 2012 Ian Lepore. All rights reserved. * * Redistribution and use in source and binary forms, with or without Modified: head/sys/arm/include/atags.h ============================================================================== --- head/sys/arm/include/atags.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/include/atags.h Tue May 1 16:21:01 2018 (r333142) @@ -2,7 +2,6 @@ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * * Copyright (c) 2012 M. Warner Losh. - * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/arm/include/board.h ============================================================================== --- head/sys/arm/include/board.h Tue May 1 15:33:21 2018 (r333141) +++ head/sys/arm/include/board.h Tue May 1 16:21:01 2018 (r333142) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2012 Warner Losh. All rights reserved. + * Copyright (c) 2012 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions From owner-svn-src-head@freebsd.org Tue May 1 16:29:26 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 66376FAF8AC; Tue, 1 May 2018 16:29:26 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0F6D06CA6B; Tue, 1 May 2018 16:29:26 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E4D7724736; Tue, 1 May 2018 16:29:25 +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 w41GTPwC011155; Tue, 1 May 2018 16:29:25 GMT (envelope-from imp@FreeBSD.org) Received: (from imp@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41GTM00011122; Tue, 1 May 2018 16:29:22 GMT (envelope-from imp@FreeBSD.org) Message-Id: <201805011629.w41GTM00011122@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: imp set sender to imp@FreeBSD.org using -f From: Warner Losh Date: Tue, 1 May 2018 16:29:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333143 - in head: etc/rc.d share/man/man4 stand/common stand/liblua sys/dev/exca sys/dev/iicbus sys/dev/nand sys/dev/pccbb tools/tools/nanobsd/dhcpd tools/tools/nanobsd/embedded X-SVN-Group: head X-SVN-Commit-Author: imp X-SVN-Commit-Paths: in head: etc/rc.d share/man/man4 stand/common stand/liblua sys/dev/exca sys/dev/iicbus sys/dev/nand sys/dev/pccbb tools/tools/nanobsd/dhcpd tools/tools/nanobsd/embedded X-SVN-Commit-Revision: 333143 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 16:29:26 -0000 Author: imp Date: Tue May 1 16:29:22 2018 New Revision: 333143 URL: https://svnweb.freebsd.org/changeset/base/333143 Log: Use M. Warner Losh everywhere on my copyrights. Remove 'All Rights Reserved' where I can. Modified: head/etc/rc.d/devmatch head/share/man/man4/sn.4 head/stand/common/zfs_cmd.c head/stand/liblua/float.h head/stand/liblua/locale.h head/stand/liblua/math.h head/sys/dev/exca/exca.c head/sys/dev/exca/excareg.h head/sys/dev/exca/excavar.h head/sys/dev/iicbus/icee.c head/sys/dev/nand/nfc_at91.h head/sys/dev/pccbb/pccbbvar.h head/tools/tools/nanobsd/dhcpd/common head/tools/tools/nanobsd/dhcpd/os-base head/tools/tools/nanobsd/embedded/beaglebone.cfg head/tools/tools/nanobsd/embedded/common head/tools/tools/nanobsd/embedded/i386.cfg head/tools/tools/nanobsd/embedded/pandaboard.cfg head/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg head/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg head/tools/tools/nanobsd/embedded/qemu-amd64.cfg head/tools/tools/nanobsd/embedded/qemu-armv7.cfg head/tools/tools/nanobsd/embedded/qemu-i386.cfg head/tools/tools/nanobsd/embedded/qemu-mips.cfg head/tools/tools/nanobsd/embedded/qemu-mips64.cfg head/tools/tools/nanobsd/embedded/qemu-powerpc.cfg head/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg head/tools/tools/nanobsd/embedded/qemu-sparc64.cfg head/tools/tools/nanobsd/embedded/rpi.cfg head/tools/tools/nanobsd/embedded/rpi2.cfg head/tools/tools/nanobsd/embedded/rpi3.cfg head/tools/tools/nanobsd/embedded/sam9260ek.cfg head/tools/tools/nanobsd/embedded/sam9g20ek.cfg Modified: head/etc/rc.d/devmatch ============================================================================== --- head/etc/rc.d/devmatch Tue May 1 16:21:01 2018 (r333142) +++ head/etc/rc.d/devmatch Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,6 @@ #!/bin/sh -# Copyright (c) 2018 Warner Losh -# All rights reserved. +# Copyright (c) 2018 M. Warner Losh # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions Modified: head/share/man/man4/sn.4 ============================================================================== --- head/share/man/man4/sn.4 Tue May 1 16:21:01 2018 (r333142) +++ head/share/man/man4/sn.4 Tue May 1 16:29:22 2018 (r333143) @@ -1,6 +1,5 @@ .\" -.\" Copyright (c) 2000 Warner Losh -.\" All rights reserved. +.\" Copyright (c) 2000 M. Warner Losh .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions Modified: head/stand/common/zfs_cmd.c ============================================================================== --- head/stand/common/zfs_cmd.c Tue May 1 16:21:01 2018 (r333142) +++ head/stand/common/zfs_cmd.c Tue May 1 16:29:22 2018 (r333143) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2018 Warner Losh - * All rights reserved. + * Copyright (c) 2018 M. Warner Losh * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/stand/liblua/float.h ============================================================================== --- head/stand/liblua/float.h Tue May 1 16:21:01 2018 (r333142) +++ head/stand/liblua/float.h Tue May 1 16:29:22 2018 (r333143) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2018 M Warner Losh - * All rights reserved. + * Copyright (c) 2018 M. Warner Losh * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/stand/liblua/locale.h ============================================================================== --- head/stand/liblua/locale.h Tue May 1 16:21:01 2018 (r333142) +++ head/stand/liblua/locale.h Tue May 1 16:29:22 2018 (r333143) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2018 M Warner Losh - * All rights reserved. + * Copyright (c) 2018 M. Warner Losh * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/stand/liblua/math.h ============================================================================== --- head/stand/liblua/math.h Tue May 1 16:21:01 2018 (r333142) +++ head/stand/liblua/math.h Tue May 1 16:29:22 2018 (r333143) @@ -1,6 +1,5 @@ /*- - * Copyright (c) 2018 M Warner Losh - * All rights reserved. + * Copyright (c) 2018 M. Warner Losh * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/dev/exca/exca.c ============================================================================== --- head/sys/dev/exca/exca.c Tue May 1 16:21:01 2018 (r333142) +++ head/sys/dev/exca/exca.c Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-4-Clause AND BSD-2-Clause-FreeBSD * - * Copyright (c) 2002-2005 M Warner Losh. All rights reserved. + * Copyright (c) 2002-2005 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/dev/exca/excareg.h ============================================================================== --- head/sys/dev/exca/excareg.h Tue May 1 16:21:01 2018 (r333142) +++ head/sys/dev/exca/excareg.h Tue May 1 16:29:22 2018 (r333143) @@ -4,7 +4,7 @@ /*- * SPDX-License-Identifier: BSD-4-Clause AND BSD-2-Clause-FreeBSD * - * Copyright (c) 2002 M Warner Losh. All rights reserved. + * Copyright (c) 2002 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/dev/exca/excavar.h ============================================================================== --- head/sys/dev/exca/excavar.h Tue May 1 16:21:01 2018 (r333142) +++ head/sys/dev/exca/excavar.h Tue May 1 16:29:22 2018 (r333143) @@ -3,7 +3,7 @@ /*- * SPDX-License-Identifier: BSD-4-Clause AND BSD-2-Clause-FreeBSD * - * Copyright (c) 2002 M Warner Losh. All rights reserved. + * Copyright (c) 2002 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/dev/iicbus/icee.c ============================================================================== --- head/sys/dev/iicbus/icee.c Tue May 1 16:21:01 2018 (r333142) +++ head/sys/dev/iicbus/icee.c Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2006 Warner Losh. All rights reserved. + * Copyright (c) 2006 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/dev/nand/nfc_at91.h ============================================================================== --- head/sys/dev/nand/nfc_at91.h Tue May 1 16:21:01 2018 (r333142) +++ head/sys/dev/nand/nfc_at91.h Tue May 1 16:29:22 2018 (r333143) @@ -1,8 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (C) 2014 Warner Losh. - * All rights reserved. + * Copyright (C) 2014 M. Warner Losh. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions Modified: head/sys/dev/pccbb/pccbbvar.h ============================================================================== --- head/sys/dev/pccbb/pccbbvar.h Tue May 1 16:21:01 2018 (r333142) +++ head/sys/dev/pccbb/pccbbvar.h Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ /*- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD * - * Copyright (c) 2003-2004 Warner Losh. + * Copyright (c) 2003-2004 M. Warner Losh. * Copyright (c) 2000,2001 Jonathan Chen. * All rights reserved. * Modified: head/tools/tools/nanobsd/dhcpd/common ============================================================================== --- head/tools/tools/nanobsd/dhcpd/common Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/dhcpd/common Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2014 Warner Losh. All Rights Reserved. +# Copyright (c) 2014 M. Warner Losh. # Copyright (c) 2010 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/dhcpd/os-base ============================================================================== --- head/tools/tools/nanobsd/dhcpd/os-base Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/dhcpd/os-base Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2014 Warner Losh. All Rights Reserved. +# Copyright (c) 2014 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/beaglebone.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/beaglebone.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/beaglebone.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/common ============================================================================== --- head/tools/tools/nanobsd/embedded/common Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/common Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/i386.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/i386.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/i386.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/pandaboard.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/pandaboard.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/pandaboard.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2016 Warner Losh. All Rights Reserved. +# Copyright (c) 2016 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-amd64-uefi-bios.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-amd64-uefi.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-amd64.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-amd64.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-amd64.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-armv7.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-armv7.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-armv7.cfg Tue May 1 16:29:22 2018 (r333143) @@ -2,7 +2,7 @@ #- # Copyright (c) 2016 Andrew Turner. All Rights Reserved. -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-i386.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-i386.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-i386.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-mips.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-mips.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-mips.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-mips64.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-mips64.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-mips64.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-powerpc.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-powerpc.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-powerpc.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-powerpc64.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/qemu-sparc64.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/qemu-sparc64.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/qemu-sparc64.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/rpi.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/rpi.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/rpi.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/rpi2.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/rpi2.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/rpi2.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/rpi3.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/rpi3.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/rpi3.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/sam9260ek.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/sam9260ek.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/sam9260ek.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without Modified: head/tools/tools/nanobsd/embedded/sam9g20ek.cfg ============================================================================== --- head/tools/tools/nanobsd/embedded/sam9g20ek.cfg Tue May 1 16:21:01 2018 (r333142) +++ head/tools/tools/nanobsd/embedded/sam9g20ek.cfg Tue May 1 16:29:22 2018 (r333143) @@ -1,7 +1,7 @@ # $FreeBSD$ #- -# Copyright (c) 2015 Warner Losh. All Rights Reserved. +# Copyright (c) 2015 M. Warner Losh. # Copyright (c) 2010-2011 iXsystems, Inc., All rights reserved. # # Redistribution and use in source and binary forms, with or without From owner-svn-src-head@freebsd.org Tue May 1 16:30:50 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0AE6CFAFAA6; Tue, 1 May 2018 16:30:50 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B186F6CC69; Tue, 1 May 2018 16:30:49 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 92DFC24841; Tue, 1 May 2018 16:30:49 +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 w41GUnv7011307; Tue, 1 May 2018 16:30:49 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41GUmkN011298; Tue, 1 May 2018 16:30:48 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201805011630.w41GUmkN011298@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Tue, 1 May 2018 16:30:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333144 - in head: . include lib/libsysdecode share/man/man4 sys/conf sys/dev/lmc sys/modules sys/modules/lmc tools/kerneldoc/subsys usr.sbin usr.sbin/lmcconfig X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: in head: . include lib/libsysdecode share/man/man4 sys/conf sys/dev/lmc sys/modules sys/modules/lmc tools/kerneldoc/subsys usr.sbin usr.sbin/lmcconfig X-SVN-Commit-Revision: 333144 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 16:30:50 -0000 Author: emaste Date: Tue May 1 16:30:48 2018 New Revision: 333144 URL: https://svnweb.freebsd.org/changeset/base/333144 Log: Retire lmc(4) This driver supports legacy, 32-bit PCI devices, and had an ambiguous license. Supported devices were already reported to be rare in 2003 (when an earlier version of the driver was removed in r123201). Reviewed by: rgrimes Relnotes: Yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D15245 Deleted: head/share/man/man4/lmc.4 head/sys/dev/lmc/ head/sys/modules/lmc/ head/tools/kerneldoc/subsys/Doxyfile-dev_lmc head/usr.sbin/lmcconfig/ Modified: head/ObsoleteFiles.inc head/UPDATING head/include/Makefile head/lib/libsysdecode/Makefile head/share/man/man4/Makefile head/sys/conf/NOTES head/sys/conf/files head/sys/modules/Makefile head/usr.sbin/Makefile Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Tue May 1 16:29:22 2018 (r333143) +++ head/ObsoleteFiles.inc Tue May 1 16:30:48 2018 (r333144) @@ -38,6 +38,13 @@ # xargs -n1 | sort | uniq -d; # done +# 20180501: retire lmc +OLD_FILES+=usr/include/dev/lmc/if_lmc.h +OLD_DIRS+=usr/include/dev/lmc +OLD_FILES+=usr/sbin/lmcconfig +OLD_FILES+=usr/share/man/man4/lmc.4.gz +OLD_FILES+=usr/share/man/man4/if_lmc.4.gz +OLD_FILES+=usr/share/man/man8/lmcconfig.8.gz # 20180417: remove fuswintr and suswintr OLD_FILES+=usr/share/man/man9/fuswintr.9.gz OLD_FILES+=usr/share/man/man9/suswintr.9.gz Modified: head/UPDATING ============================================================================== --- head/UPDATING Tue May 1 16:29:22 2018 (r333143) +++ head/UPDATING Tue May 1 16:30:48 2018 (r333144) @@ -51,6 +51,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW: ****************************** SPECIAL WARNING: ****************************** +20180501: + The lmc(4) driver has been removed. This was a WAN interface + card that was already reportedly rare in 2003, and had an ambiguous + license. If you have device lmc in your kernel config file it must + be removed. + 20180413: Support for Arcnet networks has been removed. If you have device arcnet or device cm in your kernel config file they must be Modified: head/include/Makefile ============================================================================== --- head/include/Makefile Tue May 1 16:29:22 2018 (r333143) +++ head/include/Makefile Tue May 1 16:30:48 2018 (r333144) @@ -45,7 +45,7 @@ LDIRS= bsm cam geom net net80211 netgraph netinet neti LSUBDIRS= cam/ata cam/mmc cam/nvme cam/scsi \ dev/acpica dev/agp dev/an dev/bktr dev/ciss dev/filemon dev/firewire \ dev/hwpmc dev/hyperv \ - dev/ic dev/iicbus dev/io dev/lmc dev/mfi dev/mmc dev/nvme \ + dev/ic dev/iicbus dev/io dev/mfi dev/mmc dev/nvme \ dev/ofw dev/pbio dev/pci ${_dev_powermac_nvram} dev/ppbus dev/smbus \ dev/speaker dev/tcp_log dev/vkbd dev/wi \ fs/devfs fs/fdescfs fs/msdosfs fs/nandfs fs/nfs fs/nullfs \ Modified: head/lib/libsysdecode/Makefile ============================================================================== --- head/lib/libsysdecode/Makefile Tue May 1 16:29:22 2018 (r333143) +++ head/lib/libsysdecode/Makefile Tue May 1 16:30:48 2018 (r333144) @@ -120,9 +120,6 @@ CFLAGS+=-DPF # Workaround duplicate declarations in CFLAGS.gcc.ioctl.c+= -Wno-redundant-decls -# Workaround warning for unused ssi_cables[] in -CFLAGS.gcc.ioctl.c+= -Wno-unused - CFLAGS.gcc+= ${CFLAGS.gcc.${.IMPSRC}} DEPENDOBJS+= tables.h Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Tue May 1 16:29:22 2018 (r333143) +++ head/share/man/man4/Makefile Tue May 1 16:30:48 2018 (r333144) @@ -266,7 +266,6 @@ MAN= aac.4 \ ${_linux.4} \ liquidio.4 \ lm75.4 \ - lmc.4 \ lo.4 \ lp.4 \ lpbb.4 \ @@ -688,7 +687,6 @@ MLINKS+=lagg.4 trunk.4 MLINKS+=lagg.4 if_lagg.4 MLINKS+=le.4 if_le.4 MLINKS+=lge.4 if_lge.4 -MLINKS+=lmc.4 if_lmc.4 MLINKS+=lo.4 loop.4 MLINKS+=lp.4 plip.4 MLINKS+=malo.4 if_malo.4 Modified: head/sys/conf/NOTES ============================================================================== --- head/sys/conf/NOTES Tue May 1 16:29:22 2018 (r333143) +++ head/sys/conf/NOTES Tue May 1 16:30:48 2018 (r333144) @@ -1982,7 +1982,6 @@ device xmphy # XaQti XMAC II # Yukon II Gigabit controllers, including 88E8021, 88E8022, 88E8061, # 88E8062, 88E8035, 88E8036, 88E8038, 88E8050, 88E8052, 88E8053, # 88E8055, 88E8056 and D-Link 560T/550SX. -# lmc: Support for the LMC/SBE wide-area network interface cards. # mlx5: Mellanox ConnectX-4 and ConnectX-4 LX IB and Eth shared code module. # mlx5en:Mellanox ConnectX-4 and ConnectX-4 LX PCIe Ethernet adapters. # my: Myson Fast Ethernet (MTD80X, MTD89X) @@ -2135,9 +2134,6 @@ device ti # Alteon Networks Tigon I/II gigabit Ether device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') device vxge # Exar/Neterion XFrame 3100 10GbE - -# PCI WAN adapters. -device lmc # PCI IEEE 802.11 Wireless NICs device ath # Atheros pci/cardbus NIC's Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Tue May 1 16:29:22 2018 (r333143) +++ head/sys/conf/files Tue May 1 16:30:48 2018 (r333144) @@ -2373,7 +2373,6 @@ lio_23xx_nic.bin.fw optional lio \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "lio_23xx_nic.bin.fw" -dev/lmc/if_lmc.c optional lmc dev/malo/if_malo.c optional malo dev/malo/if_malohal.c optional malo dev/malo/if_malo_pci.c optional malo pci Modified: head/sys/modules/Makefile ============================================================================== --- head/sys/modules/Makefile Tue May 1 16:29:22 2018 (r333143) +++ head/sys/modules/Makefile Tue May 1 16:30:48 2018 (r333144) @@ -226,7 +226,6 @@ SUBDIR= \ ${_linux64} \ linuxkpi \ ${_lio} \ - lmc \ lpt \ mac_biba \ mac_bsdextended \ Modified: head/usr.sbin/Makefile ============================================================================== --- head/usr.sbin/Makefile Tue May 1 16:29:22 2018 (r333143) +++ head/usr.sbin/Makefile Tue May 1 16:30:48 2018 (r333144) @@ -162,7 +162,6 @@ SUBDIR.${MK_MAN_UTILS}+= manctl SUBDIR.${MK_NAND}+= nandsim SUBDIR.${MK_NAND}+= nandtool SUBDIR.${MK_NETGRAPH}+= flowctl -SUBDIR.${MK_NETGRAPH}+= lmcconfig SUBDIR.${MK_NETGRAPH}+= ngctl SUBDIR.${MK_NETGRAPH}+= nghook SUBDIR.${MK_NIS}+= rpc.yppasswdd From owner-svn-src-head@freebsd.org Tue May 1 17:14:55 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 129B7FB0F06; Tue, 1 May 2018 17:14:55 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-io0-f169.google.com (mail-io0-f169.google.com [209.85.223.169]) (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 A055677E02; Tue, 1 May 2018 17:14:54 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by mail-io0-f169.google.com with SMTP id t23-v6so14367273ioc.10; Tue, 01 May 2018 10:14:54 -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=XwswZ1RL/GXCfDW+CQqe5XYFAFAHH3FIdiOt3vu8nwU=; b=TtaZjgVUkRcBjtIgtpwdV20sP6WN96WsZzga6Y2eFm2Q7p9yirf2lURNmJulLMYXj+ dn14rF2az7cSgPEeJQB552nk2TABLA7UcSBlm2P3l52ZQgxRhvQSYS2cYv26YxuYRivf WumEjOiWWhqYeAgrmPCQUqJn6X5Nm11yMW0loaDO3QYnnmZ/It8Uf3XgZgk/joIOKK14 h5kj8A4LK00LCz30sZxmpg9wPZizp4kHuEYt5bqJq2L84rjm5LAy2SAZ30G7PcaYKAEf oPONQxjOXYbScTTfVvSNCgSnNqUE1fOEWP3eaQFvM/SCDb61T6yOIuRjRo4wOPYfVaqM Ddtg== X-Gm-Message-State: ALQs6tCfBo+hcrzhzY3SoKNhQ2kVJRx6TybgoTdDQSN6bc9c7VVQX+Qf Jv05/4GqBj+42QTkj4a2KWkytX4X X-Google-Smtp-Source: AB8JxZohOxrRByRM1E4ibWje0QB0d+cHTNzzo+aL+eiib49UQ+Bu/0EawmsnC0FyoHwF7L2UUkgN0g== X-Received: by 2002:a6b:980a:: with SMTP id a10-v6mr17952017ioe.212.1525191137965; Tue, 01 May 2018 09:12:17 -0700 (PDT) Received: from mail-io0-f169.google.com (mail-io0-f169.google.com. [209.85.223.169]) by smtp.gmail.com with ESMTPSA id g1-v6sm325996itg.27.2018.05.01.09.12.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 May 2018 09:12:17 -0700 (PDT) Received: by mail-io0-f169.google.com with SMTP id e20-v6so14188404iof.4; Tue, 01 May 2018 09:12:17 -0700 (PDT) X-Received: by 2002:a6b:b513:: with SMTP id e19-v6mr12801068iof.267.1525191137340; Tue, 01 May 2018 09:12:17 -0700 (PDT) MIME-Version: 1.0 Reply-To: cem@freebsd.org Received: by 2002:a02:a40b:0:0:0:0:0 with HTTP; Tue, 1 May 2018 09:12:16 -0700 (PDT) In-Reply-To: <201805011559.w41FxUr7026647@pdx.rh.CN85.dnsmgr.net> References: <201805011517.w41FHlqI075276@repo.freebsd.org> <201805011559.w41FxUr7026647@pdx.rh.CN85.dnsmgr.net> From: Conrad Meyer Date: Tue, 1 May 2018 09:12:16 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve To: "Rodney W. Grimes" 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.25 Precedence: list List-Id: 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, 01 May 2018 17:14:55 -0000 On Tue, May 1, 2018 at 8:59 AM, Rodney W. Grimes wrote: > The All rights reserved clause is an obsolete requirement from the > 1910 Buenos Aires Convention, and should not be used on new code > since 2000. Can you please provide a source for that claim? Thanks, Conrad From owner-svn-src-head@freebsd.org Tue May 1 17:18:15 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6EB0FFB10A4; Tue, 1 May 2018 17:18:15 +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 CC35678333; Tue, 1 May 2018 17:18:14 +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 w41HIBCZ027005; Tue, 1 May 2018 10:18:11 -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 w41HIBnJ027004; Tue, 1 May 2018 10:18:11 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805011718.w41HIBnJ027004@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve In-Reply-To: To: cem@freebsd.org Date: Tue, 1 May 2018 10:18:11 -0700 (PDT) CC: "Rodney W. Grimes" , 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.25 Precedence: list List-Id: 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, 01 May 2018 17:18:15 -0000 [ Charset UTF-8 unsupported, converting... ] > On Tue, May 1, 2018 at 8:59 AM, Rodney W. Grimes > wrote: > > The All rights reserved clause is an obsolete requirement from the > > 1910 Buenos Aires Convention, and should not be used on new code > > since 2000. > > Can you please provide a source for that claim? Google "All rights reserved" Google "Buenes Aires Convention" > Thanks, > Conrad -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Tue May 1 17:32:44 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 731E7FB16E5; Tue, 1 May 2018 17:32:44 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1E2B57B184; Tue, 1 May 2018 17:32:44 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 171932527E; Tue, 1 May 2018 17:32:44 +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 w41HWh47045840; Tue, 1 May 2018 17:32:43 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41HWhCL045833; Tue, 1 May 2018 17:32:43 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201805011732.w41HWhCL045833@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Tue, 1 May 2018 17:32:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333145 - in head/sys: amd64/amd64 arm/arm arm64/arm64 i386/i386 kern mips/mips sparc64/sparc64 X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in head/sys: amd64/amd64 arm/arm arm64/arm64 i386/i386 kern mips/mips sparc64/sparc64 X-SVN-Commit-Revision: 333145 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 17:32:44 -0000 Author: markj Date: Tue May 1 17:32:43 2018 New Revision: 333145 URL: https://svnweb.freebsd.org/changeset/base/333145 Log: Print the dump progress indicator after calling dump_start(). Dumpers may wish to print messages from an initialization hook; this change ensures that such messages aren't mixed with output from the generic dump code. MFC after: 1 week Modified: head/sys/amd64/amd64/minidump_machdep.c head/sys/arm/arm/minidump_machdep.c head/sys/arm64/arm64/minidump_machdep.c head/sys/i386/i386/minidump_machdep.c head/sys/kern/kern_dump.c head/sys/mips/mips/minidump_machdep.c head/sys/sparc64/sparc64/dump_machdep.c Modified: head/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- head/sys/amd64/amd64/minidump_machdep.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/amd64/amd64/minidump_machdep.c Tue May 1 17:32:43 2018 (r333145) @@ -337,12 +337,12 @@ minidumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_AMD64_VERSION, dumpsize); - printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, - ptoa((uintmax_t)physmem) / 1048576); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, + ptoa((uintmax_t)physmem) / 1048576); /* Dump my header */ bzero(&fakepd, sizeof(fakepd)); Modified: head/sys/arm/arm/minidump_machdep.c ============================================================================== --- head/sys/arm/arm/minidump_machdep.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/arm/arm/minidump_machdep.c Tue May 1 17:32:43 2018 (r333145) @@ -246,12 +246,12 @@ minidumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_ARM_VERSION, dumpsize); - printf("Physical memory: %u MB\n", ptoa((uintmax_t)physmem) / 1048576); - printf("Dumping %llu MB:", (long long)dumpsize >> 20); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Physical memory: %u MB\n", ptoa((uintmax_t)physmem) / 1048576); + printf("Dumping %llu MB:", (long long)dumpsize >> 20); /* Dump my header */ bzero(dumpbuf, sizeof(dumpbuf)); Modified: head/sys/arm64/arm64/minidump_machdep.c ============================================================================== --- head/sys/arm64/arm64/minidump_machdep.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/arm64/arm64/minidump_machdep.c Tue May 1 17:32:43 2018 (r333145) @@ -289,12 +289,12 @@ minidumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_AARCH64_VERSION, dumpsize); - printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, - ptoa((uintmax_t)physmem) / 1048576); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, + ptoa((uintmax_t)physmem) / 1048576); /* Dump my header */ bzero(&tmpbuffer, sizeof(tmpbuffer)); Modified: head/sys/i386/i386/minidump_machdep.c ============================================================================== --- head/sys/i386/i386/minidump_machdep.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/i386/i386/minidump_machdep.c Tue May 1 17:32:43 2018 (r333145) @@ -254,12 +254,12 @@ minidumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_I386_VERSION, dumpsize); - printf("Physical memory: %ju MB\n", ptoa((uintmax_t)physmem) / 1048576); - printf("Dumping %llu MB:", (long long)dumpsize >> 20); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Physical memory: %ju MB\n", ptoa((uintmax_t)physmem) / 1048576); + printf("Dumping %llu MB:", (long long)dumpsize >> 20); /* Dump my header */ bzero(&fakept, sizeof(fakept)); Modified: head/sys/kern/kern_dump.c ============================================================================== --- head/sys/kern/kern_dump.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/kern/kern_dump.c Tue May 1 17:32:43 2018 (r333145) @@ -330,12 +330,12 @@ dumpsys_generic(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_ARCH_VERSION, dumpsize); - printf("Dumping %ju MB (%d chunks)\n", (uintmax_t)dumpsize >> 20, - ehdr.e_phnum - DUMPSYS_NUM_AUX_HDRS); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Dumping %ju MB (%d chunks)\n", (uintmax_t)dumpsize >> 20, + ehdr.e_phnum - DUMPSYS_NUM_AUX_HDRS); /* Dump ELF header */ error = dumpsys_buf_write(di, (char*)&ehdr, sizeof(ehdr)); Modified: head/sys/mips/mips/minidump_machdep.c ============================================================================== --- head/sys/mips/mips/minidump_machdep.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/mips/mips/minidump_machdep.c Tue May 1 17:32:43 2018 (r333145) @@ -264,12 +264,12 @@ minidumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_MIPS_VERSION, dumpsize); - printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, - ptoa((uintmax_t)physmem) / 1048576); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Dumping %llu out of %ju MB:", (long long)dumpsize >> 20, + ptoa((uintmax_t)physmem) / 1048576); /* Dump my header */ bzero(tmpbuffer, sizeof(tmpbuffer)); Modified: head/sys/sparc64/sparc64/dump_machdep.c ============================================================================== --- head/sys/sparc64/sparc64/dump_machdep.c Tue May 1 16:30:48 2018 (r333144) +++ head/sys/sparc64/sparc64/dump_machdep.c Tue May 1 17:32:43 2018 (r333145) @@ -98,11 +98,11 @@ dumpsys(struct dumperinfo *di) dump_init_header(di, &kdh, KERNELDUMPMAGIC, KERNELDUMP_SPARC64_VERSION, size); - printf("Dumping %lu MB (%d chunks)\n", (u_long)(size >> 20), nreg); - error = dump_start(di, &kdh); if (error != 0) goto fail; + + printf("Dumping %lu MB (%d chunks)\n", (u_long)(size >> 20), nreg); /* Dump the private header. */ hdr.dh_hdr_size = hdrsize; From owner-svn-src-head@freebsd.org Tue May 1 17:33:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78F21FB1723; Tue, 1 May 2018 17:33:17 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-io0-f173.google.com (mail-io0-f173.google.com [209.85.223.173]) (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 114567B700; Tue, 1 May 2018 17:33:16 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by mail-io0-f173.google.com with SMTP id e12-v6so14437214iob.8; Tue, 01 May 2018 10:33:16 -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=hpzwjLLjp01r6QyV9gISJnu0atBmxaCC9oM1/ee7Y8Q=; b=XYOOzwknwxjRRseVksavUBFkYpj8ZCcevZ2a2KeG4Gv/T35D+P4fkxkzvtzqp7bFDc WZK5Ts0K/BUEM2J35grBExba6tBSkcWP53/MHjX11YeI2qFfU0ZXSx5yTZ+1oo/IoRmc rpmzLFDA9IpIHvEAxtUYrSpFgahR7GWWOq7QPlbri+vDq5yJSUdJXBz30QSZPerqhLmC DKxLjH7fE7jOM/fFiagUglKG+TlX+NrzjTOGeNTvequqxhfIwaJw6sTpMJ9A73dO21pX j1Wfc56zlMrRoc2YfnfSU8IHc1jiTEhcMdjlo0HMc9iP7mQLYZynRGiOSIFJORY4k1b5 WAtQ== X-Gm-Message-State: ALQs6tDj+QljEoY7MldwSK/0aR+abzVU7ycZ7Qp3OasU0k8aSd55EeLz Jm2RFf45Cs82CywovwrY/4/TJXMM X-Google-Smtp-Source: AB8JxZrV2HnPPnwBl6xEoc/F4JH/wERNXW2WI7ja4EMfyNgigm0+HspCIH4CwVdUgeX9zQiRf7Bnzg== X-Received: by 2002:a6b:6708:: with SMTP id b8-v6mr17385832ioc.178.1525195996071; Tue, 01 May 2018 10:33:16 -0700 (PDT) Received: from mail-it0-f50.google.com (mail-it0-f50.google.com. [209.85.214.50]) by smtp.gmail.com with ESMTPSA id b75-v6sm5596086ioa.50.2018.05.01.10.33.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 01 May 2018 10:33:15 -0700 (PDT) Received: by mail-it0-f50.google.com with SMTP id p3-v6so14421408itc.0; Tue, 01 May 2018 10:33:15 -0700 (PDT) X-Received: by 2002:a24:b310:: with SMTP id e16-v6mr17178062itf.58.1525195995772; Tue, 01 May 2018 10:33:15 -0700 (PDT) MIME-Version: 1.0 Reply-To: cem@freebsd.org Received: by 2002:a02:a40b:0:0:0:0:0 with HTTP; Tue, 1 May 2018 10:33:15 -0700 (PDT) In-Reply-To: <201805011718.w41HIBnJ027004@pdx.rh.CN85.dnsmgr.net> References: <201805011718.w41HIBnJ027004@pdx.rh.CN85.dnsmgr.net> From: Conrad Meyer Date: Tue, 1 May 2018 10:33:15 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve To: "Rodney W. Grimes" 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.25 Precedence: list List-Id: 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, 01 May 2018 17:33:17 -0000 On Tue, May 1, 2018 at 10:18 AM, Rodney W. Grimes wrote: > [ Charset UTF-8 unsupported, converting... ] >> On Tue, May 1, 2018 at 8:59 AM, Rodney W. Grimes >> wrote: >> > The All rights reserved clause is an obsolete requirement from the >> > 1910 Buenos Aires Convention, and should not be used on new code >> > since 2000. >> >> Can you please provide a source for that claim? > > Google "All rights reserved" > Google "Buenes Aires Convention" Telling me to go google something is not a source, and is pretty rude. From owner-svn-src-head@freebsd.org Tue May 1 17:35:27 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D73F1FB185A; Tue, 1 May 2018 17:35:27 +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 F3D517C992; Tue, 1 May 2018 17:35:26 +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 w41HZO9Y027148; Tue, 1 May 2018 10:35:24 -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 w41HZORN027147; Tue, 1 May 2018 10:35:24 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805011735.w41HZORN027147@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve In-Reply-To: To: cem@freebsd.org Date: Tue, 1 May 2018 10:35:24 -0700 (PDT) CC: "Rodney W. Grimes" , 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.25 Precedence: list List-Id: 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, 01 May 2018 17:35:28 -0000 [ Charset UTF-8 unsupported, converting... ] > On Tue, May 1, 2018 at 10:18 AM, Rodney W. Grimes > wrote: > > [ Charset UTF-8 unsupported, converting... ] > >> On Tue, May 1, 2018 at 8:59 AM, Rodney W. Grimes > >> wrote: > >> > The All rights reserved clause is an obsolete requirement from the > >> > 1910 Buenos Aires Convention, and should not be used on new code > >> > since 2000. > >> > >> Can you please provide a source for that claim? > > > > Google "All rights reserved" > > Google "Buenes Aires Convention" > > Telling me to go google something is not a source, and is pretty rude. Asserting that I need to provide a source is actually the rude part. -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Tue May 1 17:39:21 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8019BFB19AD; Tue, 1 May 2018 17:39:21 +0000 (UTC) (envelope-from jpaetzel@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3473C7CBC6; Tue, 1 May 2018 17:39:21 +0000 (UTC) (envelope-from jpaetzel@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2B2FA25282; Tue, 1 May 2018 17:39:21 +0000 (UTC) (envelope-from jpaetzel@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41HdLXe046131; Tue, 1 May 2018 17:39:21 GMT (envelope-from jpaetzel@FreeBSD.org) Received: (from jpaetzel@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41HdKLJ046129; Tue, 1 May 2018 17:39:20 GMT (envelope-from jpaetzel@FreeBSD.org) Message-Id: <201805011739.w41HdKLJ046129@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jpaetzel set sender to jpaetzel@FreeBSD.org using -f From: Josh Paetzel Date: Tue, 1 May 2018 17:39:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333146 - head/sys/dev/oce X-SVN-Group: head X-SVN-Commit-Author: jpaetzel X-SVN-Commit-Paths: head/sys/dev/oce X-SVN-Commit-Revision: 333146 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 17:39:21 -0000 Author: jpaetzel Date: Tue May 1 17:39:20 2018 New Revision: 333146 URL: https://svnweb.freebsd.org/changeset/base/333146 Log: Add ability to perform a firmware reset during driver initialization. Required by Lancer Gen 5 hardware. Submitted by: Ram Kishore Vegesna Obtained from: Broadcom Modified: head/sys/dev/oce/oce_if.h head/sys/dev/oce/oce_mbox.c Modified: head/sys/dev/oce/oce_if.h ============================================================================== --- head/sys/dev/oce/oce_if.h Tue May 1 17:32:43 2018 (r333145) +++ head/sys/dev/oce/oce_if.h Tue May 1 17:39:20 2018 (r333146) @@ -1016,6 +1016,7 @@ void oce_free_lro(POCE_SOFTC sc); * Mailbox functions ************************************************************/ int oce_fw_clean(POCE_SOFTC sc); +int oce_wait_ready(POCE_SOFTC sc); int oce_reset_fun(POCE_SOFTC sc); int oce_mbox_init(POCE_SOFTC sc); int oce_mbox_dispatch(POCE_SOFTC sc, uint32_t tmo_sec); Modified: head/sys/dev/oce/oce_mbox.c ============================================================================== --- head/sys/dev/oce/oce_mbox.c Tue May 1 17:32:43 2018 (r333145) +++ head/sys/dev/oce/oce_mbox.c Tue May 1 17:39:20 2018 (r333146) @@ -43,6 +43,34 @@ #include "oce_if.h" extern uint32_t sfp_vpd_dump_buffer[TRANSCEIVER_DATA_NUM_ELE]; +int +oce_wait_ready(POCE_SOFTC sc) +{ +#define SLIPORT_READY_TIMEOUT 30000 + uint32_t sliport_status, i; + + if (!IS_XE201(sc)) + return (-1); + + for (i = 0; i < SLIPORT_READY_TIMEOUT; i++) { + sliport_status = OCE_READ_REG32(sc, db, SLIPORT_STATUS_OFFSET); + if (sliport_status & SLIPORT_STATUS_RDY_MASK) + return 0; + + if (sliport_status & SLIPORT_STATUS_ERR_MASK && + !(sliport_status & SLIPORT_STATUS_RN_MASK)) { + device_printf(sc->dev, "Error detected in the card\n"); + return EIO; + } + + DELAY(1000); + } + + device_printf(sc->dev, "Firmware wait timed out\n"); + + return (-1); +} + /** * @brief Reset (firmware) common function * @param sc software handle to the device @@ -56,26 +84,36 @@ oce_reset_fun(POCE_SOFTC sc) struct ioctl_common_function_reset *fwcmd; int rc = 0; - if (sc->flags & OCE_FLAGS_FUNCRESET_RQD) { - mb = OCE_DMAPTR(&sc->bsmbx, struct oce_bmbx); - mbx = &mb->mbx; - bzero(mbx, sizeof(struct oce_mbx)); + if (IS_XE201(sc)) { + OCE_WRITE_REG32(sc, db, SLIPORT_CONTROL_OFFSET, + SLI_PORT_CONTROL_IP_MASK); - fwcmd = (struct ioctl_common_function_reset *)&mbx->payload; - mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, - MBX_SUBSYSTEM_COMMON, - OPCODE_COMMON_FUNCTION_RESET, - 10, /* MBX_TIMEOUT_SEC */ - sizeof(struct - ioctl_common_function_reset), - OCE_MBX_VER_V0); + rc = oce_wait_ready(sc); + if (rc) { + device_printf(sc->dev, "Firmware reset Failed\n"); + } - mbx->u0.s.embedded = 1; - mbx->payload_length = - sizeof(struct ioctl_common_function_reset); - - rc = oce_mbox_dispatch(sc, 2); + return rc; } + + mb = OCE_DMAPTR(&sc->bsmbx, struct oce_bmbx); + mbx = &mb->mbx; + bzero(mbx, sizeof(struct oce_mbx)); + + fwcmd = (struct ioctl_common_function_reset *)&mbx->payload; + mbx_common_req_hdr_init(&fwcmd->hdr, 0, 0, + MBX_SUBSYSTEM_COMMON, + OPCODE_COMMON_FUNCTION_RESET, + 10, /* MBX_TIMEOUT_SEC */ + sizeof(struct + ioctl_common_function_reset), + OCE_MBX_VER_V0); + + mbx->u0.s.embedded = 1; + mbx->payload_length = + sizeof(struct ioctl_common_function_reset); + + rc = oce_mbox_dispatch(sc, 2); return rc; } From owner-svn-src-head@freebsd.org Tue May 1 17:48:51 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 459D2FB1F4C; Tue, 1 May 2018 17:48:51 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D96FC7F212; Tue, 1 May 2018 17:48:50 +0000 (UTC) (envelope-from scottl@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CF7692541C; Tue, 1 May 2018 17:48:50 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41HmocJ051683; Tue, 1 May 2018 17:48:50 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41HmoxI051682; Tue, 1 May 2018 17:48:50 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <201805011748.w41HmoxI051682@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Tue, 1 May 2018 17:48:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333147 - head/sys/cam X-SVN-Group: head X-SVN-Commit-Author: scottl X-SVN-Commit-Paths: head/sys/cam X-SVN-Commit-Revision: 333147 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 17:48:51 -0000 Author: scottl Date: Tue May 1 17:48:50 2018 New Revision: 333147 URL: https://svnweb.freebsd.org/changeset/base/333147 Log: Add and fix comments for cam_periph_runccb() Sponsored by: Netflix Modified: head/sys/cam/cam_periph.c Modified: head/sys/cam/cam_periph.c ============================================================================== --- head/sys/cam/cam_periph.c Tue May 1 17:39:20 2018 (r333146) +++ head/sys/cam/cam_periph.c Tue May 1 17:48:50 2018 (r333147) @@ -1148,6 +1148,10 @@ cam_periph_ccbwait(union ccb *ccb) ccb->ccb_h.status, ccb->ccb_h.pinfo.index)); } +/* + * Dispatch a CCB and wait for it to complete. If the CCB has set a + * callback function (ccb->ccb_h.cbfcnp), it will be overwritten and lost. + */ int cam_periph_runccb(union ccb *ccb, int (*error_routine)(union ccb *ccb, @@ -1201,9 +1205,9 @@ cam_periph_runccb(union ccb *ccb, /* * If we're polling, then we need to ensure that we have ample resources - * in the periph. - * cam_periph_error can reschedule the ccb by calling xpt_action and returning - * ERESTART, so we have to effect the polling in the do loop below. + * in the periph. cam_periph_error can reschedule the ccb by calling + * xpt_action and returning ERESTART, so we have to effect the polling + * in the do loop below. */ if (must_poll) { timeout = xpt_poll_setup(ccb); From owner-svn-src-head@freebsd.org Tue May 1 18:07:52 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C432FFB280A for ; Tue, 1 May 2018 18:07:52 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-io0-x236.google.com (mail-io0-x236.google.com [IPv6:2607:f8b0:4001:c06::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 4FCDC84BD1 for ; Tue, 1 May 2018 18:07:52 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-io0-x236.google.com with SMTP id a10-v6so14544596ioc.9 for ; Tue, 01 May 2018 11:07:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=ay2+ZLFoSNx4K/pUkGqsxU8GGtIIqRBvEEd85GThG1g=; b=lo3zkrkbIllQA83ce0HuAYgURVvRyS64mnEsX6gn4W6NHaKOpBDT7GF6SvnbNG9RPR lBbJYx8JpavI4MHsIhGKcrnnPHC5yeDjj7GVj35LvpKJb63nFCpa6ElRGyX40eS7xj4J chxQTBnDP5pGKPZmeh/XH8xyQoc0if5KaNKyBeW1RChlebtsA8GGnGdlrRxjbTgmzp5o 7yLx678tkSRV0f/Tkd+2f1oaDAGfwjtoZ3csi7tIK4rQKaDrzrxJgcE+a+wBEebiIWH3 yIpse+8sXQnYR1nWVmhTaQQbqwDnpXsXrv138SMxTqJP++c7/QmL3HcMXy7I57uhfifS sjqQ== 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=ay2+ZLFoSNx4K/pUkGqsxU8GGtIIqRBvEEd85GThG1g=; b=qJVOZbJLRjMB5ZpdxufddkGvbdA4+qW4sTl0amm79ac7hVAgla1NSGLZ3BSAxzZ88P mcY3h/Xx5HQih5CtRz2wSet1az/nYOmnyPum+WIXrdMeStqZ9J37PcePHDX9JhbV5gza 7SnEqKmd9AwMcZezJaNIPoKpKJqQhON3T807Nk0ELmbfxaxFKAIg1L13BM6/MYImBjiG HDxYjPBsC8KsMcF4aKqMhwiZHF+DGM8o+ahd0KNzydpWX9w5W8ykxxlyxHY1m0S64VJE Gmpld9AO9ko0XXELKcdcqmzLt2TWB25aLGPSJ95xpoU8w0AP103x3UgB/R1BZuGCVTSp 1qbw== X-Gm-Message-State: ALQs6tBFQxBiFaodezc7g7fmNFIwuYK2NB31libYejz+2NDNt9SSIn3+ 7edJDSEahHgBSvJmI79WMBXh7C3WX8gu0H84Kqd7iQ== X-Google-Smtp-Source: AB8JxZqsoHZn9Ni6cggqIr5JXN0ehzh4vvBMMpAudgr3Gdtq0+tQeavc6SunAuGjamFFIEHDxcVg7c95hknlEsufkYI= X-Received: by 2002:a6b:d404:: with SMTP id l4-v6mr17763730iog.37.1525198071641; Tue, 01 May 2018 11:07:51 -0700 (PDT) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 2002:a4f:a65a:0:0:0:0:0 with HTTP; Tue, 1 May 2018 11:07:50 -0700 (PDT) X-Originating-IP: [2603:300b:6:5100:1052:acc7:f9de:2b6d] In-Reply-To: References: <201805011517.w41FHlqI075276@repo.freebsd.org> <201805011559.w41FxUr7026647@pdx.rh.CN85.dnsmgr.net> From: Warner Losh Date: Tue, 1 May 2018 12:07:50 -0600 X-Google-Sender-Auth: JxTeAIuHiYOD_-xZaLndqY7znRY Message-ID: Subject: Re: svn commit: r333140 - head/usr.sbin/bhyve To: "Conrad E. Meyer" Cc: "Rodney W. Grimes" , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 01 May 2018 18:07:53 -0000 On Tue, May 1, 2018 at 10:12 AM, Conrad Meyer wrote: > On Tue, May 1, 2018 at 8:59 AM, Rodney W. Grimes > wrote: > > The All rights reserved clause is an obsolete requirement from the > > 1910 Buenos Aires Convention, and should not be used on new code > > since 2000. > > Can you please provide a source for that claim? > https://en.wikipedia.org/wiki/Buenos_Aires_Convention has all the relevant information. It's backed up by https://definitions.uslegal.com/b/buenos-aires-convention/ and http://www.iusmentis.com/copyright/allrightsreserved/ There's many other site that list this as well. The copyright office used to have a page on this, but I can't seem to find it now. Warner From owner-svn-src-head@freebsd.org Tue May 1 18:19:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4F330FB2EDC; Tue, 1 May 2018 18:19:13 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: from mail-io0-x234.google.com (mail-io0-x234.google.com [IPv6:2607:f8b0:4001:c06::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 01319874AB; Tue, 1 May 2018 18:19:13 +0000 (UTC) (envelope-from carpeddiem@gmail.com) Received: by mail-io0-x234.google.com with SMTP id f21-v6so14553896iob.13; Tue, 01 May 2018 11:19:12 -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=/52oTbgCpR8M/HQdH/KKj8fku/KeqS/b9PifADfiP4Y=; b=Pxa9Ze0zVQW003I0XOeyr1wmwkgQ+Vhe9cnBJsrqVqBPut40UV79KQZ1e55Nz39Zzg xK2kmJvGDH1TdlG+in3rOMUtNHCIyqcI3kX+1StQ8S4MUJXnp+CfacO1W24A2QHNaPim yt06Bx+CZFrD2/n3sPLxE8qHrrutRoJj29n/k3dIeGxStZhOGimZ5t0q3MEiac09fShQ IYM+IZR2BX29ST29IOi1IfNK3+agfxBdrxeS1YFWfjL1Zff8BvA6e5kvFcU2NnwcnZQL 2YuFdkU2Iu8LsHS2bWMUGWERpEUlBfFYGs4SEIPk+dHXWgZKFbaREObxHy3LpZDqLgq7 R4Ug== 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=/52oTbgCpR8M/HQdH/KKj8fku/KeqS/b9PifADfiP4Y=; b=kwueL22Xyys6TCIRI54naVAjm3SDzT0d+jhzNFZ7zzAiXVy15Z4IL4AWSx4yYoGMlN +rBtNGLMi4Oaulr++kawcNQsHVOX8ziUf0OU6DIDmydwOVkPuRlILvqaMFPxmHQZ07IC wV/nKPEPD9a9GX3Ao82oiyPivSOGt/lH7IpRd1cA60wYiI+4eGuE9Em23Kiyr8kq6Eec hF1xDRf3osI+vPqJOUtaeGOcMcIt9HRP60mJ1J5F1TX+JNlnvH4aloU7MQ74UerHTjpC GZ8vy2KZVn+9ogbzq1uMvQp3wVvXNjoinJ+TdTBum8VTEHsLhEWHoDH/UCLRhXBpuW+m FXIQ== X-Gm-Message-State: ALQs6tAY/gddXxrR5AboIpVcifMOkhYmmfWRO5nBSwTWw/EykxOd25LI +LKQnBoi7GxcHkkgT9ON9rOnJejkVvdVctkmgYAuzg== X-Google-Smtp-Source: AB8JxZrAGNZarIoEvtmXrrpOv1tP83rVByWSkzKcF8i4eDF4hBqafzGyUsNU7w/20mRF+vmZD/1mUvR6/qB25bmr6U0= X-Received: by 2002:a6b:298f:: with SMTP id p137-v6mr18275516iop.288.1525198752517; Tue, 01 May 2018 11:19:12 -0700 (PDT) MIME-Version: 1.0 Sender: carpeddiem@gmail.com Received: by 10.107.130.167 with HTTP; Tue, 1 May 2018 11:18:52 -0700 (PDT) In-Reply-To: <20180501130108.GC80496@zxy.spb.ru> References: <201805010053.w410rkGi046226@repo.freebsd.org> <20180501130108.GC80496@zxy.spb.ru> From: Ed Maste Date: Tue, 1 May 2018 14:18:52 -0400 X-Google-Sender-Auth: _1TN7tKSNAAMXjz6xjp_pd9kwmg Message-ID: Subject: Re: svn commit: r333133 - head/usr.sbin/pwd_mkdb To: Slawa Olhovchenkov 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.25 Precedence: list List-Id: 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, 01 May 2018 18:19:13 -0000 On 1 May 2018 at 09:01, Slawa Olhovchenkov wrote: > On Tue, May 01, 2018 at 12:53:46AM +0000, Ed Maste wrote: > >> Author: emaste >> Date: Tue May 1 00:53:46 2018 >> New Revision: 333133 >> URL: https://svnweb.freebsd.org/changeset/base/333133 >> >> Log: >> pwd_mkdb: retire legacy v3 db support (-l option) >> > May be good idea to check db version before install new binary? Perhaps "v3 db" is too brief shorthand: it's not that the database as a whole is v3/v4, but that it contains records of one or both types. For 15 years we've been emitting v4 and consuming v4 records. From owner-svn-src-head@freebsd.org Tue May 1 18:44:22 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 614FFFB3B08; Tue, 1 May 2018 18:44:22 +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 EF6906D618; Tue, 1 May 2018 18:44:21 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1fDaGB-000FyQ-5c; Tue, 01 May 2018 21:44:19 +0300 Date: Tue, 1 May 2018 21:44:19 +0300 From: Slawa Olhovchenkov To: Ed Maste Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333133 - head/usr.sbin/pwd_mkdb Message-ID: <20180501184419.GV4305@zxy.spb.ru> References: <201805010053.w410rkGi046226@repo.freebsd.org> <20180501130108.GC80496@zxy.spb.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline 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.25 Precedence: list List-Id: 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, 01 May 2018 18:44:22 -0000 On Tue, May 01, 2018 at 02:18:52PM -0400, Ed Maste wrote: > On 1 May 2018 at 09:01, Slawa Olhovchenkov wrote: > > On Tue, May 01, 2018 at 12:53:46AM +0000, Ed Maste wrote: > > > >> Author: emaste > >> Date: Tue May 1 00:53:46 2018 > >> New Revision: 333133 > >> URL: https://svnweb.freebsd.org/changeset/base/333133 > >> > >> Log: > >> pwd_mkdb: retire legacy v3 db support (-l option) > >> > > May be good idea to check db version before install new binary? > > Perhaps "v3 db" is too brief shorthand: it's not that the database as > a whole is v3/v4, but that it contains records of one or both types. > For 15 years we've been emitting v4 and consuming v4 records. 15 years is not aged, I am not sure about some of my databases. From owner-svn-src-head@freebsd.org Tue May 1 18:50:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4A167FB3D1E; Tue, 1 May 2018 18:50:13 +0000 (UTC) (envelope-from erj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EE6436E015; Tue, 1 May 2018 18:50:12 +0000 (UTC) (envelope-from erj@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E5B1E25DF9; Tue, 1 May 2018 18:50:12 +0000 (UTC) (envelope-from erj@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41IoC1J082009; Tue, 1 May 2018 18:50:12 GMT (envelope-from erj@FreeBSD.org) Received: (from erj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41IoC7t082002; Tue, 1 May 2018 18:50:12 GMT (envelope-from erj@FreeBSD.org) Message-Id: <201805011850.w41IoC7t082002@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: erj set sender to erj@FreeBSD.org using -f From: Eric Joyner Date: Tue, 1 May 2018 18:50:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333149 - in head/sys: conf dev/ixl modules/ixl X-SVN-Group: head X-SVN-Commit-Author: erj X-SVN-Commit-Paths: in head/sys: conf dev/ixl modules/ixl X-SVN-Commit-Revision: 333149 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 18:50:13 -0000 Author: erj Date: Tue May 1 18:50:12 2018 New Revision: 333149 URL: https://svnweb.freebsd.org/changeset/base/333149 Log: ixl(4): Update to 1.9.9-k Refresh upstream driver before impending conversion to iflib. Major changes: - Support for descriptor writeback mode (required by ixlv(4) for AVF support) - Ability to disable firmware LLDP agent by user (PR 221530) - Fix for TX queue hang when using TSO (PR 221919) - Separate descriptor ring sizes for TX and RX rings PR: 221530, 221919 Submitted by: Krzysztof Galazka Reviewed by: #IntelNetworking MFC after: 1 day Relnotes: Yes Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D14985 Added: head/sys/dev/ixl/i40e_dcb.c (contents, props changed) head/sys/dev/ixl/i40e_dcb.h (contents, props changed) head/sys/dev/ixl/virtchnl.h (contents, props changed) Deleted: head/sys/dev/ixl/i40e_virtchnl.h Modified: head/sys/conf/files.amd64 head/sys/dev/ixl/i40e_adminq.c head/sys/dev/ixl/i40e_adminq.h head/sys/dev/ixl/i40e_adminq_cmd.h head/sys/dev/ixl/i40e_alloc.h head/sys/dev/ixl/i40e_common.c head/sys/dev/ixl/i40e_devids.h head/sys/dev/ixl/i40e_hmc.c head/sys/dev/ixl/i40e_hmc.h head/sys/dev/ixl/i40e_lan_hmc.c head/sys/dev/ixl/i40e_lan_hmc.h head/sys/dev/ixl/i40e_nvm.c head/sys/dev/ixl/i40e_osdep.c head/sys/dev/ixl/i40e_osdep.h head/sys/dev/ixl/i40e_prototype.h head/sys/dev/ixl/i40e_register.h head/sys/dev/ixl/i40e_status.h head/sys/dev/ixl/i40e_type.h head/sys/dev/ixl/if_ixl.c head/sys/dev/ixl/if_ixlv.c head/sys/dev/ixl/ixl.h head/sys/dev/ixl/ixl_iw.c head/sys/dev/ixl/ixl_iw.h head/sys/dev/ixl/ixl_iw_int.h head/sys/dev/ixl/ixl_pf.h head/sys/dev/ixl/ixl_pf_i2c.c head/sys/dev/ixl/ixl_pf_iov.c head/sys/dev/ixl/ixl_pf_iov.h head/sys/dev/ixl/ixl_pf_main.c head/sys/dev/ixl/ixl_pf_qmgr.c head/sys/dev/ixl/ixl_pf_qmgr.h head/sys/dev/ixl/ixl_txrx.c head/sys/dev/ixl/ixlv.h head/sys/dev/ixl/ixlv_vc_mgr.h head/sys/dev/ixl/ixlvc.c head/sys/modules/ixl/Makefile Modified: head/sys/conf/files.amd64 ============================================================================== --- head/sys/conf/files.amd64 Tue May 1 18:28:42 2018 (r333148) +++ head/sys/conf/files.amd64 Tue May 1 18:50:12 2018 (r333149) @@ -290,6 +290,8 @@ dev/ixl/i40e_nvm.c optional ixl pci | ixlv pci \ compile-with "${NORMAL_C} -I$S/dev/ixl" dev/ixl/i40e_adminq.c optional ixl pci | ixlv pci \ compile-with "${NORMAL_C} -I$S/dev/ixl" +dev/ixl/i40e_dcb.c optional ixl pci \ + compile-with "${NORMAL_C} -I$S/dev/ixl" dev/fdc/fdc.c optional fdc dev/fdc/fdc_acpi.c optional fdc dev/fdc/fdc_isa.c optional fdc isa Modified: head/sys/dev/ixl/i40e_adminq.c ============================================================================== --- head/sys/dev/ixl/i40e_adminq.c Tue May 1 18:28:42 2018 (r333148) +++ head/sys/dev/ixl/i40e_adminq.c Tue May 1 18:50:12 2018 (r333149) @@ -1,6 +1,6 @@ /****************************************************************************** - Copyright (c) 2013-2015, Intel Corporation + Copyright (c) 2013-2017, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without @@ -644,6 +644,24 @@ enum i40e_status_code i40e_init_adminq(struct i40e_hw &oem_lo); hw->nvm.oem_ver = ((u32)oem_hi << 16) | oem_lo; + /* The ability to RX (not drop) 802.1ad frames was added in API 1.7 */ + if ((hw->aq.api_maj_ver > 1) || + ((hw->aq.api_maj_ver == 1) && + (hw->aq.api_min_ver >= 7))) + hw->flags |= I40E_HW_FLAG_802_1AD_CAPABLE; + + if (hw->mac.type == I40E_MAC_XL710 && + hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR && + hw->aq.api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_XL710) { + hw->flags |= I40E_HW_FLAG_AQ_PHY_ACCESS_CAPABLE; + } + + /* Newer versions of firmware require lock when reading the NVM */ + if ((hw->aq.api_maj_ver > 1) || + ((hw->aq.api_maj_ver == 1) && + (hw->aq.api_min_ver >= 5))) + hw->flags |= I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK; + if (hw->aq.api_maj_ver > I40E_FW_API_VERSION_MAJOR) { ret_code = I40E_ERR_FIRMWARE_API_VERSION; goto init_adminq_free_arq; @@ -899,8 +917,8 @@ enum i40e_status_code i40e_asq_send_command(struct i40 */ if (i40e_asq_done(hw)) break; - i40e_msec_delay(1); - total_delay++; + i40e_usec_delay(50); + total_delay += 50; } while (total_delay < hw->aq.asq_cmd_timeout); } @@ -941,10 +959,15 @@ enum i40e_status_code i40e_asq_send_command(struct i40 /* update the error if time out occurred */ if ((!cmd_completed) && (!details->async && !details->postpone)) { - i40e_debug(hw, - I40E_DEBUG_AQ_MESSAGE, - "AQTX: Writeback timeout.\n"); - status = I40E_ERR_ADMIN_QUEUE_TIMEOUT; + if (rd32(hw, hw->aq.asq.len) & I40E_GL_ATQLEN_ATQCRIT_MASK) { + i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE, + "AQTX: AQ Critical error.\n"); + status = I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR; + } else { + i40e_debug(hw, I40E_DEBUG_AQ_MESSAGE, + "AQTX: Writeback timeout.\n"); + status = I40E_ERR_ADMIN_QUEUE_TIMEOUT; + } } asq_send_command_error: @@ -1007,9 +1030,9 @@ enum i40e_status_code i40e_clean_arq_element(struct i4 /* set next_to_use to head */ if (!i40e_is_vf(hw)) - ntu = (rd32(hw, hw->aq.arq.head) & I40E_PF_ARQH_ARQH_MASK); - if (i40e_is_vf(hw)) - ntu = (rd32(hw, hw->aq.arq.head) & I40E_VF_ARQH1_ARQH_MASK); + ntu = rd32(hw, hw->aq.arq.head) & I40E_PF_ARQH_ARQH_MASK; + else + ntu = rd32(hw, hw->aq.arq.head) & I40E_VF_ARQH1_ARQH_MASK; if (ntu == ntc) { /* nothing to do - shouldn't need to update ring's values */ ret_code = I40E_ERR_ADMIN_QUEUE_NO_WORK; @@ -1067,7 +1090,7 @@ enum i40e_status_code i40e_clean_arq_element(struct i4 hw->aq.arq.next_to_clean = ntc; hw->aq.arq.next_to_use = ntu; - i40e_nvmupd_check_wait_event(hw, LE16_TO_CPU(e->desc.opcode)); + i40e_nvmupd_check_wait_event(hw, LE16_TO_CPU(e->desc.opcode), &e->desc); clean_arq_element_out: /* Set pending if needed, unlock and return */ if (pending != NULL) Modified: head/sys/dev/ixl/i40e_adminq.h ============================================================================== --- head/sys/dev/ixl/i40e_adminq.h Tue May 1 18:28:42 2018 (r333148) +++ head/sys/dev/ixl/i40e_adminq.h Tue May 1 18:50:12 2018 (r333149) @@ -1,6 +1,6 @@ /****************************************************************************** - Copyright (c) 2013-2015, Intel Corporation + Copyright (c) 2013-2017, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without @@ -159,7 +159,7 @@ static INLINE int i40e_aq_rc_to_posix(int aq_ret, int /* general information */ #define I40E_AQ_LARGE_BUF 512 -#define I40E_ASQ_CMD_TIMEOUT 250 /* msecs */ +#define I40E_ASQ_CMD_TIMEOUT 250000 /* usecs */ void i40e_fill_default_direct_cmd_desc(struct i40e_aq_desc *desc, u16 opcode); Modified: head/sys/dev/ixl/i40e_adminq_cmd.h ============================================================================== --- head/sys/dev/ixl/i40e_adminq_cmd.h Tue May 1 18:28:42 2018 (r333148) +++ head/sys/dev/ixl/i40e_adminq_cmd.h Tue May 1 18:50:12 2018 (r333149) @@ -1,6 +1,6 @@ /****************************************************************************** - Copyright (c) 2013-2015, Intel Corporation + Copyright (c) 2013-2017, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without @@ -41,9 +41,18 @@ * This file needs to comply with the Linux Kernel coding style. */ + #define I40E_FW_API_VERSION_MAJOR 0x0001 -#define I40E_FW_API_VERSION_MINOR 0x0005 +#define I40E_FW_API_VERSION_MINOR_X722 0x0005 +#define I40E_FW_API_VERSION_MINOR_X710 0x0007 +#define I40E_FW_MINOR_VERSION(_h) ((_h)->mac.type == I40E_MAC_XL710 ? \ + I40E_FW_API_VERSION_MINOR_X710 : \ + I40E_FW_API_VERSION_MINOR_X722) + +/* API version 1.7 implements additional link and PHY-specific APIs */ +#define I40E_MINOR_VER_GET_LINK_INFO_XL710 0x0007 + struct i40e_aq_desc { __le16 flags; __le16 opcode; @@ -202,6 +211,7 @@ enum i40e_admin_queue_opc { /* DCB commands */ i40e_aqc_opc_dcb_ignore_pfc = 0x0301, i40e_aqc_opc_dcb_updated = 0x0302, + i40e_aqc_opc_set_dcb_parameters = 0x0303, /* TX scheduler */ i40e_aqc_opc_configure_vsi_bw_limit = 0x0400, @@ -241,6 +251,8 @@ enum i40e_admin_queue_opc { i40e_aqc_opc_set_phy_debug = 0x0622, i40e_aqc_opc_upload_ext_phy_fm = 0x0625, i40e_aqc_opc_run_phy_activity = 0x0626, + i40e_aqc_opc_set_phy_register = 0x0628, + i40e_aqc_opc_get_phy_register = 0x0629, /* NVM commands */ i40e_aqc_opc_nvm_read = 0x0701, @@ -248,6 +260,7 @@ enum i40e_admin_queue_opc { i40e_aqc_opc_nvm_update = 0x0703, i40e_aqc_opc_nvm_config_read = 0x0704, i40e_aqc_opc_nvm_config_write = 0x0705, + i40e_aqc_opc_nvm_progress = 0x0706, i40e_aqc_opc_oem_post_update = 0x0720, i40e_aqc_opc_thermal_sensor = 0x0721, @@ -771,8 +784,52 @@ struct i40e_aqc_set_switch_config { /* flags used for both fields below */ #define I40E_AQ_SET_SWITCH_CFG_PROMISC 0x0001 #define I40E_AQ_SET_SWITCH_CFG_L2_FILTER 0x0002 +#define I40E_AQ_SET_SWITCH_CFG_HW_ATR_EVICT 0x0004 __le16 valid_flags; - u8 reserved[12]; + /* The ethertype in switch_tag is dropped on ingress and used + * internally by the switch. Set this to zero for the default + * of 0x88a8 (802.1ad). Should be zero for firmware API + * versions lower than 1.7. + */ + __le16 switch_tag; + /* The ethertypes in first_tag and second_tag are used to + * match the outer and inner VLAN tags (respectively) when HW + * double VLAN tagging is enabled via the set port parameters + * AQ command. Otherwise these are both ignored. Set them to + * zero for their defaults of 0x8100 (802.1Q). Should be zero + * for firmware API versions lower than 1.7. + */ + __le16 first_tag; + __le16 second_tag; + /* Next byte is split into following: + * Bit 7 : 0 : No action, 1: Switch to mode defined by bits 6:0 + * Bit 6 : 0 : Destination Port, 1: source port + * Bit 5..4 : L4 type + * 0: rsvd + * 1: TCP + * 2: UDP + * 3: Both TCP and UDP + * Bits 3:0 Mode + * 0: default mode + * 1: L4 port only mode + * 2: non-tunneled mode + * 3: tunneled mode + */ +#define I40E_AQ_SET_SWITCH_BIT7_VALID 0x80 + +#define I40E_AQ_SET_SWITCH_L4_SRC_PORT 0x40 + +#define I40E_AQ_SET_SWITCH_L4_TYPE_RSVD 0x00 +#define I40E_AQ_SET_SWITCH_L4_TYPE_TCP 0x10 +#define I40E_AQ_SET_SWITCH_L4_TYPE_UDP 0x20 +#define I40E_AQ_SET_SWITCH_L4_TYPE_BOTH 0x30 + +#define I40E_AQ_SET_SWITCH_MODE_DEFAULT 0x00 +#define I40E_AQ_SET_SWITCH_MODE_L4_PORT 0x01 +#define I40E_AQ_SET_SWITCH_MODE_NON_TUNNEL 0x02 +#define I40E_AQ_SET_SWITCH_MODE_TUNNEL 0x03 + u8 mode; + u8 rsvd5[5]; }; I40E_CHECK_CMD_LENGTH(i40e_aqc_set_switch_config); @@ -1703,6 +1760,8 @@ enum i40e_aq_phy_type { I40E_PHY_TYPE_10GBASE_CR1_CU = 0xB, I40E_PHY_TYPE_10GBASE_AOC = 0xC, I40E_PHY_TYPE_40GBASE_AOC = 0xD, + I40E_PHY_TYPE_UNRECOGNIZED = 0xE, + I40E_PHY_TYPE_UNSUPPORTED = 0xF, I40E_PHY_TYPE_100BASE_TX = 0x11, I40E_PHY_TYPE_1000BASE_T = 0x12, I40E_PHY_TYPE_10GBASE_T = 0x13, @@ -1721,9 +1780,51 @@ enum i40e_aq_phy_type { I40E_PHY_TYPE_25GBASE_CR = 0x20, I40E_PHY_TYPE_25GBASE_SR = 0x21, I40E_PHY_TYPE_25GBASE_LR = 0x22, - I40E_PHY_TYPE_MAX + I40E_PHY_TYPE_25GBASE_AOC = 0x23, + I40E_PHY_TYPE_25GBASE_ACC = 0x24, + I40E_PHY_TYPE_MAX, + I40E_PHY_TYPE_NOT_SUPPORTED_HIGH_TEMP = 0xFD, + I40E_PHY_TYPE_EMPTY = 0xFE, + I40E_PHY_TYPE_DEFAULT = 0xFF, }; +#define I40E_PHY_TYPES_BITMASK (BIT_ULL(I40E_PHY_TYPE_SGMII) | \ + BIT_ULL(I40E_PHY_TYPE_1000BASE_KX) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_KX4) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_KR) | \ + BIT_ULL(I40E_PHY_TYPE_40GBASE_KR4) | \ + BIT_ULL(I40E_PHY_TYPE_XAUI) | \ + BIT_ULL(I40E_PHY_TYPE_XFI) | \ + BIT_ULL(I40E_PHY_TYPE_SFI) | \ + BIT_ULL(I40E_PHY_TYPE_XLAUI) | \ + BIT_ULL(I40E_PHY_TYPE_XLPPI) | \ + BIT_ULL(I40E_PHY_TYPE_40GBASE_CR4_CU) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_CR1_CU) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_AOC) | \ + BIT_ULL(I40E_PHY_TYPE_40GBASE_AOC) | \ + BIT_ULL(I40E_PHY_TYPE_UNRECOGNIZED) | \ + BIT_ULL(I40E_PHY_TYPE_UNSUPPORTED) | \ + BIT_ULL(I40E_PHY_TYPE_100BASE_TX) | \ + BIT_ULL(I40E_PHY_TYPE_1000BASE_T) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_T) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_SR) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_LR) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_SFPP_CU) | \ + BIT_ULL(I40E_PHY_TYPE_10GBASE_CR1) | \ + BIT_ULL(I40E_PHY_TYPE_40GBASE_CR4) | \ + BIT_ULL(I40E_PHY_TYPE_40GBASE_SR4) | \ + BIT_ULL(I40E_PHY_TYPE_40GBASE_LR4) | \ + BIT_ULL(I40E_PHY_TYPE_1000BASE_SX) | \ + BIT_ULL(I40E_PHY_TYPE_1000BASE_LX) | \ + BIT_ULL(I40E_PHY_TYPE_1000BASE_T_OPTICAL) | \ + BIT_ULL(I40E_PHY_TYPE_20GBASE_KR2) | \ + BIT_ULL(I40E_PHY_TYPE_25GBASE_KR) | \ + BIT_ULL(I40E_PHY_TYPE_25GBASE_CR) | \ + BIT_ULL(I40E_PHY_TYPE_25GBASE_SR) | \ + BIT_ULL(I40E_PHY_TYPE_25GBASE_LR) | \ + BIT_ULL(I40E_PHY_TYPE_25GBASE_AOC) | \ + BIT_ULL(I40E_PHY_TYPE_25GBASE_ACC)) + #define I40E_LINK_SPEED_100MB_SHIFT 0x1 #define I40E_LINK_SPEED_1000MB_SHIFT 0x2 #define I40E_LINK_SPEED_10GB_SHIFT 0x3 @@ -1778,6 +1879,8 @@ struct i40e_aq_get_phy_abilities_resp { #define I40E_AQ_PHY_TYPE_EXT_25G_CR 0x02 #define I40E_AQ_PHY_TYPE_EXT_25G_SR 0x04 #define I40E_AQ_PHY_TYPE_EXT_25G_LR 0x08 +#define I40E_AQ_PHY_TYPE_EXT_25G_AOC 0x10 +#define I40E_AQ_PHY_TYPE_EXT_25G_ACC 0x20 u8 fec_cfg_curr_mod_ext_info; #define I40E_AQ_ENABLE_FEC_KR 0x01 #define I40E_AQ_ENABLE_FEC_RS 0x02 @@ -1907,19 +2010,31 @@ struct i40e_aqc_get_link_status { #define I40E_AQ_25G_SERDES_UCODE_ERR 0X04 #define I40E_AQ_25G_NIMB_UCODE_ERR 0X05 u8 loopback; /* use defines from i40e_aqc_set_lb_mode */ +/* Since firmware API 1.7 loopback field keeps power class info as well */ +#define I40E_AQ_LOOPBACK_MASK 0x07 +#define I40E_AQ_PWR_CLASS_SHIFT_LB 6 +#define I40E_AQ_PWR_CLASS_MASK_LB (0x03 << I40E_AQ_PWR_CLASS_SHIFT_LB) __le16 max_frame_size; u8 config; #define I40E_AQ_CONFIG_FEC_KR_ENA 0x01 #define I40E_AQ_CONFIG_FEC_RS_ENA 0x02 #define I40E_AQ_CONFIG_CRC_ENA 0x04 #define I40E_AQ_CONFIG_PACING_MASK 0x78 - u8 power_desc; + union { + struct { + u8 power_desc; #define I40E_AQ_LINK_POWER_CLASS_1 0x00 #define I40E_AQ_LINK_POWER_CLASS_2 0x01 #define I40E_AQ_LINK_POWER_CLASS_3 0x02 #define I40E_AQ_LINK_POWER_CLASS_4 0x03 #define I40E_AQ_PWR_CLASS_MASK 0x03 - u8 reserved[4]; + u8 reserved[4]; + }; + struct { + u8 link_type[4]; + u8 link_type_ext; + }; + }; }; I40E_CHECK_CMD_LENGTH(i40e_aqc_get_link_status); @@ -1956,11 +2071,28 @@ I40E_CHECK_CMD_LENGTH(i40e_aqc_an_advt_reg); /* Set Loopback mode (0x0618) */ struct i40e_aqc_set_lb_mode { - __le16 lb_mode; + u8 lb_level; +#define I40E_AQ_LB_NONE 0 +#define I40E_AQ_LB_MAC 1 +#define I40E_AQ_LB_SERDES 2 +#define I40E_AQ_LB_PHY_INT 3 +#define I40E_AQ_LB_PHY_EXT 4 +#define I40E_AQ_LB_CPVL_PCS 5 +#define I40E_AQ_LB_CPVL_EXT 6 #define I40E_AQ_LB_PHY_LOCAL 0x01 #define I40E_AQ_LB_PHY_REMOTE 0x02 #define I40E_AQ_LB_MAC_LOCAL 0x04 - u8 reserved[14]; + u8 lb_type; +#define I40E_AQ_LB_LOCAL 0 +#define I40E_AQ_LB_FAR 0x01 + u8 speed; +#define I40E_AQ_LB_SPEED_NONE 0 +#define I40E_AQ_LB_SPEED_1G 1 +#define I40E_AQ_LB_SPEED_10G 2 +#define I40E_AQ_LB_SPEED_40G 3 +#define I40E_AQ_LB_SPEED_20G 4 + u8 force_speed; + u8 reserved[12]; }; I40E_CHECK_CMD_LENGTH(i40e_aqc_set_lb_mode); @@ -2002,14 +2134,34 @@ struct i40e_aqc_run_phy_activity { I40E_CHECK_CMD_LENGTH(i40e_aqc_run_phy_activity); +/* Set PHY Register command (0x0628) */ +/* Get PHY Register command (0x0629) */ +struct i40e_aqc_phy_register_access { + u8 phy_interface; +#define I40E_AQ_PHY_REG_ACCESS_INTERNAL 0 +#define I40E_AQ_PHY_REG_ACCESS_EXTERNAL 1 +#define I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE 2 + u8 dev_addres; + u8 reserved1[2]; + __le32 reg_address; + __le32 reg_value; + u8 reserved2[4]; +}; + +I40E_CHECK_CMD_LENGTH(i40e_aqc_phy_register_access); + /* NVM Read command (indirect 0x0701) * NVM Erase commands (direct 0x0702) * NVM Update commands (indirect 0x0703) */ struct i40e_aqc_nvm_update { u8 command_flags; -#define I40E_AQ_NVM_LAST_CMD 0x01 -#define I40E_AQ_NVM_FLASH_ONLY 0x80 +#define I40E_AQ_NVM_LAST_CMD 0x01 +#define I40E_AQ_NVM_FLASH_ONLY 0x80 +#define I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT 1 +#define I40E_AQ_NVM_PRESERVATION_FLAGS_MASK 0x03 +#define I40E_AQ_NVM_PRESERVATION_FLAGS_SELECTED 0x03 +#define I40E_AQ_NVM_PRESERVATION_FLAGS_ALL 0x01 u8 module_pointer; __le16 length; __le32 offset; @@ -2268,6 +2420,17 @@ struct i40e_aqc_lldp_start { }; I40E_CHECK_CMD_LENGTH(i40e_aqc_lldp_start); + +/* Set DCB (direct 0x0303) */ +struct i40e_aqc_set_dcb_parameters { + u8 command; +#define I40E_AQ_DCB_SET_AGENT 0x1 +#define I40E_DCB_VALID 0x1 + u8 valid_flags; + u8 reserved[14]; +}; + +I40E_CHECK_CMD_LENGTH(i40e_aqc_set_dcb_parameters); /* Get CEE DCBX Oper Config (0x0A07) * uses the generic descriptor struct Modified: head/sys/dev/ixl/i40e_alloc.h ============================================================================== --- head/sys/dev/ixl/i40e_alloc.h Tue May 1 18:28:42 2018 (r333148) +++ head/sys/dev/ixl/i40e_alloc.h Tue May 1 18:50:12 2018 (r333149) @@ -1,6 +1,6 @@ /****************************************************************************** - Copyright (c) 2013-2015, Intel Corporation + Copyright (c) 2013-2017, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without Modified: head/sys/dev/ixl/i40e_common.c ============================================================================== --- head/sys/dev/ixl/i40e_common.c Tue May 1 18:28:42 2018 (r333148) +++ head/sys/dev/ixl/i40e_common.c Tue May 1 18:50:12 2018 (r333149) @@ -1,6 +1,6 @@ /****************************************************************************** - Copyright (c) 2013-2015, Intel Corporation + Copyright (c) 2013-2017, Intel Corporation All rights reserved. Redistribution and use in source and binary forms, with or without @@ -35,7 +35,7 @@ #include "i40e_type.h" #include "i40e_adminq.h" #include "i40e_prototype.h" -#include "i40e_virtchnl.h" +#include "virtchnl.h" /** @@ -68,7 +68,6 @@ enum i40e_status_code i40e_set_mac_type(struct i40e_hw case I40E_DEV_ID_25G_SFP28: hw->mac.type = I40E_MAC_XL710; break; - case I40E_DEV_ID_X722_A0: case I40E_DEV_ID_KX_X722: case I40E_DEV_ID_QSFP_X722: case I40E_DEV_ID_SFP_X722: @@ -78,11 +77,11 @@ enum i40e_status_code i40e_set_mac_type(struct i40e_hw hw->mac.type = I40E_MAC_X722; break; case I40E_DEV_ID_X722_VF: - case I40E_DEV_ID_X722_A0_VF: hw->mac.type = I40E_MAC_X722_VF; break; case I40E_DEV_ID_VF: case I40E_DEV_ID_VF_HV: + case I40E_DEV_ID_ADAPTIVE_VF: hw->mac.type = I40E_MAC_VF; break; default: @@ -298,6 +297,8 @@ const char *i40e_stat_str(struct i40e_hw *hw, enum i40 return "I40E_NOT_SUPPORTED"; case I40E_ERR_FIRMWARE_API_VERSION: return "I40E_ERR_FIRMWARE_API_VERSION"; + case I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR: + return "I40E_ERR_ADMIN_QUEUE_CRITICAL_ERROR"; } snprintf(hw->err_str, sizeof(hw->err_str), "%d", stat_err); @@ -318,13 +319,15 @@ void i40e_debug_aq(struct i40e_hw *hw, enum i40e_debug void *buffer, u16 buf_len) { struct i40e_aq_desc *aq_desc = (struct i40e_aq_desc *)desc; - u16 len = LE16_TO_CPU(aq_desc->datalen); u8 *buf = (u8 *)buffer; + u16 len; u16 i = 0; if ((!(mask & hw->debug_mask)) || (desc == NULL)) return; + len = LE16_TO_CPU(aq_desc->datalen); + i40e_debug(hw, mask, "AQ CMD: opcode 0x%04X, flags 0x%04X, datalen 0x%04X, retval 0x%04X\n", LE16_TO_CPU(aq_desc->opcode), @@ -1008,7 +1011,8 @@ enum i40e_status_code i40e_init_shared_code(struct i40 hw->pf_id = (u8)(func_rid & 0x7); if (hw->mac.type == I40E_MAC_X722) - hw->flags |= I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE; + hw->flags |= I40E_HW_FLAG_AQ_SRCTL_ACCESS_ENABLE | + I40E_HW_FLAG_NVM_READ_REQUIRES_LOCK; status = i40e_init_nvm(hw); return status; @@ -1242,6 +1246,8 @@ static enum i40e_media_type i40e_get_media_type(struct case I40E_PHY_TYPE_40GBASE_AOC: case I40E_PHY_TYPE_10GBASE_AOC: case I40E_PHY_TYPE_25GBASE_CR: + case I40E_PHY_TYPE_25GBASE_AOC: + case I40E_PHY_TYPE_25GBASE_ACC: media = I40E_MEDIA_TYPE_DA; break; case I40E_PHY_TYPE_1000BASE_KX: @@ -1324,6 +1330,8 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw * we don't need to do the PF Reset */ if (!cnt) { + u32 reg2 = 0; + reg = rd32(hw, I40E_PFGEN_CTRL); wr32(hw, I40E_PFGEN_CTRL, (reg | I40E_PFGEN_CTRL_PFSWR_MASK)); @@ -1331,6 +1339,12 @@ enum i40e_status_code i40e_pf_reset(struct i40e_hw *hw reg = rd32(hw, I40E_PFGEN_CTRL); if (!(reg & I40E_PFGEN_CTRL_PFSWR_MASK)) break; + reg2 = rd32(hw, I40E_GLGEN_RSTAT); + if (reg2 & I40E_GLGEN_RSTAT_DEVSTATE_MASK) { + DEBUGOUT("Core reset upcoming. Skipping PF reset request.\n"); + DEBUGOUT1("I40E_GLGEN_RSTAT = 0x%x\n", reg2); + return I40E_ERR_NOT_READY; + } i40e_msec_delay(1); } if (reg & I40E_PFGEN_CTRL_PFSWR_MASK) { @@ -1519,6 +1533,7 @@ u32 i40e_led_get(struct i40e_hw *hw) case I40E_COMBINED_ACTIVITY: case I40E_FILTER_ACTIVITY: case I40E_MAC_ACTIVITY: + case I40E_LINK_ACTIVITY: continue; default: break; @@ -1567,6 +1582,7 @@ void i40e_led_set(struct i40e_hw *hw, u32 mode, bool b case I40E_COMBINED_ACTIVITY: case I40E_FILTER_ACTIVITY: case I40E_MAC_ACTIVITY: + case I40E_LINK_ACTIVITY: continue; default: break; @@ -1577,9 +1593,6 @@ void i40e_led_set(struct i40e_hw *hw, u32 mode, bool b gpio_val |= ((mode << I40E_GLGEN_GPIO_CTL_LED_MODE_SHIFT) & I40E_GLGEN_GPIO_CTL_LED_MODE_MASK); - if (mode == I40E_LINK_ACTIVITY) - blink = FALSE; - if (blink) gpio_val |= BIT(I40E_GLGEN_GPIO_CTL_LED_BLINK_SHIFT); else @@ -1609,35 +1622,58 @@ enum i40e_status_code i40e_aq_get_phy_capabilities(str { struct i40e_aq_desc desc; enum i40e_status_code status; + u16 max_delay = I40E_MAX_PHY_TIMEOUT, total_delay = 0; u16 abilities_size = sizeof(struct i40e_aq_get_phy_abilities_resp); if (!abilities) return I40E_ERR_PARAM; - i40e_fill_default_direct_cmd_desc(&desc, - i40e_aqc_opc_get_phy_abilities); + do { + i40e_fill_default_direct_cmd_desc(&desc, + i40e_aqc_opc_get_phy_abilities); - desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_BUF); - if (abilities_size > I40E_AQ_LARGE_BUF) - desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_LB); + desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_BUF); + if (abilities_size > I40E_AQ_LARGE_BUF) + desc.flags |= CPU_TO_LE16((u16)I40E_AQ_FLAG_LB); - if (qualified_modules) - desc.params.external.param0 |= + if (qualified_modules) + desc.params.external.param0 |= CPU_TO_LE32(I40E_AQ_PHY_REPORT_QUALIFIED_MODULES); - if (report_init) - desc.params.external.param0 |= + if (report_init) + desc.params.external.param0 |= CPU_TO_LE32(I40E_AQ_PHY_REPORT_INITIAL_VALUES); - status = i40e_asq_send_command(hw, &desc, abilities, abilities_size, - cmd_details); + status = i40e_asq_send_command(hw, &desc, abilities, + abilities_size, cmd_details); - if (hw->aq.asq_last_status == I40E_AQ_RC_EIO) - status = I40E_ERR_UNKNOWN_PHY; + if (status != I40E_SUCCESS) + break; + if (hw->aq.asq_last_status == I40E_AQ_RC_EIO) { + status = I40E_ERR_UNKNOWN_PHY; + break; + } else if (hw->aq.asq_last_status == I40E_AQ_RC_EAGAIN) { + i40e_msec_delay(1); + total_delay++; + status = I40E_ERR_TIMEOUT; + } + } while ((hw->aq.asq_last_status != I40E_AQ_RC_OK) && + (total_delay < max_delay)); + + if (status != I40E_SUCCESS) + return status; + if (report_init) { - hw->phy.phy_types = LE32_TO_CPU(abilities->phy_type); - hw->phy.phy_types |= ((u64)abilities->phy_type_ext << 32); + if (hw->mac.type == I40E_MAC_XL710 && + hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR && + hw->aq.api_min_ver >= I40E_MINOR_VER_GET_LINK_INFO_XL710) { + status = i40e_aq_get_link_info(hw, TRUE, NULL, NULL); + } else { + hw->phy.phy_types = LE32_TO_CPU(abilities->phy_type); + hw->phy.phy_types |= + ((u64)abilities->phy_type_ext << 32); + } } return status; @@ -1680,6 +1716,8 @@ enum i40e_status_code i40e_aq_set_phy_config(struct i4 /** * i40e_set_fc * @hw: pointer to the hw struct + * @aq_failures: buffer to return AdminQ failure information + * @atomic_restart: whether to enable atomic link restart * * Set the requested flow control mode using set_phy_config. **/ @@ -1899,7 +1937,7 @@ enum i40e_status_code i40e_aq_get_link_info(struct i40 hw_link_info->fec_info = resp->config & (I40E_AQ_CONFIG_FEC_KR_ENA | I40E_AQ_CONFIG_FEC_RS_ENA); hw_link_info->ext_info = resp->ext_info; - hw_link_info->loopback = resp->loopback; + hw_link_info->loopback = resp->loopback & I40E_AQ_LOOPBACK_MASK; hw_link_info->max_frame_size = LE16_TO_CPU(resp->max_frame_size); hw_link_info->pacing = resp->config & I40E_AQ_CONFIG_PACING_MASK; @@ -1930,6 +1968,16 @@ enum i40e_status_code i40e_aq_get_link_info(struct i40 hw->aq.fw_min_ver < 40)) && hw_link_info->phy_type == 0xE) hw_link_info->phy_type = I40E_PHY_TYPE_10GBASE_SFPP_CU; + if (hw->aq.api_maj_ver == I40E_FW_API_VERSION_MAJOR && + hw->aq.api_min_ver >= 7) { + __le32 tmp; + + i40e_memcpy(&tmp, resp->link_type, sizeof(tmp), + I40E_NONDMA_TO_NONDMA); + hw->phy.phy_types = LE32_TO_CPU(tmp); + hw->phy.phy_types |= ((u64)resp->link_type_ext << 32); + } + /* save link status information */ if (link) i40e_memcpy(link, hw_link_info, sizeof(*hw_link_info), @@ -2069,9 +2117,9 @@ aq_get_partner_advt_exit: * * Sets loopback modes. **/ -enum i40e_status_code i40e_aq_set_lb_modes(struct i40e_hw *hw, - u16 lb_modes, - struct i40e_asq_cmd_details *cmd_details) +enum i40e_status_code +i40e_aq_set_lb_modes(struct i40e_hw *hw, u8 lb_level, u8 lb_type, u8 speed, + struct i40e_asq_cmd_details *cmd_details) { struct i40e_aq_desc desc; struct i40e_aqc_set_lb_mode *cmd = @@ -2081,7 +2129,11 @@ enum i40e_status_code i40e_aq_set_lb_modes(struct i40e i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_set_lb_modes); - cmd->lb_mode = CPU_TO_LE16(lb_modes); + cmd->lb_level = lb_level; + cmd->lb_type = lb_type; + cmd->speed = speed; + if (speed) + cmd->force_speed = 1; status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); @@ -2607,13 +2659,14 @@ enum i40e_status_code i40e_aq_get_switch_config(struct * i40e_aq_set_switch_config * @hw: pointer to the hardware structure * @flags: bit flag values to set + * @mode: cloud filter mode * @valid_flags: which bit flags to set * @cmd_details: pointer to command details structure or NULL * * Set switch configuration bits **/ enum i40e_status_code i40e_aq_set_switch_config(struct i40e_hw *hw, - u16 flags, u16 valid_flags, + u16 flags, u16 valid_flags, u8 mode, struct i40e_asq_cmd_details *cmd_details) { struct i40e_aq_desc desc; @@ -2625,7 +2678,12 @@ enum i40e_status_code i40e_aq_set_switch_config(struct i40e_aqc_opc_set_switch_config); scfg->flags = CPU_TO_LE16(flags); scfg->valid_flags = CPU_TO_LE16(valid_flags); - + scfg->mode = mode; + if (hw->flags & I40E_HW_FLAG_802_1AD_CAPABLE) { + scfg->switch_tag = CPU_TO_LE16(hw->switch_tag); + scfg->first_tag = CPU_TO_LE16(hw->first_tag); + scfg->second_tag = CPU_TO_LE16(hw->second_tag); + } status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); return status; @@ -2771,6 +2829,10 @@ enum i40e_status_code i40e_update_link_info(struct i40 if (status) return status; + hw->phy.link_info.req_fec_info = + abilities.fec_cfg_curr_mod_ext_info & + (I40E_AQ_REQUEST_FEC_KR | I40E_AQ_REQUEST_FEC_RS); + i40e_memcpy(hw->phy.link_info.module_type, &abilities.module_type, sizeof(hw->phy.link_info.module_type), I40E_NONDMA_TO_NONDMA); } @@ -3019,8 +3081,8 @@ enum i40e_status_code i40e_aq_remove_macvlan(struct i4 * @mr_list: list of mirrored VSI SEIDs or VLAN IDs * @cmd_details: pointer to command details structure or NULL * @rule_id: Rule ID returned from FW - * @rule_used: Number of rules used in internal switch - * @rule_free: Number of rules free in internal switch + * @rules_used: Number of rules used in internal switch + * @rules_free: Number of rules free in internal switch * * Add/Delete a mirror rule to a specific switch. Mirror rules are supported for * VEBs/VEPA elements only @@ -3080,8 +3142,8 @@ static enum i40e_status_code i40e_mirrorrule_op(struct * @mr_list: list of mirrored VSI SEIDs or VLAN IDs * @cmd_details: pointer to command details structure or NULL * @rule_id: Rule ID returned from FW - * @rule_used: Number of rules used in internal switch - * @rule_free: Number of rules free in internal switch + * @rules_used: Number of rules used in internal switch + * @rules_free: Number of rules free in internal switch * * Add mirror rule. Mirror rules are supported for VEBs or VEPA elements only **/ @@ -3111,8 +3173,8 @@ enum i40e_status_code i40e_aq_add_mirrorrule(struct i4 * add_mirrorrule. * @mr_list: list of mirrored VLAN IDs to be removed * @cmd_details: pointer to command details structure or NULL - * @rule_used: Number of rules used in internal switch - * @rule_free: Number of rules free in internal switch + * @rules_used: Number of rules used in internal switch + * @rules_free: Number of rules free in internal switch * * Delete a mirror rule. Mirror rules are supported for VEBs/VEPA elements only **/ @@ -3515,6 +3577,8 @@ enum i40e_status_code i40e_aq_write_nvm_config(struct /** * i40e_aq_oem_post_update - triggers an OEM specific flow after update * @hw: pointer to the hw struct + * @buff: buffer for result + * @buff_size: buffer size * @cmd_details: pointer to command details structure or NULL **/ enum i40e_status_code i40e_aq_oem_post_update(struct i40e_hw *hw, @@ -3593,9 +3657,10 @@ static void i40e_parse_discover_capabilities(struct i4 u32 valid_functions, num_functions; u32 number, logical_id, phys_id; struct i40e_hw_capabilities *p; + enum i40e_status_code status; + u16 id, ocp_cfg_word0; u8 major_rev; u32 i = 0; - u16 id; cap = (struct i40e_aqc_list_capabilities_element_resp *) buff; @@ -3887,6 +3952,26 @@ static void i40e_parse_discover_capabilities(struct i4 hw->num_ports++; } + /* OCP cards case: if a mezz is removed the ethernet port is at + * disabled state in PRTGEN_CNF register. Additional NVM read is + * needed in order to check if we are dealing with OCP card. + * Those cards have 4 PFs at minimum, so using PRTGEN_CNF for counting + * physical ports results in wrong partition id calculation and thus + * not supporting WoL. + */ + if (hw->mac.type == I40E_MAC_X722) { + if (i40e_acquire_nvm(hw, I40E_RESOURCE_READ) == I40E_SUCCESS) { + status = i40e_aq_read_nvm(hw, I40E_SR_EMP_MODULE_PTR, + 2 * I40E_SR_OCP_CFG_WORD0, + sizeof(ocp_cfg_word0), + &ocp_cfg_word0, TRUE, NULL); + if (status == I40E_SUCCESS && + (ocp_cfg_word0 & I40E_SR_OCP_ENABLED)) + hw->num_ports = 4; + i40e_release_nvm(hw); + } + } + valid_functions = p->valid_functions; num_functions = 0; while (valid_functions) { @@ -3964,13 +4049,14 @@ exit: * @length: length of the section to be written (in bytes from the offset) * @data: command buffer (size [bytes] = length) * @last_command: tells if this is the last command in a series + * @preservation_flags: Preservation mode flags * @cmd_details: pointer to command details structure or NULL * * Update the NVM using the admin queue commands **/ enum i40e_status_code i40e_aq_update_nvm(struct i40e_hw *hw, u8 module_pointer, u32 offset, u16 length, void *data, - bool last_command, + bool last_command, u8 preservation_flags, struct i40e_asq_cmd_details *cmd_details) { struct i40e_aq_desc desc; @@ -3991,6 +4077,16 @@ enum i40e_status_code i40e_aq_update_nvm(struct i40e_h /* If this is the last command in a series, set the proper flag. */ if (last_command) cmd->command_flags |= I40E_AQ_NVM_LAST_CMD; + if (hw->mac.type == I40E_MAC_X722) { + if (preservation_flags == I40E_NVM_PRESERVATION_FLAGS_SELECTED) + cmd->command_flags |= + (I40E_AQ_NVM_PRESERVATION_FLAGS_SELECTED << + I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT); + else if (preservation_flags == I40E_NVM_PRESERVATION_FLAGS_ALL) + cmd->command_flags |= + (I40E_AQ_NVM_PRESERVATION_FLAGS_ALL << + I40E_AQ_NVM_PRESERVATION_FLAGS_SHIFT); + } cmd->module_pointer = module_pointer; cmd->offset = CPU_TO_LE32(offset); cmd->length = CPU_TO_LE16(length); @@ -4006,6 +4102,28 @@ i40e_aq_update_nvm_exit: } /** + * i40e_aq_nvm_progress + * @hw: pointer to the hw struct + * @progress: pointer to progress returned from AQ + * @cmd_details: pointer to command details structure or NULL + * + * Gets progress of flash rearrangement process + **/ +enum i40e_status_code i40e_aq_nvm_progress(struct i40e_hw *hw, u8 *progress, + struct i40e_asq_cmd_details *cmd_details) +{ + enum i40e_status_code status; + struct i40e_aq_desc desc; + + DEBUGFUNC("i40e_aq_nvm_progress"); + + i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_nvm_progress); + status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); + *progress = desc.params.raw[0]; + return status; +} + +/** * i40e_aq_get_lldp_mib * @hw: pointer to the hw struct * @bridge_type: type of bridge requested @@ -4319,7 +4437,39 @@ enum i40e_status_code i40e_aq_start_lldp(struct i40e_h i40e_fill_default_direct_cmd_desc(&desc, i40e_aqc_opc_lldp_start); cmd->command = I40E_AQ_LLDP_AGENT_START; + status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); + return status; +} + +/** + * i40e_aq_set_dcb_parameters + * @hw: pointer to the hw struct + * @cmd_details: pointer to command details structure or NULL + * @dcb_enable: True if DCB configuration needs to be applied + * + **/ +enum i40e_status_code +i40e_aq_set_dcb_parameters(struct i40e_hw *hw, bool dcb_enable, + struct i40e_asq_cmd_details *cmd_details) +{ + struct i40e_aq_desc desc; + struct i40e_aqc_set_dcb_parameters *cmd = + (struct i40e_aqc_set_dcb_parameters *)&desc.params.raw; + enum i40e_status_code status; + + if ((hw->mac.type != I40E_MAC_XL710) || + ((hw->aq.api_maj_ver < 1) || + ((hw->aq.api_maj_ver == 1) && (hw->aq.api_min_ver < 6)))) + return I40E_ERR_DEVICE_NOT_SUPPORTED; + + i40e_fill_default_direct_cmd_desc(&desc, + i40e_aqc_opc_set_dcb_parameters); + + if (dcb_enable) { + cmd->valid_flags = I40E_DCB_VALID; + cmd->command = I40E_AQ_DCB_SET_AGENT; + } status = i40e_asq_send_command(hw, &desc, NULL, 0, cmd_details); return status; @@ -4387,7 +4537,6 @@ enum i40e_status_code i40e_aq_start_stop_dcbx(struct i * i40e_aq_add_udp_tunnel * @hw: pointer to the hw struct * @udp_port: the UDP port to add in Host byte order - * @header_len: length of the tunneling header length in DWords * @protocol_index: protocol index type * @filter_index: pointer to filter index * @cmd_details: pointer to command details structure or NULL @@ -5434,7 +5583,7 @@ enum i40e_status_code i40e_aq_add_rem_control_packet_f } if (mac_addr) - i40e_memcpy(cmd->mac, mac_addr, I40E_ETH_LENGTH_OF_ADDRESS, + i40e_memcpy(cmd->mac, mac_addr, ETH_ALEN, I40E_NONDMA_TO_NONDMA); cmd->etype = CPU_TO_LE16(ethtype); @@ -5458,10 +5607,10 @@ enum i40e_status_code i40e_aq_add_rem_control_packet_f * @hw: pointer to the hw struct * @seid: VSI seid to add ethertype filter from **/ -#define I40E_FLOW_CONTROL_ETHTYPE 0x8808 void i40e_add_filter_to_drop_tx_flow_control_frames(struct i40e_hw *hw, u16 seid) { +#define I40E_FLOW_CONTROL_ETHTYPE 0x8808 u16 flag = I40E_AQC_ADD_CONTROL_PACKET_FLAGS_IGNORE_MAC | I40E_AQC_ADD_CONTROL_PACKET_FLAGS_DROP | I40E_AQC_ADD_CONTROL_PACKET_FLAGS_TX; @@ -5892,6 +6041,7 @@ void i40e_set_pci_config_data(struct i40e_hw *hw, u16 * @ret_buff_size: actual buffer size returned * @ret_next_table: next block to read * @ret_next_index: next index to read + * @cmd_details: pointer to command details structure or NULL * * Dump internal FW/HW data for debug purposes. * @@ -6014,7 +6164,7 @@ enum i40e_status_code i40e_aq_configure_partition_bw(s * i40e_read_phy_register_clause22 * @hw: pointer to the HW structure * @reg: register address in the page - * @phy_adr: PHY address on MDIO interface + * @phy_addr: PHY address on MDIO interface * @value: PHY register value * * Reads specified PHY register value @@ -6059,7 +6209,7 @@ enum i40e_status_code i40e_read_phy_register_clause22( * i40e_write_phy_register_clause22 * @hw: pointer to the HW structure * @reg: register address in the page - * @phy_adr: PHY address on MDIO interface + * @phy_addr: PHY address on MDIO interface * @value: PHY register value * * Writes specified PHY register value @@ -6100,7 +6250,7 @@ enum i40e_status_code i40e_write_phy_register_clause22 * @hw: pointer to the HW structure * @page: registers page number * @reg: register address in the page - * @phy_adr: PHY address on MDIO interface + * @phy_addr: PHY address on MDIO interface * @value: PHY register value * * Reads specified PHY register value @@ -6174,7 +6324,7 @@ phy_read_end: * @hw: pointer to the HW structure * @page: registers page number * @reg: register address in the page - * @phy_adr: PHY address on MDIO interface + * @phy_addr: PHY address on MDIO interface * @value: PHY register value * * Writes value to specified PHY register @@ -6241,7 +6391,7 @@ phy_write_end: * @hw: pointer to the HW structure * @page: registers page number * @reg: register address in the page - * @phy_adr: PHY address on MDIO interface + * @phy_addr: PHY address on MDIO interface * @value: PHY register value *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Tue May 1 19:17:41 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C9419FB4E61; Tue, 1 May 2018 19:17:40 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 75DF275418; Tue, 1 May 2018 19:17:40 +0000 (UTC) (envelope-from jkim@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 709C626319; Tue, 1 May 2018 19:17:40 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41JHeRX097175; Tue, 1 May 2018 19:17:40 GMT (envelope-from jkim@FreeBSD.org) Received: (from jkim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41JHcdV097157; Tue, 1 May 2018 19:17:38 GMT (envelope-from jkim@FreeBSD.org) Message-Id: <201805011917.w41JHcdV097157@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jkim set sender to jkim@FreeBSD.org using -f From: Jung-uk Kim Date: Tue, 1 May 2018 19:17:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333150 - in head/sys/contrib/dev/acpica: . common compiler components/debugger components/dispatcher components/resources components/tables components/utilities include X-SVN-Group: head X-SVN-Commit-Author: jkim X-SVN-Commit-Paths: in head/sys/contrib/dev/acpica: . common compiler components/debugger components/dispatcher components/resources components/tables components/utilities include X-SVN-Commit-Revision: 333150 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 19:17:41 -0000 Author: jkim Date: Tue May 1 19:17:38 2018 New Revision: 333150 URL: https://svnweb.freebsd.org/changeset/base/333150 Log: MFV: r333077 Merge ACPICA 20180427. Modified: head/sys/contrib/dev/acpica/changes.txt head/sys/contrib/dev/acpica/common/adfile.c head/sys/contrib/dev/acpica/common/dmtbinfo2.c head/sys/contrib/dev/acpica/compiler/aslcompiler.h head/sys/contrib/dev/acpica/compiler/aslglobal.h head/sys/contrib/dev/acpica/compiler/aslhex.c head/sys/contrib/dev/acpica/compiler/aslload.c head/sys/contrib/dev/acpica/compiler/aslmessages.c head/sys/contrib/dev/acpica/compiler/aslmessages.h head/sys/contrib/dev/acpica/compiler/asloperands.c head/sys/contrib/dev/acpica/compiler/asltypes.h head/sys/contrib/dev/acpica/compiler/aslutils.c head/sys/contrib/dev/acpica/compiler/aslxref.c head/sys/contrib/dev/acpica/components/debugger/dbnames.c head/sys/contrib/dev/acpica/components/debugger/dbtest.c head/sys/contrib/dev/acpica/components/dispatcher/dswscope.c head/sys/contrib/dev/acpica/components/resources/rsdump.c head/sys/contrib/dev/acpica/components/tables/tbinstal.c head/sys/contrib/dev/acpica/components/utilities/utstring.c head/sys/contrib/dev/acpica/include/acapps.h head/sys/contrib/dev/acpica/include/acnames.h head/sys/contrib/dev/acpica/include/acpixf.h Directory Properties: head/sys/contrib/dev/acpica/ (props changed) Modified: head/sys/contrib/dev/acpica/changes.txt ============================================================================== --- head/sys/contrib/dev/acpica/changes.txt Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/changes.txt Tue May 1 19:17:38 2018 (r333150) @@ -1,4 +1,47 @@ ---------------------------------------- +27 April 2018. Summary of changes for version 20180427: + + +1) ACPICA kernel-resident subsystem: + +Debugger: Added support for Package objects in the "Test Objects" +command. This command walks the entire namespace and evaluates all named +data objects (Integers, Strings, Buffers, and now Packages). + +Improved error messages for the namespace root node. Originally, the root +was referred to by the confusing string "\___". This has been replaced by +"Namespace Root" for clarification. + +Fixed a potential infinite loop in the AcpiRsDumpByteList function. Colin +Ian King . + + +2) iASL Compiler/Disassembler and Tools: + +iASL: Implemented support to detect and flag illegal forward references. +For compatibility with other ACPI implementations, these references are +now illegal at the root level of the DSDT or SSDTs. Forward references +have always been illegal within control methods. This change should not +affect existing ASL/AML code because of the fact that these references +have always been illegal in the other ACPI implementation. + +iASL: Added error messages for the case where a table OEM ID and OEM +TABLE ID strings are longer than the ACPI-defined length. Previously, +these strings were simply silently truncated. + +iASL: Enhanced the -tc option (which creates an AML hex file in C, +suitable for import into a firmware project): + 1) Create a unique name for the table, to simplify use of multiple +SSDTs. + 2) Add a protection #ifdef in the file, similar to a .h header file. +With assistance from Sami Mujawar, sami.mujawar@arm.com and Evan Lloyd, +evan.lloyd@arm.com + +AcpiExec: Added a new option, -df, to disable the local fault handler. +This is useful during debugging, where it may be desired to drop into a +debugger on a fault. + +---------------------------------------- 13 March 2018. Summary of changes for version 20180313: Modified: head/sys/contrib/dev/acpica/common/adfile.c ============================================================================== --- head/sys/contrib/dev/acpica/common/adfile.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/common/adfile.c Tue May 1 19:17:38 2018 (r333150) @@ -454,3 +454,59 @@ FlSplitInputPathname ( return (AE_OK); } + + +/******************************************************************************* + * + * FUNCTION: FlGetFileBasename + * + * PARAMETERS: FilePathname - File path to be split + * + * RETURN: The extracted base name of the file, in upper case + * + * DESCRIPTION: Extract the file base name (the file name with no extension) + * from the input pathname. + * + * Note: Any backslashes in the pathname should be previously + * converted to forward slashes before calling this function. + * + ******************************************************************************/ + +char * +FlGetFileBasename ( + char *FilePathname) +{ + char *FileBasename; + char *Substring; + + + /* Backup to last slash or colon */ + + Substring = strrchr (FilePathname, '/'); + if (!Substring) + { + Substring = strrchr (FilePathname, ':'); + } + + /* Extract the full filename (base + extension) */ + + if (Substring) + { + FileBasename = FlStrdup (Substring + 1); + } + else + { + FileBasename = FlStrdup (FilePathname); + } + + /* Remove the filename extension if present */ + + Substring = strchr (FileBasename, '.'); + if (Substring) + { + *Substring = 0; + } + + AcpiUtStrupr (FileBasename); + return (FileBasename); +} Modified: head/sys/contrib/dev/acpica/common/dmtbinfo2.c ============================================================================== --- head/sys/contrib/dev/acpica/common/dmtbinfo2.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/common/dmtbinfo2.c Tue May 1 19:17:38 2018 (r333150) @@ -1063,7 +1063,7 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoNfit7[] = {ACPI_DMT_UINT24, ACPI_NFIT7_OFFSET (Reserved[0]), "Reserved", 0}, {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Capabilities), "Capabilities (decoded below)", DT_FLAG}, {ACPI_DMT_FLAG0, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Cache Flush to NVDIMM", 0}, - {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to MVDIMM", 0}, + {ACPI_DMT_FLAG1, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Flush to NVDIMM", 0}, {ACPI_DMT_FLAG2, ACPI_NFIT7_FLAG_OFFSET (Capabilities,0), "Memory Mirroring", 0}, {ACPI_DMT_UINT32, ACPI_NFIT7_OFFSET (Reserved2), "Reserved", 0}, ACPI_DMT_TERMINATOR Modified: head/sys/contrib/dev/acpica/compiler/aslcompiler.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslcompiler.h Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslcompiler.h Tue May 1 19:17:38 2018 (r333150) @@ -1187,6 +1187,15 @@ UtDumpBasicOp ( ACPI_PARSE_OBJECT *Op, UINT32 Level); +void * +UtGetParentMethod ( + ACPI_NAMESPACE_NODE *Node); + +BOOLEAN +UtNodeIsDescendantOf ( + ACPI_NAMESPACE_NODE *Node1, + ACPI_NAMESPACE_NODE *Node2); + void UtDisplaySupportedTables ( void); Modified: head/sys/contrib/dev/acpica/compiler/aslglobal.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslglobal.h Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslglobal.h Tue May 1 19:17:38 2018 (r333150) @@ -220,7 +220,8 @@ const char *Gbl_OpFlagNames[A "OP_COMPILER_EMITTED", "OP_IS_DUPLICATE", "OP_IS_RESOURCE_DATA", - "OP_IS_NULL_RETURN" + "OP_IS_NULL_RETURN", + "OP_NOT_FOUND_DURING_LOAD" }; #else Modified: head/sys/contrib/dev/acpica/compiler/aslhex.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslhex.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslhex.c Tue May 1 19:17:38 2018 (r333150) @@ -150,6 +150,7 @@ *****************************************************************************/ #include +#include #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("ashex") @@ -265,6 +266,9 @@ HxReadAmlOutputFile ( * output file, but formatted into hex/ascii bytes suitable for * inclusion into a C source file. * + * Note: the base name of the hex output file is prepended to + * all symbols as they are output to the file. + * ******************************************************************************/ static void @@ -276,18 +280,30 @@ HxDoHexOutputC ( UINT32 Offset = 0; UINT32 AmlFileSize; UINT32 i; + char *FileBasename; + /* Obtain the file basename (filename with no extension) */ + + FileBasename = FlGetFileBasename (Gbl_Files [ASL_FILE_HEX_OUTPUT].Filename); + /* Get AML size, seek back to start */ AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT); FlSeekFile (ASL_FILE_AML_OUTPUT, 0); + /* Finish the file header and emit the non-data symbols */ + FlPrintFile (ASL_FILE_HEX_OUTPUT, " * C source code output\n"); FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n", AmlFileSize); - FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char AmlCode[] =\n{\n"); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "#ifndef __%s_HEX__\n", FileBasename); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "#define __%s_HEX__\n\n", FileBasename); + + AcpiUtStrlwr (FileBasename); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char %s_aml_code[] =\n{\n", FileBasename); + while (Offset < AmlFileSize) { /* Read enough bytes needed for one output line */ @@ -303,7 +319,7 @@ HxDoHexOutputC ( for (i = 0; i < LineLength; i++) { /* - * Print each hex byte. + * Output each hex byte in the form: "0xnn," * Add a comma until the very last byte of the AML file * (Some C compilers complain about a trailing comma) */ @@ -337,7 +353,8 @@ HxDoHexOutputC ( Offset += LineLength; } - FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n"); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n\n"); + FlPrintFile (ASL_FILE_HEX_OUTPUT, "#endif\n"); } Modified: head/sys/contrib/dev/acpica/compiler/aslload.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslload.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslload.c Tue May 1 19:17:38 2018 (r333150) @@ -153,9 +153,10 @@ #include #include #include - +#include #include "aslcompiler.y.h" + #define _COMPONENT ACPI_COMPILER ACPI_MODULE_NAME ("aslload") @@ -470,9 +471,13 @@ LdNamespace1Begin ( UINT32 i; BOOLEAN ForceNewScope = FALSE; ACPI_OWNER_ID OwnerId = 0; + const ACPI_OPCODE_INFO *OpInfo; + ACPI_PARSE_OBJECT *ParentOp; ACPI_FUNCTION_NAME (LdNamespace1Begin); + + ACPI_DEBUG_PRINT ((ACPI_DB_DISPATCH, "Op %p [%s]\n", Op, Op->Asl.ParseOpName)); @@ -548,6 +553,69 @@ LdNamespace1Begin ( return (AE_OK); } + /* Check for a possible illegal forward reference */ + + if ((Op->Asl.ParseOpcode == PARSEOP_NAMESEG) || + (Op->Asl.ParseOpcode == PARSEOP_NAMESTRING)) + { + /* + * Op->Asl.Namepath will be NULL for these opcodes. + * These opcodes are guaranteed to have a parent. + * Examine the parent opcode. + */ + Status = AE_OK; + ParentOp = Op->Asl.Parent; + OpInfo = AcpiPsGetOpcodeInfo (ParentOp->Asl.AmlOpcode); + + /* + * Exclude all operators that actually declare a new name: + * Name (ABCD, 1) -> Ignore (AML_CLASS_NAMED_OBJECT) + * We only want references to named objects: + * Store (2, WXYZ) -> Attempt to resolve the name + */ + if (OpInfo->Class == AML_CLASS_NAMED_OBJECT) + { + return (AE_OK); + } + + /* + * Check if the referenced object exists at this point during + * the load: + * 1) If it exists, then this cannot be a forward reference. + * 2) If it does not exist, it could be a forward reference or + * it truly does not exist (and no external declaration). + */ + Status = AcpiNsLookup (WalkState->ScopeInfo, + Op->Asl.Value.Name, ACPI_TYPE_ANY, ACPI_IMODE_EXECUTE, + ACPI_NS_SEARCH_PARENT | ACPI_NS_DONT_OPEN_SCOPE, + WalkState, &Node); + if (Status == AE_NOT_FOUND) + { + /* + * This is either a foward reference or the object truly + * does not exist. The two cases can only be differentiated + * during the cross-reference stage later. Mark the Op/Name + * as not-found for now to indicate the need for further + * processing. + * + * Special case: Allow forward references from elements of + * Package objects. This provides compatibility with other + * ACPI implementations. To correctly implement this, the + * ACPICA table load defers package resolution until the entire + * namespace has been loaded. + */ + if ((ParentOp->Asl.ParseOpcode != PARSEOP_PACKAGE) && + (ParentOp->Asl.ParseOpcode != PARSEOP_VAR_PACKAGE)) + { + Op->Asl.CompileFlags |= OP_NOT_FOUND_DURING_LOAD; + } + + return (AE_OK); + } + + return (Status); + } + Path = Op->Asl.Namepath; if (!Path) { @@ -584,7 +652,6 @@ LdNamespace1Begin ( } break; - case PARSEOP_EXTERNAL: /* * "External" simply enters a name and type into the namespace. @@ -765,7 +832,6 @@ LdNamespace1Begin ( Status = AE_OK; goto FinishNode; - default: Modified: head/sys/contrib/dev/acpica/compiler/aslmessages.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslmessages.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslmessages.c Tue May 1 19:17:38 2018 (r333150) @@ -342,8 +342,8 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_RANGE */ "Constant out of range", /* ASL_MSG_BUFFER_ALLOCATION */ "Could not allocate line buffer", /* ASL_MSG_MISSING_DEPENDENCY */ "Missing dependency", -/* ASL_MSG_ILLEGAL_FORWARD_REF */ "Illegal forward reference within a method", -/* ASL_MSG_ILLEGAL_METHOD_REF */ "Illegal reference across two methods", +/* ASL_MSG_ILLEGAL_FORWARD_REF */ "Illegal forward reference", +/* ASL_MSG_ILLEGAL_METHOD_REF */ "Object is declared in a different method", /* ASL_MSG_LOCAL_NOT_USED */ "Method Local is set but never used", /* ASL_MSG_ARG_AS_LOCAL_NOT_USED */ "Method Argument (as a local) is set but never used", /* ASL_MSG_ARG_NOT_USED */ "Method Argument is never used", @@ -354,7 +354,9 @@ const char *AslCompilerMsgs [] = /* ASL_MSG_FOUND_HERE */ "Original name creation/declaration below: ", /* ASL_MSG_ILLEGAL_RECURSION */ "Illegal recursive call to method that creates named objects", /* ASL_MSG_EXTERN_COLLISION */ "A name cannot be defined and declared external in the same table", -/* ASL_MSG_FOUND_HERE_EXTERN*/ "Remove one of the declarations indicated above or below:" +/* ASL_MSG_FOUND_HERE_EXTERN */ "Remove one of the declarations indicated above or below:", +/* ASL_MSG_OEM_TABLE_ID */ "Invalid OEM Table ID", +/* ASL_MSG_OEM_ID */ "Invalid OEM ID" }; /* Table compiler */ Modified: head/sys/contrib/dev/acpica/compiler/aslmessages.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslmessages.h Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslmessages.h Tue May 1 19:17:38 2018 (r333150) @@ -357,6 +357,8 @@ typedef enum ASL_MSG_ILLEGAL_RECURSION, ASL_MSG_EXTERN_COLLISION, ASL_MSG_EXTERN_FOUND_HERE, + ASL_MSG_OEM_TABLE_ID, + ASL_MSG_OEM_ID, /* These messages are used by the Data Table compiler only */ Modified: head/sys/contrib/dev/acpica/compiler/asloperands.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/asloperands.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/asloperands.c Tue May 1 19:17:38 2018 (r333150) @@ -1061,7 +1061,7 @@ OpnDoDefinitionBlock ( if (strlen (Gbl_TableSignature) != ACPI_NAME_SIZE) { AslError (ASL_ERROR, ASL_MSG_TABLE_SIGNATURE, Child, - "Length is not exactly 4"); + "Length must be exactly 4 characters"); } for (i = 0; i < ACPI_NAME_SIZE; i++) @@ -1078,6 +1078,7 @@ OpnDoDefinitionBlock ( Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; + /* * We used the revision to set the integer width earlier */ @@ -1086,6 +1087,12 @@ OpnDoDefinitionBlock ( Child = Child->Asl.Next; Child->Asl.ParseOpcode = PARSEOP_DEFAULT_ARG; + if (Child->Asl.Value.String && + strlen (Child->Asl.Value.String) > ACPI_OEM_ID_SIZE) + { + AslError (ASL_ERROR, ASL_MSG_OEM_ID, Child, + "Length cannot exceed 6 characters"); + } /* OEM TableID */ @@ -1094,6 +1101,12 @@ OpnDoDefinitionBlock ( if (Child->Asl.Value.String) { Length = strlen (Child->Asl.Value.String); + if (Length > ACPI_OEM_TABLE_ID_SIZE) + { + AslError (ASL_ERROR, ASL_MSG_OEM_TABLE_ID, Child, + "Length cannot exceed 8 characters"); + } + Gbl_TableId = UtLocalCacheCalloc (Length + 1); strcpy (Gbl_TableId, Child->Asl.Value.String); Modified: head/sys/contrib/dev/acpica/compiler/asltypes.h ============================================================================== --- head/sys/contrib/dev/acpica/compiler/asltypes.h Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/asltypes.h Tue May 1 19:17:38 2018 (r333150) @@ -183,8 +183,9 @@ #define OP_IS_DUPLICATE 0x00040000 #define OP_IS_RESOURCE_DATA 0x00080000 #define OP_IS_NULL_RETURN 0x00100000 +#define OP_NOT_FOUND_DURING_LOAD 0x00200000 -#define ACPI_NUM_OP_FLAGS 0x21 +#define ACPI_NUM_OP_FLAGS 0x22 /* Keeps information about individual control methods */ Modified: head/sys/contrib/dev/acpica/compiler/aslutils.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslutils.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslutils.c Tue May 1 19:17:38 2018 (r333150) @@ -238,6 +238,97 @@ UtQueryForOverwrite ( /******************************************************************************* * + * FUNCTION: UtNodeIsDescendantOf + * + * PARAMETERS: Node1 - Child node + * Node2 - Possible parent node + * + * RETURN: Boolean + * + * DESCRIPTION: Returns TRUE if Node1 is a descendant of Node2. Otherwise, + * return FALSE. Note, we assume a NULL Node2 element to be the + * topmost (root) scope. All nodes are descendants of the root. + * Note: Nodes at the same level (siblings) are not considered + * descendants. + * + ******************************************************************************/ + +BOOLEAN +UtNodeIsDescendantOf ( + ACPI_NAMESPACE_NODE *Node1, + ACPI_NAMESPACE_NODE *Node2) +{ + + if (Node1 == Node2) + { + return (FALSE); + } + + if (!Node2) + { + return (TRUE); /* All nodes descend from the root */ + } + + /* Walk upward until the root is reached or parent is found */ + + while (Node1) + { + if (Node1 == Node2) + { + return (TRUE); + } + + Node1 = Node1->Parent; + } + + return (FALSE); +} + + +/******************************************************************************* + * + * FUNCTION: UtGetParentMethod + * + * PARAMETERS: Node - Namespace node for any object + * + * RETURN: Namespace node for the parent method + * NULL - object is not within a method + * + * DESCRIPTION: Find the parent (owning) method node for a namespace object + * + ******************************************************************************/ + +void * +UtGetParentMethod ( + ACPI_NAMESPACE_NODE *Node) +{ + ACPI_NAMESPACE_NODE *ParentNode; + + + if (!Node) + { + return (NULL); + } + + /* Walk upward until a method is found, or the root is reached */ + + ParentNode = Node->Parent; + while (ParentNode) + { + if (ParentNode->Type == ACPI_TYPE_METHOD) + { + return (ParentNode); + } + + ParentNode = ParentNode->Parent; + } + + return (NULL); /* Object is not within a control method */ +} + + +/******************************************************************************* + * * FUNCTION: UtDisplaySupportedTables * * PARAMETERS: None Modified: head/sys/contrib/dev/acpica/compiler/aslxref.c ============================================================================== --- head/sys/contrib/dev/acpica/compiler/aslxref.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/compiler/aslxref.c Tue May 1 19:17:38 2018 (r333150) @@ -197,23 +197,7 @@ XfCheckFieldRange ( UINT32 FieldBitLength, UINT32 AccessBitWidth); -#ifdef __UNDER_DEVELOPMENT -static ACPI_PARSE_OBJECT * -XfGetParentMethod ( - ACPI_PARSE_OBJECT *Op); -static void -XfCheckIllegalReference ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *Node); - -static BOOLEAN -XfIsObjectParental ( - ACPI_PARSE_OBJECT *MethodOp1, - ACPI_PARSE_OBJECT *MethodOp2); -#endif - - /******************************************************************************* * * FUNCTION: XfCrossReferenceNamespace @@ -702,7 +686,7 @@ XfNamespaceLocateBegin ( Gbl_NsLookupCount++; Status = AcpiNsLookup (WalkState->ScopeInfo, Path, ObjectType, - ACPI_IMODE_EXECUTE, Flags, WalkState, &(Node)); + ACPI_IMODE_EXECUTE, Flags, WalkState, &Node); if (ACPI_FAILURE (Status)) { if (Status == AE_NOT_FOUND) @@ -760,6 +744,26 @@ XfNamespaceLocateBegin ( return_ACPI_STATUS (Status); } + /* Object was found above, check for an illegal forward reference */ + + if (Op->Asl.CompileFlags & OP_NOT_FOUND_DURING_LOAD) + { + /* + * During the load phase, this Op was flagged as a possible + * illegal forward reference + * + * Note: Allow "forward references" from within a method to an + * object that is not within any method (module-level code) + */ + if (!WalkState->ScopeInfo || (UtGetParentMethod (Node) && + !UtNodeIsDescendantOf (WalkState->ScopeInfo->Scope.Node, + UtGetParentMethod (Node)))) + { + AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, + Op->Asl.ExternalName); + } + } + /* Check for a reference vs. name declaration */ if (!(OpInfo->Flags & AML_NAMED) && @@ -768,13 +772,6 @@ XfNamespaceLocateBegin ( /* This node has been referenced, mark it for reference check */ Node->Flags |= ANOBJ_IS_REFERENCED; - -#ifdef __UNDER_DEVELOPMENT - - /* Check for an illegal reference */ - - XfCheckIllegalReference (Op, Node); -#endif } /* Attempt to optimize the NamePath */ @@ -1205,178 +1202,3 @@ XfNamespaceLocateEnd ( return_ACPI_STATUS (AE_OK); } - - -#ifdef __UNDER_DEVELOPMENT -/******************************************************************************* - * - * FUNCTION: XfIsObjectParental - * - * PARAMETERS: ChildOp - Op to be checked - * PossibleParentOp - Determine if this op is in the family - * - * RETURN: TRUE if ChildOp is a descendent of PossibleParentOp - * - * DESCRIPTION: Determine if an Op is a descendent of another Op. Used to - * detect if a method is declared within another method. - * - ******************************************************************************/ - -static BOOLEAN -XfIsObjectParental ( - ACPI_PARSE_OBJECT *ChildOp, - ACPI_PARSE_OBJECT *PossibleParentOp) -{ - ACPI_PARSE_OBJECT *ParentOp; - - - /* Search upwards through the tree for possible parent */ - - ParentOp = ChildOp; - while (ParentOp) - { - if (ParentOp == PossibleParentOp) - { - return (TRUE); - } - - ParentOp = ParentOp->Asl.Parent; - } - - return (FALSE); -} - - -/******************************************************************************* - * - * FUNCTION: XfGetParentMethod - * - * PARAMETERS: Op - Op to be checked - * - * RETURN: Op for parent method. NULL if object is not within a method. - * - * DESCRIPTION: Determine if an object is within a control method. Used to - * implement special rules for named references from within a - * control method. - * - * NOTE: It would be better to have the parser set a flag in the Op if possible. - * - ******************************************************************************/ - -static ACPI_PARSE_OBJECT * -XfGetParentMethod ( - ACPI_PARSE_OBJECT *Op) -{ - ACPI_PARSE_OBJECT *ParentOp; - - - if (!Op) - { - return (NULL); - } - - if (Op->Asl.ParseOpcode == PARSEOP_METHOD) - { - return (NULL); - } - - /* Walk upwards through the parse tree, up to the root if necessary */ - - ParentOp = Op; - while (ParentOp) - { - if (ParentOp->Asl.ParseOpcode == PARSEOP_METHOD) - { - return (ParentOp); - } - - ParentOp = ParentOp->Asl.Parent; - } - - /* Object is not within a method */ - - return (NULL); -} - - -/******************************************************************************* - * - * FUNCTION: XfCheckIllegalReference - * - * PARAMETERS: Op - Op referring to the target - * TargetNode - Target of the reference - * - * RETURN: None. Emits error message for an illegal reference - * - * DESCRIPTION: Determine if a named reference is legal. A "named" reference - * is something like: Store(ABCD, ...), where ABCD is an AML - * Nameseg or Namepath. - * - * NOTE: Caller must ensure that the name Op is in fact a reference, and not - * an actual name declaration (creation of a named object). - * - ******************************************************************************/ - -static void -XfCheckIllegalReference ( - ACPI_PARSE_OBJECT *Op, - ACPI_NAMESPACE_NODE *TargetNode) -{ - ACPI_PARSE_OBJECT *MethodOp1; - ACPI_PARSE_OBJECT *MethodOp2; - ACPI_PARSE_OBJECT *TargetOp; - - - /* - * Check for an illegal reference to a named object: - * - * 1) References from one control method to another, non-parent - * method are not allowed, they will fail at runtime. - * - * 2) Forward references within a control method are not allowed. - * AML interpreters use a one-pass parse of control methods - * so these forward references will fail at runtime. - */ - TargetOp = TargetNode->Op; - - MethodOp1 = XfGetParentMethod (Op); - MethodOp2 = XfGetParentMethod (TargetOp); - - /* Are both objects within control method(s)? */ - - if (!MethodOp1 || !MethodOp2) - { - return; - } - - /* Objects not in the same method? */ - - if (MethodOp1 != MethodOp2) - { - /* - * 1) Cross-method named reference - * - * This is OK if and only if the target reference is within in a - * method that is a parent of current method - */ - if (!XfIsObjectParental (MethodOp1, MethodOp2)) - { - AslError (ASL_ERROR, ASL_MSG_ILLEGAL_METHOD_REF, Op, - Op->Asl.ExternalName); - } - } - - /* - * 2) Both reference and target are in the same method. Check if this is - * an (illegal) forward reference by examining the exact source code - * location of each (the referenced object and the object declaration). - * This is a bit nasty, yet effective. - */ - else if (Op->Asl.LogicalByteOffset < TargetOp->Asl.LogicalByteOffset) - { - AslError (ASL_ERROR, ASL_MSG_ILLEGAL_FORWARD_REF, Op, - Op->Asl.ExternalName); - } - -} -#endif Modified: head/sys/contrib/dev/acpica/components/debugger/dbnames.c ============================================================================== --- head/sys/contrib/dev/acpica/components/debugger/dbnames.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/components/debugger/dbnames.c Tue May 1 19:17:38 2018 (r333150) @@ -372,8 +372,17 @@ AcpiDbDumpNamespace ( } AcpiDbSetOutputDestination (ACPI_DB_DUPLICATE_OUTPUT); - AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n", - ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry); + + if (((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Parent) + { + AcpiOsPrintf ("ACPI Namespace (from %4.4s (%p) subtree):\n", + ((ACPI_NAMESPACE_NODE *) SubtreeEntry)->Name.Ascii, SubtreeEntry); + } + else + { + AcpiOsPrintf ("ACPI Namespace (from %s):\n", + ACPI_NAMESPACE_ROOT); + } /* Display the subtree */ Modified: head/sys/contrib/dev/acpica/components/debugger/dbtest.c ============================================================================== --- head/sys/contrib/dev/acpica/components/debugger/dbtest.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/components/debugger/dbtest.c Tue May 1 19:17:38 2018 (r333150) @@ -189,6 +189,10 @@ AcpiDbTestStringType ( UINT32 ByteLength); static ACPI_STATUS +AcpiDbTestPackageType ( + ACPI_NAMESPACE_NODE *Node); + +static ACPI_STATUS AcpiDbReadFromObject ( ACPI_NAMESPACE_NODE *Node, ACPI_OBJECT_TYPE ExpectedType, @@ -456,6 +460,11 @@ AcpiDbTestOneObject ( BitLength = ByteLength * 8; break; + case ACPI_TYPE_PACKAGE: + + LocalType = ACPI_TYPE_PACKAGE; + break; + case ACPI_TYPE_FIELD_UNIT: case ACPI_TYPE_BUFFER_FIELD: case ACPI_TYPE_LOCAL_REGION_FIELD: @@ -490,6 +499,7 @@ AcpiDbTestOneObject ( AcpiOsPrintf ("%14s: %4.4s", AcpiUtGetTypeName (Node->Type), Node->Name.Ascii); + if (!ObjDesc) { AcpiOsPrintf (" Ignoring, no attached object\n"); @@ -510,13 +520,12 @@ AcpiDbTestOneObject ( case ACPI_ADR_SPACE_SYSTEM_MEMORY: case ACPI_ADR_SPACE_SYSTEM_IO: case ACPI_ADR_SPACE_PCI_CONFIG: - case ACPI_ADR_SPACE_EC: break; default: - AcpiOsPrintf (" %s space is not supported [%4.4s]\n", + AcpiOsPrintf (" %s space is not supported in this command [%4.4s]\n", AcpiUtGetRegionName (RegionObj->Region.SpaceId), RegionObj->Region.Node->Name.Ascii); return (AE_OK); @@ -546,6 +555,11 @@ AcpiDbTestOneObject ( Status = AcpiDbTestBufferType (Node, BitLength); break; + case ACPI_TYPE_PACKAGE: + + Status = AcpiDbTestPackageType (Node); + break; + default: AcpiOsPrintf (" Ignoring, type not implemented (%2.2X)", @@ -553,6 +567,14 @@ AcpiDbTestOneObject ( break; } + /* Exit on error, but don't abort the namespace walk */ + + if (ACPI_FAILURE (Status)) + { + Status = AE_OK; + goto Exit; + } + switch (Node->Type) { case ACPI_TYPE_LOCAL_REGION_FIELD: @@ -560,12 +582,14 @@ AcpiDbTestOneObject ( RegionObj = ObjDesc->Field.RegionObj; AcpiOsPrintf (" (%s)", AcpiUtGetRegionName (RegionObj->Region.SpaceId)); + break; default: break; } +Exit: AcpiOsPrintf ("\n"); return (Status); } @@ -624,7 +648,6 @@ AcpiDbTestIntegerType ( { ValueToWrite = 0; } - /* Write a new value */ WriteValue.Type = ACPI_TYPE_INTEGER; @@ -917,6 +940,40 @@ Exit: /******************************************************************************* * + * FUNCTION: AcpiDbTestPackageType + * + * PARAMETERS: Node - Parent NS node for the object + * + * RETURN: Status + * + * DESCRIPTION: Test read for a Package object. + * + ******************************************************************************/ + +static ACPI_STATUS +AcpiDbTestPackageType ( + ACPI_NAMESPACE_NODE *Node) +{ + ACPI_OBJECT *Temp1 = NULL; + ACPI_STATUS Status; + + + /* Read the original value */ + + Status = AcpiDbReadFromObject (Node, ACPI_TYPE_PACKAGE, &Temp1); + if (ACPI_FAILURE (Status)) + { + return (Status); + } + + AcpiOsPrintf (" %8.8X Elements", Temp1->Package.Count); + AcpiOsFree (Temp1); + return (Status); +} + + +/******************************************************************************* + * * FUNCTION: AcpiDbReadFromObject * * PARAMETERS: Node - Parent NS node for the object @@ -957,8 +1014,8 @@ AcpiDbReadFromObject ( AcpiGbl_MethodExecuting = TRUE; Status = AcpiEvaluateObject (ReadHandle, NULL, &ParamObjects, &ReturnObj); - AcpiGbl_MethodExecuting = FALSE; + AcpiGbl_MethodExecuting = FALSE; if (ACPI_FAILURE (Status)) { AcpiOsPrintf ("Could not read from object, %s", @@ -973,6 +1030,7 @@ AcpiDbReadFromObject ( case ACPI_TYPE_INTEGER: case ACPI_TYPE_BUFFER: case ACPI_TYPE_STRING: + case ACPI_TYPE_PACKAGE: /* * Did we receive the type we wanted? Most important for the * Integer/Buffer case (when a field is larger than an Integer, @@ -984,6 +1042,7 @@ AcpiDbReadFromObject ( AcpiUtGetTypeName (ExpectedType), AcpiUtGetTypeName (RetValue->Type)); + AcpiOsFree (ReturnObj.Pointer); return (AE_TYPE); } Modified: head/sys/contrib/dev/acpica/components/dispatcher/dswscope.c ============================================================================== --- head/sys/contrib/dev/acpica/components/dispatcher/dswscope.c Tue May 1 18:50:12 2018 (r333149) +++ head/sys/contrib/dev/acpica/components/dispatcher/dswscope.c Tue May 1 19:17:38 2018 (r333150) @@ -269,8 +269,7 @@ AcpiDsScopeStackPush ( } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[\\___] (%s)", "ROOT")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, ACPI_NAMESPACE_ROOT)); } ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, @@ -328,15 +327,13 @@ AcpiDsScopeStackPop ( NewScopeInfo = WalkState->ScopeInfo; if (NewScopeInfo) { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[%4.4s] (%s)\n", + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "[%4.4s] (%s)\n", AcpiUtGetNodeName (NewScopeInfo->Scope.Node), AcpiUtGetTypeName (NewScopeInfo->Common.Value))); } else { - ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, - "[\\___] (ROOT)\n")); + ACPI_DEBUG_PRINT_RAW ((ACPI_DB_EXEC, "%s\n", ACPI_NAMESPACE_ROOT)); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Tue May 1 20:09:30 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B17B0FB6BD5; Tue, 1 May 2018 20:09:30 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6126084F8E; Tue, 1 May 2018 20:09:30 +0000 (UTC) (envelope-from scottl@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5569D26B49; Tue, 1 May 2018 20:09:30 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41K9Ukm024518; Tue, 1 May 2018 20:09:30 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41K9TgQ024512; Tue, 1 May 2018 20:09:29 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <201805012009.w41K9TgQ024512@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Tue, 1 May 2018 20:09:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333152 - in head/sys/cam: ata scsi X-SVN-Group: head X-SVN-Commit-Author: scottl X-SVN-Commit-Paths: in head/sys/cam: ata scsi X-SVN-Commit-Revision: 333152 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 20:09:31 -0000 Author: scottl Date: Tue May 1 20:09:29 2018 New Revision: 333152 URL: https://svnweb.freebsd.org/changeset/base/333152 Log: cam_periph_runccb() changed several years ago to overwrite the ccb callback pointer. It's now unhelpful and misleading for callers to continue to set it, so bring all callers into conformance. There's no real functional change, but it makes reading the code a lot less confusing. Sponsored by: Netflix Modified: head/sys/cam/ata/ata_da.c head/sys/cam/scsi/scsi_cd.c head/sys/cam/scsi/scsi_da.c head/sys/cam/scsi/scsi_pass.c head/sys/cam/scsi/scsi_sa.c head/sys/cam/scsi/scsi_sg.c Modified: head/sys/cam/ata/ata_da.c ============================================================================== --- head/sys/cam/ata/ata_da.c Tue May 1 19:34:33 2018 (r333151) +++ head/sys/cam/ata/ata_da.c Tue May 1 20:09:29 2018 (r333152) @@ -957,7 +957,7 @@ adaclose(struct disk *dp) ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL); cam_fill_ataio(&ccb->ataio, 1, - adadone, + NULL, CAM_DIR_NONE, 0, NULL, @@ -1075,7 +1075,7 @@ adadump(void *arg, void *virtual, vm_offset_t physical ataio.ccb_h.ccb_state = ADA_CCB_DUMP; cam_fill_ataio(&ataio, 0, - adadone, + NULL, CAM_DIR_OUT, 0, (u_int8_t *) virtual, @@ -1109,7 +1109,7 @@ adadump(void *arg, void *virtual, vm_offset_t physical ataio.ccb_h.ccb_state = ADA_CCB_DUMP; cam_fill_ataio(&ataio, 0, - adadone, + NULL, CAM_DIR_NONE, 0, NULL, @@ -3439,7 +3439,7 @@ adaflush(void) ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL); cam_fill_ataio(&ccb->ataio, 0, - adadone, + NULL, CAM_DIR_NONE, 0, NULL, @@ -3491,7 +3491,7 @@ adaspindown(uint8_t cmd, int flags) cam_fill_ataio(&local_ccb, 0, - adadone, + NULL, CAM_DIR_NONE | flags, 0, NULL, Modified: head/sys/cam/scsi/scsi_cd.c ============================================================================== --- head/sys/cam/scsi/scsi_cd.c Tue May 1 19:34:33 2018 (r333151) +++ head/sys/cam/scsi/scsi_cd.c Tue May 1 20:09:29 2018 (r333152) @@ -2178,7 +2178,7 @@ cdprevent(struct cam_periph *periph, int action) scsi_prevent(&ccb->csio, /*retries*/ cd_retry_count, - cddone, + /*cbfcnp*/NULL, MSG_SIMPLE_Q_TAG, action, SSD_FULL_SIZE, @@ -2364,7 +2364,7 @@ cdsize(struct cam_periph *periph, u_int32_t *size) scsi_read_capacity(&ccb->csio, /*retries*/ cd_retry_count, - cddone, + /*cbfcnp*/NULL, MSG_SIMPLE_Q_TAG, rcap_buf, SSD_FULL_SIZE, @@ -2635,7 +2635,7 @@ cdreadtoc(struct cam_periph *periph, u_int32_t mode, u cam_fill_csio(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* flags */ CAM_DIR_IN, /* tag_action */ MSG_SIMPLE_Q_TAG, /* data_ptr */ data, @@ -2682,7 +2682,7 @@ cdreadsubchannel(struct cam_periph *periph, u_int32_t cam_fill_csio(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* flags */ CAM_DIR_IN, /* tag_action */ MSG_SIMPLE_Q_TAG, /* data_ptr */ (u_int8_t *)data, @@ -2743,7 +2743,7 @@ cdgetmode(struct cam_periph *periph, struct cd_mode_pa scsi_mode_sense_len(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* dbd */ 0, /* page_code */ SMS_PAGE_CTRL_CURRENT, @@ -2886,7 +2886,7 @@ cdsetmode(struct cam_periph *periph, struct cd_mode_pa scsi_mode_select_len(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* scsi_page_fmt */ 1, /* save_pages */ 0, @@ -2948,7 +2948,7 @@ cdplay(struct cam_periph *periph, u_int32_t blk, u_int } cam_fill_csio(csio, /*retries*/ cd_retry_count, - cddone, + /*cbfcnp*/NULL, /*flags*/CAM_DIR_NONE, MSG_SIMPLE_Q_TAG, /*dataptr*/NULL, @@ -2982,7 +2982,7 @@ cdplaymsf(struct cam_periph *periph, u_int32_t startm, cam_fill_csio(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* flags */ CAM_DIR_NONE, /* tag_action */ MSG_SIMPLE_Q_TAG, /* data_ptr */ NULL, @@ -3028,7 +3028,7 @@ cdplaytracks(struct cam_periph *periph, u_int32_t stra cam_fill_csio(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* flags */ CAM_DIR_NONE, /* tag_action */ MSG_SIMPLE_Q_TAG, /* data_ptr */ NULL, @@ -3070,7 +3070,7 @@ cdpause(struct cam_periph *periph, u_int32_t go) cam_fill_csio(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* flags */ CAM_DIR_NONE, /* tag_action */ MSG_SIMPLE_Q_TAG, /* data_ptr */ NULL, @@ -3105,7 +3105,7 @@ cdstartunit(struct cam_periph *periph, int load) scsi_start_stop(&ccb->csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* start */ TRUE, /* load_eject */ load, @@ -3133,7 +3133,7 @@ cdstopunit(struct cam_periph *periph, u_int32_t eject) scsi_start_stop(&ccb->csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* start */ FALSE, /* load_eject */ eject, @@ -3169,7 +3169,7 @@ cdsetspeed(struct cam_periph *periph, u_int32_t rdspee cam_fill_csio(csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* flags */ CAM_DIR_NONE, /* tag_action */ MSG_SIMPLE_Q_TAG, /* data_ptr */ NULL, @@ -3244,7 +3244,7 @@ cdreportkey(struct cam_periph *periph, struct dvd_auth scsi_report_key(&ccb->csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* lba */ lba, /* agid */ authinfo->agid, @@ -3422,7 +3422,7 @@ cdsendkey(struct cam_periph *periph, struct dvd_authin scsi_send_key(&ccb->csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* agid */ authinfo->agid, /* key_format */ authinfo->format, @@ -3526,7 +3526,7 @@ cdreaddvdstructure(struct cam_periph *periph, struct d scsi_read_dvd_structure(&ccb->csio, /* retries */ cd_retry_count, - /* cbfcnp */ cddone, + /* cbfcnp */ NULL, /* tag_action */ MSG_SIMPLE_Q_TAG, /* lba */ address, /* layer_number */ dvdstruct->layer_num, Modified: head/sys/cam/scsi/scsi_da.c ============================================================================== --- head/sys/cam/scsi/scsi_da.c Tue May 1 19:34:33 2018 (r333151) +++ head/sys/cam/scsi/scsi_da.c Tue May 1 20:09:29 2018 (r333152) @@ -1694,7 +1694,7 @@ daclose(struct disk *dp) (softc->flags & DA_FLAG_PACK_INVALID) == 0) { ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL); scsi_synchronize_cache(&ccb->csio, /*retries*/1, - /*cbfcnp*/dadone, MSG_SIMPLE_Q_TAG, + /*cbfcnp*/NULL, MSG_SIMPLE_Q_TAG, /*begin_lba*/0, /*lb_count*/0, SSD_FULL_SIZE, 5 * 60 * 1000); cam_periph_runccb(ccb, daerror, /*cam_flags*/0, @@ -1812,7 +1812,7 @@ dadump(void *arg, void *virtual, vm_offset_t physical, csio.ccb_h.ccb_state = DA_CCB_DUMP; scsi_read_write(&csio, /*retries*/0, - dadone, + /*cbfcnp*/NULL, MSG_ORDERED_Q_TAG, /*read*/SCSI_RW_WRITE, /*byte2*/0, @@ -1839,7 +1839,7 @@ dadump(void *arg, void *virtual, vm_offset_t physical, csio.ccb_h.ccb_state = DA_CCB_DUMP; scsi_synchronize_cache(&csio, /*retries*/0, - /*cbfcnp*/dadone, + /*cbfcnp*/NULL, MSG_SIMPLE_Q_TAG, /*begin_lba*/0,/* Cover the whole disk */ /*lb_count*/0, @@ -5738,7 +5738,7 @@ daprevent(struct cam_periph *periph, int action) scsi_prevent(&ccb->csio, /*retries*/1, - /*cbcfp*/dadone, + /*cbcfp*/NULL, MSG_SIMPLE_Q_TAG, action, SSD_FULL_SIZE, @@ -5935,7 +5935,7 @@ dashutdown(void * arg, int howto) ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL); scsi_synchronize_cache(&ccb->csio, /*retries*/0, - /*cbfcnp*/dadone, + /*cbfcnp*/NULL, MSG_SIMPLE_Q_TAG, /*begin_lba*/0, /* whole disk */ /*lb_count*/0, Modified: head/sys/cam/scsi/scsi_pass.c ============================================================================== --- head/sys/cam/scsi/scsi_pass.c Tue May 1 19:34:33 2018 (r333151) +++ head/sys/cam/scsi/scsi_pass.c Tue May 1 20:09:29 2018 (r333152) @@ -2221,10 +2221,6 @@ passsendccb(struct cam_periph *periph, union ccb *ccb, } /* - */ - ccb->ccb_h.cbfcnp = passdone; - - /* * Let cam_periph_mapmem do a sanity check on the data pointer format. * Even if no data transfer is needed, it's a cheap check and it * simplifies the code. Modified: head/sys/cam/scsi/scsi_sa.c ============================================================================== --- head/sys/cam/scsi/scsi_sa.c Tue May 1 19:34:33 2018 (r333151) +++ head/sys/cam/scsi/scsi_sa.c Tue May 1 20:09:29 2018 (r333152) @@ -2895,13 +2895,13 @@ samount(struct cam_periph *periph, int oflags, struct if (softc->flags & SA_FLAG_TAPE_MOUNTED) { ccb = cam_periph_getccb(periph, 1); - scsi_test_unit_ready(&ccb->csio, 0, sadone, + scsi_test_unit_ready(&ccb->csio, 0, NULL, MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, IO_TIMEOUT); error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT, softc->device_stats); if (error == ENXIO) { softc->flags &= ~SA_FLAG_TAPE_MOUNTED; - scsi_test_unit_ready(&ccb->csio, 0, sadone, + scsi_test_unit_ready(&ccb->csio, 0, NULL, MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, IO_TIMEOUT); error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT, softc->device_stats); @@ -2922,7 +2922,7 @@ samount(struct cam_periph *periph, int oflags, struct return (error); } ccb = cam_periph_getccb(periph, 1); - scsi_test_unit_ready(&ccb->csio, 0, sadone, + scsi_test_unit_ready(&ccb->csio, 0, NULL, MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, IO_TIMEOUT); error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT, softc->device_stats); @@ -2943,7 +2943,7 @@ samount(struct cam_periph *periph, int oflags, struct /* * *Very* first off, make sure we're loaded to BOT. */ - scsi_load_unload(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG, FALSE, + scsi_load_unload(&ccb->csio, 2, NULL, MSG_SIMPLE_Q_TAG, FALSE, FALSE, FALSE, 1, SSD_FULL_SIZE, REWIND_TIMEOUT); error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT, softc->device_stats); @@ -2952,7 +2952,7 @@ samount(struct cam_periph *periph, int oflags, struct * In case this doesn't work, do a REWIND instead */ if (error) { - scsi_rewind(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG, + scsi_rewind(&ccb->csio, 2, NULL, MSG_SIMPLE_Q_TAG, FALSE, SSD_FULL_SIZE, REWIND_TIMEOUT); error = cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT, softc->device_stats); @@ -2979,13 +2979,13 @@ samount(struct cam_periph *periph, int oflags, struct } if ((softc->quirks & SA_QUIRK_NODREAD) == 0) { - scsi_sa_read_write(&ccb->csio, 0, sadone, + scsi_sa_read_write(&ccb->csio, 0, NULL, MSG_SIMPLE_Q_TAG, 1, FALSE, 0, 8192, (void *) rblim, 8192, SSD_FULL_SIZE, IO_TIMEOUT); (void) cam_periph_runccb(ccb, saerror, 0, SF_NO_PRINT, softc->device_stats); - scsi_rewind(&ccb->csio, 1, sadone, MSG_SIMPLE_Q_TAG, + scsi_rewind(&ccb->csio, 1, NULL, MSG_SIMPLE_Q_TAG, FALSE, SSD_FULL_SIZE, REWIND_TIMEOUT); error = cam_periph_runccb(ccb, saerror, CAM_RETRY_SELTO, SF_NO_PRINT | SF_RETRY_UA, @@ -3001,7 +3001,7 @@ samount(struct cam_periph *periph, int oflags, struct /* * Next off, determine block limits. */ - scsi_read_block_limits(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, + scsi_read_block_limits(&ccb->csio, 5, NULL, MSG_SIMPLE_Q_TAG, rblim, SSD_FULL_SIZE, SCSIOP_TIMEOUT); error = cam_periph_runccb(ccb, saerror, CAM_RETRY_SELTO, @@ -3616,7 +3616,7 @@ retry: mode_blk = (struct scsi_mode_blk_desc *)&mode_hdr[1]; /* it is safe to retry this */ - scsi_mode_sense(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, FALSE, + scsi_mode_sense(&ccb->csio, 5, NULL, MSG_SIMPLE_Q_TAG, FALSE, SMS_PAGE_CTRL_CURRENT, (params_to_get & SA_PARAM_COMPRESSION) ? cpage : SMS_VENDOR_SPECIFIC_PAGE, mode_buffer, mode_buffer_len, SSD_FULL_SIZE, SCSIOP_TIMEOUT); @@ -3679,7 +3679,7 @@ retry: * for the block descriptor, etc. */ - scsi_mode_sense(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG, FALSE, + scsi_mode_sense(&ccb->csio, 2, NULL, MSG_SIMPLE_Q_TAG, FALSE, SMS_PAGE_CTRL_CURRENT, SMS_VENDOR_SPECIFIC_PAGE, mode_buffer, mode_buffer_len, SSD_FULL_SIZE, SCSIOP_TIMEOUT); @@ -3741,7 +3741,7 @@ retry: for (i = 0; i < SA_DENSITY_TYPES; i++) { scsi_report_density_support(&ccb->csio, /*retries*/ 1, - /*cbfcnp*/ sadone, + /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*media*/ softc->density_type_bits[i] & SRDS_MEDIA, /*medium_type*/ softc->density_type_bits[i] & @@ -3800,7 +3800,7 @@ retry: scsi_mode_sense_len(&ccb->csio, /*retries*/ 5, - /*cbfcnp*/ sadone, + /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*dbd*/ TRUE, /*page_code*/ (prot_changeable == 0) ? @@ -4031,7 +4031,7 @@ retry_length: scsi_mode_select_len(&ccb->csio, /*retries*/ 5, - /*cbfcnp*/ sadone, + /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*scsi_page_fmt*/ TRUE, /*save_pages*/ FALSE, @@ -4307,7 +4307,7 @@ retry: } /* It is safe to retry this operation */ - scsi_mode_select(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, + scsi_mode_select(&ccb->csio, 5, NULL, MSG_SIMPLE_Q_TAG, (params_to_set & SA_PARAM_COMPRESSION)? TRUE : FALSE, FALSE, mode_buffer, mode_buffer_len, SSD_FULL_SIZE, SCSIOP_TIMEOUT); @@ -4625,7 +4625,7 @@ saprevent(struct cam_periph *periph, int action) ccb = cam_periph_getccb(periph, 1); /* It is safe to retry this operation */ - scsi_prevent(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, action, + scsi_prevent(&ccb->csio, 5, NULL, MSG_SIMPLE_Q_TAG, action, SSD_FULL_SIZE, SCSIOP_TIMEOUT); error = cam_periph_runccb(ccb, saerror, 0, sf, softc->device_stats); @@ -4651,7 +4651,7 @@ sarewind(struct cam_periph *periph) ccb = cam_periph_getccb(periph, 1); /* It is safe to retry this operation */ - scsi_rewind(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG, FALSE, + scsi_rewind(&ccb->csio, 2, NULL, MSG_SIMPLE_Q_TAG, FALSE, SSD_FULL_SIZE, REWIND_TIMEOUT); softc->dsreg = MTIO_DSREG_REW; @@ -4683,7 +4683,7 @@ saspace(struct cam_periph *periph, int count, scsi_spa /* This cannot be retried */ - scsi_space(&ccb->csio, 0, sadone, MSG_SIMPLE_Q_TAG, code, count, + scsi_space(&ccb->csio, 0, NULL, MSG_SIMPLE_Q_TAG, code, count, SSD_FULL_SIZE, SPACE_TIMEOUT); /* @@ -4764,7 +4764,7 @@ sawritefilemarks(struct cam_periph *periph, int nmarks softc->dsreg = MTIO_DSREG_FMK; /* this *must* not be retried */ - scsi_write_filemarks(&ccb->csio, 0, sadone, MSG_SIMPLE_Q_TAG, + scsi_write_filemarks(&ccb->csio, 0, NULL, MSG_SIMPLE_Q_TAG, immed, setmarks, nmarks, SSD_FULL_SIZE, IO_TIMEOUT); softc->dsreg = MTIO_DSREG_REST; @@ -4827,7 +4827,7 @@ sagetpos(struct cam_periph *periph) ccb = cam_periph_getccb(periph, CAM_PRIORITY_NORMAL); scsi_read_position_10(&ccb->csio, /*retries*/ 1, - /*cbfcnp*/ sadone, + /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*service_action*/ SA_RPOS_LONG_FORM, /*data_ptr*/ (uint8_t *)&long_pos, @@ -4928,7 +4928,7 @@ sardpos(struct cam_periph *periph, int hard, u_int32_t } ccb = cam_periph_getccb(periph, 1); - scsi_read_position(&ccb->csio, 1, sadone, MSG_SIMPLE_Q_TAG, + scsi_read_position(&ccb->csio, 1, NULL, MSG_SIMPLE_Q_TAG, hard, &loc, SSD_FULL_SIZE, SCSIOP_TIMEOUT); softc->dsreg = MTIO_DSREG_RBSY; error = cam_periph_runccb(ccb, saerror, 0, 0, softc->device_stats); @@ -4988,7 +4988,7 @@ sasetpos(struct cam_periph *periph, int hard, struct m if (locate16 != 0) { scsi_locate_16(&ccb->csio, /*retries*/ 1, - /*cbfcnp*/ sadone, + /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*immed*/ immed, /*cp*/ cp, @@ -5001,7 +5001,7 @@ sasetpos(struct cam_periph *periph, int hard, struct m } else { scsi_locate_10(&ccb->csio, /*retries*/ 1, - /*cbfcnp*/ sadone, + /*cbfcnp*/ NULL, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*immed*/ immed, /*cp*/ cp, @@ -5071,7 +5071,7 @@ saretension(struct cam_periph *periph) ccb = cam_periph_getccb(periph, 1); /* It is safe to retry this operation */ - scsi_load_unload(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, FALSE, + scsi_load_unload(&ccb->csio, 5, NULL, MSG_SIMPLE_Q_TAG, FALSE, FALSE, TRUE, TRUE, SSD_FULL_SIZE, ERASE_TIMEOUT); softc->dsreg = MTIO_DSREG_TEN; @@ -5098,7 +5098,7 @@ sareservereleaseunit(struct cam_periph *periph, int re ccb = cam_periph_getccb(periph, 1); /* It is safe to retry this operation */ - scsi_reserve_release_unit(&ccb->csio, 2, sadone, MSG_SIMPLE_Q_TAG, + scsi_reserve_release_unit(&ccb->csio, 2, NULL, MSG_SIMPLE_Q_TAG, FALSE, 0, SSD_FULL_SIZE, SCSIOP_TIMEOUT, reserve); softc->dsreg = MTIO_DSREG_RBSY; error = cam_periph_runccb(ccb, saerror, 0, @@ -5129,7 +5129,7 @@ saloadunload(struct cam_periph *periph, int load) ccb = cam_periph_getccb(periph, 1); /* It is safe to retry this operation */ - scsi_load_unload(&ccb->csio, 5, sadone, MSG_SIMPLE_Q_TAG, FALSE, + scsi_load_unload(&ccb->csio, 5, NULL, MSG_SIMPLE_Q_TAG, FALSE, FALSE, FALSE, load, SSD_FULL_SIZE, REWIND_TIMEOUT); softc->dsreg = (load)? MTIO_DSREG_LD : MTIO_DSREG_UNL; @@ -5161,7 +5161,7 @@ saerase(struct cam_periph *periph, int longerase) ccb = cam_periph_getccb(periph, 1); - scsi_erase(&ccb->csio, 1, sadone, MSG_SIMPLE_Q_TAG, FALSE, longerase, + scsi_erase(&ccb->csio, 1, NULL, MSG_SIMPLE_Q_TAG, FALSE, longerase, SSD_FULL_SIZE, ERASE_TIMEOUT); softc->dsreg = MTIO_DSREG_ZER; Modified: head/sys/cam/scsi/scsi_sg.c ============================================================================== --- head/sys/cam/scsi/scsi_sg.c Tue May 1 19:34:33 2018 (r333151) +++ head/sys/cam/scsi/scsi_sg.c Tue May 1 20:09:29 2018 (r333152) @@ -580,7 +580,7 @@ sgioctl(struct cdev *dev, u_long cmd, caddr_t arg, int cam_fill_csio(csio, /*retries*/1, - sgdone, + /*cbfcnp*/NULL, dir|CAM_DEV_QFRZDIS, MSG_SIMPLE_Q_TAG, req->dxferp, From owner-svn-src-head@freebsd.org Tue May 1 20:17:24 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C36F8FB714E; Tue, 1 May 2018 20:17:23 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 719F386AF8; Tue, 1 May 2018 20:17:23 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 69FE226CDE; Tue, 1 May 2018 20:17:23 +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 w41KHNCw029545; Tue, 1 May 2018 20:17:23 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41KHNRS029540; Tue, 1 May 2018 20:17:23 GMT (envelope-from np@FreeBSD.org) Message-Id: <201805012017.w41KHNRS029540@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Tue, 1 May 2018 20:17:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333153 - in head/sys: conf dev/cxgbe modules/cxgbe/if_cxgbe X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: in head/sys: conf dev/cxgbe modules/cxgbe/if_cxgbe X-SVN-Commit-Revision: 333153 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 20:17:24 -0000 Author: np Date: Tue May 1 20:17:22 2018 New Revision: 333153 URL: https://svnweb.freebsd.org/changeset/base/333153 Log: cxgbe(4): Move all TCAM filter code into a separate file. Sponsored by: Chelsio Communications Added: head/sys/dev/cxgbe/t4_filter.c (contents, props changed) Modified: head/sys/conf/files head/sys/dev/cxgbe/adapter.h head/sys/dev/cxgbe/t4_main.c head/sys/modules/cxgbe/if_cxgbe/Makefile Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Tue May 1 20:09:29 2018 (r333152) +++ head/sys/conf/files Tue May 1 20:17:22 2018 (r333153) @@ -1394,6 +1394,8 @@ dev/cxgb/sys/uipc_mvec.c optional cxgb pci \ compile-with "${NORMAL_C} -I$S/dev/cxgb" dev/cxgb/cxgb_t3fw.c optional cxgb cxgb_t3fw \ compile-with "${NORMAL_C} -I$S/dev/cxgb" +dev/cxgbe/t4_filter.c optional cxgbe pci \ + compile-with "${NORMAL_C} -I$S/dev/cxgbe" dev/cxgbe/t4_if.m optional cxgbe pci dev/cxgbe/t4_iov.c optional cxgbe pci \ compile-with "${NORMAL_C} -I$S/dev/cxgbe" Modified: head/sys/dev/cxgbe/adapter.h ============================================================================== --- head/sys/dev/cxgbe/adapter.h Tue May 1 20:09:29 2018 (r333152) +++ head/sys/dev/cxgbe/adapter.h Tue May 1 20:17:22 2018 (r333153) @@ -1158,7 +1158,6 @@ void t4_init_devnames(struct adapter *); void t4_add_adapter(struct adapter *); void t4_aes_getdeckey(void *, const void *, unsigned int); int t4_detach_common(device_t); -int t4_filter_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *); int t4_map_bars_0_and_4(struct adapter *); int t4_map_bar_2(struct adapter *); int t4_setup_intr_handlers(struct adapter *); @@ -1237,6 +1236,14 @@ int t4_free_tx_sched(struct adapter *); void t4_update_tx_sched(struct adapter *); int t4_reserve_cl_rl_kbps(struct adapter *, int, u_int, int *); void t4_release_cl_rl_kbps(struct adapter *, int, int); + +/* t4_filter.c */ +int get_filter_mode(struct adapter *, uint32_t *); +int set_filter_mode(struct adapter *, uint32_t); +int get_filter(struct adapter *, struct t4_filter *); +int set_filter(struct adapter *, struct t4_filter *); +int del_filter(struct adapter *, struct t4_filter *); +int t4_filter_rpl(struct sge_iq *, const struct rss_header *, struct mbuf *); static inline struct wrqe * alloc_wrqe(int wr_len, struct sge_wrq *wrq) Added: head/sys/dev/cxgbe/t4_filter.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/cxgbe/t4_filter.c Tue May 1 20:17:22 2018 (r333153) @@ -0,0 +1,686 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2018 Chelsio Communications, 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 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 THE 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 +__FBSDID("$FreeBSD$"); + +#include "opt_inet.h" +#include "opt_inet6.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "common/common.h" +#include "common/t4_msg.h" +#include "common/t4_regs.h" +#include "t4_l2t.h" + +struct filter_entry { + uint32_t valid:1; /* filter allocated and valid */ + uint32_t locked:1; /* filter is administratively locked */ + uint32_t pending:1; /* filter action is pending firmware reply */ + uint32_t smtidx:8; /* Source MAC Table index for smac */ + struct l2t_entry *l2t; /* Layer Two Table entry for dmac */ + + struct t4_filter_specification fs; +}; + +static uint32_t +fconf_iconf_to_mode(uint32_t fconf, uint32_t iconf) +{ + uint32_t mode; + + mode = T4_FILTER_IPv4 | T4_FILTER_IPv6 | T4_FILTER_IP_SADDR | + T4_FILTER_IP_DADDR | T4_FILTER_IP_SPORT | T4_FILTER_IP_DPORT; + + if (fconf & F_FRAGMENTATION) + mode |= T4_FILTER_IP_FRAGMENT; + + if (fconf & F_MPSHITTYPE) + mode |= T4_FILTER_MPS_HIT_TYPE; + + if (fconf & F_MACMATCH) + mode |= T4_FILTER_MAC_IDX; + + if (fconf & F_ETHERTYPE) + mode |= T4_FILTER_ETH_TYPE; + + if (fconf & F_PROTOCOL) + mode |= T4_FILTER_IP_PROTO; + + if (fconf & F_TOS) + mode |= T4_FILTER_IP_TOS; + + if (fconf & F_VLAN) + mode |= T4_FILTER_VLAN; + + if (fconf & F_VNIC_ID) { + mode |= T4_FILTER_VNIC; + if (iconf & F_VNIC) + mode |= T4_FILTER_IC_VNIC; + } + + if (fconf & F_PORT) + mode |= T4_FILTER_PORT; + + if (fconf & F_FCOE) + mode |= T4_FILTER_FCoE; + + return (mode); +} + +static uint32_t +mode_to_fconf(uint32_t mode) +{ + uint32_t fconf = 0; + + if (mode & T4_FILTER_IP_FRAGMENT) + fconf |= F_FRAGMENTATION; + + if (mode & T4_FILTER_MPS_HIT_TYPE) + fconf |= F_MPSHITTYPE; + + if (mode & T4_FILTER_MAC_IDX) + fconf |= F_MACMATCH; + + if (mode & T4_FILTER_ETH_TYPE) + fconf |= F_ETHERTYPE; + + if (mode & T4_FILTER_IP_PROTO) + fconf |= F_PROTOCOL; + + if (mode & T4_FILTER_IP_TOS) + fconf |= F_TOS; + + if (mode & T4_FILTER_VLAN) + fconf |= F_VLAN; + + if (mode & T4_FILTER_VNIC) + fconf |= F_VNIC_ID; + + if (mode & T4_FILTER_PORT) + fconf |= F_PORT; + + if (mode & T4_FILTER_FCoE) + fconf |= F_FCOE; + + return (fconf); +} + +static uint32_t +mode_to_iconf(uint32_t mode) +{ + + if (mode & T4_FILTER_IC_VNIC) + return (F_VNIC); + return (0); +} + +static int check_fspec_against_fconf_iconf(struct adapter *sc, + struct t4_filter_specification *fs) +{ + struct tp_params *tpp = &sc->params.tp; + uint32_t fconf = 0; + + if (fs->val.frag || fs->mask.frag) + fconf |= F_FRAGMENTATION; + + if (fs->val.matchtype || fs->mask.matchtype) + fconf |= F_MPSHITTYPE; + + if (fs->val.macidx || fs->mask.macidx) + fconf |= F_MACMATCH; + + if (fs->val.ethtype || fs->mask.ethtype) + fconf |= F_ETHERTYPE; + + if (fs->val.proto || fs->mask.proto) + fconf |= F_PROTOCOL; + + if (fs->val.tos || fs->mask.tos) + fconf |= F_TOS; + + if (fs->val.vlan_vld || fs->mask.vlan_vld) + fconf |= F_VLAN; + + if (fs->val.ovlan_vld || fs->mask.ovlan_vld) { + fconf |= F_VNIC_ID; + if (tpp->ingress_config & F_VNIC) + return (EINVAL); + } + + if (fs->val.pfvf_vld || fs->mask.pfvf_vld) { + fconf |= F_VNIC_ID; + if ((tpp->ingress_config & F_VNIC) == 0) + return (EINVAL); + } + + if (fs->val.iport || fs->mask.iport) + fconf |= F_PORT; + + if (fs->val.fcoe || fs->mask.fcoe) + fconf |= F_FCOE; + + if ((tpp->vlan_pri_map | fconf) != tpp->vlan_pri_map) + return (E2BIG); + + return (0); +} + +int +get_filter_mode(struct adapter *sc, uint32_t *mode) +{ + struct tp_params *tpp = &sc->params.tp; + + /* + * We trust the cached values of the relevant TP registers. This means + * things work reliably only if writes to those registers are always via + * t4_set_filter_mode_. + */ + *mode = fconf_iconf_to_mode(tpp->vlan_pri_map, tpp->ingress_config); + + return (0); +} + +int +set_filter_mode(struct adapter *sc, uint32_t mode) +{ + struct tp_params *tpp = &sc->params.tp; + uint32_t fconf, iconf; + int rc; + + iconf = mode_to_iconf(mode); + if ((iconf ^ tpp->ingress_config) & F_VNIC) { + /* + * For now we just complain if A_TP_INGRESS_CONFIG is not + * already set to the correct value for the requested filter + * mode. It's not clear if it's safe to write to this register + * on the fly. (And we trust the cached value of the register). + */ + return (EBUSY); + } + + fconf = mode_to_fconf(mode); + + rc = begin_synchronized_op(sc, NULL, HOLD_LOCK | SLEEP_OK | INTR_OK, + "t4setfm"); + if (rc) + return (rc); + + if (sc->tids.ftids_in_use > 0) { + rc = EBUSY; + goto done; + } + +#ifdef TCP_OFFLOAD + if (uld_active(sc, ULD_TOM)) { + rc = EBUSY; + goto done; + } +#endif + + rc = -t4_set_filter_mode(sc, fconf, true); +done: + end_synchronized_op(sc, LOCK_HELD); + return (rc); +} + +static inline uint64_t +get_filter_hits(struct adapter *sc, uint32_t fid) +{ + uint32_t tcb_addr; + + tcb_addr = t4_read_reg(sc, A_TP_CMM_TCB_BASE) + + (fid + sc->tids.ftid_base) * TCB_SIZE; + + if (is_t4(sc)) { + uint64_t hits; + + read_via_memwin(sc, 0, tcb_addr + 16, (uint32_t *)&hits, 8); + return (be64toh(hits)); + } else { + uint32_t hits; + + read_via_memwin(sc, 0, tcb_addr + 24, &hits, 4); + return (be32toh(hits)); + } +} + +int +get_filter(struct adapter *sc, struct t4_filter *t) +{ + int i, rc, nfilters = sc->tids.nftids; + struct filter_entry *f; + + rc = begin_synchronized_op(sc, NULL, HOLD_LOCK | SLEEP_OK | INTR_OK, + "t4getf"); + if (rc) + return (rc); + + if (sc->tids.ftids_in_use == 0 || sc->tids.ftid_tab == NULL || + t->idx >= nfilters) { + t->idx = 0xffffffff; + goto done; + } + + f = &sc->tids.ftid_tab[t->idx]; + for (i = t->idx; i < nfilters; i++, f++) { + if (f->valid) { + t->idx = i; + t->l2tidx = f->l2t ? f->l2t->idx : 0; + t->smtidx = f->smtidx; + if (f->fs.hitcnts) + t->hits = get_filter_hits(sc, t->idx); + else + t->hits = UINT64_MAX; + t->fs = f->fs; + + goto done; + } + } + + t->idx = 0xffffffff; +done: + end_synchronized_op(sc, LOCK_HELD); + return (0); +} + +static int +set_filter_wr(struct adapter *sc, int fidx) +{ + struct filter_entry *f = &sc->tids.ftid_tab[fidx]; + struct fw_filter_wr *fwr; + unsigned int ftid, vnic_vld, vnic_vld_mask; + struct wrq_cookie cookie; + + ASSERT_SYNCHRONIZED_OP(sc); + + if (f->fs.newdmac || f->fs.newvlan) { + /* This filter needs an L2T entry; allocate one. */ + f->l2t = t4_l2t_alloc_switching(sc->l2t); + if (f->l2t == NULL) + return (EAGAIN); + if (t4_l2t_set_switching(sc, f->l2t, f->fs.vlan, f->fs.eport, + f->fs.dmac)) { + t4_l2t_release(f->l2t); + f->l2t = NULL; + return (ENOMEM); + } + } + + /* Already validated against fconf, iconf */ + MPASS((f->fs.val.pfvf_vld & f->fs.val.ovlan_vld) == 0); + MPASS((f->fs.mask.pfvf_vld & f->fs.mask.ovlan_vld) == 0); + if (f->fs.val.pfvf_vld || f->fs.val.ovlan_vld) + vnic_vld = 1; + else + vnic_vld = 0; + if (f->fs.mask.pfvf_vld || f->fs.mask.ovlan_vld) + vnic_vld_mask = 1; + else + vnic_vld_mask = 0; + + ftid = sc->tids.ftid_base + fidx; + + fwr = start_wrq_wr(&sc->sge.mgmtq, howmany(sizeof(*fwr), 16), &cookie); + if (fwr == NULL) + return (ENOMEM); + bzero(fwr, sizeof(*fwr)); + + fwr->op_pkd = htobe32(V_FW_WR_OP(FW_FILTER_WR)); + fwr->len16_pkd = htobe32(FW_LEN16(*fwr)); + fwr->tid_to_iq = + htobe32(V_FW_FILTER_WR_TID(ftid) | + V_FW_FILTER_WR_RQTYPE(f->fs.type) | + V_FW_FILTER_WR_NOREPLY(0) | + V_FW_FILTER_WR_IQ(f->fs.iq)); + fwr->del_filter_to_l2tix = + htobe32(V_FW_FILTER_WR_RPTTID(f->fs.rpttid) | + V_FW_FILTER_WR_DROP(f->fs.action == FILTER_DROP) | + V_FW_FILTER_WR_DIRSTEER(f->fs.dirsteer) | + V_FW_FILTER_WR_MASKHASH(f->fs.maskhash) | + V_FW_FILTER_WR_DIRSTEERHASH(f->fs.dirsteerhash) | + V_FW_FILTER_WR_LPBK(f->fs.action == FILTER_SWITCH) | + V_FW_FILTER_WR_DMAC(f->fs.newdmac) | + V_FW_FILTER_WR_SMAC(f->fs.newsmac) | + V_FW_FILTER_WR_INSVLAN(f->fs.newvlan == VLAN_INSERT || + f->fs.newvlan == VLAN_REWRITE) | + V_FW_FILTER_WR_RMVLAN(f->fs.newvlan == VLAN_REMOVE || + f->fs.newvlan == VLAN_REWRITE) | + V_FW_FILTER_WR_HITCNTS(f->fs.hitcnts) | + V_FW_FILTER_WR_TXCHAN(f->fs.eport) | + V_FW_FILTER_WR_PRIO(f->fs.prio) | + V_FW_FILTER_WR_L2TIX(f->l2t ? f->l2t->idx : 0)); + fwr->ethtype = htobe16(f->fs.val.ethtype); + fwr->ethtypem = htobe16(f->fs.mask.ethtype); + fwr->frag_to_ovlan_vldm = + (V_FW_FILTER_WR_FRAG(f->fs.val.frag) | + V_FW_FILTER_WR_FRAGM(f->fs.mask.frag) | + V_FW_FILTER_WR_IVLAN_VLD(f->fs.val.vlan_vld) | + V_FW_FILTER_WR_OVLAN_VLD(vnic_vld) | + V_FW_FILTER_WR_IVLAN_VLDM(f->fs.mask.vlan_vld) | + V_FW_FILTER_WR_OVLAN_VLDM(vnic_vld_mask)); + fwr->smac_sel = 0; + fwr->rx_chan_rx_rpl_iq = htobe16(V_FW_FILTER_WR_RX_CHAN(0) | + V_FW_FILTER_WR_RX_RPL_IQ(sc->sge.fwq.abs_id)); + fwr->maci_to_matchtypem = + htobe32(V_FW_FILTER_WR_MACI(f->fs.val.macidx) | + V_FW_FILTER_WR_MACIM(f->fs.mask.macidx) | + V_FW_FILTER_WR_FCOE(f->fs.val.fcoe) | + V_FW_FILTER_WR_FCOEM(f->fs.mask.fcoe) | + V_FW_FILTER_WR_PORT(f->fs.val.iport) | + V_FW_FILTER_WR_PORTM(f->fs.mask.iport) | + V_FW_FILTER_WR_MATCHTYPE(f->fs.val.matchtype) | + V_FW_FILTER_WR_MATCHTYPEM(f->fs.mask.matchtype)); + fwr->ptcl = f->fs.val.proto; + fwr->ptclm = f->fs.mask.proto; + fwr->ttyp = f->fs.val.tos; + fwr->ttypm = f->fs.mask.tos; + fwr->ivlan = htobe16(f->fs.val.vlan); + fwr->ivlanm = htobe16(f->fs.mask.vlan); + fwr->ovlan = htobe16(f->fs.val.vnic); + fwr->ovlanm = htobe16(f->fs.mask.vnic); + bcopy(f->fs.val.dip, fwr->lip, sizeof (fwr->lip)); + bcopy(f->fs.mask.dip, fwr->lipm, sizeof (fwr->lipm)); + bcopy(f->fs.val.sip, fwr->fip, sizeof (fwr->fip)); + bcopy(f->fs.mask.sip, fwr->fipm, sizeof (fwr->fipm)); + fwr->lp = htobe16(f->fs.val.dport); + fwr->lpm = htobe16(f->fs.mask.dport); + fwr->fp = htobe16(f->fs.val.sport); + fwr->fpm = htobe16(f->fs.mask.sport); + if (f->fs.newsmac) + bcopy(f->fs.smac, fwr->sma, sizeof (fwr->sma)); + + f->pending = 1; + sc->tids.ftids_in_use++; + + commit_wrq_wr(&sc->sge.mgmtq, fwr, &cookie); + return (0); +} + +int +set_filter(struct adapter *sc, struct t4_filter *t) +{ + unsigned int nfilters, nports; + struct filter_entry *f; + int i, rc; + + rc = begin_synchronized_op(sc, NULL, SLEEP_OK | INTR_OK, "t4setf"); + if (rc) + return (rc); + + nfilters = sc->tids.nftids; + nports = sc->params.nports; + + if (nfilters == 0) { + rc = ENOTSUP; + goto done; + } + + if (t->idx >= nfilters) { + rc = EINVAL; + goto done; + } + + /* Validate against the global filter mode and ingress config */ + rc = check_fspec_against_fconf_iconf(sc, &t->fs); + if (rc != 0) + goto done; + + if (t->fs.action == FILTER_SWITCH && t->fs.eport >= nports) { + rc = EINVAL; + goto done; + } + + if (t->fs.val.iport >= nports) { + rc = EINVAL; + goto done; + } + + /* Can't specify an iq if not steering to it */ + if (!t->fs.dirsteer && t->fs.iq) { + rc = EINVAL; + goto done; + } + + /* IPv6 filter idx must be 4 aligned */ + if (t->fs.type == 1 && + ((t->idx & 0x3) || t->idx + 4 >= nfilters)) { + rc = EINVAL; + goto done; + } + + if (!(sc->flags & FULL_INIT_DONE) && + ((rc = adapter_full_init(sc)) != 0)) + goto done; + + if (sc->tids.ftid_tab == NULL) { + KASSERT(sc->tids.ftids_in_use == 0, + ("%s: no memory allocated but filters_in_use > 0", + __func__)); + + sc->tids.ftid_tab = malloc(sizeof (struct filter_entry) * + nfilters, M_CXGBE, M_NOWAIT | M_ZERO); + if (sc->tids.ftid_tab == NULL) { + rc = ENOMEM; + goto done; + } + mtx_init(&sc->tids.ftid_lock, "T4 filters", 0, MTX_DEF); + } + + for (i = 0; i < 4; i++) { + f = &sc->tids.ftid_tab[t->idx + i]; + + if (f->pending || f->valid) { + rc = EBUSY; + goto done; + } + if (f->locked) { + rc = EPERM; + goto done; + } + + if (t->fs.type == 0) + break; + } + + f = &sc->tids.ftid_tab[t->idx]; + f->fs = t->fs; + + rc = set_filter_wr(sc, t->idx); +done: + end_synchronized_op(sc, 0); + + if (rc == 0) { + mtx_lock(&sc->tids.ftid_lock); + for (;;) { + if (f->pending == 0) { + rc = f->valid ? 0 : EIO; + break; + } + + if (mtx_sleep(&sc->tids.ftid_tab, &sc->tids.ftid_lock, + PCATCH, "t4setfw", 0)) { + rc = EINPROGRESS; + break; + } + } + mtx_unlock(&sc->tids.ftid_lock); + } + return (rc); +} + +static int +del_filter_wr(struct adapter *sc, int fidx) +{ + struct filter_entry *f = &sc->tids.ftid_tab[fidx]; + struct fw_filter_wr *fwr; + unsigned int ftid; + struct wrq_cookie cookie; + + ftid = sc->tids.ftid_base + fidx; + + fwr = start_wrq_wr(&sc->sge.mgmtq, howmany(sizeof(*fwr), 16), &cookie); + if (fwr == NULL) + return (ENOMEM); + bzero(fwr, sizeof (*fwr)); + + t4_mk_filtdelwr(ftid, fwr, sc->sge.fwq.abs_id); + + f->pending = 1; + commit_wrq_wr(&sc->sge.mgmtq, fwr, &cookie); + return (0); +} + +int +del_filter(struct adapter *sc, struct t4_filter *t) +{ + unsigned int nfilters; + struct filter_entry *f; + int rc; + + rc = begin_synchronized_op(sc, NULL, SLEEP_OK | INTR_OK, "t4delf"); + if (rc) + return (rc); + + nfilters = sc->tids.nftids; + + if (nfilters == 0) { + rc = ENOTSUP; + goto done; + } + + if (sc->tids.ftid_tab == NULL || sc->tids.ftids_in_use == 0 || + t->idx >= nfilters) { + rc = EINVAL; + goto done; + } + + if (!(sc->flags & FULL_INIT_DONE)) { + rc = EAGAIN; + goto done; + } + + f = &sc->tids.ftid_tab[t->idx]; + + if (f->pending) { + rc = EBUSY; + goto done; + } + if (f->locked) { + rc = EPERM; + goto done; + } + + if (f->valid) { + t->fs = f->fs; /* extra info for the caller */ + rc = del_filter_wr(sc, t->idx); + } + +done: + end_synchronized_op(sc, 0); + + if (rc == 0) { + mtx_lock(&sc->tids.ftid_lock); + for (;;) { + if (f->pending == 0) { + rc = f->valid ? EIO : 0; + break; + } + + if (mtx_sleep(&sc->tids.ftid_tab, &sc->tids.ftid_lock, + PCATCH, "t4delfw", 0)) { + rc = EINPROGRESS; + break; + } + } + mtx_unlock(&sc->tids.ftid_lock); + } + + return (rc); +} + +static void +clear_filter(struct filter_entry *f) +{ + if (f->l2t) + t4_l2t_release(f->l2t); + + bzero(f, sizeof (*f)); +} + +int +t4_filter_rpl(struct sge_iq *iq, const struct rss_header *rss, struct mbuf *m) +{ + struct adapter *sc = iq->adapter; + const struct cpl_set_tcb_rpl *rpl = (const void *)(rss + 1); + unsigned int idx = GET_TID(rpl); + unsigned int rc; + struct filter_entry *f; + + KASSERT(m == NULL, ("%s: payload with opcode %02x", __func__, + rss->opcode)); + MPASS(iq == &sc->sge.fwq); + MPASS(is_ftid(sc, idx)); + + idx -= sc->tids.ftid_base; + f = &sc->tids.ftid_tab[idx]; + rc = G_COOKIE(rpl->cookie); + + mtx_lock(&sc->tids.ftid_lock); + if (rc == FW_FILTER_WR_FLT_ADDED) { + KASSERT(f->pending, ("%s: filter[%u] isn't pending.", + __func__, idx)); + f->smtidx = (be64toh(rpl->oldval) >> 24) & 0xff; + f->pending = 0; /* asynchronous setup completed */ + f->valid = 1; + } else { + if (rc != FW_FILTER_WR_FLT_DELETED) { + /* Add or delete failed, display an error */ + log(LOG_ERR, + "filter %u setup failed with error %u\n", + idx, rc); + } + + clear_filter(f); + sc->tids.ftids_in_use--; + } + wakeup(&sc->tids.ftid_tab); + mtx_unlock(&sc->tids.ftid_lock); + + return (0); +} Modified: head/sys/dev/cxgbe/t4_main.c ============================================================================== --- head/sys/dev/cxgbe/t4_main.c Tue May 1 20:09:29 2018 (r333152) +++ head/sys/dev/cxgbe/t4_main.c Tue May 1 20:17:22 2018 (r333153) @@ -509,16 +509,6 @@ struct intrs_and_queues { uint16_t nnmrxq_vi; /* # of netmap rxq's */ }; -struct filter_entry { - uint32_t valid:1; /* filter allocated and valid */ - uint32_t locked:1; /* filter is administratively locked */ - uint32_t pending:1; /* filter action is pending firmware reply */ - uint32_t smtidx:8; /* Source MAC Table index for smac */ - struct l2t_entry *l2t; /* Layer Two Table entry for dmac */ - - struct t4_filter_specification fs; -}; - static void setup_memwin(struct adapter *); static void position_memwin(struct adapter *, int, uint32_t); static int validate_mem_range(struct adapter *, uint32_t, int); @@ -605,20 +595,6 @@ static int sysctl_tp_backoff(SYSCTL_HANDLER_ARGS); static int sysctl_holdoff_tmr_idx_ofld(SYSCTL_HANDLER_ARGS); static int sysctl_holdoff_pktc_idx_ofld(SYSCTL_HANDLER_ARGS); #endif -static uint32_t fconf_iconf_to_mode(uint32_t, uint32_t); -static uint32_t mode_to_fconf(uint32_t); -static uint32_t mode_to_iconf(uint32_t); -static int check_fspec_against_fconf_iconf(struct adapter *, - struct t4_filter_specification *); -static int get_filter_mode(struct adapter *, uint32_t *); -static int set_filter_mode(struct adapter *, uint32_t); -static inline uint64_t get_filter_hits(struct adapter *, uint32_t); -static int get_filter(struct adapter *, struct t4_filter *); -static int set_filter(struct adapter *, struct t4_filter *); -static int del_filter(struct adapter *, struct t4_filter *); -static void clear_filter(struct filter_entry *); -static int set_filter_wr(struct adapter *, int); -static int del_filter_wr(struct adapter *, int); static int get_sge_context(struct adapter *, struct t4_sge_context *); static int load_fw(struct adapter *, struct t4_data *); static int load_cfg(struct adapter *, struct t4_data *); @@ -8645,632 +8621,6 @@ sysctl_holdoff_pktc_idx_ofld(SYSCTL_HANDLER_ARGS) return (rc); } #endif - -static uint32_t -fconf_iconf_to_mode(uint32_t fconf, uint32_t iconf) -{ - uint32_t mode; - - mode = T4_FILTER_IPv4 | T4_FILTER_IPv6 | T4_FILTER_IP_SADDR | - T4_FILTER_IP_DADDR | T4_FILTER_IP_SPORT | T4_FILTER_IP_DPORT; - - if (fconf & F_FRAGMENTATION) - mode |= T4_FILTER_IP_FRAGMENT; - - if (fconf & F_MPSHITTYPE) - mode |= T4_FILTER_MPS_HIT_TYPE; - - if (fconf & F_MACMATCH) - mode |= T4_FILTER_MAC_IDX; - - if (fconf & F_ETHERTYPE) - mode |= T4_FILTER_ETH_TYPE; - - if (fconf & F_PROTOCOL) - mode |= T4_FILTER_IP_PROTO; - - if (fconf & F_TOS) - mode |= T4_FILTER_IP_TOS; - - if (fconf & F_VLAN) - mode |= T4_FILTER_VLAN; - - if (fconf & F_VNIC_ID) { - mode |= T4_FILTER_VNIC; - if (iconf & F_VNIC) - mode |= T4_FILTER_IC_VNIC; - } - - if (fconf & F_PORT) - mode |= T4_FILTER_PORT; - - if (fconf & F_FCOE) - mode |= T4_FILTER_FCoE; - - return (mode); -} - -static uint32_t -mode_to_fconf(uint32_t mode) -{ - uint32_t fconf = 0; - - if (mode & T4_FILTER_IP_FRAGMENT) - fconf |= F_FRAGMENTATION; - - if (mode & T4_FILTER_MPS_HIT_TYPE) - fconf |= F_MPSHITTYPE; - - if (mode & T4_FILTER_MAC_IDX) - fconf |= F_MACMATCH; - - if (mode & T4_FILTER_ETH_TYPE) - fconf |= F_ETHERTYPE; - - if (mode & T4_FILTER_IP_PROTO) - fconf |= F_PROTOCOL; - - if (mode & T4_FILTER_IP_TOS) - fconf |= F_TOS; - - if (mode & T4_FILTER_VLAN) - fconf |= F_VLAN; - - if (mode & T4_FILTER_VNIC) - fconf |= F_VNIC_ID; - - if (mode & T4_FILTER_PORT) - fconf |= F_PORT; - - if (mode & T4_FILTER_FCoE) - fconf |= F_FCOE; - - return (fconf); -} - -static uint32_t -mode_to_iconf(uint32_t mode) -{ - - if (mode & T4_FILTER_IC_VNIC) - return (F_VNIC); - return (0); -} - -static int check_fspec_against_fconf_iconf(struct adapter *sc, - struct t4_filter_specification *fs) -{ - struct tp_params *tpp = &sc->params.tp; - uint32_t fconf = 0; - - if (fs->val.frag || fs->mask.frag) - fconf |= F_FRAGMENTATION; - - if (fs->val.matchtype || fs->mask.matchtype) - fconf |= F_MPSHITTYPE; - - if (fs->val.macidx || fs->mask.macidx) - fconf |= F_MACMATCH; - - if (fs->val.ethtype || fs->mask.ethtype) - fconf |= F_ETHERTYPE; - - if (fs->val.proto || fs->mask.proto) - fconf |= F_PROTOCOL; - - if (fs->val.tos || fs->mask.tos) - fconf |= F_TOS; - - if (fs->val.vlan_vld || fs->mask.vlan_vld) - fconf |= F_VLAN; - - if (fs->val.ovlan_vld || fs->mask.ovlan_vld) { - fconf |= F_VNIC_ID; - if (tpp->ingress_config & F_VNIC) - return (EINVAL); - } - - if (fs->val.pfvf_vld || fs->mask.pfvf_vld) { - fconf |= F_VNIC_ID; - if ((tpp->ingress_config & F_VNIC) == 0) - return (EINVAL); - } - - if (fs->val.iport || fs->mask.iport) - fconf |= F_PORT; - - if (fs->val.fcoe || fs->mask.fcoe) - fconf |= F_FCOE; - - if ((tpp->vlan_pri_map | fconf) != tpp->vlan_pri_map) - return (E2BIG); - - return (0); -} - -static int -get_filter_mode(struct adapter *sc, uint32_t *mode) -{ - struct tp_params *tpp = &sc->params.tp; - - /* - * We trust the cached values of the relevant TP registers. This means - * things work reliably only if writes to those registers are always via - * t4_set_filter_mode. - */ - *mode = fconf_iconf_to_mode(tpp->vlan_pri_map, tpp->ingress_config); - - return (0); -} - -static int -set_filter_mode(struct adapter *sc, uint32_t mode) -{ - struct tp_params *tpp = &sc->params.tp; - uint32_t fconf, iconf; - int rc; - - iconf = mode_to_iconf(mode); - if ((iconf ^ tpp->ingress_config) & F_VNIC) { - /* - * For now we just complain if A_TP_INGRESS_CONFIG is not - * already set to the correct value for the requested filter - * mode. It's not clear if it's safe to write to this register - * on the fly. (And we trust the cached value of the register). - */ - return (EBUSY); - } - - fconf = mode_to_fconf(mode); - - rc = begin_synchronized_op(sc, NULL, HOLD_LOCK | SLEEP_OK | INTR_OK, - "t4setfm"); - if (rc) - return (rc); - - if (sc->tids.ftids_in_use > 0) { - rc = EBUSY; - goto done; - } - -#ifdef TCP_OFFLOAD - if (uld_active(sc, ULD_TOM)) { - rc = EBUSY; - goto done; - } -#endif - - rc = -t4_set_filter_mode(sc, fconf, true); -done: - end_synchronized_op(sc, LOCK_HELD); - return (rc); -} - -static inline uint64_t -get_filter_hits(struct adapter *sc, uint32_t fid) -{ - uint32_t tcb_addr; - - tcb_addr = t4_read_reg(sc, A_TP_CMM_TCB_BASE) + - (fid + sc->tids.ftid_base) * TCB_SIZE; - - if (is_t4(sc)) { - uint64_t hits; - - read_via_memwin(sc, 0, tcb_addr + 16, (uint32_t *)&hits, 8); - return (be64toh(hits)); - } else { - uint32_t hits; - - read_via_memwin(sc, 0, tcb_addr + 24, &hits, 4); - return (be32toh(hits)); - } -} - -static int -get_filter(struct adapter *sc, struct t4_filter *t) -{ - int i, rc, nfilters = sc->tids.nftids; - struct filter_entry *f; - - rc = begin_synchronized_op(sc, NULL, HOLD_LOCK | SLEEP_OK | INTR_OK, - "t4getf"); - if (rc) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Tue May 1 21:42:28 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D8A6FB8D2E; Tue, 1 May 2018 21:42:27 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 48D747A568; Tue, 1 May 2018 21:42:27 +0000 (UTC) (envelope-from scottl@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4378227BE3; Tue, 1 May 2018 21:42:27 +0000 (UTC) (envelope-from scottl@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w41LgROY074240; Tue, 1 May 2018 21:42:27 GMT (envelope-from scottl@FreeBSD.org) Received: (from scottl@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w41LgR9k074238; Tue, 1 May 2018 21:42:27 GMT (envelope-from scottl@FreeBSD.org) Message-Id: <201805012142.w41LgR9k074238@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: scottl set sender to scottl@FreeBSD.org using -f From: Scott Long Date: Tue, 1 May 2018 21:42:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333154 - head/sys/cam/scsi X-SVN-Group: head X-SVN-Commit-Author: scottl X-SVN-Commit-Paths: head/sys/cam/scsi X-SVN-Commit-Revision: 333154 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 01 May 2018 21:42:28 -0000 Author: scottl Date: Tue May 1 21:42:27 2018 New Revision: 333154 URL: https://svnweb.freebsd.org/changeset/base/333154 Log: Refactor dadone(). There was no useful code sharing in it; it was just a 1500 line switch statement. Callers now specify a discrete completion handler, though they're still welcome to track state via ccb_state. Sponsored by: Netflix Modified: head/sys/cam/scsi/scsi_da.c Modified: head/sys/cam/scsi/scsi_da.c ============================================================================== --- head/sys/cam/scsi/scsi_da.c Tue May 1 20:17:22 2018 (r333153) +++ head/sys/cam/scsi/scsi_da.c Tue May 1 21:42:27 2018 (r333154) @@ -163,7 +163,7 @@ typedef enum { DA_CCB_PROBE_ATA_ZONE = 0x11, DA_CCB_PROBE_WP = 0x12, DA_CCB_TYPE_MASK = 0x1F, - DA_CCB_RETRY_UA = 0x20 + DA_CCB_RETRY_UA = 0x20 } da_ccb_state; /* @@ -358,7 +358,7 @@ struct da_softc { u_int timeouts; u_int invalidations; #endif -#define DA_ANNOUNCETMP_SZ 80 +#define DA_ANNOUNCETMP_SZ 160 char announce_temp[DA_ANNOUNCETMP_SZ]; #define DA_ANNOUNCE_SZ 400 char announcebuf[DA_ANNOUNCE_SZ]; @@ -1405,6 +1405,30 @@ static periph_oninv_t daoninvalidate; static void dazonedone(struct cam_periph *periph, union ccb *ccb); static void dadone(struct cam_periph *periph, union ccb *done_ccb); +static void dadone_probewp(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_proberc(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probelbp(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probeblklimits(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probebdc(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probeata(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probeatalogdir(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probeataiddir(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probeatasup(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probeatazone(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_probezone(struct cam_periph *periph, + union ccb *done_ccb); +static void dadone_tur(struct cam_periph *periph, + union ccb *done_ccb); static int daerror(union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags); static void daprevent(struct cam_periph *periph, int action); @@ -3114,12 +3138,14 @@ skipstate: more: bp = cam_iosched_next_bio(softc->cam_iosched); if (bp == NULL) { - if (cam_iosched_has_work_flags(softc->cam_iosched, DA_WORK_TUR)) { + if (cam_iosched_has_work_flags(softc->cam_iosched, + DA_WORK_TUR)) { softc->flags |= DA_FLAG_TUR_PENDING; - cam_iosched_clr_work_flags(softc->cam_iosched, DA_WORK_TUR); + cam_iosched_clr_work_flags(softc->cam_iosched, + DA_WORK_TUR); scsi_test_unit_ready(&start_ccb->csio, /*retries*/ da_retry_count, - dadone, + dadone_tur, MSG_SIMPLE_Q_TAG, SSD_FULL_SIZE, da_default_timeout * 1000); @@ -3136,14 +3162,19 @@ more: softc->delete_func(periph, start_ccb, bp); goto out; } else { - /* Not sure this is possible, but failsafe by lying and saying "sure, done." */ + /* + * Not sure this is possible, but failsafe by + * lying and saying "sure, done." + */ biofinish(bp, NULL, 0); goto more; } } - if (cam_iosched_has_work_flags(softc->cam_iosched, DA_WORK_TUR)) { - cam_iosched_clr_work_flags(softc->cam_iosched, DA_WORK_TUR); + if (cam_iosched_has_work_flags(softc->cam_iosched, + DA_WORK_TUR)) { + cam_iosched_clr_work_flags(softc->cam_iosched, + DA_WORK_TUR); da_periph_release_locked(periph, DA_REF_TUR); } @@ -3201,7 +3232,7 @@ more: /* * If we don't support sync cache, or the disk * isn't dirty, FLUSH is a no-op. Use the - * allocated * CCB for the next bio if one is + * allocated CCB for the next bio if one is * available. */ if ((softc->quirks & DA_Q_NO_SYNC_CACHE) != 0 || @@ -3290,7 +3321,7 @@ out: } scsi_mode_sense_len(&start_ccb->csio, /*retries*/ da_retry_count, - /*cbfcnp*/ dadone, + /*cbfcnp*/ dadone_probewp, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*dbd*/ FALSE, /*pc*/ SMS_PAGE_CTRL_CURRENT, @@ -3318,7 +3349,7 @@ out: } scsi_read_capacity(&start_ccb->csio, /*retries*/da_retry_count, - dadone, + dadone_proberc, MSG_SIMPLE_Q_TAG, rcap, SSD_FULL_SIZE, @@ -3341,7 +3372,7 @@ out: } scsi_read_capacity_16(&start_ccb->csio, /*retries*/ da_retry_count, - /*cbfcnp*/ dadone, + /*cbfcnp*/ dadone_proberc, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*lba*/ 0, /*reladr*/ 0, @@ -3384,7 +3415,7 @@ out: scsi_inquiry(&start_ccb->csio, /*retries*/da_retry_count, - /*cbfcnp*/dadone, + /*cbfcnp*/dadone_probelbp, /*tag_action*/MSG_SIMPLE_Q_TAG, /*inq_buf*/(u_int8_t *)lbp, /*inq_len*/sizeof(*lbp), @@ -3418,7 +3449,7 @@ out: scsi_inquiry(&start_ccb->csio, /*retries*/da_retry_count, - /*cbfcnp*/dadone, + /*cbfcnp*/dadone_probeblklimits, /*tag_action*/MSG_SIMPLE_Q_TAG, /*inq_buf*/(u_int8_t *)block_limits, /*inq_len*/sizeof(*block_limits), @@ -3451,7 +3482,7 @@ out: scsi_inquiry(&start_ccb->csio, /*retries*/da_retry_count, - /*cbfcnp*/dadone, + /*cbfcnp*/dadone_probebdc, /*tag_action*/MSG_SIMPLE_Q_TAG, /*inq_buf*/(u_int8_t *)bdc, /*inq_len*/sizeof(*bdc), @@ -3497,7 +3528,7 @@ out: scsi_ata_identify(&start_ccb->csio, /*retries*/da_retry_count, - /*cbfcnp*/dadone, + /*cbfcnp*/dadone_probeata, /*tag_action*/MSG_SIMPLE_Q_TAG, /*data_ptr*/(u_int8_t *)ata_params, /*dxfer_len*/sizeof(*ata_params), @@ -3540,7 +3571,7 @@ out: retval = scsi_ata_read_log(&start_ccb->csio, /*retries*/ da_retry_count, - /*cbfcnp*/ dadone, + /*cbfcnp*/ dadone_probeatalogdir, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*log_address*/ ATA_LOG_DIRECTORY, /*page_number*/ 0, @@ -3590,7 +3621,7 @@ out: retval = scsi_ata_read_log(&start_ccb->csio, /*retries*/ da_retry_count, - /*cbfcnp*/ dadone, + /*cbfcnp*/ dadone_probeataiddir, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*log_address*/ ATA_IDENTIFY_DATA_LOG, /*page_number*/ ATA_IDL_PAGE_LIST, @@ -3639,7 +3670,7 @@ out: retval = scsi_ata_read_log(&start_ccb->csio, /*retries*/ da_retry_count, - /*cbfcnp*/ dadone, + /*cbfcnp*/ dadone_probeatasup, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*log_address*/ ATA_IDENTIFY_DATA_LOG, /*page_number*/ ATA_IDL_SUP_CAP, @@ -3691,7 +3722,7 @@ out: retval = scsi_ata_read_log(&start_ccb->csio, /*retries*/ da_retry_count, - /*cbfcnp*/ dadone, + /*cbfcnp*/ dadone_probeatazone, /*tag_action*/ MSG_SIMPLE_Q_TAG, /*log_address*/ ATA_IDENTIFY_DATA_LOG, /*page_number*/ ATA_IDL_ZDI, @@ -3741,7 +3772,7 @@ out: } scsi_inquiry(&start_ccb->csio, /*retries*/da_retry_count, - /*cbfcnp*/dadone, + /*cbfcnp*/dadone_probezone, /*tag_action*/MSG_SIMPLE_Q_TAG, /*inq_buf*/(u_int8_t *)bdc, /*inq_len*/sizeof(*bdc), @@ -3830,7 +3861,8 @@ da_delete_unmap(struct cam_periph *periph, union ccb * totalcount -= c; lastlba -= c; lastcount -= c; - scsi_ulto4b(lastcount, d[ranges - 1].length); + scsi_ulto4b(lastcount, + d[ranges - 1].length); } } /* Align beginning of the new range. */ @@ -4301,1296 +4333,1360 @@ dazonedone(struct cam_periph *periph, union ccb *ccb) static void dadone(struct cam_periph *periph, union ccb *done_ccb) { + struct bio *bp, *bp1; struct da_softc *softc; struct ccb_scsiio *csio; u_int32_t priority; da_ccb_state state; - softc = (struct da_softc *)periph->softc; - priority = done_ccb->ccb_h.pinfo.priority; - CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("dadone\n")); + softc = (struct da_softc *)periph->softc; + priority = done_ccb->ccb_h.pinfo.priority; csio = &done_ccb->csio; + #if defined(BUF_TRACKING) || defined(FULL_BUF_TRACKING) if (csio->bio != NULL) biotrack(csio->bio, __func__); #endif state = csio->ccb_h.ccb_state & DA_CCB_TYPE_MASK; - switch (state) { - case DA_CCB_BUFFER_IO: - case DA_CCB_DELETE: - { - struct bio *bp, *bp1; - cam_periph_lock(periph); + cam_periph_lock(periph); + bp = (struct bio *)done_ccb->ccb_h.ccb_bp; + if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { + int error; + int sf; + + if ((csio->ccb_h.ccb_state & DA_CCB_RETRY_UA) != 0) + sf = SF_RETRY_UA; + else + sf = 0; + + error = daerror(done_ccb, CAM_RETRY_SELTO, sf); + if (error == ERESTART) { + /* A retry was scheduled, so just return. */ + cam_periph_unlock(periph); + return; + } bp = (struct bio *)done_ccb->ccb_h.ccb_bp; - if ((done_ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { - int error; - int sf; + if (error != 0) { + int queued_error; - if ((csio->ccb_h.ccb_state & DA_CCB_RETRY_UA) != 0) - sf = SF_RETRY_UA; - else - sf = 0; + /* + * return all queued I/O with EIO, so that + * the client can retry these I/Os in the + * proper order should it attempt to recover. + */ + queued_error = EIO; - error = daerror(done_ccb, CAM_RETRY_SELTO, sf); - if (error == ERESTART) { + if (error == ENXIO + && (softc->flags & DA_FLAG_PACK_INVALID)== 0) { /* - * A retry was scheduled, so - * just return. + * Catastrophic error. Mark our pack as + * invalid. + * + * XXX See if this is really a media + * XXX change first? */ - cam_periph_unlock(periph); - return; - } - bp = (struct bio *)done_ccb->ccb_h.ccb_bp; - if (error != 0) { - int queued_error; - - /* - * return all queued I/O with EIO, so that - * the client can retry these I/Os in the - * proper order should it attempt to recover. - */ - queued_error = EIO; - - if (error == ENXIO - && (softc->flags & DA_FLAG_PACK_INVALID)== 0) { - /* - * Catastrophic error. Mark our pack as - * invalid. - */ - /* - * XXX See if this is really a media - * XXX change first? - */ - xpt_print(periph->path, - "Invalidating pack\n"); - softc->flags |= DA_FLAG_PACK_INVALID; + xpt_print(periph->path, "Invalidating pack\n"); + softc->flags |= DA_FLAG_PACK_INVALID; #ifdef CAM_IO_STATS - softc->invalidations++; + softc->invalidations++; #endif - queued_error = ENXIO; - } - cam_iosched_flush(softc->cam_iosched, NULL, - queued_error); - if (bp != NULL) { - bp->bio_error = error; - bp->bio_resid = bp->bio_bcount; - bp->bio_flags |= BIO_ERROR; - } - } else if (bp != NULL) { - if (state == DA_CCB_DELETE) - bp->bio_resid = 0; - else - bp->bio_resid = csio->resid; - bp->bio_error = 0; - if (bp->bio_resid != 0) - bp->bio_flags |= BIO_ERROR; + queued_error = ENXIO; } - if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) - cam_release_devq(done_ccb->ccb_h.path, - /*relsim_flags*/0, - /*reduction*/0, - /*timeout*/0, - /*getcount_only*/0); + cam_iosched_flush(softc->cam_iosched, NULL, + queued_error); + if (bp != NULL) { + bp->bio_error = error; + bp->bio_resid = bp->bio_bcount; + bp->bio_flags |= BIO_ERROR; + } } else if (bp != NULL) { - if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) - panic("REQ_CMP with QFRZN"); - if (bp->bio_cmd == BIO_ZONE) - dazonedone(periph, done_ccb); - else if (state == DA_CCB_DELETE) + if (state == DA_CCB_DELETE) bp->bio_resid = 0; else bp->bio_resid = csio->resid; - if ((csio->resid > 0) - && (bp->bio_cmd != BIO_ZONE)) + bp->bio_error = 0; + if (bp->bio_resid != 0) bp->bio_flags |= BIO_ERROR; - if (softc->error_inject != 0) { - bp->bio_error = softc->error_inject; - bp->bio_resid = bp->bio_bcount; - bp->bio_flags |= BIO_ERROR; - softc->error_inject = 0; - } } + if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) + cam_release_devq(done_ccb->ccb_h.path, + /*relsim_flags*/0, + /*reduction*/0, + /*timeout*/0, + /*getcount_only*/0); + } else if (bp != NULL) { + if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) + panic("REQ_CMP with QFRZN"); + if (bp->bio_cmd == BIO_ZONE) + dazonedone(periph, done_ccb); + else if (state == DA_CCB_DELETE) + bp->bio_resid = 0; + else + bp->bio_resid = csio->resid; + if ((csio->resid > 0) && (bp->bio_cmd != BIO_ZONE)) + bp->bio_flags |= BIO_ERROR; + if (softc->error_inject != 0) { + bp->bio_error = softc->error_inject; + bp->bio_resid = bp->bio_bcount; + bp->bio_flags |= BIO_ERROR; + softc->error_inject = 0; + } + } - if (bp != NULL) - biotrack(bp, __func__); - LIST_REMOVE(&done_ccb->ccb_h, periph_links.le); - if (LIST_EMPTY(&softc->pending_ccbs)) - softc->flags |= DA_FLAG_WAS_OTAG; + if (bp != NULL) + biotrack(bp, __func__); + LIST_REMOVE(&done_ccb->ccb_h, periph_links.le); + if (LIST_EMPTY(&softc->pending_ccbs)) + softc->flags |= DA_FLAG_WAS_OTAG; + /* + * We need to call cam_iosched before we call biodone so that we + * don't measure any activity that happens in the completion + * routine, which in the case of sendfile can be quite + * extensive. + */ + cam_iosched_bio_complete(softc->cam_iosched, bp, done_ccb); + xpt_release_ccb(done_ccb); + if (state == DA_CCB_DELETE) { + TAILQ_HEAD(, bio) queue; + + TAILQ_INIT(&queue); + TAILQ_CONCAT(&queue, &softc->delete_run_queue.queue, bio_queue); + softc->delete_run_queue.insert_point = NULL; /* - * We need to call cam_iosched before we call biodone so that we - * don't measure any activity that happens in the completion - * routine, which in the case of sendfile can be quite - * extensive. + * Normally, the xpt_release_ccb() above would make sure + * that when we have more work to do, that work would + * get kicked off. However, we specifically keep + * delete_running set to 0 before the call above to + * allow other I/O to progress when many BIO_DELETE + * requests are pushed down. We set delete_running to 0 + * and call daschedule again so that we don't stall if + * there are no other I/Os pending apart from BIO_DELETEs. */ - cam_iosched_bio_complete(softc->cam_iosched, bp, done_ccb); - xpt_release_ccb(done_ccb); - if (state == DA_CCB_DELETE) { - TAILQ_HEAD(, bio) queue; - - TAILQ_INIT(&queue); - TAILQ_CONCAT(&queue, &softc->delete_run_queue.queue, bio_queue); - softc->delete_run_queue.insert_point = NULL; - /* - * Normally, the xpt_release_ccb() above would make sure - * that when we have more work to do, that work would - * get kicked off. However, we specifically keep - * delete_running set to 0 before the call above to - * allow other I/O to progress when many BIO_DELETE - * requests are pushed down. We set delete_running to 0 - * and call daschedule again so that we don't stall if - * there are no other I/Os pending apart from BIO_DELETEs. - */ - cam_iosched_trim_done(softc->cam_iosched); - daschedule(periph); - cam_periph_unlock(periph); - while ((bp1 = TAILQ_FIRST(&queue)) != NULL) { - TAILQ_REMOVE(&queue, bp1, bio_queue); - bp1->bio_error = bp->bio_error; - if (bp->bio_flags & BIO_ERROR) { - bp1->bio_flags |= BIO_ERROR; - bp1->bio_resid = bp1->bio_bcount; - } else - bp1->bio_resid = 0; - biodone(bp1); - } - } else { - daschedule(periph); - cam_periph_unlock(periph); + cam_iosched_trim_done(softc->cam_iosched); + daschedule(periph); + cam_periph_unlock(periph); + while ((bp1 = TAILQ_FIRST(&queue)) != NULL) { + TAILQ_REMOVE(&queue, bp1, bio_queue); + bp1->bio_error = bp->bio_error; + if (bp->bio_flags & BIO_ERROR) { + bp1->bio_flags |= BIO_ERROR; + bp1->bio_resid = bp1->bio_bcount; + } else + bp1->bio_resid = 0; + biodone(bp1); } - if (bp != NULL) - biodone(bp); - return; + } else { + daschedule(periph); + cam_periph_unlock(periph); } - case DA_CCB_PROBE_WP: - { - struct scsi_mode_header_6 *mode_hdr6; - struct scsi_mode_header_10 *mode_hdr10; - uint8_t dev_spec; + if (bp != NULL) + biodone(bp); + return; +} - if (softc->minimum_cmd_size > 6) { - mode_hdr10 = (struct scsi_mode_header_10 *)csio->data_ptr; - dev_spec = mode_hdr10->dev_spec; - } else { - mode_hdr6 = (struct scsi_mode_header_6 *)csio->data_ptr; - dev_spec = mode_hdr6->dev_spec; - } - if (cam_ccb_status(done_ccb) == CAM_REQ_CMP) { - if ((dev_spec & 0x80) != 0) - softc->disk->d_flags |= DISKFLAG_WRITE_PROTECT; - else - softc->disk->d_flags &= ~DISKFLAG_WRITE_PROTECT; - } else { - int error; +static void +dadone_probewp(struct cam_periph *periph, union ccb *done_ccb) +{ + struct scsi_mode_header_6 *mode_hdr6; + struct scsi_mode_header_10 *mode_hdr10; + struct da_softc *softc; + struct ccb_scsiio *csio; + u_int32_t priority; + uint8_t dev_spec; - error = daerror(done_ccb, CAM_RETRY_SELTO, - SF_RETRY_UA|SF_NO_PRINT); - if (error == ERESTART) - return; - else if (error != 0) { - if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) { - /* Don't wedge this device's queue */ - cam_release_devq(done_ccb->ccb_h.path, - /*relsim_flags*/0, - /*reduction*/0, - /*timeout*/0, - /*getcount_only*/0); - } - } - } + CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("dadone_probewp\n")); - free(csio->data_ptr, M_SCSIDA); - xpt_release_ccb(done_ccb); - if ((softc->flags & DA_FLAG_CAN_RC16) != 0) - softc->state = DA_STATE_PROBE_RC16; + softc = (struct da_softc *)periph->softc; + priority = done_ccb->ccb_h.pinfo.priority; + csio = &done_ccb->csio; + + if (softc->minimum_cmd_size > 6) { + mode_hdr10 = (struct scsi_mode_header_10 *)csio->data_ptr; + dev_spec = mode_hdr10->dev_spec; + } else { + mode_hdr6 = (struct scsi_mode_header_6 *)csio->data_ptr; + dev_spec = mode_hdr6->dev_spec; + } + if (cam_ccb_status(done_ccb) == CAM_REQ_CMP) { + if ((dev_spec & 0x80) != 0) + softc->disk->d_flags |= DISKFLAG_WRITE_PROTECT; else - softc->state = DA_STATE_PROBE_RC; - xpt_schedule(periph, priority); - return; + softc->disk->d_flags &= ~DISKFLAG_WRITE_PROTECT; + } else { + int error; + + error = daerror(done_ccb, CAM_RETRY_SELTO, + SF_RETRY_UA|SF_NO_PRINT); + if (error == ERESTART) + return; + else if (error != 0) { + if ((done_ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) { + /* Don't wedge this device's queue */ + cam_release_devq(done_ccb->ccb_h.path, + /*relsim_flags*/0, + /*reduction*/0, + /*timeout*/0, + /*getcount_only*/0); + } + } } - case DA_CCB_PROBE_RC: - case DA_CCB_PROBE_RC16: - { - struct scsi_read_capacity_data *rdcap; - struct scsi_read_capacity_data_long *rcaplong; - char *announce_buf; - int lbp; - lbp = 0; - rdcap = NULL; - rcaplong = NULL; - /* XXX TODO: can this be a malloc? */ - announce_buf = softc->announce_temp; - bzero(announce_buf, DA_ANNOUNCETMP_SZ); + free(csio->data_ptr, M_SCSIDA); + xpt_release_ccb(done_ccb); + if ((softc->flags & DA_FLAG_CAN_RC16) != 0) + softc->state = DA_STATE_PROBE_RC16; + else + softc->state = DA_STATE_PROBE_RC; + xpt_schedule(periph, priority); + return; +} - if (state == DA_CCB_PROBE_RC) - rdcap =(struct scsi_read_capacity_data *)csio->data_ptr; - else - rcaplong = (struct scsi_read_capacity_data_long *) - csio->data_ptr; +static void +dadone_proberc(struct cam_periph *periph, union ccb *done_ccb) +{ + struct scsi_read_capacity_data *rdcap; + struct scsi_read_capacity_data_long *rcaplong; + struct da_softc *softc; + struct ccb_scsiio *csio; + da_ccb_state state; + char *announce_buf; + u_int32_t priority; + int lbp; - if ((csio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { - struct disk_params *dp; - uint32_t block_size; - uint64_t maxsector; - u_int lalba; /* Lowest aligned LBA. */ + CAM_DEBUG(periph->path, CAM_DEBUG_TRACE, ("dadone_proberc\n")); - if (state == DA_CCB_PROBE_RC) { - block_size = scsi_4btoul(rdcap->length); - maxsector = scsi_4btoul(rdcap->addr); - lalba = 0; + softc = (struct da_softc *)periph->softc; + priority = done_ccb->ccb_h.pinfo.priority; + csio = &done_ccb->csio; + state = csio->ccb_h.ccb_state & DA_CCB_TYPE_MASK; - /* - * According to SBC-2, if the standard 10 - * byte READ CAPACITY command returns 2^32, - * we should issue the 16 byte version of - * the command, since the device in question - * has more sectors than can be represented - * with the short version of the command. - */ - if (maxsector == 0xffffffff) { - free(rdcap, M_SCSIDA); - xpt_release_ccb(done_ccb); - softc->state = DA_STATE_PROBE_RC16; - xpt_schedule(periph, priority); - return; - } - } else { - block_size = scsi_4btoul(rcaplong->length); - maxsector = scsi_8btou64(rcaplong->addr); - lalba = scsi_2btoul(rcaplong->lalba_lbp); - } + lbp = 0; + rdcap = NULL; + rcaplong = NULL; + /* XXX TODO: can this be a malloc? */ + announce_buf = softc->announce_temp; + bzero(announce_buf, DA_ANNOUNCETMP_SZ); + if (state == DA_CCB_PROBE_RC) + rdcap =(struct scsi_read_capacity_data *)csio->data_ptr; + else + rcaplong = (struct scsi_read_capacity_data_long *) + csio->data_ptr; + + if ((csio->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_CMP) { + struct disk_params *dp; + uint32_t block_size; + uint64_t maxsector; + u_int lalba; /* Lowest aligned LBA. */ + + if (state == DA_CCB_PROBE_RC) { + block_size = scsi_4btoul(rdcap->length); + maxsector = scsi_4btoul(rdcap->addr); + lalba = 0; + /* - * Because GEOM code just will panic us if we - * give them an 'illegal' value we'll avoid that - * here. + * According to SBC-2, if the standard 10 + * byte READ CAPACITY command returns 2^32, + * we should issue the 16 byte version of + * the command, since the device in question + * has more sectors than can be represented + * with the short version of the command. */ - if (block_size == 0) { - block_size = 512; - if (maxsector == 0) - maxsector = -1; + if (maxsector == 0xffffffff) { + free(rdcap, M_SCSIDA); + xpt_release_ccb(done_ccb); + softc->state = DA_STATE_PROBE_RC16; + xpt_schedule(periph, priority); + return; } - if (block_size >= MAXPHYS) { - xpt_print(periph->path, - "unsupportable block size %ju\n", - (uintmax_t) block_size); - announce_buf = NULL; - cam_periph_invalidate(periph); - } else { - /* - * We pass rcaplong into dasetgeom(), - * because it will only use it if it is - * non-NULL. - */ - dasetgeom(periph, block_size, maxsector, - rcaplong, sizeof(*rcaplong)); - lbp = (lalba & SRC16_LBPME_A); - dp = &softc->params; - snprintf(announce_buf, DA_ANNOUNCETMP_SZ, - "%juMB (%ju %u byte sectors)", - ((uintmax_t)dp->secsize * dp->sectors) / - (1024 * 1024), - (uintmax_t)dp->sectors, dp->secsize); - } } else { - int error; + block_size = scsi_4btoul(rcaplong->length); + maxsector = scsi_8btou64(rcaplong->addr); + lalba = scsi_2btoul(rcaplong->lalba_lbp); + } + /* + * Because GEOM code just will panic us if we + * give them an 'illegal' value we'll avoid that + * here. + */ + if (block_size == 0) { + block_size = 512; + if (maxsector == 0) + maxsector = -1; + } + if (block_size >= MAXPHYS) { + xpt_print(periph->path, + "unsupportable block size %ju\n", + (uintmax_t) block_size); + announce_buf = NULL; + cam_periph_invalidate(periph); + } else { /* - * Retry any UNIT ATTENTION type errors. They - * are expected at boot. + * We pass rcaplong into dasetgeom(), + * because it will only use it if it is + * non-NULL. */ - error = daerror(done_ccb, CAM_RETRY_SELTO, - SF_RETRY_UA|SF_NO_PRINT); - if (error == ERESTART) { - /* - * A retry was scheuled, so - * just return. - */ - return; - } else if (error != 0) { - int asc, ascq; - int sense_key, error_code; - int have_sense; - cam_status status; - struct ccb_getdev cgd; + dasetgeom(periph, block_size, maxsector, + rcaplong, sizeof(*rcaplong)); + lbp = (lalba & SRC16_LBPME_A); + dp = &softc->params; + snprintf(announce_buf, DA_ANNOUNCETMP_SZ, + "%juMB (%ju %u byte sectors)", + ((uintmax_t)dp->secsize * dp->sectors) / + (1024 * 1024), + (uintmax_t)dp->sectors, dp->secsize); + } + } else { + int error; - /* Don't wedge this device's queue */ - status = done_ccb->ccb_h.status; - if ((status & CAM_DEV_QFRZN) != 0) - cam_release_devq(done_ccb->ccb_h.path, - /*relsim_flags*/0, - /*reduction*/0, - /*timeout*/0, - /*getcount_only*/0); + /* + * Retry any UNIT ATTENTION type errors. They + * are expected at boot. + */ + error = daerror(done_ccb, CAM_RETRY_SELTO, + SF_RETRY_UA|SF_NO_PRINT); + if (error == ERESTART) { + /* + * A retry was scheuled, so + * just return. + */ + return; + } else if (error != 0) { + int asc, ascq; + int sense_key, error_code; + int have_sense; + cam_status status; + struct ccb_getdev cgd; + /* Don't wedge this device's queue */ + status = done_ccb->ccb_h.status; + if ((status & CAM_DEV_QFRZN) != 0) + cam_release_devq(done_ccb->ccb_h.path, + /*relsim_flags*/0, + /*reduction*/0, + /*timeout*/0, + /*getcount_only*/0); - xpt_setup_ccb(&cgd.ccb_h, - done_ccb->ccb_h.path, - CAM_PRIORITY_NORMAL); - cgd.ccb_h.func_code = XPT_GDEV_TYPE; - xpt_action((union ccb *)&cgd); - if (scsi_extract_sense_ccb(done_ccb, - &error_code, &sense_key, &asc, &ascq)) - have_sense = TRUE; - else - have_sense = FALSE; + xpt_setup_ccb(&cgd.ccb_h, done_ccb->ccb_h.path, + CAM_PRIORITY_NORMAL); + cgd.ccb_h.func_code = XPT_GDEV_TYPE; + xpt_action((union ccb *)&cgd); - /* - * If we tried READ CAPACITY(16) and failed, - * fallback to READ CAPACITY(10). - */ - if ((state == DA_CCB_PROBE_RC16) && - (softc->flags & DA_FLAG_CAN_RC16) && - (((csio->ccb_h.status & CAM_STATUS_MASK) == - CAM_REQ_INVALID) || - ((have_sense) && - (error_code == SSD_CURRENT_ERROR || - error_code == SSD_DESC_CURRENT_ERROR) && - (sense_key == SSD_KEY_ILLEGAL_REQUEST)))) { - cam_periph_assert(periph, MA_OWNED); - softc->flags &= ~DA_FLAG_CAN_RC16; - free(rdcap, M_SCSIDA); - xpt_release_ccb(done_ccb); - softc->state = DA_STATE_PROBE_RC; - xpt_schedule(periph, priority); - return; - } + if (scsi_extract_sense_ccb(done_ccb, + &error_code, &sense_key, &asc, &ascq)) + have_sense = TRUE; + else + have_sense = FALSE; - /* - * Attach to anything that claims to be a - * direct access or optical disk device, - * as long as it doesn't return a "Logical - * unit not supported" (0x25) error. - * "Internal Target Failure" (0x44) is also - * special and typically means that the - * device is a SATA drive behind a SATL - * translation that's fallen into a - * terminally fatal state. - */ - if ((have_sense) - && (asc != 0x25) && (asc != 0x44) - && (error_code == SSD_CURRENT_ERROR - || error_code == SSD_DESC_CURRENT_ERROR)) { - const char *sense_key_desc; - const char *asc_desc; - - dasetgeom(periph, 512, -1, NULL, 0); - scsi_sense_desc(sense_key, asc, ascq, - &cgd.inq_data, - &sense_key_desc, - &asc_desc); - snprintf(announce_buf, - DA_ANNOUNCETMP_SZ, - "Attempt to query device " - "size failed: %s, %s", - sense_key_desc, asc_desc); - } else { - if (have_sense) - scsi_sense_print( - &done_ccb->csio); - else { - xpt_print(periph->path, - "got CAM status %#x\n", - done_ccb->ccb_h.status); - } - - xpt_print(periph->path, "fatal error, " - "failed to attach to device\n"); - - announce_buf = NULL; - - /* - * Free up resources. - */ - cam_periph_invalidate(periph); - } + /* + * If we tried READ CAPACITY(16) and failed, + * fallback to READ CAPACITY(10). + */ + if ((state == DA_CCB_PROBE_RC16) && + (softc->flags & DA_FLAG_CAN_RC16) && + (((csio->ccb_h.status & CAM_STATUS_MASK) == + CAM_REQ_INVALID) || + ((have_sense) && + (error_code == SSD_CURRENT_ERROR || + error_code == SSD_DESC_CURRENT_ERROR) && + (sense_key == SSD_KEY_ILLEGAL_REQUEST)))) { + cam_periph_assert(periph, MA_OWNED); + softc->flags &= ~DA_FLAG_CAN_RC16; + free(rdcap, M_SCSIDA); + xpt_release_ccb(done_ccb); + softc->state = DA_STATE_PROBE_RC; + xpt_schedule(periph, priority); + return; } - } - free(csio->data_ptr, M_SCSIDA); - if (announce_buf != NULL && - ((softc->flags & DA_FLAG_ANNOUNCED) == 0)) { - struct sbuf sb; - sbuf_new(&sb, softc->announcebuf, DA_ANNOUNCE_SZ, - SBUF_FIXEDLEN); - xpt_announce_periph_sbuf(periph, &sb, announce_buf); - xpt_announce_quirks_sbuf(periph, &sb, softc->quirks, - DA_Q_BIT_STRING); - sbuf_finish(&sb); - sbuf_putbuf(&sb); - /* - * Create our sysctl variables, now that we know - * we have successfully attached. + * Attach to anything that claims to be a + * direct access or optical disk device, + * as long as it doesn't return a "Logical + * unit not supported" (0x25) error. + * "Internal Target Failure" (0x44) is also + * special and typically means that the + * device is a SATA drive behind a SATL + * translation that's fallen into a + * terminally fatal state. */ - /* increase the refcount */ - if (da_periph_acquire(periph, DA_REF_SYSCTL) == 0) { + if ((have_sense) + && (asc != 0x25) && (asc != 0x44) + && (error_code == SSD_CURRENT_ERROR + || error_code == SSD_DESC_CURRENT_ERROR)) { + const char *sense_key_desc; + const char *asc_desc; - taskqueue_enqueue(taskqueue_thread, - &softc->sysctl_task); - } else { - /* XXX This message is useless! */ + dasetgeom(periph, 512, -1, NULL, 0); + scsi_sense_desc(sense_key, asc, ascq, + &cgd.inq_data, &sense_key_desc, + &asc_desc); + snprintf(announce_buf, DA_ANNOUNCETMP_SZ, + "Attempt to query device " + "size failed: %s, %s", + sense_key_desc, asc_desc); + } else { + if (have_sense) + scsi_sense_print(&done_ccb->csio); + else { + xpt_print(periph->path, + "got CAM status %#x\n", + done_ccb->ccb_h.status); + } *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Tue May 1 23:00:56 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4347BFBA5CD; Tue, 1 May 2018 23:00:56 +0000 (UTC) (envelope-from jonlooney@gmail.com) Received: from mail-wm0-x241.google.com (mail-wm0-x241.google.com [IPv6:2a00:1450:400c:c09::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 B4F6F69E96; Tue, 1 May 2018 23:00:55 +0000 (UTC) (envelope-from jonlooney@gmail.com) Received: by mail-wm0-x241.google.com with SMTP id f8so10624581wmc.4; Tue, 01 May 2018 16:00:55 -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=IGd1ZFRuCpr7lYdfHOPwm5KfxMyzvaMlbJo/N8cgkIk=; b=pnvtmNfoxFZltw8Y3MjNHWnJi5eK4fdqVkQMMdeXZ7dAd32sKQRlEQmAg20VBZm2qQ 08UJMRo1a79nmyCA9Pkv/LhBbsAf9LonIga2NCN2DZRmDqlfBmmWt860cNTUD8lTi49x WSy5MnWKPhOcLDOl2MSxsdr9ttrT8Lbc0PCotgQmvlkQJYAQyDnqI8DkYxhfpRxu37MT C7YHgg19Opvgr0A5LXBOabBnObQ7+5hYc/WmsAaJ4tA9C9+o6hWzqgBjsWh2JfvEBiSl FW+B1TdDrfGy9EtmtZFJTMdqO86qAfc0uLfc23zwqr3KzhUQvHSZFCKIZsPFg7iSLlaf oAOA== 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=IGd1ZFRuCpr7lYdfHOPwm5KfxMyzvaMlbJo/N8cgkIk=; b=LEbNqvpJDqghMUs/tVSRQsi9k0UAwglkuxc2URt2okpF8CT/nvV+zFJTGdligMnAb6 h6Lyr/wfIOIxqHVrNGshVqxTqCNl80a11nEmNFpRohz5Uf+iSIDpI6VqyBJkkLoC5+41 +oCWyZIuYhMAkUawaPEDW5gsACxnNYauWF983rjM2T7MyLgNlAiFpPZslR9x52Nkc/ct yuQN0rjKQ/zgdcIW3S9f0TTD/I5yMN+s9NsdBHglvpn4dCC7zDAnF0hP8yuzNStAkbRu g7jDc08TA9smwFCU4GKiviOmIXCw8YoGb6swdmBbNihJLZGwSTaXRTrVPxoGsVB/B3PQ zxZQ== X-Gm-Message-State: ALQs6tAVhJlSGh11SRjtAXBJWjUI/sXO2/fdRWTce9+ywxABl8zy4LWx OGycEe7YYUP+JDhO4V8BD77XEE2t33HMcjaXr0GhfwAS X-Google-Smtp-Source: AB8JxZrwlgS1y5EC4X34qQvGLTzs+HFb9FycZ1IoFBtKREyZeSJKSuOGhpaS2Rh984UOcqmEvzznxFiBi7k7WZr7fIY= X-Received: by 10.28.45.147 with SMTP id t141mr11553440wmt.94.1525215654702; Tue, 01 May 2018 16:00:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.197.74 with HTTP; Tue, 1 May 2018 16:00:54 -0700 (PDT) In-Reply-To: <20180430071646.GE3653@strugglingcoder.info> References: <201804191338.w3JDc0to002106@repo.freebsd.org> <20180430071646.GE3653@strugglingcoder.info> From: Jonathan Looney Date: Tue, 1 May 2018 19:00:54 -0400 Message-ID: Subject: Re: svn commit: r332770 - in head/sys: conf netinet netinet/tcp_stacks sys To: hiren panchasara Cc: Randall Stewart , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 01 May 2018 23:00:56 -0000 On Mon, Apr 30, 2018 at 3:16 AM, hiren panchasara < hiren@strugglingcoder.info> wrote: > > In my understanding, default stack currently cannot use this mechanism. When do > you think that'll be possible? I think I can speak to Randall's plans for this. Randall chose not to include in this commit the hooks for the default stack to use the high-precision timers. I believe his immediate priorities are upstreaming RACK and BBR. After that, if there is demand, he may upstream the (relatively untested) code that allows the default stack to use the high-precision timers (protected by a non-default kernel option) so others can choose to experiment with it. (By the way, we're hoping to change the terminology away from describing the traditional FreeBSD stack as the "default" stack. In theory, someone can make any stack be their local default. We'll need to figure out what to actually call it at some point. My suggestion was the "FreeBSD" stack, although that is lacking in some imagination. In any case, we should have that discussion at some point in the future.) Jonathan From owner-svn-src-head@freebsd.org Tue May 1 23:12:00 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0F8A8FBA7D9 for ; Tue, 1 May 2018 23:12:00 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-it0-x22f.google.com (mail-it0-x22f.google.com [IPv6:2607:f8b0:4001:c0b::22f]) (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 9401A6CBEB for ; Tue, 1 May 2018 23:11:59 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-it0-x22f.google.com with SMTP id c3-v6so14863172itj.4 for ; Tue, 01 May 2018 16:11:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=PeBojuiugnqG/yXz+9RX+uxtR6K9n4ZfEWib9/x0xFM=; b=l+eKH/xtGFwlAc35RAvQE1hQjkPUwDSeIYJ0en2PaMiVpYGLdwP2jt+at7W7VbutD0 MmB43zhi8wQiW0iT7ox7hjMRmKvjxAWZ561y7ak24xOgHrLf80Wd0FsxQA4TY5OZ7HYo sGhopv/5pH80ExnDD2AJ8ZLqwLbMQa07y6wolBzKxfkU1hNW7aO1XqNBje8XlX+SQ59E D7wrk+5OPWMH7sUsV6WNpQ0vIds9XQ4VQikYy+XG7Pst16jTrcpkLjY5h6TycyyqmgFY Pohk/ZQW5InT6vFkjKULrUjB41wvCnwu40TDlhJMFCNxd4VfbnVQTOm2nywTIxNqesGi iRGA== 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=PeBojuiugnqG/yXz+9RX+uxtR6K9n4ZfEWib9/x0xFM=; b=pCS+xIE10VYCKjQAdPvx+iqYS0bY9Wj9FHr8UkzVcQTzOTtVt6PeuVidmnY41rnlci NzTD2cRzTIoBqAIvW5G8n5oJRuds2U2nCQs34alBZe3oGRNqxLJaJiMnWhdVKb9ke0Os NGrSHuyAN3pSBU8CxlhUd2BLvJbQqek2dhAbgLbeZoY30foehuWBO2nQv7Qco7+u7R0g nC71zOTu1bGXKXLe/2k+BfuduNVG6v5lUU/8YjO4s6RI2/ypyyQUI+fg3qSuS5dGhMic ur/JDGK7k75JhzXuUBPT4RpSPQJdhNrMz2DtsmwcZLCqiQvVpq40UcnB8Lm41qixmsz8 0CXg== X-Gm-Message-State: ALQs6tDs6IEGHKd9JpxcYyLhOskBHZJ1vzkSa2q6MfgkEf/3jqJqAYQ3 JJPXxKihDsi8Ccld0gB7AZ0j33alyTnpnLSI4u8g0A== X-Google-Smtp-Source: AB8JxZo12kPKun1CC0VArD1mgs+dZwSIeJ2+6gfKLYNWUy8d6Q1TlAWiB16vSfXksNkqsUb3s9Tm0Ui38Oz5FloF8aM= X-Received: by 2002:a24:b649:: with SMTP id d9-v6mr18237449itj.51.1525216318876; Tue, 01 May 2018 16:11:58 -0700 (PDT) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 2002:a4f:a65a:0:0:0:0:0 with HTTP; Tue, 1 May 2018 16:11:58 -0700 (PDT) X-Originating-IP: [2603:300b:6:5100:1052:acc7:f9de:2b6d] In-Reply-To: References: <201804191338.w3JDc0to002106@repo.freebsd.org> <20180430071646.GE3653@strugglingcoder.info> From: Warner Losh Date: Tue, 1 May 2018 17:11:58 -0600 X-Google-Sender-Auth: tTfvCW6uZpP1Iqnbly76KN5Svl0 Message-ID: Subject: Re: svn commit: r332770 - in head/sys: conf netinet netinet/tcp_stacks sys To: Jonathan Looney Cc: hiren panchasara , Randall Stewart , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 01 May 2018 23:12:00 -0000 On Tue, May 1, 2018 at 5:00 PM, Jonathan Looney wrote: > On Mon, Apr 30, 2018 at 3:16 AM, hiren panchasara < > hiren@strugglingcoder.info> wrote: > > > > In my understanding, default stack currently cannot use this mechanism. > When do > > you think that'll be possible? > > > I think I can speak to Randall's plans for this. > > Randall chose not to include in this commit the hooks for the default > stack to use the high-precision timers. I believe his immediate priorities > are upstreaming RACK and BBR. After that, if there is demand, he may > upstream the (relatively untested) code that allows the default stack to > use the high-precision timers (protected by a non-default kernel option) so > others can choose to experiment with it. > > (By the way, we're hoping to change the terminology away from describing > the traditional FreeBSD stack as the "default" stack. In theory, someone > can make any stack be their local default. We'll need to figure out what to > actually call it at some point. My suggestion was the "FreeBSD" stack, > although that is lacking in some imagination. In any case, we should have > that discussion at some point in the future. > Only slightly less poor would be "traditional" stack :) Warner From owner-svn-src-head@freebsd.org Wed May 2 01:04:14 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 32B90FBD265; Wed, 2 May 2018 01:04:14 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D62FE8296A; Wed, 2 May 2018 01:04:13 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D10421D11; Wed, 2 May 2018 01:04:13 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w4214DLB074135; Wed, 2 May 2018 01:04:13 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4214DYk074134; Wed, 2 May 2018 01:04:13 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805020104.w4214DYk074134@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Wed, 2 May 2018 01:04:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333155 - head/usr.bin/seq X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/usr.bin/seq X-SVN-Commit-Revision: 333155 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 01:04:14 -0000 Author: kevans Date: Wed May 2 01:04:13 2018 New Revision: 333155 URL: https://svnweb.freebsd.org/changeset/base/333155 Log: seq(1): Move long_opts up with globals Modified: head/usr.bin/seq/seq.c Modified: head/usr.bin/seq/seq.c ============================================================================== --- head/usr.bin/seq/seq.c Tue May 1 21:42:27 2018 (r333154) +++ head/usr.bin/seq/seq.c Wed May 2 01:04:13 2018 (r333155) @@ -57,6 +57,15 @@ __FBSDID("$FreeBSD$"); static const char *decimal_point = "."; /* default */ static char default_format[] = { "%g" }; /* default */ +static const struct option long_opts[] = +{ + {"format", required_argument, NULL, 'f'}, + {"separator", required_argument, NULL, 's'}, + {"terminator", required_argument, NULL, 't'}, + {"equal-width", no_argument, NULL, 'w'}, + {NULL, no_argument, NULL, 0} +}; + /* Prototypes */ static double e_atof(const char *); @@ -67,15 +76,6 @@ static int valid_format(const char *); static char *generate_format(double, double, double, int, char); static char *unescape(char *); - -static const struct option long_opts[] = -{ - {"format", required_argument, NULL, 'f'}, - {"separator", required_argument, NULL, 's'}, - {"terminator", required_argument, NULL, 't'}, - {"equal-width", no_argument, NULL, 'w'}, - {NULL, no_argument, NULL, 0} -}; /* * The seq command will print out a numeric sequence from 1, the default, From owner-svn-src-head@freebsd.org Wed May 2 01:17:10 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 16C40FBD962; Wed, 2 May 2018 01:17:10 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A277D845C9; Wed, 2 May 2018 01:17:08 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9C9971EAC; Wed, 2 May 2018 01:17:08 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w421H803079226; Wed, 2 May 2018 01:17:08 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w421H8a6079224; Wed, 2 May 2018 01:17:08 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805020117.w421H8a6079224@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Wed, 2 May 2018 01:17:08 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333156 - head/usr.bin/uniq X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/usr.bin/uniq X-SVN-Commit-Revision: 333156 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 01:17:10 -0000 Author: kevans Date: Wed May 2 01:17:08 2018 New Revision: 333156 URL: https://svnweb.freebsd.org/changeset/base/333156 Log: uniq(1): Add some long options These match GNU uniq(1) where appropriate for compatibility's sake. While here, re-sort options alphabetically by the short-option. MFC after: 1 month Modified: head/usr.bin/uniq/uniq.1 head/usr.bin/uniq/uniq.c Modified: head/usr.bin/uniq/uniq.1 ============================================================================== --- head/usr.bin/uniq/uniq.1 Wed May 2 01:04:13 2018 (r333155) +++ head/usr.bin/uniq/uniq.1 Wed May 2 01:17:08 2018 (r333156) @@ -31,7 +31,7 @@ .\" From: @(#)uniq.1 8.1 (Berkeley) 6/6/93 .\" $FreeBSD$ .\" -.Dd May 15, 2017 +.Dd May 1, 2018 .Dt UNIQ 1 .Os .Sh NAME @@ -71,34 +71,34 @@ so it may be necessary to sort the files first. .Pp The following options are available: .Bl -tag -width Ds -.It Fl c +.It Fl c , Fl -count Precede each output line with the count of the number of times the line occurred in the input, followed by a single space. -.It Fl d +.It Fl d , Fl -repeated Only output lines that are repeated in the input. -.It Fl f Ar num +.It Fl f Ar num , Fl -skip-fields Ar num Ignore the first .Ar num fields in each input line when doing comparisons. A field is a string of non-blank characters separated from adjacent fields by blanks. Field numbers are one based, i.e., the first field is field one. -.It Fl s Ar chars +.It Fl i , Fl -ignore-case +Case insensitive comparison of lines. +.It Fl s Ar chars , Fl -skip-chars Ar chars Ignore the first .Ar chars characters in each input line when doing comparisons. If specified in conjunction with the -.Fl f +.Fl f , Fl -unique option, the first .Ar chars characters after the first .Ar num fields will be ignored. Character numbers are one based, i.e., the first character is character one. -.It Fl u +.It Fl u , Fl -unique Only output lines that are not repeated in the input. -.It Fl i -Case insensitive comparison of lines. .\".It Fl Ns Ar n .\"(Deprecated; replaced by .\".Fl f ) . Modified: head/usr.bin/uniq/uniq.c ============================================================================== --- head/usr.bin/uniq/uniq.c Wed May 2 01:04:13 2018 (r333155) +++ head/usr.bin/uniq/uniq.c Wed May 2 01:17:08 2018 (r333156) @@ -51,6 +51,7 @@ static const char rcsid[] = #include #include #include +#include #include #include #include @@ -66,6 +67,17 @@ static const char rcsid[] = static int cflag, dflag, uflag, iflag; static int numchars, numfields, repeats; +static const struct option long_opts[] = +{ + {"count", no_argument, NULL, 'c'}, + {"repeated", no_argument, NULL, 'd'}, + {"skip-fields", required_argument, NULL, 'f'}, + {"ignore-case", no_argument, NULL, 'i'}, + {"skip-chars", required_argument, NULL, 's'}, + {"unique", no_argument, NULL, 'u'}, + {NULL, no_argument, NULL, 0} +}; + static FILE *file(const char *, const char *); static wchar_t *convert(const char *); static int inlcmp(const char *, const char *); @@ -99,7 +111,8 @@ main (int argc, char *argv[]) (void) setlocale(LC_ALL, ""); obsolete(argv); - while ((ch = getopt(argc, argv, "cdif:s:u")) != -1) + while ((ch = getopt_long(argc, argv, "+cdif:s:u", long_opts, + NULL)) != -1) switch (ch) { case 'c': cflag = 1; From owner-svn-src-head@freebsd.org Wed May 2 01:32:35 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ABC15FBDFB8; Wed, 2 May 2018 01:32:35 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 591A687B34; Wed, 2 May 2018 01:32:35 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 53FFB21EA; Wed, 2 May 2018 01:32:35 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w421WZjJ089603; Wed, 2 May 2018 01:32:35 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w421WZiO089601; Wed, 2 May 2018 01:32:35 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805020132.w421WZiO089601@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Wed, 2 May 2018 01:32:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333157 - head/usr.bin/cmp X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/usr.bin/cmp X-SVN-Commit-Revision: 333157 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 01:32:35 -0000 Author: kevans Date: Wed May 2 01:32:34 2018 New Revision: 333157 URL: https://svnweb.freebsd.org/changeset/base/333157 Log: cmp(1): Provide some long options These match GNU cmp(1) for compatibility where applicable. Future work might implement the -i option from GNU cmp(1) to express skip either in terms of both files or of the form "SKIP1:SKIP2" rather than specifying them as additional arguments to cmp(1). MFC after: 1 month Modified: head/usr.bin/cmp/cmp.1 head/usr.bin/cmp/cmp.c Modified: head/usr.bin/cmp/cmp.1 ============================================================================== --- head/usr.bin/cmp/cmp.1 Wed May 2 01:17:08 2018 (r333156) +++ head/usr.bin/cmp/cmp.1 Wed May 2 01:32:34 2018 (r333157) @@ -31,7 +31,7 @@ .\" @(#)cmp.1 8.1 (Berkeley) 6/6/93 .\" $FreeBSD$ .\" -.Dd November 18, 2013 +.Dd May 1, 2018 .Dt CMP 1 .Os .Sh NAME @@ -59,10 +59,10 @@ The following options are available: .Bl -tag -width indent .It Fl h Do not follow symbolic links. -.It Fl l +.It Fl l , Fl -verbose Print the byte number (decimal) and the differing byte values (octal) for each difference. -.It Fl s +.It Fl s , Fl -silent , Fl -quiet Print nothing for differing files; return exit status only. .It Fl x Modified: head/usr.bin/cmp/cmp.c ============================================================================== --- head/usr.bin/cmp/cmp.c Wed May 2 01:17:08 2018 (r333156) +++ head/usr.bin/cmp/cmp.c Wed May 2 01:32:34 2018 (r333157) @@ -52,6 +52,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -62,6 +63,14 @@ __FBSDID("$FreeBSD$"); int lflag, sflag, xflag, zflag; +static const struct option long_opts[] = +{ + {"verbose", no_argument, NULL, 'l'}, + {"silent", no_argument, NULL, 's'}, + {"quiet", no_argument, NULL, 's'}, + {NULL, no_argument, NULL, 0} +}; + static void usage(void); int @@ -75,7 +84,7 @@ main(int argc, char *argv[]) uint32_t fcntls; oflag = O_RDONLY; - while ((ch = getopt(argc, argv, "hlsxz")) != -1) + while ((ch = getopt_long(argc, argv, "+hlsxz", long_opts, NULL)) != -1) switch (ch) { case 'h': /* Don't follow symlinks */ oflag |= O_NOFOLLOW; From owner-svn-src-head@freebsd.org Wed May 2 02:41:09 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D73E0FBF56F; Wed, 2 May 2018 02:41:09 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8A32276FC1; Wed, 2 May 2018 02:41: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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 835F82BB3; Wed, 2 May 2018 02:41:09 +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 w422f9XN023443; Wed, 2 May 2018 02:41:09 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w422f98T023442; Wed, 2 May 2018 02:41:09 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201805020241.w422f98T023442@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 2 May 2018 02:41:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333158 - head/sys/dev/mpr X-SVN-Group: head X-SVN-Commit-Author: mav X-SVN-Commit-Paths: head/sys/dev/mpr X-SVN-Commit-Revision: 333158 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 02:41:10 -0000 Author: mav Date: Wed May 2 02:41:09 2018 New Revision: 333158 URL: https://svnweb.freebsd.org/changeset/base/333158 Log: Clean enclosure_table when resetting num_enc_table_entries to zero. Garbage left there by r325363 in some scenarios found to lead to later enclosure mapping failures. MFC after: 1 week Sponsored by: iXsystems, Inc. Modified: head/sys/dev/mpr/mpr_mapping.c Modified: head/sys/dev/mpr/mpr_mapping.c ============================================================================== --- head/sys/dev/mpr/mpr_mapping.c Wed May 2 01:32:34 2018 (r333157) +++ head/sys/dev/mpr/mpr_mapping.c Wed May 2 02:41:09 2018 (r333158) @@ -2385,6 +2385,8 @@ fail: * sc->mapping_table volumes tooi */ } + for (enc_idx = 0; enc_idx < sc->num_enc_table_entries; enc_idx++) + _mapping_clear_enc_entry(sc->enclosure_table + enc_idx); sc->num_enc_table_entries = 0; return (false); } From owner-svn-src-head@freebsd.org Wed May 2 10:19:18 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 99753FC87B8; Wed, 2 May 2018 10:19:18 +0000 (UTC) (envelope-from royger@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3CD286DB33; Wed, 2 May 2018 10:19:18 +0000 (UTC) (envelope-from royger@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 33ACA7A4C; Wed, 2 May 2018 10:19:18 +0000 (UTC) (envelope-from royger@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42AJIIP051138; Wed, 2 May 2018 10:19:18 GMT (envelope-from royger@FreeBSD.org) Received: (from royger@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42AJH6t051136; Wed, 2 May 2018 10:19:17 GMT (envelope-from royger@FreeBSD.org) Message-Id: <201805021019.w42AJH6t051136@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: royger set sender to royger@FreeBSD.org using -f From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= Date: Wed, 2 May 2018 10:19:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333169 - in head/sys: dev/xen/gntdev xen X-SVN-Group: head X-SVN-Commit-Author: royger X-SVN-Commit-Paths: in head/sys: dev/xen/gntdev xen X-SVN-Commit-Revision: 333169 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 10:19:18 -0000 Author: royger Date: Wed May 2 10:19:17 2018 New Revision: 333169 URL: https://svnweb.freebsd.org/changeset/base/333169 Log: xen: fix gntdev Current interface to the gntdev in FreeBSD is wrong, and mostly worked out of luck before the PTI FreeBSD fixes, when kernel and user-space where sharing the same page tables. On FreeBSD ioctls have the size of the passed struct encoded in the ioctl number, because the generic ioctl handler in the OS takes care of copying the data from user-space to kernel space, and then calls the device specific ioctl handler. Thus using ioctl structs with variable sizes is not possible. The fix is to turn the array of structs at the end of ioctl_gntdev_alloc_gref and ioctl_gntdev_map_grant_ref into pointers, that can be properly accessed from the kernel gntdev driver using the copyin/copyout functions. Note that this is exactly how it's done for the privcmd driver. Sponsored by: Citrix Systems R&D Modified: head/sys/dev/xen/gntdev/gntdev.c head/sys/xen/gntdev.h Modified: head/sys/dev/xen/gntdev/gntdev.c ============================================================================== --- head/sys/dev/xen/gntdev/gntdev.c Wed May 2 08:26:59 2018 (r333168) +++ head/sys/dev/xen/gntdev/gntdev.c Wed May 2 10:19:17 2018 (r333169) @@ -414,7 +414,7 @@ gntdev_alloc_gref(struct ioctl_gntdev_alloc_gref *arg) /* Copy the output values. */ arg->index = file_offset; for (i = 0; i < arg->count; i++) - arg->gref_ids[i] = grefs[i].gref_id; + suword32(&arg->gref_ids[i], grefs[i].gref_id); /* Modify the per user private data. */ mtx_lock(&priv_user->user_data_lock); @@ -659,16 +659,27 @@ gntdev_map_grant_ref(struct ioctl_gntdev_map_grant_ref gmap->grant_map_ops = malloc(sizeof(struct gnttab_map_grant_ref) * arg->count, M_GNTDEV, M_WAITOK | M_ZERO); - - error = get_file_offset(priv_user, arg->count, &gmap->file_index); - if (error != 0) - return (error); for (i = 0; i < arg->count; i++) { - gmap->grant_map_ops[i].dom = arg->refs[i].domid; - gmap->grant_map_ops[i].ref = arg->refs[i].ref; + struct ioctl_gntdev_grant_ref ref; + + error = copyin(&arg->refs[i], &ref, sizeof(ref)); + if (error != 0) { + free(gmap->grant_map_ops, M_GNTDEV); + free(gmap, M_GNTDEV); + return (error); + } + gmap->grant_map_ops[i].dom = ref.domid; + gmap->grant_map_ops[i].ref = ref.ref; gmap->grant_map_ops[i].handle = -1; gmap->grant_map_ops[i].flags = GNTMAP_host_map; + } + + error = get_file_offset(priv_user, arg->count, &gmap->file_index); + if (error != 0) { + free(gmap->grant_map_ops, M_GNTDEV); + free(gmap, M_GNTDEV); + return (error); } mtx_lock(&priv_user->user_data_lock); Modified: head/sys/xen/gntdev.h ============================================================================== --- head/sys/xen/gntdev.h Wed May 2 08:26:59 2018 (r333168) +++ head/sys/xen/gntdev.h Wed May 2 10:19:17 2018 (r333169) @@ -139,7 +139,7 @@ struct ioctl_gntdev_alloc_gref { /* OUT parameters */ uint64_t index; /* Variable OUT parameter */ - uint32_t gref_ids[1]; + uint32_t *gref_ids; }; #define GNTDEV_ALLOC_FLAG_WRITABLE 1 @@ -168,7 +168,7 @@ struct ioctl_gntdev_map_grant_ref { /* OUT parameters */ uint64_t index; /* Variable IN parameter */ - struct ioctl_gntdev_grant_ref refs[1]; + struct ioctl_gntdev_grant_ref *refs; }; #define IOCTL_GNTDEV_UNMAP_GRANT_REF \ From owner-svn-src-head@freebsd.org Wed May 2 10:20:56 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 80A6AFC8858; Wed, 2 May 2018 10:20:56 +0000 (UTC) (envelope-from royger@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 351456DEC5; Wed, 2 May 2018 10:20:56 +0000 (UTC) (envelope-from royger@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2D1E17A6C; Wed, 2 May 2018 10:20:56 +0000 (UTC) (envelope-from royger@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42AKu1c051961; Wed, 2 May 2018 10:20:56 GMT (envelope-from royger@FreeBSD.org) Received: (from royger@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42AKusa051960; Wed, 2 May 2018 10:20:56 GMT (envelope-from royger@FreeBSD.org) Message-Id: <201805021020.w42AKusa051960@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: royger set sender to royger@FreeBSD.org using -f From: =?UTF-8?Q?Roger_Pau_Monn=c3=a9?= Date: Wed, 2 May 2018 10:20:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333170 - head/sys/x86/xen X-SVN-Group: head X-SVN-Commit-Author: royger X-SVN-Commit-Paths: head/sys/x86/xen X-SVN-Commit-Revision: 333170 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 10:20:56 -0000 Author: royger Date: Wed May 2 10:20:55 2018 New Revision: 333170 URL: https://svnweb.freebsd.org/changeset/base/333170 Log: xen: fix formatting of xen_init_ops No functional change Sponsored by: Citrix Systems R&D Modified: head/sys/x86/xen/pv.c Modified: head/sys/x86/xen/pv.c ============================================================================== --- head/sys/x86/xen/pv.c Wed May 2 10:19:17 2018 (r333169) +++ head/sys/x86/xen/pv.c Wed May 2 10:20:55 2018 (r333170) @@ -119,7 +119,7 @@ struct init_ops xen_init_ops = { #ifdef SMP .start_all_aps = xen_pv_start_all_aps, #endif - .msi_init = xen_msi_init, + .msi_init = xen_msi_init, }; static struct bios_smap xen_smap[MAX_E820_ENTRIES]; From owner-svn-src-head@freebsd.org Wed May 2 14:59:27 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C5DA6FAC108; Wed, 2 May 2018 14:59:27 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from mail.strugglingcoder.info (strugglingcoder.info [104.236.146.68]) by mx1.freebsd.org (Postfix) with ESMTP id 6C9546C2ED; Wed, 2 May 2018 14:59:27 +0000 (UTC) (envelope-from hiren@strugglingcoder.info) Received: from localhost (unknown [10.1.1.3]) (Authenticated sender: hiren@strugglingcoder.info) by mail.strugglingcoder.info (Postfix) with ESMTPA id 7CEC2178C5; Wed, 2 May 2018 07:59:21 -0700 (PDT) Date: Wed, 2 May 2018 07:59:21 -0700 From: hiren panchasara To: Warner Losh Cc: Jonathan Looney , Randall Stewart , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r332770 - in head/sys: conf netinet netinet/tcp_stacks sys Message-ID: <20180502145921.GA34324@strugglingcoder.info> References: <201804191338.w3JDc0to002106@repo.freebsd.org> <20180430071646.GE3653@strugglingcoder.info> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="Dxnq1zWXvFF0Q93v" Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 02 May 2018 14:59:27 -0000 --Dxnq1zWXvFF0Q93v Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 05/01/18 at 05:11P, Warner Losh wrote: > On Tue, May 1, 2018 at 5:00 PM, Jonathan Looney wro= te: >=20 > > On Mon, Apr 30, 2018 at 3:16 AM, hiren panchasara < > > hiren@strugglingcoder.info> wrote: > > > > > > In my understanding, default stack currently cannot use this mechanis= m. > > When do > > > you think that'll be possible? > > > > > > I think I can speak to Randall's plans for this. Thank you! > > > > Randall chose not to include in this commit the hooks for the default > > stack to use the high-precision timers. I believe his immediate priorit= ies > > are upstreaming RACK and BBR. After that, if there is demand, he may > > upstream the (relatively untested) code that allows the default stack to > > use the high-precision timers (protected by a non-default kernel option= ) so > > others can choose to experiment with it. I believe it'd be useful to be able to pace packets with the traditional stack. > > > > (By the way, we're hoping to change the terminology away from describing > > the traditional FreeBSD stack as the "default" stack. In theory, someone > > can make any stack be their local default. We'll need to figure out wha= t to > > actually call it at some point. My suggestion was the "FreeBSD" stack, > > although that is lacking in some imagination. In any case, we should ha= ve > > that discussion at some point in the future. > > >=20 > Only slightly less poor would be "traditional" stack :) See, I've already started using this name. :-) Cheers, Hiren --Dxnq1zWXvFF0Q93v Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQF8BAABCgBmBQJa6dJDXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXRBNEUyMEZBMUQ4Nzg4RjNGMTdFNjZGMDI4 QjkyNTBFMTU2M0VERkU1AAoJEIuSUOFWPt/lTw4H/ijeuuQjOst10aXhXbH/INFS n/h7XZDJCiJRY+YQ55XfBZ7hB+b1zbytwnknjwCTMwVvTX5aacXC3lrjjSVVzyhq fCOvgFpGrzQpt+uraGZyczREVGLnuYnw7rCKCUn9bKc6TkG4ghDbog8UwIaq9MNc uCVZTzsvr8M+ufrQwA+12HvoeHeC1dd90PNXA63vQJDZ8gSvjRidqJwJMPINTu8D jkhY/8/461F0DuPux1ASLvd3vZQk+XSwgd7mNTFjkUaAhDFBvW3UCLWbXp8ZiRqW SWIwjNY+gzIQapTUpsy80dvipSpKrnIBUYnK5NC0OuEbxn4WTspDCeCW9xcuqLo= =RMvI -----END PGP SIGNATURE----- --Dxnq1zWXvFF0Q93v-- From owner-svn-src-head@freebsd.org Wed May 2 15:45:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4254FFAD0FB; Wed, 2 May 2018 15:45:32 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E98F2794C1; Wed, 2 May 2018 15:45:31 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E071A12F05; Wed, 2 May 2018 15:45:31 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42FjVSB021872; Wed, 2 May 2018 15:45:31 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42FjVEa021871; Wed, 2 May 2018 15:45:31 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805021545.w42FjVEa021871@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Wed, 2 May 2018 15:45:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333172 - head/usr.bin/grep X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/usr.bin/grep X-SVN-Commit-Revision: 333172 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 15:45:32 -0000 Author: kevans Date: Wed May 2 15:45:31 2018 New Revision: 333172 URL: https://svnweb.freebsd.org/changeset/base/333172 Log: bsdgrep: Adjust a missed NLS reference that was invalidated by recent work Submitted by: Dan McGregor Modified: head/usr.bin/grep/util.c Modified: head/usr.bin/grep/util.c ============================================================================== --- head/usr.bin/grep/util.c Wed May 2 15:21:51 2018 (r333171) +++ head/usr.bin/grep/util.c Wed May 2 15:45:31 2018 (r333172) @@ -389,7 +389,7 @@ procfile(const char *fn) printf("%s%c", fn, nullflag ? 0 : '\n'); if (c && !cflag && !lflag && !Lflag && binbehave == BINFILE_BIN && f->binary && !qflag) - printf(getstr(8), fn); + printf(getstr(7), fn); free(pc.ln.file); free(f); From owner-svn-src-head@freebsd.org Wed May 2 15:59:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 90228FAD983; Wed, 2 May 2018 15:59:17 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4057B7C61D; Wed, 2 May 2018 15:59:17 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3ABCE130B8; Wed, 2 May 2018 15:59:17 +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 w42FxHhH027293; Wed, 2 May 2018 15:59:17 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42FxFQ6027275; Wed, 2 May 2018 15:59:15 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201805021559.w42FxFQ6027275@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Wed, 2 May 2018 15:59:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333173 - in head: . share/man/man4 sys/conf sys/dev/ixgb sys/i386/conf sys/modules sys/modules/ixgb sys/netpfil/pf sys/sparc64/conf tools/kerneldoc/subsys tools/tools/tinybsd/conf/brid... X-SVN-Group: head X-SVN-Commit-Author: sbruno X-SVN-Commit-Paths: in head: . share/man/man4 sys/conf sys/dev/ixgb sys/i386/conf sys/modules sys/modules/ixgb sys/netpfil/pf sys/sparc64/conf tools/kerneldoc/subsys tools/tools/tinybsd/conf/bridge tools/tools/tinybsd/co... X-SVN-Commit-Revision: 333173 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 15:59:17 -0000 Author: sbruno Date: Wed May 2 15:59:15 2018 New Revision: 333173 URL: https://svnweb.freebsd.org/changeset/base/333173 Log: Retire ixgb(4) This driver was for an early and uncommon legacy PCI 10GbE for a single ASIC, Intel 82597EX. Intel quickly shifted to the long lived ixgbe family. Submitted by: kbowling Reviewed by: brooks imp jeffrey.e.pieper@intel.com Relnotes: yes Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D15234 Deleted: head/share/man/man4/ixgb.4 head/sys/dev/ixgb/ head/sys/modules/ixgb/Makefile head/tools/kerneldoc/subsys/Doxyfile-dev_ixgb Modified: head/ObsoleteFiles.inc head/UPDATING head/share/man/man4/Makefile head/share/man/man4/polling.4 head/share/man/man4/vlan.4 head/sys/conf/NOTES head/sys/conf/files head/sys/i386/conf/GENERIC head/sys/modules/Makefile head/sys/netpfil/pf/pf.c head/sys/sparc64/conf/GENERIC head/tools/tools/tinybsd/conf/bridge/TINYBSD head/tools/tools/tinybsd/conf/default/TINYBSD head/tools/tools/tinybsd/conf/firewall/TINYBSD head/tools/tools/tinybsd/conf/vpn/TINYBSD head/tools/tools/tinybsd/conf/wireless/TINYBSD head/tools/tools/tinybsd/conf/wrap/TINYBSD head/usr.sbin/bsdconfig/share/device.subr Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Wed May 2 15:45:31 2018 (r333172) +++ head/ObsoleteFiles.inc Wed May 2 15:59:15 2018 (r333173) @@ -38,6 +38,8 @@ # xargs -n1 | sort | uniq -d; # done +# 20180502: retire ixgb +OLD_FILES+=usr/share/man/man4/ixgb.4.gz # 20180501: retire lmc OLD_FILES+=usr/include/dev/lmc/if_lmc.h OLD_DIRS+=usr/include/dev/lmc Modified: head/UPDATING ============================================================================== --- head/UPDATING Wed May 2 15:45:31 2018 (r333172) +++ head/UPDATING Wed May 2 15:59:15 2018 (r333173) @@ -51,6 +51,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW: ****************************** SPECIAL WARNING: ****************************** +20180502: + The ixgb(4) driver has been removed. This driver was for an early and + uncommon legacy PCI 10GbE for a single ASIC, Intel 82597EX. Intel + quickly shifted to the long lived ixgbe family. If you have device + ixgb in your kernel config file it must be removed. + 20180501: The lmc(4) driver has been removed. This was a WAN interface card that was already reportedly rare in 2003, and had an ambiguous Modified: head/share/man/man4/Makefile ============================================================================== --- head/share/man/man4/Makefile Wed May 2 15:45:31 2018 (r333172) +++ head/share/man/man4/Makefile Wed May 2 15:59:15 2018 (r333173) @@ -244,7 +244,6 @@ MAN= aac.4 \ iwmfw.4 \ iwn.4 \ iwnfw.4 \ - ixgb.4 \ ixgbe.4 \ ixl.4 \ ixlv.4 \ @@ -675,7 +674,6 @@ MLINKS+=ipw.4 if_ipw.4 MLINKS+=iwi.4 if_iwi.4 MLINKS+=iwm.4 if_iwm.4 MLINKS+=iwn.4 if_iwn.4 -MLINKS+=ixgb.4 if_ixgb.4 MLINKS+=ixgbe.4 ix.4 MLINKS+=ixgbe.4 if_ix.4 MLINKS+=ixgbe.4 if_ixgbe.4 Modified: head/share/man/man4/polling.4 ============================================================================== --- head/share/man/man4/polling.4 Wed May 2 15:45:31 2018 (r333172) +++ head/share/man/man4/polling.4 Wed May 2 15:59:15 2018 (r333173) @@ -185,7 +185,6 @@ As of this writing, the .Xr fwip 4 , .Xr fxp 4 , .Xr igb 4 , -.Xr ixgb 4 , .Xr nfe 4 , .Xr nge 4 , .Xr re 4 , Modified: head/share/man/man4/vlan.4 ============================================================================== --- head/share/man/man4/vlan.4 Wed May 2 15:45:31 2018 (r333172) +++ head/share/man/man4/vlan.4 Wed May 2 15:59:15 2018 (r333173) @@ -132,7 +132,6 @@ in hardware: .Xr cxgbe 4 , .Xr em 4 , .Xr igb 4 , -.Xr ixgb 4 , .Xr ixgbe 4 , .Xr jme 4 , .Xr liquidio 4 , Modified: head/sys/conf/NOTES ============================================================================== --- head/sys/conf/NOTES Wed May 2 15:45:31 2018 (r333172) +++ head/sys/conf/NOTES Wed May 2 15:59:15 2018 (r333173) @@ -2123,7 +2123,6 @@ device cxgbe # Chelsio T4-T6 1/10/25/40/100 Gigabit device cxgbev # Chelsio T4-T6 Virtual Functions device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel Pro/1000 Gigabit Ethernet -device ixgb # Intel Pro/10Gbe PCI-X Ethernet device ix # Intel Pro/10Gbe PCIE Ethernet device ixv # Intel Pro/10Gbe PCIE Ethernet VF device le # AMD Am7900 LANCE and Am79C9xx PCnet Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Wed May 2 15:45:31 2018 (r333172) +++ head/sys/conf/files Wed May 2 15:59:15 2018 (r333173) @@ -2264,9 +2264,6 @@ iwn6050.fw optional iwn6050fw | iwnfw \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn6050.fw" -dev/ixgb/if_ixgb.c optional ixgb -dev/ixgb/ixgb_ee.c optional ixgb -dev/ixgb/ixgb_hw.c optional ixgb dev/ixgbe/if_ix.c optional ix inet \ compile-with "${NORMAL_C} -I$S/dev/ixgbe -DSMP" dev/ixgbe/if_ixv.c optional ixv inet \ Modified: head/sys/i386/conf/GENERIC ============================================================================== --- head/sys/i386/conf/GENERIC Wed May 2 15:45:31 2018 (r333172) +++ head/sys/i386/conf/GENERIC Wed May 2 15:59:15 2018 (r333173) @@ -230,7 +230,6 @@ device puc # Multi I/O cards and multi-channel UART device bxe # Broadcom NetXtreme II BCM5771X/BCM578XX 10GbE device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 Gigabit Ethernet Family -device ixgb # Intel PRO/10GbE Ethernet Card device le # AMD Am7900 LANCE and Am79C9xx PCnet device ti # Alteon Networks Tigon I/II gigabit Ethernet device txp # 3Com 3cR990 (``Typhoon'') Modified: head/sys/modules/Makefile ============================================================================== --- head/sys/modules/Makefile Wed May 2 15:45:31 2018 (r333172) +++ head/sys/modules/Makefile Wed May 2 15:59:15 2018 (r333173) @@ -203,7 +203,6 @@ SUBDIR= \ ${_iwnfw} \ ${_ix} \ ${_ixv} \ - ${_ixgb} \ ${_ixl} \ ${_ixlv} \ jme \ @@ -666,7 +665,6 @@ _ipw= ipw _iwi= iwi _iwm= iwm _iwn= iwn -_ixgb= ixgb .if ${MK_SOURCELESS_UCODE} != "no" _ipwfw= ipwfw _iwifw= iwifw Modified: head/sys/netpfil/pf/pf.c ============================================================================== --- head/sys/netpfil/pf/pf.c Wed May 2 15:45:31 2018 (r333172) +++ head/sys/netpfil/pf/pf.c Wed May 2 15:59:15 2018 (r333173) @@ -5727,8 +5727,7 @@ bad: /* * FreeBSD supports cksum offloads for the following drivers. - * em(4), fxp(4), ixgb(4), lge(4), ndis(4), nge(4), re(4), - * ti(4), txp(4), xl(4) + * em(4), fxp(4), lge(4), ndis(4), nge(4), re(4), ti(4), txp(4), xl(4) * * CSUM_DATA_VALID | CSUM_PSEUDO_HDR : * network driver performed cksum including pseudo header, need to verify Modified: head/sys/sparc64/conf/GENERIC ============================================================================== --- head/sys/sparc64/conf/GENERIC Wed May 2 15:45:31 2018 (r333172) +++ head/sys/sparc64/conf/GENERIC Wed May 2 15:59:15 2018 (r333173) @@ -177,7 +177,6 @@ device uart # Multi-uart driver # PCI Ethernet NICs. #device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 adapter Gigabit Ethernet Card -#device ixgb # Intel PRO/10GbE Ethernet Card device le # AMD Am7900 LANCE and Am79C9xx PCnet device ti # Alteon Networks Tigon I/II gigabit Ethernet device txp # 3Com 3cR990 (``Typhoon'') Modified: head/tools/tools/tinybsd/conf/bridge/TINYBSD ============================================================================== --- head/tools/tools/tinybsd/conf/bridge/TINYBSD Wed May 2 15:45:31 2018 (r333172) +++ head/tools/tools/tinybsd/conf/bridge/TINYBSD Wed May 2 15:59:15 2018 (r333173) @@ -80,7 +80,6 @@ device sio # 8250, 16[45]50 based serial ports # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 adapter Gigabit Ethernet Card -device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') Modified: head/tools/tools/tinybsd/conf/default/TINYBSD ============================================================================== --- head/tools/tools/tinybsd/conf/default/TINYBSD Wed May 2 15:45:31 2018 (r333172) +++ head/tools/tools/tinybsd/conf/default/TINYBSD Wed May 2 15:59:15 2018 (r333173) @@ -90,7 +90,6 @@ device sio # 8250, 16[45]50 based serial ports # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 adapter Gigabit Ethernet Card -device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') Modified: head/tools/tools/tinybsd/conf/firewall/TINYBSD ============================================================================== --- head/tools/tools/tinybsd/conf/firewall/TINYBSD Wed May 2 15:45:31 2018 (r333172) +++ head/tools/tools/tinybsd/conf/firewall/TINYBSD Wed May 2 15:59:15 2018 (r333173) @@ -79,7 +79,6 @@ device sio # 8250, 16[45]50 based serial ports # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 adapter Gigabit Ethernet Card -device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') Modified: head/tools/tools/tinybsd/conf/vpn/TINYBSD ============================================================================== --- head/tools/tools/tinybsd/conf/vpn/TINYBSD Wed May 2 15:45:31 2018 (r333172) +++ head/tools/tools/tinybsd/conf/vpn/TINYBSD Wed May 2 15:59:15 2018 (r333173) @@ -80,7 +80,6 @@ device sio # 8250, 16[45]50 based serial ports # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 adapter Gigabit Ethernet Card -device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') Modified: head/tools/tools/tinybsd/conf/wireless/TINYBSD ============================================================================== --- head/tools/tools/tinybsd/conf/wireless/TINYBSD Wed May 2 15:45:31 2018 (r333172) +++ head/tools/tools/tinybsd/conf/wireless/TINYBSD Wed May 2 15:59:15 2018 (r333173) @@ -80,7 +80,6 @@ device sio # 8250, 16[45]50 based serial ports # PCI Ethernet NICs. #device de # DEC/Intel DC21x4x (``Tulip'') #device em # Intel PRO/1000 adapter Gigabit Ethernet Card -#device ixgb # Intel PRO/10GbE Ethernet Card #device txp # 3Com 3cR990 (``Typhoon'') #device vx # 3Com 3c590, 3c595 (``Vortex'') Modified: head/tools/tools/tinybsd/conf/wrap/TINYBSD ============================================================================== --- head/tools/tools/tinybsd/conf/wrap/TINYBSD Wed May 2 15:45:31 2018 (r333172) +++ head/tools/tools/tinybsd/conf/wrap/TINYBSD Wed May 2 15:59:15 2018 (r333173) @@ -48,7 +48,6 @@ device sio # 8250, 16[45]50 based serial ports # PCI Ethernet NICs. device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel PRO/1000 adapter Gigabit Ethernet Card -device ixgb # Intel PRO/10GbE Ethernet Card device txp # 3Com 3cR990 (``Typhoon'') device vx # 3Com 3c590, 3c595 (``Vortex'') Modified: head/usr.sbin/bsdconfig/share/device.subr ============================================================================== --- head/usr.sbin/bsdconfig/share/device.subr Wed May 2 15:45:31 2018 (r333172) +++ head/usr.sbin/bsdconfig/share/device.subr Wed May 2 15:59:15 2018 (r333173) @@ -1321,7 +1321,6 @@ f_network "ipw%d" "Intel PRO/Wireless 2100 IEEE 802. f_network "iwi%d" "Intel PRO/Wireless 2200BG/2225BG/2915ABG adapter" f_network "iwn%d" "Intel Wireless WiFi Link 4965AGN IEEE 802.11n adapter" f_network "ix%d" "Intel Etherexpress Ethernet card" -f_network "ixgb%d" "Intel(R) PRO/10Gb Ethernet card" f_network "ixgbe%d" "Intel(R) PRO/10Gb Ethernet card" f_network "jme%d" "JMicron JMC250 Gigabit/JMC260 Fast Ethernet" f_network "kue%d" "Kawasaki LSI USB Ethernet adapter" From owner-svn-src-head@freebsd.org Wed May 2 17:41:01 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BE63DFAFCF7; Wed, 2 May 2018 17:41:00 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6FB6973916; Wed, 2 May 2018 17:41:00 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6AA9F14272; Wed, 2 May 2018 17:41:00 +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 w42Hf0pB078874; Wed, 2 May 2018 17:41:00 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42Hf06u078873; Wed, 2 May 2018 17:41:00 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <201805021741.w42Hf06u078873@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Wed, 2 May 2018 17:41:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333174 - head/sys/amd64/vmm/io X-SVN-Group: head X-SVN-Commit-Author: grehan X-SVN-Commit-Paths: head/sys/amd64/vmm/io X-SVN-Commit-Revision: 333174 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 17:41:01 -0000 Author: grehan Date: Wed May 2 17:41:00 2018 New Revision: 333174 URL: https://svnweb.freebsd.org/changeset/base/333174 Log: Use PCI power-mgmt to reset a device if FLR fails. A large number of devices don't support PCIe FLR, in particular graphics adapters. Use PCI power management to perform the reset if FLR fails or isn't available, by cycling the device through the D3 state. This has been tested by a number of users with Nvidia and AMD GPUs. Submitted and tested by: Matt Macy Reviewed by: jhb, imp, rgrimes MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D15268 Modified: head/sys/amd64/vmm/io/ppt.c Modified: head/sys/amd64/vmm/io/ppt.c ============================================================================== --- head/sys/amd64/vmm/io/ppt.c Wed May 2 15:59:15 2018 (r333173) +++ head/sys/amd64/vmm/io/ppt.c Wed May 2 17:41:00 2018 (r333174) @@ -353,6 +353,30 @@ ppt_is_mmio(struct vm *vm, vm_paddr_t gpa) return (FALSE); } +static void +ppt_pci_reset(device_t dev) +{ + int ps; + + if (pcie_flr(dev, + max(pcie_get_max_completion_timeout(dev) / 1000, 10), + true)) + return; + + /* + * If FLR fails, attempt a power-management reset by cycling + * the device in/out of D3 state. + * PCI spec says we can only go into D3 state from D0 state. + * Transition from D[12] into D0 before going to D3 state. + */ + ps = pci_get_powerstate(dev); + if (ps != PCI_POWERSTATE_D0 && ps != PCI_POWERSTATE_D3) + pci_set_powerstate(dev, PCI_POWERSTATE_D0); + if (pci_get_powerstate(dev) != PCI_POWERSTATE_D3) + pci_set_powerstate(dev, PCI_POWERSTATE_D3); + pci_set_powerstate(dev, ps); +} + int ppt_assign_device(struct vm *vm, int bus, int slot, int func) { @@ -368,9 +392,7 @@ ppt_assign_device(struct vm *vm, int bus, int slot, in return (EBUSY); pci_save_state(ppt->dev); - pcie_flr(ppt->dev, - max(pcie_get_max_completion_timeout(ppt->dev) / 1000, 10), - true); + ppt_pci_reset(ppt->dev); pci_restore_state(ppt->dev); ppt->vm = vm; iommu_add_device(vm_iommu_domain(vm), pci_get_rid(ppt->dev)); @@ -393,9 +415,7 @@ ppt_unassign_device(struct vm *vm, int bus, int slot, return (EBUSY); pci_save_state(ppt->dev); - pcie_flr(ppt->dev, - max(pcie_get_max_completion_timeout(ppt->dev) / 1000, 10), - true); + ppt_pci_reset(ppt->dev); pci_restore_state(ppt->dev); ppt_unmap_mmio(vm, ppt); ppt_teardown_msi(ppt); From owner-svn-src-head@freebsd.org Wed May 2 18:19:11 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 854C4FB0C21; Wed, 2 May 2018 18:19:11 +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 EDC6D7BA6A; Wed, 2 May 2018 18:19:10 +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 w42IJ1vC032638; Wed, 2 May 2018 11:19:01 -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 w42IJ1uJ032637; Wed, 2 May 2018 11:19:01 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805021819.w42IJ1uJ032637@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333174 - head/sys/amd64/vmm/io In-Reply-To: <201805021741.w42Hf06u078873@repo.freebsd.org> To: Peter Grehan Date: Wed, 2 May 2018 11:19:01 -0700 (PDT) CC: 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.25 Precedence: list List-Id: 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, 02 May 2018 18:19:11 -0000 [ Charset UTF-8 unsupported, converting... ] > Author: grehan > Date: Wed May 2 17:41:00 2018 > New Revision: 333174 > URL: https://svnweb.freebsd.org/changeset/base/333174 > > Log: > Use PCI power-mgmt to reset a device if FLR fails. > > A large number of devices don't support PCIe FLR, in particular > graphics adapters. Use PCI power management to perform the > reset if FLR fails or isn't available, by cycling the device > through the D3 state. > > This has been tested by a number of users with Nvidia and AMD GPUs. > > Submitted and tested by: Matt Macy > Reviewed by: jhb, imp, rgrimes > MFC after: 3 weeks That places the MFC right before the optional 11.2 Beta3, I would rather see this "low risk" change merged before May 11th, the code freeze date and Beta1, if it is desired in 11.2, for maximal test exposure. > Differential Revision: https://reviews.freebsd.org/D15268 > > Modified: > head/sys/amd64/vmm/io/ppt.c > > Modified: head/sys/amd64/vmm/io/ppt.c > ============================================================================== > --- head/sys/amd64/vmm/io/ppt.c Wed May 2 15:59:15 2018 (r333173) > +++ head/sys/amd64/vmm/io/ppt.c Wed May 2 17:41:00 2018 (r333174) > @@ -353,6 +353,30 @@ ppt_is_mmio(struct vm *vm, vm_paddr_t gpa) > return (FALSE); > } > > +static void > +ppt_pci_reset(device_t dev) > +{ > + int ps; > + > + if (pcie_flr(dev, > + max(pcie_get_max_completion_timeout(dev) / 1000, 10), > + true)) > + return; > + > + /* > + * If FLR fails, attempt a power-management reset by cycling > + * the device in/out of D3 state. > + * PCI spec says we can only go into D3 state from D0 state. > + * Transition from D[12] into D0 before going to D3 state. > + */ > + ps = pci_get_powerstate(dev); > + if (ps != PCI_POWERSTATE_D0 && ps != PCI_POWERSTATE_D3) > + pci_set_powerstate(dev, PCI_POWERSTATE_D0); > + if (pci_get_powerstate(dev) != PCI_POWERSTATE_D3) > + pci_set_powerstate(dev, PCI_POWERSTATE_D3); > + pci_set_powerstate(dev, ps); > +} > + > int > ppt_assign_device(struct vm *vm, int bus, int slot, int func) > { > @@ -368,9 +392,7 @@ ppt_assign_device(struct vm *vm, int bus, int slot, in > return (EBUSY); > > pci_save_state(ppt->dev); > - pcie_flr(ppt->dev, > - max(pcie_get_max_completion_timeout(ppt->dev) / 1000, 10), > - true); > + ppt_pci_reset(ppt->dev); > pci_restore_state(ppt->dev); > ppt->vm = vm; > iommu_add_device(vm_iommu_domain(vm), pci_get_rid(ppt->dev)); > @@ -393,9 +415,7 @@ ppt_unassign_device(struct vm *vm, int bus, int slot, > return (EBUSY); > > pci_save_state(ppt->dev); > - pcie_flr(ppt->dev, > - max(pcie_get_max_completion_timeout(ppt->dev) / 1000, 10), > - true); > + ppt_pci_reset(ppt->dev); > pci_restore_state(ppt->dev); > ppt_unmap_mmio(vm, ppt); > ppt_teardown_msi(ppt); > > -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Wed May 2 18:20:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 67E25FB0CD4 for ; Wed, 2 May 2018 18:20:32 +0000 (UTC) (envelope-from grehan@freebsd.org) Received: from alto.onthenet.com.au (alto.OntheNet.com.au [203.13.68.12]) by mx1.freebsd.org (Postfix) with ESMTP id D442B7C51B for ; Wed, 2 May 2018 18:20:31 +0000 (UTC) (envelope-from grehan@freebsd.org) Received: from iredmail.onthenet.com.au (iredmail.onthenet.com.au [203.13.68.150]) by alto.onthenet.com.au (Postfix) with ESMTPS id 1E62A20B4C0C for ; Thu, 3 May 2018 04:20:28 +1000 (AEST) Received: from localhost (iredmail.onthenet.com.au [127.0.0.1]) by iredmail.onthenet.com.au (Postfix) with ESMTP id 0B98B281E28 for ; Thu, 3 May 2018 04:20:28 +1000 (AEST) X-Amavis-Modified: Mail body modified (using disclaimer) - iredmail.onthenet.com.au Received: from iredmail.onthenet.com.au ([127.0.0.1]) by localhost (iredmail.onthenet.com.au [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id HH0XzQJbyblg for ; Thu, 3 May 2018 04:20:27 +1000 (AEST) Received: from Peters-MacBook-Pro-2.local (c-67-180-92-13.hsd1.ca.comcast.net [67.180.92.13]) by iredmail.onthenet.com.au (Postfix) with ESMTPSA id E396728095D; Thu, 3 May 2018 04:20:25 +1000 (AEST) Subject: Re: svn commit: r333174 - head/sys/amd64/vmm/io To: rgrimes@freebsd.org Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org References: <201805021819.w42IJ1uJ032637@pdx.rh.CN85.dnsmgr.net> From: Peter Grehan Message-ID: <5d7b4e28-8a4f-60b4-3c48-1dc001af0546@freebsd.org> Date: Wed, 2 May 2018 11:20:22 -0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: <201805021819.w42IJ1uJ032637@pdx.rh.CN85.dnsmgr.net> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-CMAE-Score: 0 X-CMAE-Analysis: v=2.3 cv=dNCIZtRb c=1 sm=1 tr=0 a=A6CF0fG5TOl4vs6YHvqXgw==:117 a=5eVCmCvhg37cu/pjidAGzw==:17 a=IkcTkHD0fZMA:10 a=VUJBJC2UJ8kA:10 a=KWMsn1D1uy4xVnIIBOcA:9 a=QEXdDO2ut3YA:10 wl=host:3 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 02 May 2018 18:20:32 -0000 > That places the MFC right before the optional 11.2 Beta3, I would rather > see this "low risk" change merged before May 11th, the code freeze > date and Beta1, if it is desired in 11.2, for maximal test exposure. Sure, that can be done. later, Peter. From owner-svn-src-head@freebsd.org Wed May 2 19:36:31 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 38F3BFB243F; Wed, 2 May 2018 19:36:31 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DEB806DB60; Wed, 2 May 2018 19:36:30 +0000 (UTC) (envelope-from shurd@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D610D154BD; Wed, 2 May 2018 19:36:30 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42JaUWa039061; Wed, 2 May 2018 19:36:30 GMT (envelope-from shurd@FreeBSD.org) Received: (from shurd@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42JaTlq039053; Wed, 2 May 2018 19:36:29 GMT (envelope-from shurd@FreeBSD.org) Message-Id: <201805021936.w42JaTlq039053@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: shurd set sender to shurd@FreeBSD.org using -f From: Stephen Hurd Date: Wed, 2 May 2018 19:36:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys X-SVN-Group: head X-SVN-Commit-Author: shurd X-SVN-Commit-Paths: in head/sys: kern net netinet netinet6 sys X-SVN-Commit-Revision: 333175 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 19:36:31 -0000 Author: shurd Date: Wed May 2 19:36:29 2018 New Revision: 333175 URL: https://svnweb.freebsd.org/changeset/base/333175 Log: Separate list manipulation locking from state change in multicast Multicast incorrectly calls in to drivers with a mutex held causing drivers to have to go through all manner of contortions to use a non sleepable lock. Serialize multicast updates instead. Submitted by: mmacy Reviewed by: shurd, sbruno Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D14969 Modified: head/sys/kern/subr_gtaskqueue.c head/sys/kern/subr_witness.c head/sys/net/if.c head/sys/netinet/igmp.c head/sys/netinet/igmp_var.h head/sys/netinet/in.c head/sys/netinet/in_mcast.c head/sys/netinet/in_pcb.c head/sys/netinet/in_var.h head/sys/netinet/ip_carp.c head/sys/netinet6/in6.c head/sys/netinet6/in6_ifattach.c head/sys/netinet6/in6_mcast.c head/sys/netinet6/in6_pcb.c head/sys/netinet6/in6_var.h head/sys/netinet6/mld6.c head/sys/netinet6/mld6_var.h head/sys/sys/gtaskqueue.h Modified: head/sys/kern/subr_gtaskqueue.c ============================================================================== --- head/sys/kern/subr_gtaskqueue.c Wed May 2 17:41:00 2018 (r333174) +++ head/sys/kern/subr_gtaskqueue.c Wed May 2 19:36:29 2018 (r333175) @@ -53,6 +53,7 @@ static void gtaskqueue_thread_enqueue(void *); static void gtaskqueue_thread_loop(void *arg); TASKQGROUP_DEFINE(softirq, mp_ncpus, 1); +TASKQGROUP_DEFINE(config, 1, 1); struct gtaskqueue_busy { struct gtask *tb_running; @@ -662,7 +663,7 @@ SYSINIT(tqg_record_smp_started, SI_SUB_SMP, SI_ORDER_F void taskqgroup_attach(struct taskqgroup *qgroup, struct grouptask *gtask, - void *uniq, int irq, char *name) + void *uniq, int irq, const char *name) { cpuset_t mask; int qid, error; @@ -976,4 +977,13 @@ void taskqgroup_destroy(struct taskqgroup *qgroup) { +} + +void +taskqgroup_config_gtask_init(void *ctx, struct grouptask *gtask, gtask_fn_t *fn, + const char *name) +{ + + GROUPTASK_INIT(gtask, 0, fn, ctx); + taskqgroup_attach(qgroup_config, gtask, gtask, -1, name); } Modified: head/sys/kern/subr_witness.c ============================================================================== --- head/sys/kern/subr_witness.c Wed May 2 17:41:00 2018 (r333174) +++ head/sys/kern/subr_witness.c Wed May 2 19:36:29 2018 (r333175) @@ -532,18 +532,22 @@ static struct witness_order_list_entry order_lists[] = * IPv4 multicast: * protocol locks before interface locks, after UDP locks. */ + { "in_multi_sx", &lock_class_sx }, { "udpinp", &lock_class_rw }, - { "in_multi_mtx", &lock_class_mtx_sleep }, + { "in_multi_list_mtx", &lock_class_mtx_sleep }, { "igmp_mtx", &lock_class_mtx_sleep }, + { "ifnet_rw", &lock_class_rw }, { "if_addr_lock", &lock_class_rw }, { NULL, NULL }, /* * IPv6 multicast: * protocol locks before interface locks, after UDP locks. */ + { "in6_multi_sx", &lock_class_sx }, { "udpinp", &lock_class_rw }, - { "in6_multi_mtx", &lock_class_mtx_sleep }, + { "in6_multi_list_mtx", &lock_class_mtx_sleep }, { "mld_mtx", &lock_class_mtx_sleep }, + { "ifnet_rw", &lock_class_rw }, { "if_addr_lock", &lock_class_rw }, { NULL, NULL }, /* Modified: head/sys/net/if.c ============================================================================== --- head/sys/net/if.c Wed May 2 17:41:00 2018 (r333174) +++ head/sys/net/if.c Wed May 2 19:36:29 2018 (r333175) @@ -985,11 +985,13 @@ static void if_purgemaddrs(struct ifnet *ifp) { struct ifmultiaddr *ifma; - struct ifmultiaddr *next; IF_ADDR_WLOCK(ifp); - TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next) + while (!TAILQ_EMPTY(&ifp->if_multiaddrs)) { + ifma = TAILQ_FIRST(&ifp->if_multiaddrs); + TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link); if_delmulti_locked(ifp, ifma, 1); + } IF_ADDR_WUNLOCK(ifp); } @@ -3429,6 +3431,12 @@ if_addmulti(struct ifnet *ifp, struct sockaddr *sa, struct sockaddr_dl sdl; int error; +#ifdef INET + IN_MULTI_LIST_UNLOCK_ASSERT(); +#endif +#ifdef INET6 + IN6_MULTI_LIST_UNLOCK_ASSERT(); +#endif /* * If the address is already present, return a new reference to it; * otherwise, allocate storage and set up a new address. @@ -3610,6 +3618,9 @@ if_delmulti_ifma(struct ifmultiaddr *ifma) struct ifnet *ifp; int lastref; +#ifdef INET + IN_MULTI_LIST_UNLOCK_ASSERT(); +#endif ifp = ifma->ifma_ifp; #ifdef DIAGNOSTIC if (ifp == NULL) { @@ -3711,8 +3722,7 @@ if_delmulti_locked(struct ifnet *ifp, struct ifmultiad if_freemulti(ll_ifma); } } - - if (ifp != NULL) + if (ifp != NULL && detaching == 0) TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link); if_freemulti(ifma); Modified: head/sys/netinet/igmp.c ============================================================================== --- head/sys/netinet/igmp.c Wed May 2 17:41:00 2018 (r333174) +++ head/sys/netinet/igmp.c Wed May 2 19:36:29 2018 (r333175) @@ -136,7 +136,7 @@ static int igmp_v3_enqueue_group_record(struct mbufq * struct in_multi *, const int, const int, const int); static int igmp_v3_enqueue_filter_change(struct mbufq *, struct in_multi *); -static void igmp_v3_process_group_timers(struct igmp_ifsoftc *, +static void igmp_v3_process_group_timers(struct in_multi_head *, struct mbufq *, struct mbufq *, struct in_multi *, const int); static int igmp_v3_merge_state_changes(struct in_multi *, @@ -162,12 +162,12 @@ static const struct netisr_handler igmp_nh = { * themselves are not virtualized. * * Locking: - * * The permitted lock order is: IN_MULTI_LOCK, IGMP_LOCK, IF_ADDR_LOCK. + * * The permitted lock order is: IN_MULTI_LIST_LOCK, IGMP_LOCK, IF_ADDR_LOCK. * Any may be taken independently; if any are held at the same * time, the above lock order must be followed. * * All output is delegated to the netisr. * Now that Giant has been eliminated, the netisr may be inlined. - * * IN_MULTI_LOCK covers in_multi. + * * IN_MULTI_LIST_LOCK covers in_multi. * * IGMP_LOCK covers igmp_ifsoftc and any global variables in this file, * including the output queue. * * IF_ADDR_LOCK covers if_multiaddrs, which is used for a variety of @@ -441,7 +441,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) if (error) return (error); - IN_MULTI_LOCK(); + IN_MULTI_LIST_LOCK(); IGMP_LOCK(); if (name[0] <= 0 || name[0] > V_if_index) { @@ -475,7 +475,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) out_locked: IGMP_UNLOCK(); - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); return (error); } @@ -586,7 +586,6 @@ igi_alloc_locked(/*const*/ struct ifnet *ifp) igi->igi_qi = IGMP_QI_INIT; igi->igi_qri = IGMP_QRI_INIT; igi->igi_uri = IGMP_URI_INIT; - SLIST_INIT(&igi->igi_relinmhead); mbufq_init(&igi->igi_gq, IGMP_MAX_RESPONSE_PACKETS); LIST_INSERT_HEAD(&V_igi_head, igi, igi_link); @@ -612,11 +611,12 @@ igmp_ifdetach(struct ifnet *ifp) { struct igmp_ifsoftc *igi; struct ifmultiaddr *ifma; - struct in_multi *inm, *tinm; - + struct in_multi *inm; + struct in_multi_head inm_free_tmp; CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)", __func__, ifp, ifp->if_xname); + SLIST_INIT(&inm_free_tmp); IGMP_LOCK(); igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; @@ -631,24 +631,15 @@ igmp_ifdetach(struct ifnet *ifp) ("%s: ifma_protospec is NULL", __func__)); #endif inm = (struct in_multi *)ifma->ifma_protospec; - if (inm->inm_state == IGMP_LEAVING_MEMBER) { - SLIST_INSERT_HEAD(&igi->igi_relinmhead, - inm, inm_nrele); - } + if (inm->inm_state == IGMP_LEAVING_MEMBER) + inm_rele_locked(&inm_free_tmp, inm); inm_clear_recorded(inm); } IF_ADDR_RUNLOCK(ifp); - /* - * Free the in_multi reference(s) for this IGMP lifecycle. - */ - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele, - tinm) { - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele); - inm_release_locked(inm); - } + inm_release_list_deferred(&inm_free_tmp); } - IGMP_UNLOCK(); + } /* @@ -684,11 +675,6 @@ igi_delete_locked(const struct ifnet *ifp) mbufq_drain(&igi->igi_gq); LIST_REMOVE(igi, igi_link); - - KASSERT(SLIST_EMPTY(&igi->igi_relinmhead), - ("%s: there are dangling in_multi references", - __func__)); - free(igi, M_IGMP); return; } @@ -722,7 +708,7 @@ igmp_input_v1_query(struct ifnet *ifp, const struct ip } IGMPSTAT_INC(igps_rcv_gen_queries); - IN_MULTI_LOCK(); + IN_MULTI_LIST_LOCK(); IGMP_LOCK(); igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; @@ -778,7 +764,7 @@ igmp_input_v1_query(struct ifnet *ifp, const struct ip out_locked: IGMP_UNLOCK(); - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); return (0); } @@ -816,7 +802,7 @@ igmp_input_v2_query(struct ifnet *ifp, const struct ip IGMPSTAT_INC(igps_rcv_group_queries); } - IN_MULTI_LOCK(); + IN_MULTI_LIST_LOCK(); IGMP_LOCK(); igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; @@ -872,7 +858,7 @@ igmp_input_v2_query(struct ifnet *ifp, const struct ip out_locked: IGMP_UNLOCK(); - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); return (0); } @@ -899,7 +885,7 @@ igmp_v2_update_group(struct in_multi *inm, const int t CTR4(KTR_IGMPV3, "0x%08x: %s/%s timer=%d", __func__, ntohl(inm->inm_addr.s_addr), inm->inm_ifp->if_xname, timer); - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); switch (inm->inm_state) { case IGMP_NOT_MEMBER: @@ -1011,7 +997,7 @@ igmp_input_v3_query(struct ifnet *ifp, const struct ip IGMPSTAT_INC(igps_rcv_gsr_queries); } - IN_MULTI_LOCK(); + IN_MULTI_LIST_LOCK(); IGMP_LOCK(); igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; @@ -1092,7 +1078,7 @@ igmp_input_v3_query(struct ifnet *ifp, const struct ip out_locked: IGMP_UNLOCK(); - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); return (0); } @@ -1109,7 +1095,7 @@ igmp_input_v3_group_query(struct in_multi *inm, struct int retval; uint16_t nsrc; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); retval = 0; @@ -1246,7 +1232,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*const*/ stru * If we are a member of this group, and our membership should be * reported, stop our group timer and transition to the 'lazy' state. */ - IN_MULTI_LOCK(); + IN_MULTI_LIST_LOCK(); inm = inm_lookup(ifp, igmp->igmp_group); if (inm != NULL) { struct igmp_ifsoftc *igi; @@ -1305,7 +1291,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*const*/ stru } out_locked: - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); return (0); } @@ -1373,7 +1359,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*const*/ stru * reported, and our group timer is pending or about to be reset, * stop our group timer by transitioning to the 'lazy' state. */ - IN_MULTI_LOCK(); + IN_MULTI_LIST_LOCK(); inm = inm_lookup(ifp, igmp->igmp_group); if (inm != NULL) { struct igmp_ifsoftc *igi; @@ -1418,7 +1404,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*const*/ stru } out_locked: - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); return (0); } @@ -1647,6 +1633,7 @@ igmp_fasttimo_vnet(void) struct igmp_ifsoftc *igi; struct ifmultiaddr *ifma; struct in_multi *inm; + struct in_multi_head inm_free_tmp; int loop, uri_fasthz; loop = 0; @@ -1662,7 +1649,8 @@ igmp_fasttimo_vnet(void) !V_state_change_timers_running) return; - IN_MULTI_LOCK(); + SLIST_INIT(&inm_free_tmp); + IN_MULTI_LIST_LOCK(); IGMP_LOCK(); /* @@ -1720,7 +1708,7 @@ igmp_fasttimo_vnet(void) igi->igi_version); break; case IGMP_VERSION_3: - igmp_v3_process_group_timers(igi, &qrq, + igmp_v3_process_group_timers(&inm_free_tmp, &qrq, &scq, inm, uri_fasthz); break; } @@ -1728,8 +1716,6 @@ igmp_fasttimo_vnet(void) IF_ADDR_RUNLOCK(ifp); if (igi->igi_version == IGMP_VERSION_3) { - struct in_multi *tinm; - igmp_dispatch_queue(&qrq, 0, loop); igmp_dispatch_queue(&scq, 0, loop); @@ -1737,18 +1723,13 @@ igmp_fasttimo_vnet(void) * Free the in_multi reference(s) for this * IGMP lifecycle. */ - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, - inm_nrele, tinm) { - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, - inm_nrele); - inm_release_locked(inm); - } + inm_release_list_deferred(&inm_free_tmp); } } out_locked: IGMP_UNLOCK(); - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); } /* @@ -1760,7 +1741,7 @@ igmp_v1v2_process_group_timer(struct in_multi *inm, co { int report_timer_expired; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); if (inm->inm_timer == 0) { @@ -1802,14 +1783,14 @@ igmp_v1v2_process_group_timer(struct in_multi *inm, co * Note: Unlocked read from igi. */ static void -igmp_v3_process_group_timers(struct igmp_ifsoftc *igi, +igmp_v3_process_group_timers(struct in_multi_head *inmh, struct mbufq *qrq, struct mbufq *scq, struct in_multi *inm, const int uri_fasthz) { int query_response_timer_expired; int state_change_retransmit_timer_expired; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); query_response_timer_expired = 0; @@ -1907,8 +1888,7 @@ igmp_v3_process_group_timers(struct igmp_ifsoftc *igi, if (inm->inm_state == IGMP_LEAVING_MEMBER && inm->inm_scrv == 0) { inm->inm_state = IGMP_NOT_MEMBER; - SLIST_INSERT_HEAD(&igi->igi_relinmhead, - inm, inm_nrele); + inm_rele_locked(inmh, inm); } } break; @@ -1929,7 +1909,7 @@ static void igmp_v3_suppress_group_record(struct in_multi *inm) { - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); KASSERT(inm->inm_igi->igi_version == IGMP_VERSION_3, ("%s: not IGMPv3 mode on link", __func__)); @@ -2003,13 +1983,15 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoftc *igi) { struct ifmultiaddr *ifma; struct ifnet *ifp; - struct in_multi *inm, *tinm; + struct in_multi *inm; + struct in_multi_head inm_free_tmp; CTR3(KTR_IGMPV3, "%s: cancel v3 timers on ifp %p(%s)", __func__, igi->igi_ifp, igi->igi_ifp->if_xname); - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); + SLIST_INIT(&inm_free_tmp); /* * Stop the v3 General Query Response on this link stone dead. @@ -2050,7 +2032,7 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoftc *igi) * message is sent upstream to the old querier -- * transition to NOT would lose the leave and race. */ - SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_nrele); + inm_rele_locked(&inm_free_tmp, inm); /* FALLTHROUGH */ case IGMP_G_QUERY_PENDING_MEMBER: case IGMP_SG_QUERY_PENDING_MEMBER: @@ -2069,10 +2051,8 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoftc *igi) mbufq_drain(&inm->inm_scq); } IF_ADDR_RUNLOCK(ifp); - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele, tinm) { - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele); - inm_release_locked(inm); - } + + inm_release_list_deferred(&inm_free_tmp); } /* @@ -2199,7 +2179,7 @@ igmp_v1v2_queue_report(struct in_multi *inm, const int struct ip *ip; struct mbuf *m; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); ifp = inm->inm_ifp; @@ -2276,10 +2256,8 @@ igmp_change_state(struct in_multi *inm) struct ifnet *ifp; int error; - IN_MULTI_LOCK_ASSERT(); - error = 0; - + IN_MULTI_LOCK_ASSERT(); /* * Try to detect if the upper layer just asked us to change state * for an interface which has now gone away. @@ -2379,9 +2357,10 @@ igmp_initial_join(struct in_multi *inm, struct igmp_if * group around for the final INCLUDE {} enqueue. */ if (igi->igi_version == IGMP_VERSION_3 && - inm->inm_state == IGMP_LEAVING_MEMBER) - inm_release_locked(inm); - + inm->inm_state == IGMP_LEAVING_MEMBER) { + MPASS(inm->inm_refcount > 1); + inm_rele_locked(NULL, inm); + } inm->inm_state = IGMP_REPORTING_MEMBER; switch (igi->igi_version) { @@ -2473,7 +2452,7 @@ igmp_handle_state_change(struct in_multi *inm, struct ifp = inm->inm_ifp; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); KASSERT(igi && igi->igi_ifp == ifp, ("%s: inconsistent ifp", __func__)); @@ -2531,7 +2510,7 @@ igmp_final_leave(struct in_multi *inm, struct igmp_ifs __func__, ntohl(inm->inm_addr.s_addr), inm->inm_ifp, inm->inm_ifp->if_xname); - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); switch (inm->inm_state) { @@ -2658,7 +2637,7 @@ igmp_v3_enqueue_group_record(struct mbufq *mq, struct in_addr_t naddr; uint8_t mode; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); error = 0; ifp = inm->inm_ifp; @@ -3018,7 +2997,7 @@ igmp_v3_enqueue_filter_change(struct mbufq *mq, struct uint8_t mode, now, then; rectype_t crt, drt, nrt; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); if (inm->inm_nsrc == 0 || (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0)) @@ -3221,7 +3200,7 @@ igmp_v3_merge_state_changes(struct in_multi *inm, stru domerge = 0; recslen = 0; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); /* @@ -3320,7 +3299,7 @@ igmp_v3_dispatch_general_query(struct igmp_ifsoftc *ig struct in_multi *inm; int retval, loop; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IGMP_LOCK_ASSERT(); KASSERT(igi->igi_version == IGMP_VERSION_3, @@ -3632,7 +3611,6 @@ DB_SHOW_COMMAND(igi_list, db_show_igi_list) db_printf(" qi %u\n", igi->igi_qi); db_printf(" qri %u\n", igi->igi_qri); db_printf(" uri %u\n", igi->igi_uri); - /* SLIST_HEAD(,in_multi) igi_relinmhead */ /* struct mbufq igi_gq; */ db_printf("\n"); } Modified: head/sys/netinet/igmp_var.h ============================================================================== --- head/sys/netinet/igmp_var.h Wed May 2 17:41:00 2018 (r333174) +++ head/sys/netinet/igmp_var.h Wed May 2 19:36:29 2018 (r333175) @@ -214,7 +214,6 @@ struct igmp_ifsoftc { uint32_t igi_qi; /* IGMPv3 Query Interval (s) */ uint32_t igi_qri; /* IGMPv3 Query Response Interval (s) */ uint32_t igi_uri; /* IGMPv3 Unsolicited Report Interval (s) */ - SLIST_HEAD(,in_multi) igi_relinmhead; /* released groups */ struct mbufq igi_gq; /* general query responses queue */ }; Modified: head/sys/netinet/in.c ============================================================================== --- head/sys/netinet/in.c Wed May 2 17:41:00 2018 (r333174) +++ head/sys/netinet/in.c Wed May 2 19:36:29 2018 (r333175) @@ -632,12 +632,10 @@ in_difaddr_ioctl(u_long cmd, caddr_t data, struct ifne struct in_ifinfo *ii; ii = ((struct in_ifinfo *)ifp->if_afdata[AF_INET]); - IN_MULTI_LOCK(); if (ii->ii_allhosts) { - (void)in_leavegroup_locked(ii->ii_allhosts, NULL); + (void)in_leavegroup(ii->ii_allhosts, NULL); ii->ii_allhosts = NULL; } - IN_MULTI_UNLOCK(); } IF_ADDR_WLOCK(ifp); @@ -994,11 +992,12 @@ in_broadcast(struct in_addr in, struct ifnet *ifp) void in_ifdetach(struct ifnet *ifp) { - + IN_MULTI_LOCK(); in_pcbpurgeif0(&V_ripcbinfo, ifp); in_pcbpurgeif0(&V_udbinfo, ifp); in_pcbpurgeif0(&V_ulitecbinfo, ifp); in_purgemaddrs(ifp); + IN_MULTI_UNLOCK(); } /* @@ -1011,12 +1010,12 @@ in_ifdetach(struct ifnet *ifp) static void in_purgemaddrs(struct ifnet *ifp) { - LIST_HEAD(,in_multi) purgeinms; - struct in_multi *inm, *tinm; + struct in_multi_head purgeinms; + struct in_multi *inm; struct ifmultiaddr *ifma; - LIST_INIT(&purgeinms); - IN_MULTI_LOCK(); + SLIST_INIT(&purgeinms); + IN_MULTI_LIST_LOCK(); /* * Extract list of in_multi associated with the detaching ifp @@ -1034,17 +1033,13 @@ in_purgemaddrs(struct ifnet *ifp) ("%s: ifma_protospec is NULL", __func__)); #endif inm = (struct in_multi *)ifma->ifma_protospec; - LIST_INSERT_HEAD(&purgeinms, inm, inm_link); + inm_rele_locked(&purgeinms, inm); } IF_ADDR_RUNLOCK(ifp); - LIST_FOREACH_SAFE(inm, &purgeinms, inm_link, tinm) { - LIST_REMOVE(inm, inm_link); - inm_release_locked(inm); - } + inm_release_list_deferred(&purgeinms); igmp_ifdetach(ifp); - - IN_MULTI_UNLOCK(); + IN_MULTI_LIST_UNLOCK(); } struct in_llentry { Modified: head/sys/netinet/in_mcast.c ============================================================================== --- head/sys/netinet/in_mcast.c Wed May 2 17:41:00 2018 (r333174) +++ head/sys/netinet/in_mcast.c Wed May 2 19:36:29 2018 (r333175) @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -59,6 +60,8 @@ __FBSDID("$FreeBSD$"); #include #include +#include + #include #include #include @@ -91,18 +94,24 @@ static MALLOC_DEFINE(M_IPMSOURCE, "ip_msource", /* * Locking: - * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LOCK, IGMP_LOCK, IF_ADDR_LOCK. + * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LIST_LOCK, IGMP_LOCK, IF_ADDR_LOCK. * - The IF_ADDR_LOCK is implicitly taken by inm_lookup() earlier, however * it can be taken by code in net/if.c also. * - ip_moptions and in_mfilter are covered by the INP_WLOCK. * - * struct in_multi is covered by IN_MULTI_LOCK. There isn't strictly + * struct in_multi is covered by IN_MULTI_LIST_LOCK. There isn't strictly * any need for in_multi itself to be virtualized -- it is bound to an ifp * anyway no matter what happens. */ -struct mtx in_multi_mtx; -MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DEF); +struct mtx in_multi_list_mtx; +MTX_SYSINIT(in_multi_mtx, &in_multi_list_mtx, "in_multi_list_mtx", MTX_DEF); +struct mtx in_multi_free_mtx; +MTX_SYSINIT(in_multi_free_mtx, &in_multi_free_mtx, "in_multi_free_mtx", MTX_DEF); + +struct sx in_multi_sx; +SX_SYSINIT(in_multi_sx, &in_multi_sx, "in_multi_sx"); + /* * Functions with non-static linkage defined in this file should be * declared in in_var.h: @@ -151,6 +160,7 @@ static int inm_is_ifp_detached(const struct in_multi * static int inm_merge(struct in_multi *, /*const*/ struct in_mfilter *); static void inm_purge(struct in_multi *); static void inm_reap(struct in_multi *); +static void inm_release(struct in_multi *); static struct ip_moptions * inp_findmoptions(struct inpcb *); static void inp_freemoptions_internal(struct ip_moptions *); @@ -216,6 +226,65 @@ inm_is_ifp_detached(const struct in_multi *inm) } #endif +static struct grouptask free_gtask; +static struct in_multi_head inm_free_list; +static void inm_release_task(void *arg __unused); +static void inm_init(void) +{ + SLIST_INIT(&inm_free_list); + taskqgroup_config_gtask_init(NULL, &free_gtask, inm_release_task, "inm release task"); +} + +SYSINIT(inm_init, SI_SUB_SMP + 1, SI_ORDER_FIRST, + inm_init, NULL); + + +void +inm_release_list_deferred(struct in_multi_head *inmh) +{ + + if (SLIST_EMPTY(inmh)) + return; + mtx_lock(&in_multi_free_mtx); + SLIST_CONCAT(&inm_free_list, inmh, in_multi, inm_nrele); + mtx_unlock(&in_multi_free_mtx); + GROUPTASK_ENQUEUE(&free_gtask); +} + +void +inm_release_deferred(struct in_multi *inm) +{ + struct in_multi_head tmp; + + IN_MULTI_LIST_LOCK_ASSERT(); + MPASS(inm->inm_refcount > 0); + if (--inm->inm_refcount == 0) { + SLIST_INIT(&tmp); + inm->inm_ifma->ifma_protospec = NULL; + SLIST_INSERT_HEAD(&tmp, inm, inm_nrele); + inm_release_list_deferred(&tmp); + } +} + +static void +inm_release_task(void *arg __unused) +{ + struct in_multi_head inm_free_tmp; + struct in_multi *inm, *tinm; + + SLIST_INIT(&inm_free_tmp); + mtx_lock(&in_multi_free_mtx); + SLIST_CONCAT(&inm_free_tmp, &inm_free_list, in_multi, inm_nrele); + mtx_unlock(&in_multi_free_mtx); + IN_MULTI_LOCK(); + SLIST_FOREACH_SAFE(inm, &inm_free_tmp, inm_nrele, tinm) { + SLIST_REMOVE_HEAD(&inm_free_tmp, inm_nrele); + MPASS(inm); + inm_release(inm); + } + IN_MULTI_UNLOCK(); +} + /* * Initialize an in_mfilter structure to a known state at t0, t1 * with an empty source filter list. @@ -232,7 +301,7 @@ imf_init(struct in_mfilter *imf, const int st0, const /* * Function for looking up an in_multi record for an IPv4 multicast address * on a given interface. ifp must be valid. If no record found, return NULL. - * The IN_MULTI_LOCK and IF_ADDR_LOCK on ifp must be held. + * The IN_MULTI_LIST_LOCK and IF_ADDR_LOCK on ifp must be held. */ struct in_multi * inm_lookup_locked(struct ifnet *ifp, const struct in_addr ina) @@ -240,7 +309,7 @@ inm_lookup_locked(struct ifnet *ifp, const struct in_a struct ifmultiaddr *ifma; struct in_multi *inm; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IF_ADDR_LOCK_ASSERT(ifp); inm = NULL; @@ -264,7 +333,7 @@ inm_lookup(struct ifnet *ifp, const struct in_addr ina { struct in_multi *inm; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); IF_ADDR_RLOCK(ifp); inm = inm_lookup_locked(ifp, ina); IF_ADDR_RUNLOCK(ifp); @@ -451,7 +520,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g IN_MULTI_LOCK_ASSERT(); ii = (struct in_ifinfo *)ifp->if_afdata[AF_INET]; - + IN_MULTI_LIST_LOCK(); inm = inm_lookup(ifp, *group); if (inm != NULL) { /* @@ -460,11 +529,13 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g */ KASSERT(inm->inm_refcount >= 1, ("%s: bad refcount %d", __func__, inm->inm_refcount)); - ++inm->inm_refcount; + inm_acquire_locked(inm); *pinm = inm; - return (0); } - + IN_MULTI_LIST_UNLOCK(); + if (inm != NULL) + return (0); + memset(&gsin, 0, sizeof(gsin)); gsin.sin_family = AF_INET; gsin.sin_len = sizeof(struct sockaddr_in); @@ -479,6 +550,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g return (error); /* XXX ifma_protospec must be covered by IF_ADDR_LOCK */ + IN_MULTI_LIST_LOCK(); IF_ADDR_WLOCK(ifp); /* @@ -504,10 +576,9 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g __func__, ifma, inm, inet_ntoa_r(*group, addrbuf)); } #endif - ++inm->inm_refcount; + inm_acquire_locked(inm); *pinm = inm; - IF_ADDR_WUNLOCK(ifp); - return (0); + goto out_locked; } IF_ADDR_WLOCK_ASSERT(ifp); @@ -522,6 +593,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g inm = malloc(sizeof(*inm), M_IPMADDR, M_NOWAIT | M_ZERO); if (inm == NULL) { IF_ADDR_WUNLOCK(ifp); + IN_MULTI_LIST_UNLOCK(); if_delmulti_ifma(ifma); return (ENOMEM); } @@ -539,8 +611,9 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g ifma->ifma_protospec = inm; *pinm = inm; - + out_locked: IF_ADDR_WUNLOCK(ifp); + IN_MULTI_LIST_UNLOCK(); return (0); } @@ -550,36 +623,29 @@ in_getmulti(struct ifnet *ifp, const struct in_addr *g * If the refcount drops to 0, free the in_multi record and * delete the underlying link-layer membership. */ -void -inm_release_locked(struct in_multi *inm) +static void +inm_release(struct in_multi *inm) { struct ifmultiaddr *ifma; + struct ifnet *ifp; - IN_MULTI_LOCK_ASSERT(); - CTR2(KTR_IGMPV3, "%s: refcount is %d", __func__, inm->inm_refcount); - - if (--inm->inm_refcount > 0) { - CTR2(KTR_IGMPV3, "%s: refcount is now %d", __func__, - inm->inm_refcount); - return; - } - + MPASS(inm->inm_refcount == 0); CTR2(KTR_IGMPV3, "%s: freeing inm %p", __func__, inm); ifma = inm->inm_ifma; + ifp = inm->inm_ifp; /* XXX this access is not covered by IF_ADDR_LOCK */ CTR2(KTR_IGMPV3, "%s: purging ifma %p", __func__, ifma); - KASSERT(ifma->ifma_protospec == inm, - ("%s: ifma_protospec != inm", __func__)); - ifma->ifma_protospec = NULL; - + if (ifp) + CURVNET_SET(ifp->if_vnet); inm_purge(inm); - free(inm, M_IPMADDR); if_delmulti_ifma(ifma); + if (ifp) + CURVNET_RESTORE(); } /* @@ -592,7 +658,7 @@ inm_clear_recorded(struct in_multi *inm) { struct ip_msource *ims; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) { if (ims->ims_stp) { @@ -632,7 +698,7 @@ inm_record_source(struct in_multi *inm, const in_addr_ struct ip_msource find; struct ip_msource *ims, *nims; - IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_LOCK_ASSERT(); find.ims_haddr = ntohl(naddr); ims = RB_FIND(ip_msource_tree, &inm->inm_srcs, &find); @@ -959,6 +1025,7 @@ inm_merge(struct in_multi *inm, /*const*/ struct in_mf schanged = 0; error = 0; nsrc1 = nsrc0 = 0; + IN_MULTI_LIST_LOCK_ASSERT(); /* * Update the source filters first, as this may fail. @@ -1165,6 +1232,7 @@ in_joingroup_locked(struct ifnet *ifp, const struct in int error; IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_UNLOCK_ASSERT(); CTR4(KTR_IGMPV3, "%s: join 0x%08x on %p(%s))", __func__, ntohl(gina->s_addr), ifp, ifp->if_xname); @@ -1186,7 +1254,7 @@ in_joingroup_locked(struct ifnet *ifp, const struct in CTR1(KTR_IGMPV3, "%s: in_getmulti() failure", __func__); return (error); } - + IN_MULTI_LIST_LOCK(); CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); error = inm_merge(inm, imf); if (error) { @@ -1201,10 +1269,12 @@ in_joingroup_locked(struct ifnet *ifp, const struct in goto out_inm_release; } -out_inm_release: + out_inm_release: + IN_MULTI_LIST_UNLOCK(); if (error) { + CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); - inm_release_locked(inm); + inm_release_deferred(inm); } else { *pinm = inm; } @@ -1249,6 +1319,7 @@ in_leavegroup_locked(struct in_multi *inm, /*const*/ s error = 0; IN_MULTI_LOCK_ASSERT(); + IN_MULTI_LIST_UNLOCK_ASSERT(); CTR5(KTR_IGMPV3, "%s: leave inm %p, 0x%08x/%s, imf %p", __func__, inm, ntohl(inm->inm_addr.s_addr), @@ -1272,18 +1343,20 @@ in_leavegroup_locked(struct in_multi *inm, /*const*/ s * the transaction, it MUST NOT fail. */ CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); + IN_MULTI_LIST_LOCK(); error = inm_merge(inm, imf); KASSERT(error == 0, ("%s: failed to merge inm state", __func__)); CTR1(KTR_IGMPV3, "%s: doing igmp downcall", __func__); CURVNET_SET(inm->inm_ifp->if_vnet); error = igmp_change_state(inm); + inm_release_deferred(inm); + IN_MULTI_LIST_UNLOCK(); CURVNET_RESTORE(); if (error) CTR1(KTR_IGMPV3, "%s: failed igmp downcall", __func__); CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); - inm_release_locked(inm); return (error); } @@ -1315,18 +1388,6 @@ in_addmulti(struct in_addr *ap, struct ifnet *ifp) } /* - * Leave an IPv4 multicast group, assumed to be in exclusive (*,G) mode. - * This KPI is for legacy kernel consumers only. - */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Wed May 2 19:36:47 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2E3DBFB2473; Wed, 2 May 2018 19:36:47 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CC07F6DE2F; Wed, 2 May 2018 19:36:46 +0000 (UTC) (envelope-from tuexen@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C701F154BE; Wed, 2 May 2018 19:36:46 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42JakND039114; Wed, 2 May 2018 19:36:46 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42JakfN039113; Wed, 2 May 2018 19:36:46 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <201805021936.w42JakfN039113@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 2 May 2018 19:36:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333176 - head/usr.sbin/traceroute6 X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/usr.sbin/traceroute6 X-SVN-Commit-Revision: 333176 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 19:36:47 -0000 Author: tuexen Date: Wed May 2 19:36:46 2018 New Revision: 333176 URL: https://svnweb.freebsd.org/changeset/base/333176 Log: Fix in the documentation that the default hop limit is not 30, but the value of the sysctl variable net.inet6.ip6.hlim. This is true since https://svnweb.freebsd.org/base?view=revision&revision=122574 The default of 30 (which was correct up to r122574) was incorrectly documented in https://svnweb.freebsd.org/base?view=revision&revision=130268 Thanks to Timo Voelker for makeing me aware of the inconsistency between to code and the documentation. MFC after: 3 days Modified: head/usr.sbin/traceroute6/traceroute6.8 Modified: head/usr.sbin/traceroute6/traceroute6.8 ============================================================================== --- head/usr.sbin/traceroute6/traceroute6.8 Wed May 2 19:36:29 2018 (r333175) +++ head/usr.sbin/traceroute6/traceroute6.8 Wed May 2 19:36:46 2018 (r333176) @@ -29,7 +29,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 27, 2018 +.Dd May 2, 2018 .Dt TRACEROUTE6 8 .Os .\" @@ -112,7 +112,10 @@ is not specified, and only numeric addresses if is specified. .It Fl m Ar hoplimit Specify maximum hoplimit, up to 255. -The default is 30 hops. +The default is the value of the +.Va net.inet6.ip6.hlim +.Xr sysctl 8 +(the same default used for TCP connections). .It Fl n Do not resolve numeric address to hostname. .It Fl N From owner-svn-src-head@freebsd.org Wed May 2 20:04:26 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 11D0CFB2E63; Wed, 2 May 2018 20:04:26 +0000 (UTC) (envelope-from gonzo@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id BB8C975224; Wed, 2 May 2018 20:04:25 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B4EE315982; Wed, 2 May 2018 20:04:25 +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 w42K4PPI053664; Wed, 2 May 2018 20:04:25 GMT (envelope-from gonzo@FreeBSD.org) Received: (from gonzo@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42K4PMf053662; Wed, 2 May 2018 20:04:25 GMT (envelope-from gonzo@FreeBSD.org) Message-Id: <201805022004.w42K4PMf053662@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gonzo set sender to gonzo@FreeBSD.org using -f From: Oleksandr Tymoshenko Date: Wed, 2 May 2018 20:04:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333177 - head/sys/arm/broadcom/bcm2835 X-SVN-Group: head X-SVN-Commit-Author: gonzo X-SVN-Commit-Paths: head/sys/arm/broadcom/bcm2835 X-SVN-Commit-Revision: 333177 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 20:04:26 -0000 Author: gonzo Date: Wed May 2 20:04:25 2018 New Revision: 333177 URL: https://svnweb.freebsd.org/changeset/base/333177 Log: Unbreak RaspberryPi 2 boot after r332839 r332839 changed number of cells per interrupt for local_intc from 1 to 2 to pass type of IRQ. Driver expected only 1 cell so after r332839 all interrupt children of local_intc failed to allocate IRQ resource. Fix this regression by relaxing check for number of cells in interrupt property to be either 1 or 2. PR: 227904 Modified: head/sys/arm/broadcom/bcm2835/bcm2836.c Modified: head/sys/arm/broadcom/bcm2835/bcm2836.c ============================================================================== --- head/sys/arm/broadcom/bcm2835/bcm2836.c Wed May 2 19:36:46 2018 (r333176) +++ head/sys/arm/broadcom/bcm2835/bcm2836.c Wed May 2 20:04:25 2018 (r333177) @@ -454,8 +454,10 @@ bcm_lintc_map_intr(device_t dev, struct intr_map_data return (ENOTSUP); daf = (struct intr_map_data_fdt *)data; - if (daf->ncells != 1 || daf->cells[0] >= BCM_LINTC_NIRQS) + if (daf->ncells > 2 || daf->cells[0] >= BCM_LINTC_NIRQS) return (EINVAL); + + /* TODO: handle IRQ type here */ sc = device_get_softc(dev); *isrcp = &sc->bls_isrcs[daf->cells[0]].bli_isrc; From owner-svn-src-head@freebsd.org Wed May 2 20:04:36 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 35BB8FB2E94; Wed, 2 May 2018 20:04:36 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 375F9753DB; Wed, 2 May 2018 20:04:33 +0000 (UTC) (envelope-from tuexen@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 99A0A15984; Wed, 2 May 2018 20:04:32 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42K4WHP053728; Wed, 2 May 2018 20:04:32 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42K4WGL053727; Wed, 2 May 2018 20:04:32 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <201805022004.w42K4WGL053727@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 2 May 2018 20:04:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333178 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 333178 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 20:04:36 -0000 Author: tuexen Date: Wed May 2 20:04:31 2018 New Revision: 333178 URL: https://svnweb.freebsd.org/changeset/base/333178 Log: SImplify the call to tcp_drop(), since the handling of soft error is also done in tcp_drop(). No functional change. Sponsored by: Netflix, Inc. Modified: head/sys/netinet/tcp_timer.c Modified: head/sys/netinet/tcp_timer.c ============================================================================== --- head/sys/netinet/tcp_timer.c Wed May 2 20:04:25 2018 (r333177) +++ head/sys/netinet/tcp_timer.c Wed May 2 20:04:31 2018 (r333178) @@ -662,8 +662,7 @@ tcp_timer_rexmt(void * xtp) tcp_inpinfo_lock_del(inp, tp); goto out; } - tp = tcp_drop(tp, tp->t_softerror ? - tp->t_softerror : ETIMEDOUT); + tp = tcp_drop(tp, ETIMEDOUT); tcp_inpinfo_lock_del(inp, tp); goto out; } From owner-svn-src-head@freebsd.org Wed May 2 20:13:04 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EE76BFB32AA; Wed, 2 May 2018 20:13:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 99A6B7636E; Wed, 2 May 2018 20:13:03 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 91A5A15B40; Wed, 2 May 2018 20:13:03 +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 w42KD3YO058819; Wed, 2 May 2018 20:13:03 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42KD3s2058818; Wed, 2 May 2018 20:13:03 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201805022013.w42KD3s2058818@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Wed, 2 May 2018 20:13:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333180 - head/sys/dev/nvme X-SVN-Group: head X-SVN-Commit-Author: mav X-SVN-Commit-Paths: head/sys/dev/nvme X-SVN-Commit-Revision: 333180 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 20:13:04 -0000 Author: mav Date: Wed May 2 20:13:03 2018 New Revision: 333180 URL: https://svnweb.freebsd.org/changeset/base/333180 Log: Fix LOR between controller and queue locks. Admin pass-through requests took controller lock before the queue lock, but in case of request submission to a failed controller controller lock was taken after the queue lock. Fix that by reducing the lock scopes and switching to mtx_pool locks to track pass-through request completion. Sponsored by: iXsystems, Inc. Modified: head/sys/dev/nvme/nvme_ctrlr.c Modified: head/sys/dev/nvme/nvme_ctrlr.c ============================================================================== --- head/sys/dev/nvme/nvme_ctrlr.c Wed May 2 20:10:27 2018 (r333179) +++ head/sys/dev/nvme/nvme_ctrlr.c Wed May 2 20:13:03 2018 (r333180) @@ -233,11 +233,12 @@ nvme_ctrlr_fail_req_task(void *arg, int pending) struct nvme_request *req; mtx_lock(&ctrlr->lock); - while (!STAILQ_EMPTY(&ctrlr->fail_req)) { - req = STAILQ_FIRST(&ctrlr->fail_req); + while ((req = STAILQ_FIRST(&ctrlr->fail_req)) != NULL) { STAILQ_REMOVE_HEAD(&ctrlr->fail_req, stailq); + mtx_unlock(&ctrlr->lock); nvme_qpair_manual_complete_request(req->qpair, req, NVME_SCT_GENERIC, NVME_SC_ABORTED_BY_REQUEST, TRUE); + mtx_lock(&ctrlr->lock); } mtx_unlock(&ctrlr->lock); } @@ -978,6 +979,7 @@ static void nvme_pt_done(void *arg, const struct nvme_completion *cpl) { struct nvme_pt_command *pt = arg; + struct mtx *mtx = pt->driver_lock; uint16_t status; bzero(&pt->cpl, sizeof(pt->cpl)); @@ -987,9 +989,10 @@ nvme_pt_done(void *arg, const struct nvme_completion * status &= ~NVME_STATUS_P_MASK; pt->cpl.status = status; - mtx_lock(pt->driver_lock); + mtx_lock(mtx); + pt->driver_lock = NULL; wakeup(pt); - mtx_unlock(pt->driver_lock); + mtx_unlock(mtx); } int @@ -1058,15 +1061,7 @@ nvme_ctrlr_passthrough_cmd(struct nvme_controller *ctr req->cmd.nsid = htole32(nsid); - if (is_admin_cmd) - mtx = &ctrlr->lock; - else { - KASSERT((nsid-1) >= 0 && (nsid-1) < NVME_MAX_NAMESPACES, - ("%s: invalid namespace ID %d\n", __func__, nsid)); - mtx = &ctrlr->ns[nsid-1].lock; - } - - mtx_lock(mtx); + mtx = mtx_pool_find(mtxpool_sleep, pt); pt->driver_lock = mtx; if (is_admin_cmd) @@ -1074,10 +1069,10 @@ nvme_ctrlr_passthrough_cmd(struct nvme_controller *ctr else nvme_ctrlr_submit_io_request(ctrlr, req); - mtx_sleep(pt, mtx, PRIBIO, "nvme_pt", 0); + mtx_lock(mtx); + while (pt->driver_lock != NULL) + mtx_sleep(pt, mtx, PRIBIO, "nvme_pt", 0); mtx_unlock(mtx); - - pt->driver_lock = NULL; err: if (buf != NULL) { From owner-svn-src-head@freebsd.org Wed May 2 20:22:04 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 95874FB3619; Wed, 2 May 2018 20:22:04 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B7A779056; Wed, 2 May 2018 20:22:04 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 465B715CB1; Wed, 2 May 2018 20:22:04 +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 w42KM4rH063639; Wed, 2 May 2018 20:22:04 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42KM4UQ063638; Wed, 2 May 2018 20:22:04 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201805022022.w42KM4UQ063638@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Wed, 2 May 2018 20:22:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333182 - head/sys/dev/mlx5/mlx5_en X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: head/sys/dev/mlx5/mlx5_en X-SVN-Commit-Revision: 333182 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 20:22:04 -0000 Author: kib Date: Wed May 2 20:22:03 2018 New Revision: 333182 URL: https://svnweb.freebsd.org/changeset/base/333182 Log: mlx5en: Always allow VLAN id 0. According to the 802.1Q-2014 9.6 VLAN Tag Control Information, VID value 0 means that there is no VLAN tag assigned to the packet, and only PCP and DEI values from the tag are meaningful. Current flow table programming filter out such packets. When programming VLAN filter for flow table, unconditionally add rule which accept packets with VLAN id 0. The packets are already handled correctly by the network stack. Reviewed by: hselasky, slavash Sponsored by: Mellanox Technologies MFC after: 1 week Modified: head/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Modified: head/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c ============================================================================== --- head/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Wed May 2 20:15:02 2018 (r333181) +++ head/sys/dev/mlx5/mlx5_en/mlx5_en_flow_table.c Wed May 2 20:22:03 2018 (r333182) @@ -696,6 +696,7 @@ mlx5e_add_all_vlan_rules(struct mlx5e_priv *priv) int err; int i; + set_bit(0, priv->vlan.active_vlans); for_each_set_bit(i, priv->vlan.active_vlans, VLAN_N_VID) { err = mlx5e_add_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_MATCH_VID, i); @@ -727,6 +728,7 @@ mlx5e_del_all_vlan_rules(struct mlx5e_priv *priv) for_each_set_bit(i, priv->vlan.active_vlans, VLAN_N_VID) mlx5e_del_vlan_rule(priv, MLX5E_VLAN_RULE_TYPE_MATCH_VID, i); + clear_bit(0, priv->vlan.active_vlans); } #define mlx5e_for_each_hash_node(hn, tmp, hash, i) \ From owner-svn-src-head@freebsd.org Wed May 2 20:36:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CA411FB3D1A; Wed, 2 May 2018 20:36:12 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2E8097BB40; Wed, 2 May 2018 20:36:12 +0000 (UTC) (envelope-from rmacklem@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2543C15E7E; Wed, 2 May 2018 20:36:12 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42KaBC6070045; Wed, 2 May 2018 20:36:11 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42KaBw8070044; Wed, 2 May 2018 20:36:11 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805022036.w42KaBw8070044@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Wed, 2 May 2018 20:36:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333183 - head/sys/fs/nfsserver X-SVN-Group: head X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: head/sys/fs/nfsserver X-SVN-Commit-Revision: 333183 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 20:36:13 -0000 Author: rmacklem Date: Wed May 2 20:36:11 2018 New Revision: 333183 URL: https://svnweb.freebsd.org/changeset/base/333183 Log: Add two missing LIST_INIT()s. This patch adds two missing LIST_INIT()s. Found by inspection. In practice, these are currently no-ops, since the structure they are in is malloc'd with M_ZERO and all LIST_INIT does is set the pointer in the list head to NULL. (In other words, the M_ZERO has already correctly initialized it.) MFC after: 2 months Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- head/sys/fs/nfsserver/nfs_nfsdstate.c Wed May 2 20:22:03 2018 (r333182) +++ head/sys/fs/nfsserver/nfs_nfsdstate.c Wed May 2 20:36:11 2018 (r333183) @@ -387,6 +387,7 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsc LIST_FOREACH(tstp, &new_clp->lc_stateid[i], ls_hash) tstp->ls_clp = new_clp; } + LIST_INIT(&new_clp->lc_session); LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); nfsstatsv1.srvclients++; @@ -451,6 +452,7 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsc LIST_FOREACH(tstp, &new_clp->lc_stateid[i], ls_hash) tstp->ls_clp = new_clp; } + LIST_INIT(&new_clp->lc_session); LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); nfsstatsv1.srvclients++; From owner-svn-src-head@freebsd.org Wed May 2 21:29:43 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 490E9FB4EB9; Wed, 2 May 2018 21:29:43 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DE1166A04C; Wed, 2 May 2018 21:29:42 +0000 (UTC) (envelope-from rmacklem@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CAF61166B7; Wed, 2 May 2018 21:29:42 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42LTgbx096040; Wed, 2 May 2018 21:29:42 GMT (envelope-from rmacklem@FreeBSD.org) Received: (from rmacklem@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42LTgEn096039; Wed, 2 May 2018 21:29:42 GMT (envelope-from rmacklem@FreeBSD.org) Message-Id: <201805022129.w42LTgEn096039@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rmacklem set sender to rmacklem@FreeBSD.org using -f From: Rick Macklem Date: Wed, 2 May 2018 21:29:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333184 - head/sys/fs/nfsserver X-SVN-Group: head X-SVN-Commit-Author: rmacklem X-SVN-Commit-Paths: head/sys/fs/nfsserver X-SVN-Commit-Revision: 333184 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 21:29:43 -0000 Author: rmacklem Date: Wed May 2 21:29:42 2018 New Revision: 333184 URL: https://svnweb.freebsd.org/changeset/base/333184 Log: Revert r333183, since I am not sure that just initializing the list is the correct thing to do and that is already done without this commit. Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c Modified: head/sys/fs/nfsserver/nfs_nfsdstate.c ============================================================================== --- head/sys/fs/nfsserver/nfs_nfsdstate.c Wed May 2 20:36:11 2018 (r333183) +++ head/sys/fs/nfsserver/nfs_nfsdstate.c Wed May 2 21:29:42 2018 (r333184) @@ -387,7 +387,6 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsc LIST_FOREACH(tstp, &new_clp->lc_stateid[i], ls_hash) tstp->ls_clp = new_clp; } - LIST_INIT(&new_clp->lc_session); LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); nfsstatsv1.srvclients++; @@ -452,7 +451,6 @@ nfsrv_setclient(struct nfsrv_descript *nd, struct nfsc LIST_FOREACH(tstp, &new_clp->lc_stateid[i], ls_hash) tstp->ls_clp = new_clp; } - LIST_INIT(&new_clp->lc_session); LIST_INSERT_HEAD(NFSCLIENTHASH(new_clp->lc_clientid), new_clp, lc_hash); nfsstatsv1.srvclients++; From owner-svn-src-head@freebsd.org Wed May 2 21:32:20 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A5F4BFB50BF; Wed, 2 May 2018 21:32:20 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 53B196A3FF; Wed, 2 May 2018 21:32:20 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4EB9116835; Wed, 2 May 2018 21:32:20 +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 w42LWKgO098587; Wed, 2 May 2018 21:32:20 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42LWKCJ098586; Wed, 2 May 2018 21:32:20 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201805022132.w42LWKCJ098586@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Wed, 2 May 2018 21:32:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333185 - in head: . sys/modules/ixgb X-SVN-Group: head X-SVN-Commit-Author: sbruno X-SVN-Commit-Paths: in head: . sys/modules/ixgb X-SVN-Commit-Revision: 333185 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 21:32:20 -0000 Author: sbruno Date: Wed May 2 21:32:20 2018 New Revision: 333185 URL: https://svnweb.freebsd.org/changeset/base/333185 Log: Follow up to r333173, Retire ixgb(4) Remove sys/modules/ixgb and add the linked man page for if_ixgb via ObsoleteFiles. Submitted by: kbowling Relnotes: yes Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D15273 Deleted: head/sys/modules/ixgb/ Modified: head/ObsoleteFiles.inc Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Wed May 2 21:29:42 2018 (r333184) +++ head/ObsoleteFiles.inc Wed May 2 21:32:20 2018 (r333185) @@ -39,6 +39,7 @@ # done # 20180502: retire ixgb +OLD_FILES+=usr/share/man/man4/if_ixgb.4.gz OLD_FILES+=usr/share/man/man4/ixgb.4.gz # 20180501: retire lmc OLD_FILES+=usr/include/dev/lmc/if_lmc.h From owner-svn-src-head@freebsd.org Wed May 2 22:11:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8D679FB5D73; Wed, 2 May 2018 22:11:17 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3AE7A71D21; Wed, 2 May 2018 22:11:17 +0000 (UTC) (envelope-from tuexen@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3241616D50; Wed, 2 May 2018 22:11:17 +0000 (UTC) (envelope-from tuexen@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w42MBHvh017057; Wed, 2 May 2018 22:11:17 GMT (envelope-from tuexen@FreeBSD.org) Received: (from tuexen@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42MBHnO017056; Wed, 2 May 2018 22:11:17 GMT (envelope-from tuexen@FreeBSD.org) Message-Id: <201805022211.w42MBHnO017056@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: tuexen set sender to tuexen@FreeBSD.org using -f From: Michael Tuexen Date: Wed, 2 May 2018 22:11:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333186 - head/sys/netinet6 X-SVN-Group: head X-SVN-Commit-Author: tuexen X-SVN-Commit-Paths: head/sys/netinet6 X-SVN-Commit-Revision: 333186 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 22:11:17 -0000 Author: tuexen Date: Wed May 2 22:11:16 2018 New Revision: 333186 URL: https://svnweb.freebsd.org/changeset/base/333186 Log: Send an ICMPv6 PacketTooBig message in case of forwading a packet which is too big for the outgoing interface and no firewall is involed. This problem was introduced in https://svnweb.freebsd.org/changeset/base/324996 Thanks to Irene Ruengeler for finding the bug and testing the fix. Reviewed by: kp@ MFC after: 3 days Modified: head/sys/netinet6/ip6_fastfwd.c Modified: head/sys/netinet6/ip6_fastfwd.c ============================================================================== --- head/sys/netinet6/ip6_fastfwd.c Wed May 2 21:32:20 2018 (r333185) +++ head/sys/netinet6/ip6_fastfwd.c Wed May 2 22:11:16 2018 (r333186) @@ -195,12 +195,19 @@ passin: in6_ifstat_inc(rcvif, ifs6_in_noroute); goto dropin; } + if (!PFIL_HOOKED(&V_inet6_pfil_hook)) { + if (m->m_pkthdr.len > nh.nh_mtu) { + in6_ifstat_inc(nh.nh_ifp, ifs6_in_toobig); + icmp6_error(m, ICMP6_PACKET_TOO_BIG, 0, nh.nh_mtu); + m = NULL; + goto dropout; + } + goto passout; + } /* * Outgoing packet firewall processing. */ - if (!PFIL_HOOKED(&V_inet6_pfil_hook)) - goto passout; if (pfil_run_hooks(&V_inet6_pfil_hook, &m, nh.nh_ifp, PFIL_OUT, PFIL_FWD, NULL) != 0 || m == NULL) goto dropout; From owner-svn-src-head@freebsd.org Wed May 2 23:43:34 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5A126FB7AA0; Wed, 2 May 2018 23:43:34 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0C1CE859E8; Wed, 2 May 2018 23:43:34 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 071E017CF9; Wed, 2 May 2018 23:43:34 +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 w42NhXXg066355; Wed, 2 May 2018 23:43:33 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w42NhXow066354; Wed, 2 May 2018 23:43:33 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201805022343.w42NhXow066354@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Wed, 2 May 2018 23:43:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333188 - head/share/mk X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/share/mk X-SVN-Commit-Revision: 333188 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 02 May 2018 23:43:34 -0000 Author: emaste Date: Wed May 2 23:43:33 2018 New Revision: 333188 URL: https://svnweb.freebsd.org/changeset/base/333188 Log: Build lld as long as we have a C++11 host compiler As with Clang, build our toolchain components by default when the host compiler is capable of doing so, to make them available for testing and experimentation. Sponsored by: The FreeBSD Foundation Modified: head/share/mk/src.opts.mk Modified: head/share/mk/src.opts.mk ============================================================================== --- head/share/mk/src.opts.mk Wed May 2 22:36:10 2018 (r333187) +++ head/share/mk/src.opts.mk Wed May 2 23:43:33 2018 (r333188) @@ -242,8 +242,8 @@ __DEFAULT_NO_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX GPL_DTC # If an external compiler that supports C++11 is used as ${CC} and Clang # supports the target, then Clang is enabled but GCC is installed as the # default /usr/bin/cc. -__DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL GCC GCC_BOOTSTRAP GNUCXX GPL_DTC -__DEFAULT_NO_OPTIONS+=CLANG_BOOTSTRAP CLANG_IS_CC LLD +__DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL GCC GCC_BOOTSTRAP GNUCXX GPL_DTC LLD +__DEFAULT_NO_OPTIONS+=CLANG_BOOTSTRAP CLANG_IS_CC .else # Everything else disables Clang, and uses GCC instead. __DEFAULT_YES_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX GPL_DTC From owner-svn-src-head@freebsd.org Thu May 3 00:57:20 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 45203FB91C6; Thu, 3 May 2018 00:57:20 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E606274B90; Thu, 3 May 2018 00:57:19 +0000 (UTC) (envelope-from eadler@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DEAAB18834; Thu, 3 May 2018 00:57:19 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w430vJid001835; Thu, 3 May 2018 00:57:19 GMT (envelope-from eadler@FreeBSD.org) Received: (from eadler@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w430vJmk001834; Thu, 3 May 2018 00:57:19 GMT (envelope-from eadler@FreeBSD.org) Message-Id: <201805030057.w430vJmk001834@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eadler set sender to eadler@FreeBSD.org using -f From: Eitan Adler Date: Thu, 3 May 2018 00:57:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333189 - head/etc X-SVN-Group: head X-SVN-Commit-Author: eadler X-SVN-Commit-Paths: head/etc X-SVN-Commit-Revision: 333189 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 00:57:20 -0000 Author: eadler Date: Thu May 3 00:57:19 2018 New Revision: 333189 URL: https://svnweb.freebsd.org/changeset/base/333189 Log: [etc] Update newsyslog.conf default comment Remove line about allowed flags. It was missing 'pRTY' and is duplicative of the man page. It didn't describe the flags in any detail to help remind users of how to configure newsylog. Modified: head/etc/newsyslog.conf Modified: head/etc/newsyslog.conf ============================================================================== --- head/etc/newsyslog.conf Wed May 2 23:43:33 2018 (r333188) +++ head/etc/newsyslog.conf Thu May 3 00:57:19 2018 (r333189) @@ -8,8 +8,6 @@ # is no process which needs to be signalled when a given log file is # rotated, then the entry for that file should include the 'N' flag. # -# The 'flags' field is one or more of the letters: BCDGJNUXZ or a '-'. -# # Note: some sites will want to select more restrictive protections than the # defaults. In particular, it may be desirable to switch many of the 644 # entries to 640 or 600. For example, some sites will consider the From owner-svn-src-head@freebsd.org Thu May 3 01:10:42 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2B645FB95EA; Thu, 3 May 2018 01:10:42 +0000 (UTC) (envelope-from mw@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CE30176D0E; Thu, 3 May 2018 01:10:41 +0000 (UTC) (envelope-from mw@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C9038189FE; Thu, 3 May 2018 01:10:41 +0000 (UTC) (envelope-from mw@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w431AfnK007904; Thu, 3 May 2018 01:10:41 GMT (envelope-from mw@FreeBSD.org) Received: (from mw@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w431AfkW007903; Thu, 3 May 2018 01:10:41 GMT (envelope-from mw@FreeBSD.org) Message-Id: <201805030110.w431AfkW007903@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mw set sender to mw@FreeBSD.org using -f From: Marcin Wojtas Date: Thu, 3 May 2018 01:10:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333190 - head/sys/arm/mv X-SVN-Group: head X-SVN-Commit-Author: mw X-SVN-Commit-Paths: head/sys/arm/mv X-SVN-Commit-Revision: 333190 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 01:10:42 -0000 Author: mw Date: Thu May 3 01:10:41 2018 New Revision: 333190 URL: https://svnweb.freebsd.org/changeset/base/333190 Log: Fix SoC identification issue on Marvell platforms Marvell SoC identification function was called by SYSINIT on all armv7 platforms, which brakes platforms other than Marvell built with GENERIC config. Fix this by shifting SoC identifying to Marvell platform initialization. Submitted by: Patryk Duda Reviewed by: manu Tested by: manu Obtained from: Semihalf Sponsored by: Stormshield Modified: head/sys/arm/mv/mv_common.c Modified: head/sys/arm/mv/mv_common.c ============================================================================== --- head/sys/arm/mv/mv_common.c Thu May 3 00:57:19 2018 (r333189) +++ head/sys/arm/mv/mv_common.c Thu May 3 01:10:41 2018 (r333190) @@ -180,6 +180,8 @@ static int fdt_win_setup(void); static int fdt_win_process_child(phandle_t, struct soc_node_spec *, const char*); +static void soc_identify(uint32_t, uint32_t); + static uint32_t dev_mask = 0; static int cpu_wins_no = 0; static int eth_port = 0; @@ -441,13 +443,13 @@ mv_check_soc_family() case MV_DEV_MV78460: soc_decode_win_spec = &decode_win_specs[MV_SOC_ARMADA_XP]; soc_family = MV_SOC_ARMADA_XP; - return (MV_SOC_ARMADA_XP); + break; case MV_DEV_88F6828: case MV_DEV_88F6820: case MV_DEV_88F6810: soc_decode_win_spec = &decode_win_specs[MV_SOC_ARMADA_38X]; soc_family = MV_SOC_ARMADA_38X; - return (MV_SOC_ARMADA_38X); + break; case MV_DEV_88F5181: case MV_DEV_88F5182: case MV_DEV_88F5281: @@ -462,11 +464,15 @@ mv_check_soc_family() case MV_DEV_MV78160: soc_decode_win_spec = &decode_win_specs[MV_SOC_ARMV5]; soc_family = MV_SOC_ARMV5; - return (MV_SOC_ARMV5); + break; default: soc_family = MV_SOC_UNSUPPORTED; return (MV_SOC_UNSUPPORTED); } + + soc_identify(dev, rev); + + return (soc_family); } static __inline void @@ -702,14 +708,12 @@ soc_id(uint32_t *dev, uint32_t *rev) } static void -soc_identify(void) +soc_identify(uint32_t d, uint32_t r) { - uint32_t d, r, size, mode, freq; + uint32_t size, mode, freq; const char *dev; const char *rev; - soc_id(&d, &r); - printf("SOC: "); if (bootverbose) printf("(0x%4x:0x%02x) ", d, r); @@ -827,20 +831,6 @@ soc_identify(void) break; } } - -static void -platform_identify(void *dummy) -{ - - soc_identify(); - - /* - * XXX Board identification e.g. read out from FPGA or similar should - * go here - */ -} -SYSINIT(platform_identify, SI_SUB_CPU, SI_ORDER_SECOND, platform_identify, - NULL); #ifdef KDB static void From owner-svn-src-head@freebsd.org Thu May 3 01:23:43 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1E69EFBA6C3; Thu, 3 May 2018 01:23:43 +0000 (UTC) (envelope-from mw@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C50927A02C; Thu, 3 May 2018 01:23:42 +0000 (UTC) (envelope-from mw@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A63BC18D5B; Thu, 3 May 2018 01:23:42 +0000 (UTC) (envelope-from mw@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w431Ng4e016878; Thu, 3 May 2018 01:23:42 GMT (envelope-from mw@FreeBSD.org) Received: (from mw@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w431Ngm8016877; Thu, 3 May 2018 01:23:42 GMT (envelope-from mw@FreeBSD.org) Message-Id: <201805030123.w431Ngm8016877@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mw set sender to mw@FreeBSD.org using -f From: Marcin Wojtas Date: Thu, 3 May 2018 01:23:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333191 - head/sys/arm/conf X-SVN-Group: head X-SVN-Commit-Author: mw X-SVN-Commit-Paths: head/sys/arm/conf X-SVN-Commit-Revision: 333191 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 01:23:43 -0000 Author: mw Date: Thu May 3 01:23:42 2018 New Revision: 333191 URL: https://svnweb.freebsd.org/changeset/base/333191 Log: Add Marvell ArmadaXP and Armada38X to GENERIC config Include source files and drivers for Marvell ArmadaXP and Armada38X in GENERIC kernel config. Submitted by: Michal Mazur Rafal Kozik Reviewed by: manu Tested by: manu Obtained from: Semihalf Sponsored by: Stormshield Modified: head/sys/arm/conf/GENERIC Modified: head/sys/arm/conf/GENERIC ============================================================================== --- head/sys/arm/conf/GENERIC Thu May 3 01:10:41 2018 (r333190) +++ head/sys/arm/conf/GENERIC Thu May 3 01:23:42 2018 (r333191) @@ -21,6 +21,7 @@ ident GENERIC cpu CPU_CORTEXA +cpu CPU_MV_PJ4B options SMP_ON_UP machine arm armv7 makeoptions CONF_CFLAGS="-march=armv7a" @@ -38,6 +39,7 @@ files "../allwinner/h3/files.h3" files "../broadcom/bcm2835/files.bcm2836" files "../broadcom/bcm2835/files.bcm283x" files "../freescale/imx/files.imx6" +files "../mv/files.arm7" files "../nvidia/tegra124/files.tegra124" files "../qemu/files.qemu" files "../ti/files.ti" @@ -55,6 +57,8 @@ options SOC_ALLWINNER_A83T options SOC_ALLWINNER_H2PLUS options SOC_ALLWINNER_H3 options SOC_BCM2836 +options SOC_MV_ARMADA38X +options SOC_MV_ARMADAXP options SOC_TI_AM335X options SOC_OMAP4 @@ -185,9 +189,10 @@ device pass # Passthrough device (direct ATA/SCSI a # USB support options USB_HOST_ALIGN=64 # Align usb buffers to cache line size. device usb -#device uhci +device uhci device ohci device ehci +device xhci device dwcotg # DWC OTG controller device musb @@ -196,6 +201,8 @@ device umass # Disks/Mass storage - Requires scbus device uhid # "Human Interface Devices" device ukbd # Allow keyboard like HIDs to control console +device firmware + # Device mode support device usb_template # Control of the gadget @@ -204,6 +211,10 @@ device loop device ether device vlan # 802.1Q VLAN support device bpf +device mii +device mdio +device etherswitch +device e6000sw # Ethernet NICs that use the common MII bus controller code. # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs! @@ -215,6 +226,7 @@ device cgem # Zynq-7000 gig ethernet device device dwc # 10/100/1000 integrated GMAC controller device emac # 10/100 integrated EMAC controller device ffec # Freescale Fast Ethernet Controller +device neta # Marvell 10/100/1000 Network controller device smsc # SMSC LAN91C111 # Sound support @@ -243,6 +255,11 @@ device ti_sdma # Extensible Firmware Interface options EFI + +# Marvell Cryptographic Engine and Security Accelerator +device cesa +device crypto +device cryptodev # Flattened Device Tree options FDT # Configure using FDT/DTB data From owner-svn-src-head@freebsd.org Thu May 3 02:42:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CAA49FBE27F; Thu, 3 May 2018 02:42:13 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 781CF6F271; Thu, 3 May 2018 02:42:13 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7304419A30; Thu, 3 May 2018 02:42:13 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w432gD7r057033; Thu, 3 May 2018 02:42:13 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w432gDU1057032; Thu, 3 May 2018 02:42:13 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805030242.w432gDU1057032@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Thu, 3 May 2018 02:42:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333192 - head/lib/libc/sys X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/lib/libc/sys X-SVN-Commit-Revision: 333192 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 02:42:14 -0000 Author: kevans Date: Thu May 3 02:42:13 2018 New Revision: 333192 URL: https://svnweb.freebsd.org/changeset/base/333192 Log: fcntl(2): Vaguely document that ENOTTY is possible, with light examples Reported by: vs (2006, FreeBSD 6.1-BETA3) Reported by: me (2018, angry debugging session) MFC after: 1 month Modified: head/lib/libc/sys/fcntl.2 Modified: head/lib/libc/sys/fcntl.2 ============================================================================== --- head/lib/libc/sys/fcntl.2 Thu May 3 01:23:42 2018 (r333191) +++ head/lib/libc/sys/fcntl.2 Thu May 3 02:42:13 2018 (r333192) @@ -28,7 +28,7 @@ .\" @(#)fcntl.2 8.2 (Berkeley) 1/12/94 .\" $FreeBSD$ .\" -.Dd July 7, 2016 +.Dd May 2, 2018 .Dt FCNTL 2 .Os .Sh NAME @@ -572,6 +572,14 @@ process are already in use, or no file descriptors greater than or equal to .Fa arg are available. +.It Bq Er ENOTTY +The +.Fa fd +argument is not a valid file descriptor for the requested operation. +This may be the case if +.Fa fd +is a device node, or a descriptor returned by +.Xr kqueue 2 . .It Bq Er ENOLCK The argument .Fa cmd From owner-svn-src-head@freebsd.org Thu May 3 02:47:57 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0B6CCFBE6A7; Thu, 3 May 2018 02:47:57 +0000 (UTC) (envelope-from kevans@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AE79470948; Thu, 3 May 2018 02:47:56 +0000 (UTC) (envelope-from kevans@freebsd.org) Received: from mail-lf0-f52.google.com (mail-lf0-f52.google.com [209.85.215.52]) (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)) (Authenticated sender: kevans) by smtp.freebsd.org (Postfix) with ESMTPSA id 64250FD12; Thu, 3 May 2018 02:47:56 +0000 (UTC) (envelope-from kevans@freebsd.org) Received: by mail-lf0-f52.google.com with SMTP id y14-v6so23373930lfy.12; Wed, 02 May 2018 19:47:56 -0700 (PDT) X-Gm-Message-State: ALQs6tCj/9bSprErwXq4JxvgkvqxmjkU2malB0Jyfwl9lwmQf5Xthzns Df96DqD+oBZYNqmqp8ffPiUT5DwFum3St9kLOXI= X-Google-Smtp-Source: AB8JxZoOhVQPwD0eapr4VHlnsf3q8UjZgNkLRkMpuCVIfrTiHzrbvfAKAKWnXyLMmevGb16weeCcN2bVidPpvnW7GR4= X-Received: by 2002:a19:95c2:: with SMTP id x185-v6mr12904937lfd.74.1525315674958; Wed, 02 May 2018 19:47:54 -0700 (PDT) MIME-Version: 1.0 Received: by 10.46.49.18 with HTTP; Wed, 2 May 2018 19:47:34 -0700 (PDT) In-Reply-To: <201805030242.w432gDU1057032@repo.freebsd.org> References: <201805030242.w432gDU1057032@repo.freebsd.org> From: Kyle Evans Date: Wed, 2 May 2018 21:47:34 -0500 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333192 - head/lib/libc/sys To: Kyle Evans 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.25 Precedence: list List-Id: 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, 03 May 2018 02:47:57 -0000 On Wed, May 2, 2018 at 9:42 PM, Kyle Evans wrote: > Author: kevans > Date: Thu May 3 02:42:13 2018 > New Revision: 333192 > URL: https://svnweb.freebsd.org/changeset/base/333192 > > Log: > fcntl(2): Vaguely document that ENOTTY is possible, with light examples > > Reported by: vs (2006, FreeBSD 6.1-BETA3) > Reported by: me (2018, angry debugging session) I guess I should be more specific here- this specific angry debugging session was in net/freerdp's usage of devel/libepoll-shim. An apparently common pattern is: timer = timerfd_create(...); ... fcntl(timer->fd, F_SETFL, O_NONBLOCK); This fcntl(2) call will fail and result in an ENOTTY, because libepoll-shim's implementation of timerfd_create is a wrapper around kqueue and this isn't an OK thing to do. This was the inspiration of one of the specifically mentioned examples. epoll API provides a way to set NONBLOCK in the creation process, the use of which in lieu of the timerfd_create ... fcntl pattern ended up being the proper fix. From owner-svn-src-head@freebsd.org Thu May 3 02:56:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BE265FBED75; Thu, 3 May 2018 02:56:13 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 6C3337271B; Thu, 3 May 2018 02:56:13 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 64F2019D11; Thu, 3 May 2018 02:56:13 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w432uDxb062377; Thu, 3 May 2018 02:56:13 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w432uDrS062376; Thu, 3 May 2018 02:56:13 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805030256.w432uDrS062376@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Thu, 3 May 2018 02:56:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333193 - head/usr.bin/grep X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/usr.bin/grep X-SVN-Commit-Revision: 333193 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 02:56:13 -0000 Author: kevans Date: Thu May 3 02:56:13 2018 New Revision: 333193 URL: https://svnweb.freebsd.org/changeset/base/333193 Log: zgrep(1): Note that -r/-R are not currently supported. This is better behavior than just silently doing the wrong thing. We do not currently have plans to support -r/-R with the compression-enabled greps. Reported by: jilles Modified: head/usr.bin/grep/zgrep.sh Modified: head/usr.bin/grep/zgrep.sh ============================================================================== --- head/usr.bin/grep/zgrep.sh Thu May 3 02:42:13 2018 (r333192) +++ head/usr.bin/grep/zgrep.sh Thu May 3 02:56:13 2018 (r333193) @@ -106,6 +106,10 @@ do silent=1 shift ;; + -r|-R) + echo "${prg}: the ${1} flag is not currently supported" >&2 + exit 1 + ;; -V|--version) exec ${grep} -V ;; From owner-svn-src-head@freebsd.org Thu May 3 06:52:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E53A6FC68DF; Thu, 3 May 2018 06:52:48 +0000 (UTC) (envelope-from rcyu@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 90575856F3; Thu, 3 May 2018 06:52:48 +0000 (UTC) (envelope-from rcyu@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 8B3BB1C5CE; Thu, 3 May 2018 06:52:48 +0000 (UTC) (envelope-from rcyu@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w436qmeW081971; Thu, 3 May 2018 06:52:48 GMT (envelope-from rcyu@FreeBSD.org) Received: (from rcyu@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w436qmoq081968; Thu, 3 May 2018 06:52:48 GMT (envelope-from rcyu@FreeBSD.org) Message-Id: <201805030652.w436qmoq081968@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: rcyu set sender to rcyu@FreeBSD.org using -f From: Ruey-Cherng Yu Date: Thu, 3 May 2018 06:52:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333195 - head/share/syscons/keymaps X-SVN-Group: head X-SVN-Commit-Author: rcyu X-SVN-Commit-Paths: head/share/syscons/keymaps X-SVN-Commit-Revision: 333195 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 06:52:49 -0000 Author: rcyu (doc committer) Date: Thu May 3 06:52:47 2018 New Revision: 333195 URL: https://svnweb.freebsd.org/changeset/base/333195 Log: - Add us.iso Macbook/Macbook Pro keyboard support Approved by: delphij Differential Revision: https://reviews.freebsd.org/D14504 Added: head/share/syscons/keymaps/us.iso.macbook.kbd (contents, props changed) Modified: head/share/syscons/keymaps/INDEX.keymaps head/share/syscons/keymaps/Makefile Modified: head/share/syscons/keymaps/INDEX.keymaps ============================================================================== --- head/share/syscons/keymaps/INDEX.keymaps Thu May 3 06:34:07 2018 (r333194) +++ head/share/syscons/keymaps/INDEX.keymaps Thu May 3 06:52:47 2018 (r333195) @@ -527,6 +527,12 @@ us.iso.acc.kbd:fr:États Unis d'Amérique ISO-8859-1 (av us.iso.acc.kbd:pt:Estados Unidos da América ISO-8859-1 (com acentos) us.iso.acc.kbd:es:Estadounidense ISO-8859-1 (con acentos) +us.iso.macbook.kbd:en:United States of America Macbook/Macbook Pro ISO-8859-1 +us.iso.macbook.kbd:de:US-amerikanisch Macbook/Macbook Pro ISO-8859-1 +us.iso.macbook.kbd:fr:ノtats Unis d'Am駻ique Macbook/Macbook Pro ISO-8859-1 +us.iso.macbook.kbd:pt:Estados Unidos da Am駻ica Macbook/Macbook Pro ISO-8859-1 +us.iso.macbook.kbd:es:Estadounidense Macbook/Macbook Pro ISO-8859-1 + us.dvorak.kbd:en:United States of America dvorak us.dvorak.kbd:de:US-amerikanisch dvorak us.dvorak.kbd:fr:États Unis d'Amérique dvorak Modified: head/share/syscons/keymaps/Makefile ============================================================================== --- head/share/syscons/keymaps/Makefile Thu May 3 06:34:07 2018 (r333194) +++ head/share/syscons/keymaps/Makefile Thu May 3 06:52:47 2018 (r333195) @@ -48,7 +48,8 @@ FILES= INDEX.keymaps \ uk.iso.kbd uk.iso-ctrl.kbd uk.cp850.kbd uk.cp850-ctrl.kbd \ uk.dvorak.kbd \ us.iso.kbd us.dvorak.kbd us.dvorakl.kbd us.dvorakr.kbd us.dvorakp.kbd \ - us.dvorakx.kbd us.emacs.kbd us.pc-ctrl.kbd us.unix.kbd us.iso.acc.kbd + us.dvorakx.kbd us.emacs.kbd us.pc-ctrl.kbd us.unix.kbd us.iso.acc.kbd \ + us.iso.macbook.kbd FILESDIR= ${SHAREDIR}/syscons/keymaps Added: head/share/syscons/keymaps/us.iso.macbook.kbd ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/syscons/keymaps/us.iso.macbook.kbd Thu May 3 06:52:47 2018 (r333195) @@ -0,0 +1,116 @@ +# $FreeBSD$ +# by Willian Theesfeld Jr +# alt +# scan cntrl alt alt cntrl lock +# code base shift cntrl shift alt shift cntrl shift state +# ------------------------------------------------------------------ + 000 nop nop nop nop nop nop nop nop O + 001 esc esc esc esc esc esc debug esc O + 002 '1' '!' nop nop '1' '!' nop nop O + 003 '2' '@' nul nul '2' '@' nul nul O + 004 '3' '#' nop nop '3' '#' nop nop O + 005 '4' '$' nop nop '4' '$' nop nop O + 006 '5' '%' nop nop '5' '%' nop nop O + 007 '6' '^' rs rs '6' '^' rs rs O + 008 '7' '&' nop nop '7' '&' nop nop O + 009 '8' '*' nop nop '8' '*' nop nop O + 010 '9' '(' nop nop '9' '(' nop nop O + 011 '0' ')' nop nop '0' ')' nop nop O + 012 '-' '_' us us '-' '_' us us O + 013 '=' '+' nop nop '=' '+' nop nop O + 014 bs bs del del bs bs del del O + 015 ht btab nop nop ht btab nop nop O + 016 'q' 'Q' dc1 dc1 'q' 'Q' dc1 dc1 C + 017 'w' 'W' etb etb 'w' 'W' etb etb C + 018 'e' 'E' enq enq 'e' 'E' enq enq C + 019 'r' 'R' dc2 dc2 'r' 'R' dc2 dc2 C + 020 't' 'T' dc4 dc4 't' 'T' dc4 dc4 C + 021 'y' 'Y' em em 'y' 'Y' em em C + 022 'u' 'U' nak nak 'u' 'U' nak nak C + 023 'i' 'I' ht ht 'i' 'I' ht ht C + 024 'o' 'O' si si 'o' 'O' si si C + 025 'p' 'P' dle dle 'p' 'P' dle dle C + 026 '[' '{' esc esc '[' '{' esc esc O + 027 ']' '}' gs gs ']' '}' gs gs O + 028 cr cr nl nl cr cr nl nl O + 029 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O + 030 'a' 'A' soh soh 'a' 'A' soh soh C + 031 's' 'S' dc3 dc3 's' 'S' dc3 dc3 C + 032 'd' 'D' eot eot 'd' 'D' eot eot C + 033 'f' 'F' ack ack 'f' 'F' ack ack C + 034 'g' 'G' bel bel 'g' 'G' bel bel C + 035 'h' 'H' bs bs 'h' 'H' bs bs C + 036 'j' 'J' nl nl 'j' 'J' nl nl C + 037 'k' 'K' vt vt 'k' 'K' vt vt C + 038 'l' 'L' ff ff 'l' 'L' ff ff C + 039 ';' ':' nop nop ';' ':' nop nop O + 040 ''' '"' nop nop ''' '"' nop nop O + 041 '`' '~' nop nop '`' '~' nop nop O + 042 lshift lshift lshift lshift lshift lshift lshift lshift O + 043 '\' '|' fs fs '\' '|' fs fs O + 044 'z' 'Z' sub sub 'z' 'Z' sub sub C + 045 'x' 'X' can can 'x' 'X' can can C + 046 'c' 'C' etx etx 'c' 'C' etx etx C + 047 'v' 'V' syn syn 'v' 'V' syn syn C + 048 'b' 'B' stx stx 'b' 'B' stx stx C + 049 'n' 'N' so so 'n' 'N' so so C + 050 'm' 'M' cr cr 'm' 'M' cr cr C + 051 ',' '<' nop nop ',' '<' nop nop O + 052 '.' '>' nop nop '.' '>' nop nop O + 053 '/' '?' nop nop '/' '?' nop nop O + 054 rshift rshift rshift rshift rshift rshift rshift rshift O + 055 '*' '*' '*' '*' '*' '*' '*' '*' O + 056 lalt lalt lalt lalt lalt lalt lalt lalt O + 057 ' ' ' ' nul ' ' ' ' ' ' susp ' ' O + 058 clock clock clock clock clock clock clock clock O + 059 fkey01 fkey13 fkey25 fkey37 scr01 scr11 scr01 scr11 O + 060 fkey02 fkey14 fkey26 fkey38 scr02 scr12 scr02 scr12 O + 061 fkey03 fkey15 fkey27 fkey39 scr03 scr13 scr03 scr13 O + 062 fkey04 fkey16 fkey28 fkey40 scr04 scr14 scr04 scr14 O + 063 fkey05 fkey17 fkey29 fkey41 scr05 scr15 scr05 scr15 O + 064 fkey06 fkey18 fkey30 fkey42 scr06 scr16 scr06 scr16 O + 065 fkey07 fkey19 fkey31 fkey43 scr07 scr07 scr07 scr07 O + 066 fkey08 fkey20 fkey32 fkey44 scr08 scr08 scr08 scr08 O + 067 fkey09 fkey21 fkey33 fkey45 scr09 scr09 scr09 scr09 O + 068 fkey10 fkey22 fkey34 fkey46 scr10 scr10 scr10 scr10 O + 069 nlock nlock nlock nlock nlock nlock nlock nlock O + 070 slock slock slock slock slock slock slock slock O + 071 fkey49 '7' '7' '7' '7' '7' '7' '7' N + 072 fkey50 '8' '8' '8' '8' '8' '8' '8' N + 073 fkey51 '9' '9' '9' '9' '9' '9' '9' N + 074 fkey52 '-' '-' '-' '-' '-' '-' '-' N + 075 fkey53 '4' '4' '4' '4' '4' '4' '4' N + 076 fkey54 '5' '5' '5' '5' '5' '5' '5' N + 077 fkey55 '6' '6' '6' '6' '6' '6' '6' N + 078 fkey56 '+' '+' '+' '+' '+' '+' '+' N + 079 fkey57 '1' '1' '1' '1' '1' '1' '1' N + 080 fkey58 '2' '2' '2' '2' '2' '2' '2' N + 081 fkey59 '3' '3' '3' '3' '3' '3' '3' N + 082 fkey60 '0' '0' '0' '0' '0' '0' '0' N + 083 del '.' '.' '.' '.' '.' boot boot N + 084 nop nop nop nop nop nop nop nop O + 085 nop nop nop nop nop nop nop nop O + 086 '`' '~' nop nop '`' '~' nop nop O + 087 fkey11 fkey23 fkey35 fkey47 scr11 scr11 scr11 scr11 O + 088 fkey12 fkey24 fkey36 fkey48 scr12 scr12 scr12 scr12 O + 089 cr cr nl nl cr cr nl nl O + 090 rctrl rctrl rctrl rctrl rctrl rctrl rctrl rctrl O + 091 '/' '/' '/' '/' '/' '/' '/' '/' N + 092 nscr pscr debug debug nop nop nop nop O + 093 ralt ralt ralt ralt ralt ralt ralt ralt O + 094 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 fkey49 O + 095 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 fkey50 O + 096 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 fkey51 O + 097 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 fkey53 O + 098 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 fkey55 O + 099 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 fkey57 O + 100 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 fkey58 O + 101 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 fkey59 O + 102 fkey60 paste fkey60 fkey60 fkey60 fkey60 fkey60 fkey60 O + 103 fkey61 fkey61 fkey61 fkey61 fkey61 fkey61 boot fkey61 O + 104 slock saver slock saver susp nop susp nop O + 105 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 fkey62 O + 106 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 fkey63 O + 107 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 fkey64 O + 108 nop nop nop nop nop nop nop nop O + From owner-svn-src-head@freebsd.org Thu May 3 10:17:37 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id BA8A4FCC60C; Thu, 3 May 2018 10:17:37 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 65C69720FC; Thu, 3 May 2018 10:17:37 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5C1771E731; Thu, 3 May 2018 10:17:37 +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 w43AHbVr082425; Thu, 3 May 2018 10:17:37 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43AHbNM082424; Thu, 3 May 2018 10:17:37 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201805031017.w43AHbNM082424@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 3 May 2018 10:17:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333208 - head/sys/amd64/amd64 X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: head/sys/amd64/amd64 X-SVN-Commit-Revision: 333208 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 10:17:37 -0000 Author: kib Date: Thu May 3 10:17:37 2018 New Revision: 333208 URL: https://svnweb.freebsd.org/changeset/base/333208 Log: Style. Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential revision: https://reviews.freebsd.org/D13838 Modified: head/sys/amd64/amd64/elf_machdep.c Modified: head/sys/amd64/amd64/elf_machdep.c ============================================================================== --- head/sys/amd64/amd64/elf_machdep.c Thu May 3 08:17:12 2018 (r333207) +++ head/sys/amd64/amd64/elf_machdep.c Thu May 3 10:17:37 2018 (r333208) @@ -219,7 +219,6 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas } switch (rtype) { - case R_X86_64_NONE: /* none */ break; @@ -260,7 +259,7 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas * objects. */ printf("kldload: unexpected R_COPY relocation\n"); - return -1; + return (-1); break; case R_X86_64_GLOB_DAT: /* S */ @@ -282,9 +281,9 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas default: printf("kldload: unexpected relocation type %ld\n", rtype); - return -1; + return (-1); } - return(0); + return (0); } int From owner-svn-src-head@freebsd.org Thu May 3 13:14:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 298DAFAAD84; Thu, 3 May 2018 13:14:32 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CB5FB7BF2F; Thu, 3 May 2018 13:14:31 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C65902044A; Thu, 3 May 2018 13:14:31 +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 w43DEVFR071826; Thu, 3 May 2018 13:14:31 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43DEVdH071825; Thu, 3 May 2018 13:14:31 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201805031314.w43DEVdH071825@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Thu, 3 May 2018 13:14:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333209 - head/sys/dev/acpica X-SVN-Group: head X-SVN-Commit-Author: avg X-SVN-Commit-Paths: head/sys/dev/acpica X-SVN-Commit-Revision: 333209 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 13:14:32 -0000 Author: avg Date: Thu May 3 13:14:31 2018 New Revision: 333209 URL: https://svnweb.freebsd.org/changeset/base/333209 Log: hpet: use macros instead of magic values for the timer mode MFC after: 1 week Modified: head/sys/dev/acpica/acpi_hpet.c Modified: head/sys/dev/acpica/acpi_hpet.c ============================================================================== --- head/sys/dev/acpica/acpi_hpet.c Thu May 3 10:17:37 2018 (r333208) +++ head/sys/dev/acpica/acpi_hpet.c Thu May 3 13:14:31 2018 (r333209) @@ -96,6 +96,9 @@ struct hpet_softc { struct hpet_softc *sc; int num; int mode; +#define TIMER_STOPPED 0 +#define TIMER_PERIODIC 1 +#define TIMER_ONESHOT 2 int intr_rid; int irq; int pcpu_cpu; @@ -206,10 +209,10 @@ hpet_start(struct eventtimer *et, sbintime_t first, sb t = (mt->pcpu_master < 0) ? mt : &sc->t[mt->pcpu_slaves[curcpu]]; if (period != 0) { - t->mode = 1; + t->mode = TIMER_PERIODIC; t->div = (sc->freq * period) >> 32; } else { - t->mode = 2; + t->mode = TIMER_ONESHOT; t->div = 0; } if (first != 0) @@ -222,7 +225,7 @@ hpet_start(struct eventtimer *et, sbintime_t first, sb now = bus_read_4(sc->mem_res, HPET_MAIN_COUNTER); restart: t->next = now + fdiv; - if (t->mode == 1 && (t->caps & HPET_TCAP_PER_INT)) { + if (t->mode == TIMER_PERIODIC && (t->caps & HPET_TCAP_PER_INT)) { t->caps |= HPET_TCNF_TYPE; bus_write_4(sc->mem_res, HPET_TIMER_CAP_CNF(t->num), t->caps | HPET_TCNF_VAL_SET); @@ -253,7 +256,7 @@ hpet_stop(struct eventtimer *et) struct hpet_softc *sc = mt->sc; t = (mt->pcpu_master < 0) ? mt : &sc->t[mt->pcpu_slaves[curcpu]]; - t->mode = 0; + t->mode = TIMER_STOPPED; t->caps &= ~(HPET_TCNF_INT_ENB | HPET_TCNF_TYPE); bus_write_4(sc->mem_res, HPET_TIMER_CAP_CNF(t->num), t->caps); return (0); @@ -267,7 +270,7 @@ hpet_intr_single(void *arg) struct hpet_softc *sc = t->sc; uint32_t now; - if (t->mode == 0) + if (t->mode == TIMER_STOPPED) return (FILTER_STRAY); /* Check that per-CPU timer interrupt reached right CPU. */ if (t->pcpu_cpu >= 0 && t->pcpu_cpu != curcpu) { @@ -281,8 +284,9 @@ hpet_intr_single(void *arg) * Reload timer, hoping that next time may be more lucky * (system will manage proper interrupt binding). */ - if ((t->mode == 1 && (t->caps & HPET_TCAP_PER_INT) == 0) || - t->mode == 2) { + if ((t->mode == TIMER_PERIODIC && + (t->caps & HPET_TCAP_PER_INT) == 0) || + t->mode == TIMER_ONESHOT) { t->next = bus_read_4(sc->mem_res, HPET_MAIN_COUNTER) + sc->freq / 8; bus_write_4(sc->mem_res, HPET_TIMER_COMPARATOR(t->num), @@ -290,7 +294,7 @@ hpet_intr_single(void *arg) } return (FILTER_HANDLED); } - if (t->mode == 1 && + if (t->mode == TIMER_PERIODIC && (t->caps & HPET_TCAP_PER_INT) == 0) { t->next += t->div; now = bus_read_4(sc->mem_res, HPET_MAIN_COUNTER); @@ -298,8 +302,8 @@ hpet_intr_single(void *arg) t->next = now + t->div / 2; bus_write_4(sc->mem_res, HPET_TIMER_COMPARATOR(t->num), t->next); - } else if (t->mode == 2) - t->mode = 0; + } else if (t->mode == TIMER_ONESHOT) + t->mode = TIMER_STOPPED; mt = (t->pcpu_master < 0) ? t : &sc->t[t->pcpu_master]; if (mt->et.et_active) mt->et.et_event_cb(&mt->et, mt->et.et_arg); @@ -528,7 +532,7 @@ hpet_attach(device_t dev) t = &sc->t[i]; t->sc = sc; t->num = i; - t->mode = 0; + t->mode = TIMER_STOPPED; t->intr_rid = -1; t->irq = -1; t->pcpu_cpu = -1; @@ -878,10 +882,11 @@ hpet_resume(device_t dev) } } #endif - if (t->mode == 0) + if (t->mode == TIMER_STOPPED) continue; t->next = bus_read_4(sc->mem_res, HPET_MAIN_COUNTER); - if (t->mode == 1 && (t->caps & HPET_TCAP_PER_INT)) { + if (t->mode == TIMER_PERIODIC && + (t->caps & HPET_TCAP_PER_INT) != 0) { t->caps |= HPET_TCNF_TYPE; t->next += t->div; bus_write_4(sc->mem_res, HPET_TIMER_CAP_CNF(t->num), From owner-svn-src-head@freebsd.org Thu May 3 14:48:43 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 868F4FAD903; Thu, 3 May 2018 14:48:43 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 359F17192C; Thu, 3 May 2018 14:48:43 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 30ABF21339; Thu, 3 May 2018 14:48:43 +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 w43Emh1r018216; Thu, 3 May 2018 14:48:43 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43Emg8P018214; Thu, 3 May 2018 14:48:42 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201805031448.w43Emg8P018214@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Thu, 3 May 2018 14:48:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333210 - in head: share/man/man4 sys/dev/nxge X-SVN-Group: head X-SVN-Commit-Author: sbruno X-SVN-Commit-Paths: in head: share/man/man4 sys/dev/nxge X-SVN-Commit-Revision: 333210 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 14:48:43 -0000 Author: sbruno Date: Thu May 3 14:48:42 2018 New Revision: 333210 URL: https://svnweb.freebsd.org/changeset/base/333210 Log: nxge(4) deprecation notice Submitted by: kbowling Reviewed by: brooks Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D15277 Modified: head/share/man/man4/nxge.4 head/sys/dev/nxge/if_nxge.c Modified: head/share/man/man4/nxge.4 ============================================================================== --- head/share/man/man4/nxge.4 Thu May 3 13:14:31 2018 (r333209) +++ head/share/man/man4/nxge.4 Thu May 3 14:48:42 2018 (r333210) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd October 16, 2007 +.Dd May 3, 2018 .Dt NXGE 4 .Os .Sh NAME @@ -44,6 +44,12 @@ module at boot time, place the following line in .Bd -literal -offset indent if_nxge_load="YES" .Ed +.Sh DEPRECATION NOTICE +The +.Nm +driver is not present in +.Fx 12.0 +and later. .Sh DESCRIPTION The .Nm Modified: head/sys/dev/nxge/if_nxge.c ============================================================================== --- head/sys/dev/nxge/if_nxge.c Thu May 3 13:14:31 2018 (r333209) +++ head/sys/dev/nxge/if_nxge.c Thu May 3 14:48:42 2018 (r333210) @@ -1006,6 +1006,7 @@ xge_attach(device_t dev) attach_out: xge_os_free(NULL, device_config, sizeof(xge_hal_device_config_t)); attach_out_config: + gone_in_dev(dev, 12, "nxge(4) driver"); return status; } From owner-svn-src-head@freebsd.org Thu May 3 15:01:27 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A6AB3FADD83; Thu, 3 May 2018 15:01:27 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 54A39757A1; Thu, 3 May 2018 15:01:27 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4F92D21627; Thu, 3 May 2018 15:01:27 +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 w43F1RBr024235; Thu, 3 May 2018 15:01:27 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43F1Reo024234; Thu, 3 May 2018 15:01:27 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201805031501.w43F1Reo024234@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Thu, 3 May 2018 15:01:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333211 - head/sys/netinet/cc X-SVN-Group: head X-SVN-Commit-Author: sbruno X-SVN-Commit-Paths: head/sys/netinet/cc X-SVN-Commit-Revision: 333211 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 15:01:27 -0000 Author: sbruno Date: Thu May 3 15:01:27 2018 New Revision: 333211 URL: https://svnweb.freebsd.org/changeset/base/333211 Log: cc_cubic: - Update cubic parameters to draft-ietf-tcpm-cubic-04 Submitted by: Matt Macy Reviewed by: lstewart Differential Revision: https://reviews.freebsd.org/D10556 Modified: head/sys/netinet/cc/cc_cubic.h Modified: head/sys/netinet/cc/cc_cubic.h ============================================================================== --- head/sys/netinet/cc/cc_cubic.h Thu May 3 14:48:42 2018 (r333210) +++ head/sys/netinet/cc/cc_cubic.h Thu May 3 15:01:27 2018 (r333211) @@ -51,23 +51,23 @@ /* 0.5 << CUBIC_SHIFT. */ #define RENO_BETA 128 -/* ~0.8 << CUBIC_SHIFT. */ -#define CUBIC_BETA 204 +/* ~0.7 << CUBIC_SHIFT. */ +#define CUBIC_BETA 179 -/* ~0.2 << CUBIC_SHIFT. */ -#define ONE_SUB_CUBIC_BETA 51 +/* ~0.3 << CUBIC_SHIFT. */ +#define ONE_SUB_CUBIC_BETA 77 /* 3 * ONE_SUB_CUBIC_BETA. */ -#define THREE_X_PT2 153 +#define THREE_X_PT3 231 /* (2 << CUBIC_SHIFT) - ONE_SUB_CUBIC_BETA. */ -#define TWO_SUB_PT2 461 +#define TWO_SUB_PT3 435 /* ~0.4 << CUBIC_SHIFT. */ #define CUBIC_C_FACTOR 102 -/* CUBIC fast convergence factor: ~0.9 << CUBIC_SHIFT. */ -#define CUBIC_FC_FACTOR 230 +/* CUBIC fast convergence factor: (1+beta_cubic)/2. */ +#define CUBIC_FC_FACTOR 217 /* Don't trust s_rtt until this many rtt samples have been taken. */ #define CUBIC_MIN_RTT_SAMPLES 8 @@ -79,9 +79,8 @@ extern int hz; /* * Implementation based on the formulae found in the CUBIC Internet Draft - * "draft-rhee-tcpm-cubic-02". + * "draft-ietf-tcpm-cubic-04". * - * Note BETA used in cc_cubic is equal to (1-beta) in the I-D */ static __inline float @@ -91,7 +90,7 @@ theoretical_cubic_k(double wmax_pkts) C = 0.4; - return (pow((wmax_pkts * 0.2) / C, (1.0 / 3.0)) * pow(2, CUBIC_SHIFT)); + return (pow((wmax_pkts * 0.3) / C, (1.0 / 3.0)) * pow(2, CUBIC_SHIFT)); } static __inline unsigned long @@ -120,7 +119,7 @@ theoretical_tf_cwnd(int ticks_since_cong, int rtt_tick uint32_t smss) { - return ((wmax * 0.8) + ((3 * 0.2) / (2 - 0.2) * + return ((wmax * 0.7) + ((3 * 0.3) / (2 - 0.3) * (ticks_since_cong / (float)rtt_ticks) * smss)); } @@ -232,7 +231,7 @@ reno_cwnd(int ticks_since_cong, int rtt_ticks, unsigne /* * Compute an approximation of the "TCP friendly" cwnd some number of ticks * after a congestion event that is designed to yield the same average cwnd as - * NewReno while using CUBIC's beta of 0.8. RTT should be the average RTT + * NewReno while using CUBIC's beta of 0.7. RTT should be the average RTT * estimate for the path measured over the previous congestion epoch and wmax is * the value of cwnd at the last congestion event. */ @@ -242,8 +241,8 @@ tf_cwnd(int ticks_since_cong, int rtt_ticks, unsigned { /* Equation 4 of I-D. */ - return (((wmax * CUBIC_BETA) + (((THREE_X_PT2 * ticks_since_cong * - smss) << CUBIC_SHIFT) / TWO_SUB_PT2 / rtt_ticks)) >> CUBIC_SHIFT); + return (((wmax * CUBIC_BETA) + (((THREE_X_PT3 * ticks_since_cong * + smss) << CUBIC_SHIFT) / TWO_SUB_PT3 / rtt_ticks)) >> CUBIC_SHIFT); } #endif /* _NETINET_CC_CUBIC_H_ */ From owner-svn-src-head@freebsd.org Thu May 3 15:33:19 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 017E1FAE9E0; Thu, 3 May 2018 15:33:19 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A71AF7DC8A; Thu, 3 May 2018 15:33: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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A1F8B21B63; Thu, 3 May 2018 15:33: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 w43FXIxl043510; Thu, 3 May 2018 15:33:18 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43FXIUr043509; Thu, 3 May 2018 15:33:18 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201805031533.w43FXIUr043509@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Thu, 3 May 2018 15:33:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333212 - head/sys/dev/amdsbwd X-SVN-Group: head X-SVN-Commit-Author: avg X-SVN-Commit-Paths: head/sys/dev/amdsbwd X-SVN-Commit-Revision: 333212 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 15:33:19 -0000 Author: avg Date: Thu May 3 15:33:18 2018 New Revision: 333212 URL: https://svnweb.freebsd.org/changeset/base/333212 Log: amdsbwd: add suspend and resume methods Without the suspend method the watchdog may fire in S1 state. Without the resume method the watchdog is not re-enabled after returning from S3 state. I observe this on one of my systems. Not sure if watchdog(4) should participate in the suspend actions. Right now everything is up to individual drivers. MFC after: 2 weeks Modified: head/sys/dev/amdsbwd/amdsbwd.c Modified: head/sys/dev/amdsbwd/amdsbwd.c ============================================================================== --- head/sys/dev/amdsbwd/amdsbwd.c Thu May 3 15:01:27 2018 (r333211) +++ head/sys/dev/amdsbwd/amdsbwd.c Thu May 3 15:33:18 2018 (r333212) @@ -104,12 +104,16 @@ static void amdsbwd_identify(driver_t *driver, device_ static int amdsbwd_probe(device_t dev); static int amdsbwd_attach(device_t dev); static int amdsbwd_detach(device_t dev); +static int amdsbwd_suspend(device_t dev); +static int amdsbwd_resume(device_t dev); static device_method_t amdsbwd_methods[] = { DEVMETHOD(device_identify, amdsbwd_identify), DEVMETHOD(device_probe, amdsbwd_probe), DEVMETHOD(device_attach, amdsbwd_attach), DEVMETHOD(device_detach, amdsbwd_detach), + DEVMETHOD(device_suspend, amdsbwd_suspend), + DEVMETHOD(device_resume, amdsbwd_resume), #if 0 DEVMETHOD(device_shutdown, amdsbwd_detach), #endif @@ -553,3 +557,30 @@ amdsbwd_detach(device_t dev) return (0); } +static int +amdsbwd_suspend(device_t dev) +{ + struct amdsbwd_softc *sc; + uint32_t val; + + sc = device_get_softc(dev); + val = wdctrl_read(sc); + val &= ~AMDSB_WD_RUN; + wdctrl_write(sc, val); + return (0); +} + +static int +amdsbwd_resume(device_t dev) +{ + struct amdsbwd_softc *sc; + + sc = device_get_softc(dev); + wdctrl_write(sc, AMDSB_WD_FIRED); + if (sc->active) { + amdsbwd_tmr_set(sc, sc->timeout); + amdsbwd_tmr_enable(sc); + amdsbwd_tmr_reload(sc); + } + return (0); +} From owner-svn-src-head@freebsd.org Thu May 3 17:02:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A7474FB20A8; Thu, 3 May 2018 17:02:32 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2D0B57249C; Thu, 3 May 2018 17:02:32 +0000 (UTC) (envelope-from shurd@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 27FD022A5A; Thu, 3 May 2018 17:02:32 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43H2WV9090783; Thu, 3 May 2018 17:02:32 GMT (envelope-from shurd@FreeBSD.org) Received: (from shurd@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43H2VkE090781; Thu, 3 May 2018 17:02:31 GMT (envelope-from shurd@FreeBSD.org) Message-Id: <201805031702.w43H2VkE090781@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: shurd set sender to shurd@FreeBSD.org using -f From: Stephen Hurd Date: Thu, 3 May 2018 17:02:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333218 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: shurd X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 333218 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 17:02:32 -0000 Author: shurd Date: Thu May 3 17:02:31 2018 New Revision: 333218 URL: https://svnweb.freebsd.org/changeset/base/333218 Log: Allow iflib NIC drivers to sleep rather than busy wait Since the move to SMP NIC driver locking has had to go through serious contortions using mtx around long running hardware operations. This moves iflib past that. Individual drivers may now sleep when appropriate. Submitted by: Matthew Macy Reviewed by: shurd Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D14983 Modified: head/sys/net/iflib.c head/sys/net/iflib.h Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Thu May 3 16:19:47 2018 (r333217) +++ head/sys/net/iflib.c Thu May 3 17:02:31 2018 (r333218) @@ -163,7 +163,7 @@ struct iflib_ctx { if_shared_ctx_t ifc_sctx; struct if_softc_ctx ifc_softc_ctx; - struct mtx ifc_ctx_mtx; + struct sx ifc_ctx_sx; struct mtx ifc_state_mtx; uint16_t ifc_nhwtxqs; @@ -537,10 +537,10 @@ rxd_info_zero(if_rxd_info_t ri) #define CTX_ACTIVE(ctx) ((if_getdrvflags((ctx)->ifc_ifp) & IFF_DRV_RUNNING)) -#define CTX_LOCK_INIT(_sc, _name) mtx_init(&(_sc)->ifc_ctx_mtx, _name, "iflib ctx lock", MTX_DEF) -#define CTX_LOCK(ctx) mtx_lock(&(ctx)->ifc_ctx_mtx) -#define CTX_UNLOCK(ctx) mtx_unlock(&(ctx)->ifc_ctx_mtx) -#define CTX_LOCK_DESTROY(ctx) mtx_destroy(&(ctx)->ifc_ctx_mtx) +#define CTX_LOCK_INIT(_sc) sx_init(&(_sc)->ifc_ctx_sx, "iflib ctx lock") +#define CTX_LOCK(ctx) sx_xlock(&(ctx)->ifc_ctx_sx) +#define CTX_UNLOCK(ctx) sx_xunlock(&(ctx)->ifc_ctx_sx) +#define CTX_LOCK_DESTROY(ctx) sx_destroy(&(ctx)->ifc_ctx_sx) #define STATE_LOCK_INIT(_sc, _name) mtx_init(&(_sc)->ifc_state_mtx, _name, "iflib state lock", MTX_DEF) @@ -4277,7 +4277,9 @@ iflib_device_register(device_t dev, void *sc, if_share } } + CTX_LOCK(ctx); if ((err = IFDI_ATTACH_PRE(ctx)) != 0) { + CTX_UNLOCK(ctx); device_printf(dev, "IFDI_ATTACH_PRE failed %d\n", err); return (err); } @@ -4435,6 +4437,7 @@ iflib_device_register(device_t dev, void *sc, if_share if_setgetcounterfn(ctx->ifc_ifp, iflib_if_get_counter); iflib_add_device_sysctl_post(ctx); ctx->ifc_flags |= IFC_INIT_DONE; + CTX_UNLOCK(ctx); return (0); fail_detach: ether_ifdetach(ctx->ifc_ifp); @@ -4445,6 +4448,7 @@ fail_queues: /* XXX free queues */ fail: IFDI_DETACH(ctx); + CTX_UNLOCK(ctx); return (err); } @@ -4711,8 +4715,7 @@ iflib_register(if_ctx_t ctx) _iflib_assert(sctx); - CTX_LOCK_INIT(ctx, device_get_nameunit(ctx->ifc_dev)); - + CTX_LOCK_INIT(ctx); STATE_LOCK_INIT(ctx, device_get_nameunit(ctx->ifc_dev)); ifp = ctx->ifc_ifp = if_gethandle(IFT_ETHER); if (ifp == NULL) { @@ -5457,8 +5460,8 @@ iflib_io_tqg_attach(struct grouptask *gt, void *uniq, } void -iflib_config_gtask_init(if_ctx_t ctx, struct grouptask *gtask, gtask_fn_t *fn, - char *name) +iflib_config_gtask_init(void *ctx, struct grouptask *gtask, gtask_fn_t *fn, + const char *name) { GROUPTASK_INIT(gtask, 0, fn, ctx); @@ -5538,11 +5541,11 @@ iflib_add_int_delay_sysctl(if_ctx_t ctx, const char *n info, 0, iflib_sysctl_int_delay, "I", description); } -struct mtx * +struct sx * iflib_ctx_lock_get(if_ctx_t ctx) { - return (&ctx->ifc_ctx_mtx); + return (&ctx->ifc_ctx_sx); } static int Modified: head/sys/net/iflib.h ============================================================================== --- head/sys/net/iflib.h Thu May 3 16:19:47 2018 (r333217) +++ head/sys/net/iflib.h Thu May 3 17:02:31 2018 (r333218) @@ -373,8 +373,8 @@ void iflib_irq_free(if_ctx_t ctx, if_irq_t irq); void iflib_io_tqg_attach(struct grouptask *gt, void *uniq, int cpu, char *name); -void iflib_config_gtask_init(if_ctx_t ctx, struct grouptask *gtask, - gtask_fn_t *fn, char *name); +void iflib_config_gtask_init(void *ctx, struct grouptask *gtask, + gtask_fn_t *fn, const char *name); void iflib_config_gtask_deinit(struct grouptask *gtask); @@ -396,7 +396,7 @@ int iflib_dma_alloc_multi(if_ctx_t ctx, int *sizes, if void iflib_dma_free_multi(iflib_dma_info_t *dmalist, int count); -struct mtx *iflib_ctx_lock_get(if_ctx_t); +struct sx *iflib_ctx_lock_get(if_ctx_t); struct mtx *iflib_qset_lock_get(if_ctx_t, uint16_t); void iflib_led_create(if_ctx_t ctx); From owner-svn-src-head@freebsd.org Thu May 3 17:49:27 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78EDCFB3929; Thu, 3 May 2018 17:49:27 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2A6687CCAA; Thu, 3 May 2018 17:49:27 +0000 (UTC) (envelope-from benno@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1EA8B23116; Thu, 3 May 2018 17:49:27 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43HnQRd011613; Thu, 3 May 2018 17:49:26 GMT (envelope-from benno@FreeBSD.org) Received: (from benno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43HnQo5011612; Thu, 3 May 2018 17:49:26 GMT (envelope-from benno@FreeBSD.org) Message-Id: <201805031749.w43HnQo5011612@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: benno set sender to benno@FreeBSD.org using -f From: Benno Rice Date: Thu, 3 May 2018 17:49:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333219 - head/share/man/man9 X-SVN-Group: head X-SVN-Commit-Author: benno X-SVN-Commit-Paths: head/share/man/man9 X-SVN-Commit-Revision: 333219 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 17:49:27 -0000 Author: benno Date: Thu May 3 17:49:26 2018 New Revision: 333219 URL: https://svnweb.freebsd.org/changeset/base/333219 Log: Document ifdi_tx_queues_alloc and ifdi_rx_queues_alloc. Prior to this change the manual page documented ifdi_queues_alloc which has been replaced by separate methods for tx and rx queues. Reviewed by: kmacy, shurd Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D15218 Modified: head/share/man/man9/iflibdd.9 Modified: head/share/man/man9/iflibdd.9 ============================================================================== --- head/share/man/man9/iflibdd.9 Thu May 3 17:02:31 2018 (r333218) +++ head/share/man/man9/iflibdd.9 Thu May 3 17:49:26 2018 (r333219) @@ -1,5 +1,5 @@ .\" $FreeBSD$ -.Dd March 23, 2017 +.Dd May 3, 2018 .Dt IFLIBDD 9 .Os .Sh NAME @@ -10,13 +10,22 @@ .Ss "Soft Queue Setup and Teardown Functions" .Ss "Mandatory Functions" .Ft int -.Fo ifdi_queues_alloc +.Fo ifdi_tx_queues_alloc .Fa "if_ctx_t ctx" .Fa "caddr_t *vaddrs" .Fa "uint64_t *paddrs" -.Fa "int nqs" +.Fa "int ntxqs" +.Fa "int ntxqsets" .Fc .Ft int +.Fo ifdi_rx_queues_alloc +.Fa "if_ctx_t ctx" +.Fa "caddr_t *vaddrs" +.Fa "uint64_t *paddrs" +.Fa "int nrxqs" +.Fa "int nrxqsets" +.Fc +.Ft int .Fo ifdi_queues_free .Fa "if_ctx_t ctx" .Fc @@ -185,14 +194,20 @@ registers. .Ss Device Dependent Functions .Ss Soft Queue Setup and Teardown .Bl -ohang -offset indent -.It Fn ifdi_queues_alloc -Mandatory queues allocation function that is called during iflib_attach. +.It Fn ifdi_tx_queues_alloc +Mandatory function that is called during iflib_attach to allocate transmit +queues. 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. +the hardware transmit queues. +ntxqs is the number of queues per qset. +ntxqsets is the number of qsets. +.It Fn ifdi_rx_queues_alloc +Mandatory function that is called during iflib_attach to allocate receive +queues. +vaddrs and paddrs are arrays of virtual and physical addresses respectively of +the hardware receive queues. +nrxqs is the number of queues per qset. +nrxqsets is the number of qsets. .It Fn ifdi_queues_free Mandatory function that frees the allocated queues and associated transmit buffers. From owner-svn-src-head@freebsd.org Thu May 3 17:52:41 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 008EDFB3C88; Thu, 3 May 2018 17:52:41 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A57467D8D3; Thu, 3 May 2018 17:52:40 +0000 (UTC) (envelope-from benno@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A029E232BC; Thu, 3 May 2018 17:52:40 +0000 (UTC) (envelope-from benno@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43HqeGU016470; Thu, 3 May 2018 17:52:40 GMT (envelope-from benno@FreeBSD.org) Received: (from benno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43HqeBG016468; Thu, 3 May 2018 17:52:40 GMT (envelope-from benno@FreeBSD.org) Message-Id: <201805031752.w43HqeBG016468@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: benno set sender to benno@FreeBSD.org using -f From: Benno Rice Date: Thu, 3 May 2018 17:52:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333220 - head/share/man/man9 X-SVN-Group: head X-SVN-Commit-Author: benno X-SVN-Commit-Paths: head/share/man/man9 X-SVN-Commit-Revision: 333220 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 17:52:41 -0000 Author: benno Date: Thu May 3 17:52:40 2018 New Revision: 333220 URL: https://svnweb.freebsd.org/changeset/base/333220 Log: Add a stub manual page for iflib(9). Currently 'man -k iflib' would find you the right pages for iflib documentation, namely iflibdd(9) and iflibdi(9) but 'man iflib' would leave you in the dark. This allows both approaches to find the relevant documentation. Reviewed by: kmacy, shurd Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D15219 Added: head/share/man/man9/iflib.9 (contents, props changed) Modified: head/share/man/man9/Makefile Modified: head/share/man/man9/Makefile ============================================================================== --- head/share/man/man9/Makefile Thu May 3 17:49:26 2018 (r333219) +++ head/share/man/man9/Makefile Thu May 3 17:52:40 2018 (r333220) @@ -163,6 +163,7 @@ MAN= accept_filter.9 \ ieee80211_regdomain.9 \ ieee80211_scan.9 \ ieee80211_vap.9 \ + iflib.9 \ iflibdd.9 \ iflibdi.9 \ iflibtxrx.9 \ Added: head/share/man/man9/iflib.9 ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/share/man/man9/iflib.9 Thu May 3 17:52:40 2018 (r333220) @@ -0,0 +1,41 @@ +.\" $FreeBSD$ +.Dd May 3, 2018 +.Dt IFLIB 9 +.Os +.Sh NAME +.Nm iflib +.Nd Network Interface Driver Framework +.Sh DESCRIPTION +.Nm +is a framework for writing network interface drivers for FreeBSD. +It is designed to remove a large amount of the boilerplate that is often +needed for modern network interface devices, allowing driver authors to +focus on the specific code needed for their hardware. +.Pp +There are three logical components to +.Nm +each of which is described in its own manual page. +These are: +.Bl -tag -width ".Xr iflibtxrx 9" +.It Xr iflibdi 9 +Device-independent functions, used to integrate +.Nm +into the rest of the +.Fx +networking stack. +.It Xr iflibdd 9 +Device-dependent functions, used when writing new +.Nm +based drivers. +.It Xr iflibtxrx 9 +Device-dependent transmit and receive functions, used when writing new +.Nm +based drivers. +.Sh SEE ALSO +.Xr iflibdd 9 , +.Xr iflibdi 9 , +.Xr iflibtxrx 9 , +.Xr ifnet 9 +.Sh AUTHORS +.An Benno Rice Aq Mt benno@FreeBSD.org + From owner-svn-src-head@freebsd.org Thu May 3 18:20:36 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4B8C2FB4BF0; Thu, 3 May 2018 18:20:36 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id ED018811C1; Thu, 3 May 2018 18:20:35 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id CDDFE23638; Thu, 3 May 2018 18:20:35 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43IKZZM027729; Thu, 3 May 2018 18:20:35 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43IKZ2q027727; Thu, 3 May 2018 18:20:35 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805031820.w43IKZ2q027727@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Thu, 3 May 2018 18:20:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333221 - head/share/man/man4 X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/share/man/man4 X-SVN-Commit-Revision: 333221 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 18:20:36 -0000 Author: kevans Date: Thu May 3 18:20:35 2018 New Revision: 333221 URL: https://svnweb.freebsd.org/changeset/base/333221 Log: rsu(4) does not require legal.realtek.license_ack=1 The rsu firmware license check has been disabled since r292756. Changes rsu(4) since the license ack is no longer required. While here, add `device rsufw` hint to the kernel configuration lines and add/update paths to the installed license file in both rsu(4) and rsufw(4). Submitted by: Mateusz Piotrowski (0mp) Reviewed by: bcr (manpages) MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D14966 Modified: head/share/man/man4/rsu.4 head/share/man/man4/rsufw.4 Modified: head/share/man/man4/rsu.4 ============================================================================== --- head/share/man/man4/rsu.4 Thu May 3 17:52:40 2018 (r333220) +++ head/share/man/man4/rsu.4 Thu May 3 18:20:35 2018 (r333221) @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd December 10, 2016 +.Dd April 4, 2018 .Dt RSU 4 .Os .Sh NAME @@ -30,22 +30,15 @@ place the following lines in your kernel configuration .Cd "device ohci" .Cd "device usb" .Cd "device rsu" +.Cd "device rsufw" .Cd "device wlan" .Ed .Pp Alternatively, to load the driver as a module at boot time, -place the following line in +place the following lines in .Xr loader.conf 5 : .Bd -literal -offset indent if_rsu_load="YES" -.Ed -.Pp -After you have read the license in -.Pa /usr/share/doc/legal/realtek.LICENSE -you will want to add the following lines to -.Xr loader.conf 5 : -.Bd -literal -offset indent -legal.realtek.license_ack=1 rsu-rtl8712fw_load="YES" .Ed .Sh DESCRIPTION @@ -102,6 +95,12 @@ The driver can be configured at runtime with .Xr ifconfig 8 . .Sh FILES +.Bl -tag -width ".Pa /usr/share/doc/legal/realtek.LICENSE" -compact +.It Pa /usr/share/doc/legal/realtek.LICENSE +.Nm +firmware license +.El +.Pp The driver needs at least version 1.2 of the following firmware file, which is loaded when an interface is attached: .Pp Modified: head/share/man/man4/rsufw.4 ============================================================================== --- head/share/man/man4/rsufw.4 Thu May 3 17:52:40 2018 (r333220) +++ head/share/man/man4/rsufw.4 Thu May 3 18:20:35 2018 (r333221) @@ -13,7 +13,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd July 21, 2013 +.Dd April 4, 2018 .Dt RSUFW 4 .Os .Sh NAME @@ -40,7 +40,7 @@ rsu-rtl8712fw_load="YES" This module provides the firmware for the Realtek RTL8188SU and RTL8192SU chip based USB WiFi adapters. Please read Realtek's license, -.Pa /usr/share/license/realtek . +.Pa /usr/share/doc/legal/realtek.LICENSE . .Sh SEE ALSO .Xr rsu 4 , .Xr firmware 9 From owner-svn-src-head@freebsd.org Thu May 3 19:00:51 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8DE66FB6200; Thu, 3 May 2018 19:00:51 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 390688C25C; Thu, 3 May 2018 19:00:51 +0000 (UTC) (envelope-from jkim@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3401C23D1D; Thu, 3 May 2018 19:00:51 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43J0pbm049694; Thu, 3 May 2018 19:00:51 GMT (envelope-from jkim@FreeBSD.org) Received: (from jkim@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43J0olU049691; Thu, 3 May 2018 19:00:50 GMT (envelope-from jkim@FreeBSD.org) Message-Id: <201805031900.w43J0olU049691@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jkim set sender to jkim@FreeBSD.org using -f From: Jung-uk Kim Date: Thu, 3 May 2018 19:00:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333222 - in head/sys: dev/acpica dev/acpica/Osd x86/acpica X-SVN-Group: head X-SVN-Commit-Author: jkim X-SVN-Commit-Paths: in head/sys: dev/acpica dev/acpica/Osd x86/acpica X-SVN-Commit-Revision: 333222 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 19:00:51 -0000 Author: jkim Date: Thu May 3 19:00:50 2018 New Revision: 333222 URL: https://svnweb.freebsd.org/changeset/base/333222 Log: Redo r332918 with the ACPICA API and remove debug.acpi.suspend_deep_bounce. AcpiOsEnterSleep() was meant to implement this feature. Reviewed by: avg Modified: head/sys/dev/acpica/Osd/OsdHardware.c head/sys/dev/acpica/acpi.c head/sys/x86/acpica/acpi_wakeup.c Modified: head/sys/dev/acpica/Osd/OsdHardware.c ============================================================================== --- head/sys/dev/acpica/Osd/OsdHardware.c Thu May 3 18:20:35 2018 (r333221) +++ head/sys/dev/acpica/Osd/OsdHardware.c Thu May 3 19:00:50 2018 (r333222) @@ -37,9 +37,15 @@ __FBSDID("$FreeBSD$"); #include #include +extern int acpi_susp_bounce; + ACPI_STATUS AcpiOsEnterSleep(UINT8 SleepState, UINT32 RegaValue, UINT32 RegbValue) { + + /* If testing device suspend only, back out of everything here. */ + if (acpi_susp_bounce) + return (AE_CTRL_TERMINATE); return (AE_OK); } Modified: head/sys/dev/acpica/acpi.c ============================================================================== --- head/sys/dev/acpica/acpi.c Thu May 3 18:20:35 2018 (r333221) +++ head/sys/dev/acpica/acpi.c Thu May 3 19:00:50 2018 (r333222) @@ -287,15 +287,10 @@ SYSCTL_INT(_debug_acpi, OID_AUTO, default_register_wid /* Allow users to override quirks. */ TUNABLE_INT("debug.acpi.quirks", &acpi_quirks); -static int acpi_susp_bounce; +int acpi_susp_bounce; SYSCTL_INT(_debug_acpi, OID_AUTO, suspend_bounce, CTLFLAG_RW, &acpi_susp_bounce, 0, "Don't actually suspend, just test devices."); -int acpi_susp_deep_bounce; -SYSCTL_INT(_debug_acpi, OID_AUTO, suspend_deep_bounce, CTLFLAG_RW, - &acpi_susp_deep_bounce, 0, "Don't actually suspend, " - "bail out just before entering the sleep state."); - /* * ACPI can only be loaded as a module by the loader; activating it after * system bootstrap time is not useful, and can be fatal to the system. @@ -2951,10 +2946,6 @@ acpi_EnterSleepState(struct acpi_softc *sc, int state) goto backout; } slp_state = ACPI_SS_DEV_SUSPEND; - - /* If testing device suspend only, back out of everything here. */ - if (acpi_susp_bounce) - goto backout; status = AcpiEnterSleepStatePrep(state); if (ACPI_FAILURE(status)) { Modified: head/sys/x86/acpica/acpi_wakeup.c ============================================================================== --- head/sys/x86/acpica/acpi_wakeup.c Thu May 3 18:20:35 2018 (r333221) +++ head/sys/x86/acpica/acpi_wakeup.c Thu May 3 19:00:50 2018 (r333222) @@ -79,7 +79,7 @@ CTASSERT(sizeof(wakecode) < PAGE_SIZE - 1024); extern int acpi_resume_beep; extern int acpi_reset_video; -extern int acpi_susp_deep_bounce; +extern int acpi_susp_bounce; #ifdef SMP extern struct susppcb **susppcbs; @@ -277,9 +277,6 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state) PTD[KPTDI] = PTD[LOWPTDI]; #endif - if (acpi_susp_deep_bounce) - resumectx(pcb); - /* Call ACPICA to enter the desired sleep state */ if (state == ACPI_STATE_S4 && sc->acpi_s4bios) status = AcpiEnterSleepStateS4bios(); @@ -291,6 +288,9 @@ acpi_sleep_machdep(struct acpi_softc *sc, int state) AcpiFormatException(status)); return (0); /* couldn't sleep */ } + + if (acpi_susp_bounce) + resumectx(pcb); for (;;) ia32_pause(); From owner-svn-src-head@freebsd.org Thu May 3 19:37:31 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8923EFB783D; Thu, 3 May 2018 19:37:31 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 E23D66DDC0; Thu, 3 May 2018 19:37:30 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from thor.intern.walstatt.dynvpn.de ([77.14.33.35]) by mail.gmx.com (mrgmx103 [212.227.17.168]) with ESMTPSA (Nemesis) id 0Ltqmn-1eFaSO1fwz-011B1q; Thu, 03 May 2018 21:32:13 +0200 Date: Thu, 3 May 2018 21:31:39 +0200 From: "O. Hartmann" To: Stephen Hurd Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys Message-ID: <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> In-Reply-To: <201805021936.w42JaTlq039053@repo.freebsd.org> References: <201805021936.w42JaTlq039053@repo.freebsd.org> Organization: WALSTATT User-Agent: OutScare 3.1415926 X-Operating-System: ImNotAnOperatingSystem 3.141592527 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:uvs0RfuGk0FZLYY3rJeqdpLa1GzehE1iC7yTxNUgGRa9cz7Yxxz 1zkRloA925AmatFg/lUuxqA2smLbfdAPgR80iJCvWK3StTPo+yYbUMQr+cpNV5qz+bcDKbV fCV9TlXIgAkEeBRx+Aujo2QQSTRHMb3adFZ+5RPzI6tyV90jHrHy9LI4PBbx3jv2pyYwCH8 MIa6wacpLZ4HP4LcxHI1A== X-UI-Out-Filterresults: notjunk:1;V01:K0:QIzzL5SJClE=:BA83T7xhvXwWcXDLqef41R b4Sw/BeJm5AXTI7b/IMCZNe0kf/ZcyA1Ev4e5Hb6xTjripqal2Ctf6aDDSSt2uKbgCS1HZLS8 8Yp26wELvnxS1tVSPpxNocD1b0lqYAZrYq0AwqDDzhQclo1omkpxdGhzqcYCaKZeZbX0thlJ5 KXW+VpebSfrkwtVQypRRE6Pqy3+0wl1aE13O7/dUNnZ5XVT4Ua5H1+Ed3taEmmO4a824u/IJ6 umiylkawPspsbK0AydtPuPfHE8XHz04yMljahqCrGG09tiREHSWi/UIx2KpbjHXxY16+JaqGR JGQPq57JjD3kBk1wE3wx1gPRvo1cbd8D7N73NN9cA88M1dyH6RbIWvfcUNq8p1gRlIjM8f4TC 7g5RxSGkIpm63h5k4ljY4ytxuPjHtUkS7rjpztjvZvpFbwn1mQJhgkpPLQiDtA8Gd4DBPVPmq MCzOBOpvIXw4huXG6TnYGpQATt6HHHv9B8vqANmzQg0IFaEBpTZQ8MFpH9owJLjvmv6XA3Zet fnqIwFsRvJM7kifpHrs0hAIKh3oKlfbLd+OPkzZUn1BgeA8hsHQFSJo92djZcmKjzv8Q2J8GT 0eo/7ByTAWJzrCCFr9oPhvZuMq/UGKYpHCvAU6c9WnLcFE9auhwKits5/EuNm5F5xehMgV6Tq awhjCk0/Zl1cB85e9G8AH9mVrzSHqTyqEQcXiWqGmkBffUunpUeaULz9LlykOhvzBeH0BaNc2 fseVYLdVa/0vGcaB+/D39NIQqCPV/E/L6HfiEQLslbB6X1jOWsHTvF1wcd4FzEuQ5bPquZG+F z86SLcD X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 03 May 2018 19:37:32 -0000 LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBNTEyDQoNCkFtIFdl ZCwgMiBNYXkgMjAxOCAxOTozNjoyOSArMDAwMCAoVVRDKQ0KU3RlcGhlbiBIdXJkIDxzaHVyZEBG cmVlQlNELm9yZz4gc2NocmllYjoNCg0KPiBBdXRob3I6IHNodXJkDQo+IERhdGU6IFdlZCBNYXkg IDIgMTk6MzY6MjkgMjAxOA0KPiBOZXcgUmV2aXNpb246IDMzMzE3NQ0KPiBVUkw6IGh0dHBzOi8v c3Zud2ViLmZyZWVic2Qub3JnL2NoYW5nZXNldC9iYXNlLzMzMzE3NQ0KPiANCj4gTG9nOg0KPiAg IFNlcGFyYXRlIGxpc3QgbWFuaXB1bGF0aW9uIGxvY2tpbmcgZnJvbSBzdGF0ZSBjaGFuZ2UgaW4g bXVsdGljYXN0DQo+ICAgDQo+ICAgTXVsdGljYXN0IGluY29ycmVjdGx5IGNhbGxzIGluIHRvIGRy aXZlcnMgd2l0aCBhIG11dGV4IGhlbGQgY2F1c2luZyBkcml2ZXJzDQo+ICAgdG8gaGF2ZSB0byBn byB0aHJvdWdoIGFsbCBtYW5uZXIgb2YgY29udG9ydGlvbnMgdG8gdXNlIGEgbm9uIHNsZWVwYWJs ZSBsb2NrLg0KPiAgIFNlcmlhbGl6ZSBtdWx0aWNhc3QgdXBkYXRlcyBpbnN0ZWFkLg0KPiAgIA0K PiAgIFN1Ym1pdHRlZCBieToJbW1hY3kgPG1tYWN5QG1hdHRtYWN5LmlvPg0KPiAgIFJldmlld2Vk IGJ5OglzaHVyZCwgc2JydW5vDQo+ICAgU3BvbnNvcmVkIGJ5OglMaW1lbGlnaHQgTmV0d29ya3MN Cj4gICBEaWZmZXJlbnRpYWwgUmV2aXNpb246CWh0dHBzOi8vcmV2aWV3cy5mcmVlYnNkLm9yZy9E MTQ5NjkNCj4gDQo+IE1vZGlmaWVkOg0KPiAgIGhlYWQvc3lzL2tlcm4vc3Vicl9ndGFza3F1ZXVl LmMNCj4gICBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jDQo+ICAgaGVhZC9zeXMvbmV0L2lm LmMNCj4gICBoZWFkL3N5cy9uZXRpbmV0L2lnbXAuYw0KPiAgIGhlYWQvc3lzL25ldGluZXQvaWdt cF92YXIuaA0KPiAgIGhlYWQvc3lzL25ldGluZXQvaW4uYw0KPiAgIGhlYWQvc3lzL25ldGluZXQv aW5fbWNhc3QuYw0KPiAgIGhlYWQvc3lzL25ldGluZXQvaW5fcGNiLmMNCj4gICBoZWFkL3N5cy9u ZXRpbmV0L2luX3Zhci5oDQo+ICAgaGVhZC9zeXMvbmV0aW5ldC9pcF9jYXJwLmMNCj4gICBoZWFk L3N5cy9uZXRpbmV0Ni9pbjYuYw0KPiAgIGhlYWQvc3lzL25ldGluZXQ2L2luNl9pZmF0dGFjaC5j DQo+ICAgaGVhZC9zeXMvbmV0aW5ldDYvaW42X21jYXN0LmMNCj4gICBoZWFkL3N5cy9uZXRpbmV0 Ni9pbjZfcGNiLmMNCj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjZfdmFyLmgNCj4gICBoZWFkL3N5 cy9uZXRpbmV0Ni9tbGQ2LmMNCj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9tbGQ2X3Zhci5oDQo+ICAg aGVhZC9zeXMvc3lzL2d0YXNrcXVldWUuaA0KPiANCj4gTW9kaWZpZWQ6IGhlYWQvc3lzL2tlcm4v c3Vicl9ndGFza3F1ZXVlLmMNCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0tLSBoZWFkL3N5 cy9rZXJuL3N1YnJfZ3Rhc2txdWV1ZS5jCVdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOAkocjMzMzE3 NCkNCj4gKysrIGhlYWQvc3lzL2tlcm4vc3Vicl9ndGFza3F1ZXVlLmMJV2VkIE1heSAgMiAxOToz NjoyOSAyMDE4CShyMzMzMTc1KQ0KPiBAQCAtNTMsNiArNTMsNyBAQCBzdGF0aWMgdm9pZAlndGFz a3F1ZXVlX3RocmVhZF9lbnF1ZXVlKHZvaWQgKik7DQo+ICBzdGF0aWMgdm9pZAlndGFza3F1ZXVl X3RocmVhZF9sb29wKHZvaWQgKmFyZyk7DQo+ICANCj4gIFRBU0tRR1JPVVBfREVGSU5FKHNvZnRp cnEsIG1wX25jcHVzLCAxKTsNCj4gK1RBU0tRR1JPVVBfREVGSU5FKGNvbmZpZywgMSwgMSk7DQo+ ICANCj4gIHN0cnVjdCBndGFza3F1ZXVlX2J1c3kgew0KPiAgCXN0cnVjdCBndGFzawkqdGJfcnVu bmluZzsNCj4gQEAgLTY2Miw3ICs2NjMsNyBAQCBTWVNJTklUKHRxZ19yZWNvcmRfc21wX3N0YXJ0 ZWQsIFNJX1NVQl9TTVAsIFNJX09SREVSX0YNCj4gIA0KPiAgdm9pZA0KPiAgdGFza3Fncm91cF9h dHRhY2goc3RydWN0IHRhc2txZ3JvdXAgKnFncm91cCwgc3RydWN0IGdyb3VwdGFzayAqZ3Rhc2ss DQo+IC0gICAgdm9pZCAqdW5pcSwgaW50IGlycSwgY2hhciAqbmFtZSkNCj4gKyAgICB2b2lkICp1 bmlxLCBpbnQgaXJxLCBjb25zdCBjaGFyICpuYW1lKQ0KPiAgew0KPiAgCWNwdXNldF90IG1hc2s7 DQo+ICAJaW50IHFpZCwgZXJyb3I7DQo+IEBAIC05NzYsNCArOTc3LDEzIEBAIHZvaWQNCj4gIHRh c2txZ3JvdXBfZGVzdHJveShzdHJ1Y3QgdGFza3Fncm91cCAqcWdyb3VwKQ0KPiAgew0KPiAgDQo+ ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK3Rhc2txZ3JvdXBfY29uZmlnX2d0YXNrX2luaXQodm9pZCAq Y3R4LCBzdHJ1Y3QgZ3JvdXB0YXNrICpndGFzaywgZ3Rhc2tfZm5fdCAqZm4sDQo+ICsJY29uc3Qg Y2hhciAqbmFtZSkNCj4gK3sNCj4gKw0KPiArCUdST1VQVEFTS19JTklUKGd0YXNrLCAwLCBmbiwg Y3R4KTsNCj4gKwl0YXNrcWdyb3VwX2F0dGFjaChxZ3JvdXBfY29uZmlnLCBndGFzaywgZ3Rhc2ss IC0xLCBuYW1lKTsNCj4gIH0NCj4gDQo+IE1vZGlmaWVkOiBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0 bmVzcy5jDQo+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiAtLS0gaGVhZC9zeXMva2Vybi9zdWJy X3dpdG5lc3MuYwlXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTgJKHIzMzMxNzQpDQo+ICsrKyBoZWFk L3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jCVdlZCBNYXkgIDIgMTk6MzY6MjkgMjAxOAkocjMzMzE3 NSkNCj4gQEAgLTUzMiwxOCArNTMyLDIyIEBAIHN0YXRpYyBzdHJ1Y3Qgd2l0bmVzc19vcmRlcl9s aXN0X2VudHJ5IG9yZGVyX2xpc3RzW10gPQ0KPiAgCSAqIElQdjQgbXVsdGljYXN0Og0KPiAgCSAq IHByb3RvY29sIGxvY2tzIGJlZm9yZSBpbnRlcmZhY2UgbG9ja3MsIGFmdGVyIFVEUCBsb2Nrcy4N Cj4gIAkgKi8NCj4gKwl7ICJpbl9tdWx0aV9zeCIsICZsb2NrX2NsYXNzX3N4IH0sDQo+ICAJeyAi dWRwaW5wIiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gLQl7ICJpbl9tdWx0aV9tdHgiLCAmbG9ja19j bGFzc19tdHhfc2xlZXAgfSwNCj4gKwl7ICJpbl9tdWx0aV9saXN0X210eCIsICZsb2NrX2NsYXNz X210eF9zbGVlcCB9LA0KPiAgCXsgImlnbXBfbXR4IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0s DQo+ICsJeyAiaWZuZXRfcnciLCAmbG9ja19jbGFzc19ydyB9LA0KPiAgCXsgImlmX2FkZHJfbG9j ayIsICZsb2NrX2NsYXNzX3J3IH0sDQo+ICAJeyBOVUxMLCBOVUxMIH0sDQo+ICAJLyoNCj4gIAkg KiBJUHY2IG11bHRpY2FzdDoNCj4gIAkgKiBwcm90b2NvbCBsb2NrcyBiZWZvcmUgaW50ZXJmYWNl IGxvY2tzLCBhZnRlciBVRFAgbG9ja3MuDQo+ICAJICovDQo+ICsJeyAiaW42X211bHRpX3N4Iiwg JmxvY2tfY2xhc3Nfc3ggfSwNCj4gIAl7ICJ1ZHBpbnAiLCAmbG9ja19jbGFzc19ydyB9LA0KPiAt CXsgImluNl9tdWx0aV9tdHgiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAgfSwNCj4gKwl7ICJpbjZf bXVsdGlfbGlzdF9tdHgiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAgfSwNCj4gIAl7ICJtbGRfbXR4 IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQo+ICsJeyAiaWZuZXRfcnciLCAmbG9ja19jbGFz c19ydyB9LA0KPiAgCXsgImlmX2FkZHJfbG9jayIsICZsb2NrX2NsYXNzX3J3IH0sDQo+ICAJeyBO VUxMLCBOVUxMIH0sDQo+ICAJLyoNCj4gDQo+IE1vZGlmaWVkOiBoZWFkL3N5cy9uZXQvaWYuYw0K PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLS0tIGhlYWQvc3lzL25ldC9pZi5jCVdlZCBNYXkg IDIgMTc6NDE6MDAgMjAxOAkocjMzMzE3NCkNCj4gKysrIGhlYWQvc3lzL25ldC9pZi5jCVdlZCBN YXkgIDIgMTk6MzY6MjkgMjAxOAkocjMzMzE3NSkNCj4gQEAgLTk4NSwxMSArOTg1LDEzIEBAIHN0 YXRpYyB2b2lkDQo+ICBpZl9wdXJnZW1hZGRycyhzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gIHsNCj4g IAlzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlmbWE7DQo+IC0Jc3RydWN0IGlmbXVsdGlhZGRyICpuZXh0 Ow0KPiAgDQo+ICAJSUZfQUREUl9XTE9DSyhpZnApOw0KPiAtCVRBSUxRX0ZPUkVBQ0hfU0FGRShp Zm1hLCAmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1hX2xpbmssIG5leHQpDQo+ICsJd2hpbGUgKCFU QUlMUV9FTVBUWSgmaWZwLT5pZl9tdWx0aWFkZHJzKSkgew0KPiArCQlpZm1hID0gVEFJTFFfRklS U1QoJmlmcC0+aWZfbXVsdGlhZGRycyk7DQo+ICsJCVRBSUxRX1JFTU9WRSgmaWZwLT5pZl9tdWx0 aWFkZHJzLCBpZm1hLCBpZm1hX2xpbmspOw0KPiAgCQlpZl9kZWxtdWx0aV9sb2NrZWQoaWZwLCBp Zm1hLCAxKTsNCj4gKwl9DQo+ICAJSUZfQUREUl9XVU5MT0NLKGlmcCk7DQo+ICB9DQo+ICANCj4g QEAgLTM0MjksNiArMzQzMSwxMiBAQCBpZl9hZGRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgc3Ry dWN0IHNvY2thZGRyICpzYSwNCj4gIAlzdHJ1Y3Qgc29ja2FkZHJfZGwgc2RsOw0KPiAgCWludCBl cnJvcjsNCj4gIA0KPiArI2lmZGVmIElORVQNCj4gKwlJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NF UlQoKTsNCj4gKyNlbmRpZg0KPiArI2lmZGVmIElORVQ2DQo+ICsJSU42X01VTFRJX0xJU1RfVU5M T0NLX0FTU0VSVCgpOw0KPiArI2VuZGlmDQo+ICAJLyoNCj4gIAkgKiBJZiB0aGUgYWRkcmVzcyBp cyBhbHJlYWR5IHByZXNlbnQsIHJldHVybiBhIG5ldyByZWZlcmVuY2UgdG8gaXQ7DQo+ICAJICog b3RoZXJ3aXNlLCBhbGxvY2F0ZSBzdG9yYWdlIGFuZCBzZXQgdXAgYSBuZXcgYWRkcmVzcy4NCj4g QEAgLTM2MTAsNiArMzYxOCw5IEBAIGlmX2RlbG11bHRpX2lmbWEoc3RydWN0IGlmbXVsdGlhZGRy ICppZm1hKQ0KPiAgCXN0cnVjdCBpZm5ldCAqaWZwOw0KPiAgCWludCBsYXN0cmVmOw0KPiAgDQo+ ICsjaWZkZWYgSU5FVA0KPiArCUlOX01VTFRJX0xJU1RfVU5MT0NLX0FTU0VSVCgpOw0KPiArI2Vu ZGlmDQo+ICAJaWZwID0gaWZtYS0+aWZtYV9pZnA7DQo+ICAjaWZkZWYgRElBR05PU1RJQw0KPiAg CWlmIChpZnAgPT0gTlVMTCkgew0KPiBAQCAtMzcxMSw4ICszNzIyLDcgQEAgaWZfZGVsbXVsdGlf bG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtdWx0aWFkDQo+ICAJCQlpZl9mcmVl bXVsdGkobGxfaWZtYSk7DQo+ICAJCX0NCj4gIAl9DQo+IC0NCj4gLQlpZiAoaWZwICE9IE5VTEwp DQo+ICsJaWYgKGlmcCAhPSBOVUxMICYmIGRldGFjaGluZyA9PSAwKQ0KPiAgCQlUQUlMUV9SRU1P VkUoJmlmcC0+aWZfbXVsdGlhZGRycywgaWZtYSwgaWZtYV9saW5rKTsNCj4gIA0KPiAgCWlmX2Zy ZWVtdWx0aShpZm1hKTsNCj4gDQo+IE1vZGlmaWVkOiBoZWFkL3N5cy9uZXRpbmV0L2lnbXAuYw0K PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLS0tIGhlYWQvc3lzL25ldGluZXQvaWdtcC5jCVdl ZCBNYXkgIDIgMTc6NDE6MDAgMjAxOAkocjMzMzE3NCkNCj4gKysrIGhlYWQvc3lzL25ldGluZXQv aWdtcC5jCVdlZCBNYXkgIDIgMTk6MzY6MjkgMjAxOAkocjMzMzE3NSkNCj4gQEAgLTEzNiw3ICsx MzYsNyBAQCBzdGF0aWMgaW50CWlnbXBfdjNfZW5xdWV1ZV9ncm91cF9yZWNvcmQoc3RydWN0IG1i dWZxICoNCj4gIAkJICAgIHN0cnVjdCBpbl9tdWx0aSAqLCBjb25zdCBpbnQsIGNvbnN0IGludCwg Y29uc3QgaW50KTsNCj4gIHN0YXRpYyBpbnQJaWdtcF92M19lbnF1ZXVlX2ZpbHRlcl9jaGFuZ2Uo c3RydWN0IG1idWZxICosDQo+ICAJCSAgICBzdHJ1Y3QgaW5fbXVsdGkgKik7DQo+IC1zdGF0aWMg dm9pZAlpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMgKiwN Cj4gK3N0YXRpYyB2b2lkCWlnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1lcnMoc3RydWN0IGluX211 bHRpX2hlYWQgKiwNCj4gIAkJICAgIHN0cnVjdCBtYnVmcSAqLCBzdHJ1Y3QgbWJ1ZnEgKiwgc3Ry dWN0IGluX211bHRpICosDQo+ICAJCSAgICBjb25zdCBpbnQpOw0KPiAgc3RhdGljIGludAlpZ21w X3YzX21lcmdlX3N0YXRlX2NoYW5nZXMoc3RydWN0IGluX211bHRpICosDQo+IEBAIC0xNjIsMTIg KzE2MiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGlzcl9oYW5kbGVyIGlnbXBfbmggPSB7 DQo+ICAgKiB0aGVtc2VsdmVzIGFyZSBub3QgdmlydHVhbGl6ZWQuDQo+ICAgKg0KPiAgICogTG9j a2luZzoNCj4gLSAqICAqIFRoZSBwZXJtaXR0ZWQgbG9jayBvcmRlciBpczogSU5fTVVMVElfTE9D SywgSUdNUF9MT0NLLCBJRl9BRERSX0xPQ0suDQo+ICsgKiAgKiBUaGUgcGVybWl0dGVkIGxvY2sg b3JkZXIgaXM6IElOX01VTFRJX0xJU1RfTE9DSywgSUdNUF9MT0NLLCBJRl9BRERSX0xPQ0suDQo+ ICAgKiAgICBBbnkgbWF5IGJlIHRha2VuIGluZGVwZW5kZW50bHk7IGlmIGFueSBhcmUgaGVsZCBh dCB0aGUgc2FtZQ0KPiAgICogICAgdGltZSwgdGhlIGFib3ZlIGxvY2sgb3JkZXIgbXVzdCBiZSBm b2xsb3dlZC4NCj4gICAqICAqIEFsbCBvdXRwdXQgaXMgZGVsZWdhdGVkIHRvIHRoZSBuZXRpc3Iu DQo+ICAgKiAgICBOb3cgdGhhdCBHaWFudCBoYXMgYmVlbiBlbGltaW5hdGVkLCB0aGUgbmV0aXNy IG1heSBiZSBpbmxpbmVkLg0KPiAtICogICogSU5fTVVMVElfTE9DSyBjb3ZlcnMgaW5fbXVsdGku DQo+ICsgKiAgKiBJTl9NVUxUSV9MSVNUX0xPQ0sgY292ZXJzIGluX211bHRpLg0KPiAgICogICog SUdNUF9MT0NLIGNvdmVycyBpZ21wX2lmc29mdGMgYW5kIGFueSBnbG9iYWwgdmFyaWFibGVzIGlu IHRoaXMgZmlsZSwNCj4gICAqICAgIGluY2x1ZGluZyB0aGUgb3V0cHV0IHF1ZXVlLg0KPiAgICog ICogSUZfQUREUl9MT0NLIGNvdmVycyBpZl9tdWx0aWFkZHJzLCB3aGljaCBpcyB1c2VkIGZvciBh IHZhcmlldHkgb2YNCj4gQEAgLTQ0MSw3ICs0NDEsNyBAQCBzeXNjdGxfaWdtcF9pZmluZm8oU1lT Q1RMX0hBTkRMRVJfQVJHUykNCj4gIAlpZiAoZXJyb3IpDQo+ICAJCXJldHVybiAoZXJyb3IpOw0K PiAgDQo+IC0JSU5fTVVMVElfTE9DSygpOw0KPiArCUlOX01VTFRJX0xJU1RfTE9DSygpOw0KPiAg CUlHTVBfTE9DSygpOw0KPiAgDQo+ICAJaWYgKG5hbWVbMF0gPD0gMCB8fCBuYW1lWzBdID4gVl9p Zl9pbmRleCkgew0KPiBAQCAtNDc1LDcgKzQ3NSw3IEBAIHN5c2N0bF9pZ21wX2lmaW5mbyhTWVND VExfSEFORExFUl9BUkdTKQ0KPiAgDQo+ICBvdXRfbG9ja2VkOg0KPiAgCUlHTVBfVU5MT0NLKCk7 DQo+IC0JSU5fTVVMVElfVU5MT0NLKCk7DQo+ICsJSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4g IAlyZXR1cm4gKGVycm9yKTsNCj4gIH0NCj4gIA0KPiBAQCAtNTg2LDcgKzU4Niw2IEBAIGlnaV9h bGxvY19sb2NrZWQoLypjb25zdCovIHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiAgCWlnaS0+aWdpX3Fp ID0gSUdNUF9RSV9JTklUOw0KPiAgCWlnaS0+aWdpX3FyaSA9IElHTVBfUVJJX0lOSVQ7DQo+ICAJ aWdpLT5pZ2lfdXJpID0gSUdNUF9VUklfSU5JVDsNCj4gLQlTTElTVF9JTklUKCZpZ2ktPmlnaV9y ZWxpbm1oZWFkKTsNCj4gIAltYnVmcV9pbml0KCZpZ2ktPmlnaV9ncSwgSUdNUF9NQVhfUkVTUE9O U0VfUEFDS0VUUyk7DQo+ICANCj4gIAlMSVNUX0lOU0VSVF9IRUFEKCZWX2lnaV9oZWFkLCBpZ2ks IGlnaV9saW5rKTsNCj4gQEAgLTYxMiwxMSArNjExLDEyIEBAIGlnbXBfaWZkZXRhY2goc3RydWN0 IGlmbmV0ICppZnApDQo+ICB7DQo+ICAJc3RydWN0IGlnbXBfaWZzb2Z0YwkqaWdpOw0KPiAgCXN0 cnVjdCBpZm11bHRpYWRkcgkqaWZtYTsNCj4gLQlzdHJ1Y3QgaW5fbXVsdGkJCSppbm0sICp0aW5t Ow0KPiAtDQo+ICsJc3RydWN0IGluX211bHRpCQkqaW5tOw0KPiArCXN0cnVjdCBpbl9tdWx0aV9o ZWFkIGlubV9mcmVlX3RtcDsNCj4gIAlDVFIzKEtUUl9JR01QVjMsICIlczogY2FsbGVkIGZvciBp ZnAgJXAoJXMpIiwgX19mdW5jX18sIGlmcCwNCj4gIAkgICAgaWZwLT5pZl94bmFtZSk7DQo+ICAN Cj4gKwlTTElTVF9JTklUKCZpbm1fZnJlZV90bXApOw0KPiAgCUlHTVBfTE9DSygpOw0KPiAgDQo+ ICAJaWdpID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZwLT5pZl9hZmRhdGFbQUZfSU5FVF0pLT5p aV9pZ21wOw0KPiBAQCAtNjMxLDI0ICs2MzEsMTUgQEAgaWdtcF9pZmRldGFjaChzdHJ1Y3QgaWZu ZXQgKmlmcCkNCj4gIAkJCSAgICAoIiVzOiBpZm1hX3Byb3Rvc3BlYyBpcyBOVUxMIiwgX19mdW5j X18pKTsNCj4gICNlbmRpZg0KPiAgCQkJaW5tID0gKHN0cnVjdCBpbl9tdWx0aSAqKWlmbWEtPmlm bWFfcHJvdG9zcGVjOw0KPiAtCQkJaWYgKGlubS0+aW5tX3N0YXRlID09IElHTVBfTEVBVklOR19N RU1CRVIpIHsNCj4gLQkJCQlTTElTVF9JTlNFUlRfSEVBRCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwN Cj4gLQkJCQkgICAgaW5tLCBpbm1fbnJlbGUpOw0KPiAtCQkJfQ0KPiArCQkJaWYgKGlubS0+aW5t X3N0YXRlID09IElHTVBfTEVBVklOR19NRU1CRVIpDQo+ICsJCQkJaW5tX3JlbGVfbG9ja2VkKCZp bm1fZnJlZV90bXAsIGlubSk7DQo+ICAJCQlpbm1fY2xlYXJfcmVjb3JkZWQoaW5tKTsNCj4gIAkJ fQ0KPiAgCQlJRl9BRERSX1JVTkxPQ0soaWZwKTsNCj4gLQkJLyoNCj4gLQkJICogRnJlZSB0aGUg aW5fbXVsdGkgcmVmZXJlbmNlKHMpIGZvciB0aGlzIElHTVAgbGlmZWN5Y2xlLg0KPiAtCQkgKi8N Cj4gLQkJU0xJU1RfRk9SRUFDSF9TQUZFKGlubSwgJmlnaS0+aWdpX3JlbGlubWhlYWQsIGlubV9u cmVsZSwNCj4gLQkJICAgIHRpbm0pIHsNCj4gLQkJCVNMSVNUX1JFTU9WRV9IRUFEKCZpZ2ktPmln aV9yZWxpbm1oZWFkLCBpbm1fbnJlbGUpOw0KPiAtCQkJaW5tX3JlbGVhc2VfbG9ja2VkKGlubSk7 DQo+IC0JCX0NCj4gKwkJaW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJlZCgmaW5tX2ZyZWVfdG1wKTsN Cj4gIAl9DQo+IC0NCj4gIAlJR01QX1VOTE9DSygpOw0KPiArDQo+ICB9DQo+ICANCj4gIC8qDQo+ IEBAIC02ODQsMTEgKzY3NSw2IEBAIGlnaV9kZWxldGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBpZm5l dCAqaWZwKQ0KPiAgCQkJbWJ1ZnFfZHJhaW4oJmlnaS0+aWdpX2dxKTsNCj4gIA0KPiAgCQkJTElT VF9SRU1PVkUoaWdpLCBpZ2lfbGluayk7DQo+IC0NCj4gLQkJCUtBU1NFUlQoU0xJU1RfRU1QVFko JmlnaS0+aWdpX3JlbGlubWhlYWQpLA0KPiAtCQkJICAgICgiJXM6IHRoZXJlIGFyZSBkYW5nbGlu ZyBpbl9tdWx0aSByZWZlcmVuY2VzIiwNCj4gLQkJCSAgICBfX2Z1bmNfXykpOw0KPiAtDQo+ICAJ CQlmcmVlKGlnaSwgTV9JR01QKTsNCj4gIAkJCXJldHVybjsNCj4gIAkJfQ0KPiBAQCAtNzIyLDcg KzcwOCw3IEBAIGlnbXBfaW5wdXRfdjFfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0 cnVjdCBpcA0KPiAgCX0NCj4gIAlJR01QU1RBVF9JTkMoaWdwc19yY3ZfZ2VuX3F1ZXJpZXMpOw0K PiAgDQo+IC0JSU5fTVVMVElfTE9DSygpOw0KPiArCUlOX01VTFRJX0xJU1RfTE9DSygpOw0KPiAg CUlHTVBfTE9DSygpOw0KPiAgDQo+ICAJaWdpID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZwLT5p Zl9hZmRhdGFbQUZfSU5FVF0pLT5paV9pZ21wOw0KPiBAQCAtNzc4LDcgKzc2NCw3IEBAIGlnbXBf aW5wdXRfdjFfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiAgDQo+ ICBvdXRfbG9ja2VkOg0KPiAgCUlHTVBfVU5MT0NLKCk7DQo+IC0JSU5fTVVMVElfVU5MT0NLKCk7 DQo+ICsJSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gIA0KPiAgCXJldHVybiAoMCk7DQo+ICB9 DQo+IEBAIC04MTYsNyArODAyLDcgQEAgaWdtcF9pbnB1dF92Ml9xdWVyeShzdHJ1Y3QgaWZuZXQg KmlmcCwgY29uc3Qgc3RydWN0IGlwDQo+ICAJCUlHTVBTVEFUX0lOQyhpZ3BzX3Jjdl9ncm91cF9x dWVyaWVzKTsNCj4gIAl9DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLKCk7DQo+ICsJSU5fTVVMVElf TElTVF9MT0NLKCk7DQo+ICAJSUdNUF9MT0NLKCk7DQo+ICANCj4gIAlpZ2kgPSAoKHN0cnVjdCBp bl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSktPmlpX2lnbXA7DQo+IEBAIC04NzIs NyArODU4LDcgQEAgaWdtcF9pbnB1dF92Ml9xdWVyeShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qg c3RydWN0IGlwDQo+ICANCj4gIG91dF9sb2NrZWQ6DQo+ICAJSUdNUF9VTkxPQ0soKTsNCj4gLQlJ Tl9NVUxUSV9VTkxPQ0soKTsNCj4gKwlJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiAgDQo+ICAJ cmV0dXJuICgwKTsNCj4gIH0NCj4gQEAgLTg5OSw3ICs4ODUsNyBAQCBpZ21wX3YyX3VwZGF0ZV9n cm91cChzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgY29uc3QgaW50IHQNCj4gIAlDVFI0KEtUUl9JR01Q VjMsICIweCUwOHg6ICVzLyVzIHRpbWVyPSVkIiwgX19mdW5jX18sDQo+ICAJICAgIG50b2hsKGlu bS0+aW5tX2FkZHIuc19hZGRyKSwgaW5tLT5pbm1faWZwLT5pZl94bmFtZSwgdGltZXIpOw0KPiAg DQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gKwlJTl9NVUxUSV9MSVNUX0xPQ0tfQVNT RVJUKCk7DQo+ICANCj4gIAlzd2l0Y2ggKGlubS0+aW5tX3N0YXRlKSB7DQo+ICAJY2FzZSBJR01Q X05PVF9NRU1CRVI6DQo+IEBAIC0xMDExLDcgKzk5Nyw3IEBAIGlnbXBfaW5wdXRfdjNfcXVlcnko c3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiAgCQkJSUdNUFNUQVRfSU5DKGln cHNfcmN2X2dzcl9xdWVyaWVzKTsNCj4gIAl9DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLKCk7DQo+ ICsJSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ICAJSUdNUF9MT0NLKCk7DQo+ICANCj4gIAlpZ2kg PSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSktPmlpX2lnbXA7 DQo+IEBAIC0xMDkyLDcgKzEwNzgsNyBAQCBpZ21wX2lucHV0X3YzX3F1ZXJ5KHN0cnVjdCBpZm5l dCAqaWZwLCBjb25zdCBzdHJ1Y3QgaXANCj4gIA0KPiAgb3V0X2xvY2tlZDoNCj4gIAlJR01QX1VO TE9DSygpOw0KPiAtCUlOX01VTFRJX1VOTE9DSygpOw0KPiArCUlOX01VTFRJX0xJU1RfVU5MT0NL KCk7DQo+ICANCj4gIAlyZXR1cm4gKDApOw0KPiAgfQ0KPiBAQCAtMTEwOSw3ICsxMDk1LDcgQEAg aWdtcF9pbnB1dF92M19ncm91cF9xdWVyeShzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgc3RydWN0DQo+ ICAJaW50CQkJIHJldHZhbDsNCj4gIAl1aW50MTZfdAkJIG5zcmM7DQo+ICANCj4gLQlJTl9NVUxU SV9MT0NLX0FTU0VSVCgpOw0KPiArCUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gIAlJ R01QX0xPQ0tfQVNTRVJUKCk7DQo+ICANCj4gIAlyZXR2YWwgPSAwOw0KPiBAQCAtMTI0Niw3ICsx MjMyLDcgQEAgaWdtcF9pbnB1dF92MV9yZXBvcnQoc3RydWN0IGlmbmV0ICppZnAsIC8qY29uc3Qq LyBzdHJ1DQo+ICAJICogSWYgd2UgYXJlIGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAsIGFuZCBvdXIg bWVtYmVyc2hpcCBzaG91bGQgYmUNCj4gIAkgKiByZXBvcnRlZCwgc3RvcCBvdXIgZ3JvdXAgdGlt ZXIgYW5kIHRyYW5zaXRpb24gdG8gdGhlICdsYXp5JyBzdGF0ZS4NCj4gIAkgKi8NCj4gLQlJTl9N VUxUSV9MT0NLKCk7DQo+ICsJSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ICAJaW5tID0gaW5tX2xv b2t1cChpZnAsIGlnbXAtPmlnbXBfZ3JvdXApOw0KPiAgCWlmIChpbm0gIT0gTlVMTCkgew0KPiAg CQlzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2k7DQo+IEBAIC0xMzA1LDcgKzEyOTEsNyBAQCBpZ21w X2lucHV0X3YxX3JlcG9ydChzdHJ1Y3QgaWZuZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gIAl9 DQo+ICANCj4gIG91dF9sb2NrZWQ6DQo+IC0JSU5fTVVMVElfVU5MT0NLKCk7DQo+ICsJSU5fTVVM VElfTElTVF9VTkxPQ0soKTsNCj4gIA0KPiAgCXJldHVybiAoMCk7DQo+ICB9DQo+IEBAIC0xMzcz LDcgKzEzNTksNyBAQCBpZ21wX2lucHV0X3YyX3JlcG9ydChzdHJ1Y3QgaWZuZXQgKmlmcCwgLypj b25zdCovIHN0cnUNCj4gIAkgKiByZXBvcnRlZCwgYW5kIG91ciBncm91cCB0aW1lciBpcyBwZW5k aW5nIG9yIGFib3V0IHRvIGJlIHJlc2V0LA0KPiAgCSAqIHN0b3Agb3VyIGdyb3VwIHRpbWVyIGJ5 IHRyYW5zaXRpb25pbmcgdG8gdGhlICdsYXp5JyBzdGF0ZS4NCj4gIAkgKi8NCj4gLQlJTl9NVUxU SV9MT0NLKCk7DQo+ICsJSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ICAJaW5tID0gaW5tX2xvb2t1 cChpZnAsIGlnbXAtPmlnbXBfZ3JvdXApOw0KPiAgCWlmIChpbm0gIT0gTlVMTCkgew0KPiAgCQlz dHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2k7DQo+IEBAIC0xNDE4LDcgKzE0MDQsNyBAQCBpZ21wX2lu cHV0X3YyX3JlcG9ydChzdHJ1Y3QgaWZuZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gIAl9DQo+ ICANCj4gIG91dF9sb2NrZWQ6DQo+IC0JSU5fTVVMVElfVU5MT0NLKCk7DQo+ICsJSU5fTVVMVElf TElTVF9VTkxPQ0soKTsNCj4gIA0KPiAgCXJldHVybiAoMCk7DQo+ICB9DQo+IEBAIC0xNjQ3LDYg KzE2MzMsNyBAQCBpZ21wX2Zhc3R0aW1vX3ZuZXQodm9pZCkNCj4gIAlzdHJ1Y3QgaWdtcF9pZnNv ZnRjCSppZ2k7DQo+ICAJc3RydWN0IGlmbXVsdGlhZGRyCSppZm1hOw0KPiAgCXN0cnVjdCBpbl9t dWx0aQkJKmlubTsNCj4gKwlzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBpbm1fZnJlZV90bXA7DQo+ICAJ aW50CQkJIGxvb3AsIHVyaV9mYXN0aHo7DQo+ICANCj4gIAlsb29wID0gMDsNCj4gQEAgLTE2NjIs NyArMTY0OSw4IEBAIGlnbXBfZmFzdHRpbW9fdm5ldCh2b2lkKQ0KPiAgCSAgICAhVl9zdGF0ZV9j aGFuZ2VfdGltZXJzX3J1bm5pbmcpDQo+ICAJCXJldHVybjsNCj4gIA0KPiAtCUlOX01VTFRJX0xP Q0soKTsNCj4gKwlTTElTVF9JTklUKCZpbm1fZnJlZV90bXApOw0KPiArCUlOX01VTFRJX0xJU1Rf TE9DSygpOw0KPiAgCUlHTVBfTE9DSygpOw0KPiAgDQo+ICAJLyoNCj4gQEAgLTE3MjAsNyArMTcw OCw3IEBAIGlnbXBfZmFzdHRpbW9fdm5ldCh2b2lkKQ0KPiAgCQkJCSAgICBpZ2ktPmlnaV92ZXJz aW9uKTsNCj4gIAkJCQlicmVhazsNCj4gIAkJCWNhc2UgSUdNUF9WRVJTSU9OXzM6DQo+IC0JCQkJ aWdtcF92M19wcm9jZXNzX2dyb3VwX3RpbWVycyhpZ2ksICZxcnEsDQo+ICsJCQkJaWdtcF92M19w cm9jZXNzX2dyb3VwX3RpbWVycygmaW5tX2ZyZWVfdG1wLCAmcXJxLA0KPiAgCQkJCSAgICAmc2Nx LCBpbm0sIHVyaV9mYXN0aHopOw0KPiAgCQkJCWJyZWFrOw0KPiAgCQkJfQ0KPiBAQCAtMTcyOCw4 ICsxNzE2LDYgQEAgaWdtcF9mYXN0dGltb192bmV0KHZvaWQpDQo+ICAJCUlGX0FERFJfUlVOTE9D SyhpZnApOw0KPiAgDQo+ICAJCWlmIChpZ2ktPmlnaV92ZXJzaW9uID09IElHTVBfVkVSU0lPTl8z KSB7DQo+IC0JCQlzdHJ1Y3QgaW5fbXVsdGkJCSp0aW5tOw0KPiAtDQo+ICAJCQlpZ21wX2Rpc3Bh dGNoX3F1ZXVlKCZxcnEsIDAsIGxvb3ApOw0KPiAgCQkJaWdtcF9kaXNwYXRjaF9xdWV1ZSgmc2Nx LCAwLCBsb29wKTsNCj4gIA0KPiBAQCAtMTczNywxOCArMTcyMywxMyBAQCBpZ21wX2Zhc3R0aW1v X3ZuZXQodm9pZCkNCj4gIAkJCSAqIEZyZWUgdGhlIGluX211bHRpIHJlZmVyZW5jZShzKSBmb3Ig dGhpcw0KPiAgCQkJICogSUdNUCBsaWZlY3ljbGUuDQo+ICAJCQkgKi8NCj4gLQkJCVNMSVNUX0ZP UkVBQ0hfU0FGRShpbm0sICZpZ2ktPmlnaV9yZWxpbm1oZWFkLA0KPiAtCQkJICAgIGlubV9ucmVs ZSwgdGlubSkgew0KPiAtCQkJCVNMSVNUX1JFTU9WRV9IRUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFk LA0KPiAtCQkJCSAgICBpbm1fbnJlbGUpOw0KPiAtCQkJCWlubV9yZWxlYXNlX2xvY2tlZChpbm0p Ow0KPiAtCQkJfQ0KPiArCQkJaW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJlZCgmaW5tX2ZyZWVfdG1w KTsNCj4gIAkJfQ0KPiAgCX0NCj4gIA0KPiAgb3V0X2xvY2tlZDoNCj4gIAlJR01QX1VOTE9DSygp Ow0KPiAtCUlOX01VTFRJX1VOTE9DSygpOw0KPiArCUlOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ ICB9DQo+ICANCj4gIC8qDQo+IEBAIC0xNzYwLDcgKzE3NDEsNyBAQCBpZ21wX3YxdjJfcHJvY2Vz c19ncm91cF90aW1lcihzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgY28NCj4gIHsNCj4gIAlpbnQgcmVw b3J0X3RpbWVyX2V4cGlyZWQ7DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiAr CUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gIAlJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ ICANCj4gIAlpZiAoaW5tLT5pbm1fdGltZXIgPT0gMCkgew0KPiBAQCAtMTgwMiwxNCArMTc4Mywx NCBAQCBpZ21wX3YxdjJfcHJvY2Vzc19ncm91cF90aW1lcihzdHJ1Y3QgaW5fbXVsdGkgKmlubSwg Y28NCj4gICAqIE5vdGU6IFVubG9ja2VkIHJlYWQgZnJvbSBpZ2kuDQo+ICAgKi8NCj4gIHN0YXRp YyB2b2lkDQo+IC1pZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29m dGMgKmlnaSwNCj4gK2lnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1lcnMoc3RydWN0IGluX211bHRp X2hlYWQgKmlubWgsDQo+ICAgICAgc3RydWN0IG1idWZxICpxcnEsIHN0cnVjdCBtYnVmcSAqc2Nx LA0KPiAgICAgIHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjb25zdCBpbnQgdXJpX2Zhc3RoeikNCj4g IHsNCj4gIAlpbnQgcXVlcnlfcmVzcG9uc2VfdGltZXJfZXhwaXJlZDsNCj4gIAlpbnQgc3RhdGVf Y2hhbmdlX3JldHJhbnNtaXRfdGltZXJfZXhwaXJlZDsNCj4gIA0KPiAtCUlOX01VTFRJX0xPQ0tf QVNTRVJUKCk7DQo+ICsJSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiAgCUlHTVBfTE9D S19BU1NFUlQoKTsNCj4gIA0KPiAgCXF1ZXJ5X3Jlc3BvbnNlX3RpbWVyX2V4cGlyZWQgPSAwOw0K PiBAQCAtMTkwNyw4ICsxODg4LDcgQEAgaWdtcF92M19wcm9jZXNzX2dyb3VwX3RpbWVycyhzdHJ1 Y3QgaWdtcF9pZnNvZnRjICppZ2ksDQo+ICAJCQlpZiAoaW5tLT5pbm1fc3RhdGUgPT0gSUdNUF9M RUFWSU5HX01FTUJFUiAmJg0KPiAgCQkJICAgIGlubS0+aW5tX3NjcnYgPT0gMCkgew0KPiAgCQkJ CWlubS0+aW5tX3N0YXRlID0gSUdNUF9OT1RfTUVNQkVSOw0KPiAtCQkJCVNMSVNUX0lOU0VSVF9I RUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFkLA0KPiAtCQkJCSAgICBpbm0sIGlubV9ucmVsZSk7DQo+ ICsJCQkJaW5tX3JlbGVfbG9ja2VkKGlubWgsIGlubSk7DQo+ICAJCQl9DQo+ICAJCX0NCj4gIAkJ YnJlYWs7DQo+IEBAIC0xOTI5LDcgKzE5MDksNyBAQCBzdGF0aWMgdm9pZA0KPiAgaWdtcF92M19z dXBwcmVzc19ncm91cF9yZWNvcmQoc3RydWN0IGluX211bHRpICppbm0pDQo+ICB7DQo+ICANCj4g LQlJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiArCUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQo KTsNCj4gIA0KPiAgCUtBU1NFUlQoaW5tLT5pbm1faWdpLT5pZ2lfdmVyc2lvbiA9PSBJR01QX1ZF UlNJT05fMywNCj4gIAkJKCIlczogbm90IElHTVB2MyBtb2RlIG9uIGxpbmsiLCBfX2Z1bmNfXykp Ow0KPiBAQCAtMjAwMywxMyArMTk4MywxNSBAQCBpZ21wX3YzX2NhbmNlbF9saW5rX3RpbWVycyhz dHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2kpDQo+ICB7DQo+ICAJc3RydWN0IGlmbXVsdGlhZGRyCSpp Zm1hOw0KPiAgCXN0cnVjdCBpZm5ldAkJKmlmcDsNCj4gLQlzdHJ1Y3QgaW5fbXVsdGkJCSppbm0s ICp0aW5tOw0KPiArCXN0cnVjdCBpbl9tdWx0aQkJKmlubTsNCj4gKwlzdHJ1Y3QgaW5fbXVsdGlf aGVhZCBpbm1fZnJlZV90bXA7DQo+ICANCj4gIAlDVFIzKEtUUl9JR01QVjMsICIlczogY2FuY2Vs IHYzIHRpbWVycyBvbiBpZnAgJXAoJXMpIiwgX19mdW5jX18sDQo+ICAJICAgIGlnaS0+aWdpX2lm cCwgaWdpLT5pZ2lfaWZwLT5pZl94bmFtZSk7DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLX0FTU0VS VCgpOw0KPiArCUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gIAlJR01QX0xPQ0tfQVNT RVJUKCk7DQo+ICsJU0xJU1RfSU5JVCgmaW5tX2ZyZWVfdG1wKTsNCj4gIA0KPiAgCS8qDQo+ICAJ ICogU3RvcCB0aGUgdjMgR2VuZXJhbCBRdWVyeSBSZXNwb25zZSBvbiB0aGlzIGxpbmsgc3RvbmUg ZGVhZC4NCj4gQEAgLTIwNTAsNyArMjAzMiw3IEBAIGlnbXBfdjNfY2FuY2VsX2xpbmtfdGltZXJz KHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaSkNCj4gIAkJCSAqIG1lc3NhZ2UgaXMgc2VudCB1cHN0 cmVhbSB0byB0aGUgb2xkIHF1ZXJpZXIgLS0NCj4gIAkJCSAqIHRyYW5zaXRpb24gdG8gTk9UIHdv dWxkIGxvc2UgdGhlIGxlYXZlIGFuZCByYWNlLg0KPiAgCQkJICovDQo+IC0JCQlTTElTVF9JTlNF UlRfSEVBRCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwgaW5tLCBpbm1fbnJlbGUpOw0KPiArCQkJaW5t X3JlbGVfbG9ja2VkKCZpbm1fZnJlZV90bXAsIGlubSk7DQo+ICAJCQkvKiBGQUxMVEhST1VHSCAq Lw0KPiAgCQljYXNlIElHTVBfR19RVUVSWV9QRU5ESU5HX01FTUJFUjoNCj4gIAkJY2FzZSBJR01Q X1NHX1FVRVJZX1BFTkRJTkdfTUVNQkVSOg0KPiBAQCAtMjA2OSwxMCArMjA1MSw4IEBAIGlnbXBf djNfY2FuY2VsX2xpbmtfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaSkNCj4gIAkJbWJ1 ZnFfZHJhaW4oJmlubS0+aW5tX3NjcSk7DQo+ICAJfQ0KPiAgCUlGX0FERFJfUlVOTE9DSyhpZnAp Ow0KPiAtCVNMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZpZ2ktPmlnaV9yZWxpbm1oZWFkLCBpbm1f bnJlbGUsIHRpbm0pIHsNCj4gLQkJU0xJU1RfUkVNT1ZFX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhl YWQsIGlubV9ucmVsZSk7DQo+IC0JCWlubV9yZWxlYXNlX2xvY2tlZChpbm0pOw0KPiAtCX0NCj4g Kw0KPiArCWlubV9yZWxlYXNlX2xpc3RfZGVmZXJyZWQoJmlubV9mcmVlX3RtcCk7DQo+ICB9DQo+ ICANCj4gIC8qDQo+IEBAIC0yMTk5LDcgKzIxNzksNyBAQCBpZ21wX3YxdjJfcXVldWVfcmVwb3J0 KHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjb25zdCBpbnQNCj4gIAlzdHJ1Y3QgaXAJCSppcDsNCj4g IAlzdHJ1Y3QgbWJ1ZgkJKm07DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiAr CUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gIAlJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ ICANCj4gIAlpZnAgPSBpbm0tPmlubV9pZnA7DQo+IEBAIC0yMjc2LDEwICsyMjU2LDggQEAgaWdt cF9jaGFuZ2Vfc3RhdGUoc3RydWN0IGluX211bHRpICppbm0pDQo+ICAJc3RydWN0IGlmbmV0ICpp ZnA7DQo+ICAJaW50IGVycm9yOw0KPiAgDQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4g LQ0KPiAgCWVycm9yID0gMDsNCj4gLQ0KPiArCUlOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ICAJ LyoNCj4gIAkgKiBUcnkgdG8gZGV0ZWN0IGlmIHRoZSB1cHBlciBsYXllciBqdXN0IGFza2VkIHVz IHRvIGNoYW5nZSBzdGF0ZQ0KPiAgCSAqIGZvciBhbiBpbnRlcmZhY2Ugd2hpY2ggaGFzIG5vdyBn b25lIGF3YXkuDQo+IEBAIC0yMzc5LDkgKzIzNTcsMTAgQEAgaWdtcF9pbml0aWFsX2pvaW4oc3Ry dWN0IGluX211bHRpICppbm0sIHN0cnVjdCBpZ21wX2lmDQo+ICAJCSAqIGdyb3VwIGFyb3VuZCBm b3IgdGhlIGZpbmFsIElOQ0xVREUge30gZW5xdWV1ZS4NCj4gIAkJICovDQo+ICAJCWlmIChpZ2kt PmlnaV92ZXJzaW9uID09IElHTVBfVkVSU0lPTl8zICYmDQo+IC0JCSAgICBpbm0tPmlubV9zdGF0 ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSKQ0KPiAtCQkJaW5tX3JlbGVhc2VfbG9ja2VkKGlubSk7 DQo+IC0NCj4gKwkJICAgIGlubS0+aW5tX3N0YXRlID09IElHTVBfTEVBVklOR19NRU1CRVIpIHsN Cj4gKwkJCU1QQVNTKGlubS0+aW5tX3JlZmNvdW50ID4gMSk7DQo+ICsJCQlpbm1fcmVsZV9sb2Nr ZWQoTlVMTCwgaW5tKTsNCj4gKwkJfQ0KPiAgCQlpbm0tPmlubV9zdGF0ZSA9IElHTVBfUkVQT1JU SU5HX01FTUJFUjsNCj4gIA0KPiAgCQlzd2l0Y2ggKGlnaS0+aWdpX3ZlcnNpb24pIHsNCj4gQEAg LTI0NzMsNyArMjQ1Miw3IEBAIGlnbXBfaGFuZGxlX3N0YXRlX2NoYW5nZShzdHJ1Y3QgaW5fbXVs dGkgKmlubSwgc3RydWN0IA0KPiAgDQo+ICAJaWZwID0gaW5tLT5pbm1faWZwOw0KPiAgDQo+IC0J SU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gKwlJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7 DQo+ICAJSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiAgDQo+ICAJS0FTU0VSVChpZ2kgJiYgaWdpLT5p Z2lfaWZwID09IGlmcCwgKCIlczogaW5jb25zaXN0ZW50IGlmcCIsIF9fZnVuY19fKSk7DQo+IEBA IC0yNTMxLDcgKzI1MTAsNyBAQCBpZ21wX2ZpbmFsX2xlYXZlKHN0cnVjdCBpbl9tdWx0aSAqaW5t LCBzdHJ1Y3QgaWdtcF9pZnMNCj4gIAkgICAgX19mdW5jX18sIG50b2hsKGlubS0+aW5tX2FkZHIu c19hZGRyKSwgaW5tLT5pbm1faWZwLA0KPiAgCSAgICBpbm0tPmlubV9pZnAtPmlmX3huYW1lKTsN Cj4gIA0KPiAtCUlOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ICsJSU5fTVVMVElfTElTVF9MT0NL X0FTU0VSVCgpOw0KPiAgCUlHTVBfTE9DS19BU1NFUlQoKTsNCj4gIA0KPiAgCXN3aXRjaCAoaW5t LT5pbm1fc3RhdGUpIHsNCj4gQEAgLTI2NTgsNyArMjYzNyw3IEBAIGlnbXBfdjNfZW5xdWV1ZV9n cm91cF9yZWNvcmQoc3RydWN0IG1idWZxICptcSwgc3RydWN0IA0KPiAgCWluX2FkZHJfdAkJIG5h ZGRyOw0KPiAgCXVpbnQ4X3QJCQkgbW9kZTsNCj4gIA0KPiAtCUlOX01VTFRJX0xPQ0tfQVNTRVJU KCk7DQo+ICsJSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiAgDQo+ICAJZXJyb3IgPSAw Ow0KPiAgCWlmcCA9IGlubS0+aW5tX2lmcDsNCj4gQEAgLTMwMTgsNyArMjk5Nyw3IEBAIGlnbXBf djNfZW5xdWV1ZV9maWx0ZXJfY2hhbmdlKHN0cnVjdCBtYnVmcSAqbXEsIHN0cnVjdA0KPiAgCXVp bnQ4X3QJCQkgbW9kZSwgbm93LCB0aGVuOw0KPiAgCXJlY3R5cGVfdAkJIGNydCwgZHJ0LCBucnQ7 DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiArCUlOX01VTFRJX0xJU1RfTE9D S19BU1NFUlQoKTsNCj4gIA0KPiAgCWlmIChpbm0tPmlubV9uc3JjID09IDAgfHwNCj4gIAkgICAg KGlubS0+aW5tX3N0WzBdLmlzc19hc20gPiAwICYmIGlubS0+aW5tX3N0WzFdLmlzc19hc20gPiAw KSkNCj4gQEAgLTMyMjEsNyArMzIwMCw3IEBAIGlnbXBfdjNfbWVyZ2Vfc3RhdGVfY2hhbmdlcyhz dHJ1Y3QgaW5fbXVsdGkgKmlubSwgc3RydQ0KPiAgCWRvbWVyZ2UgPSAwOw0KPiAgCXJlY3NsZW4g PSAwOw0KPiAgDQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gKwlJTl9NVUxUSV9MSVNU X0xPQ0tfQVNTRVJUKCk7DQo+ICAJSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiAgDQo+ICAJLyoNCj4g QEAgLTMzMjAsNyArMzI5OSw3IEBAIGlnbXBfdjNfZGlzcGF0Y2hfZ2VuZXJhbF9xdWVyeShzdHJ1 Y3QgaWdtcF9pZnNvZnRjICppZw0KPiAgCXN0cnVjdCBpbl9tdWx0aQkJKmlubTsNCj4gIAlpbnQJ CQkgcmV0dmFsLCBsb29wOw0KPiAgDQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gKwlJ Tl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ICAJSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiAg DQo+ICAJS0FTU0VSVChpZ2ktPmlnaV92ZXJzaW9uID09IElHTVBfVkVSU0lPTl8zLA0KPiBAQCAt MzYzMiw3ICszNjExLDYgQEAgREJfU0hPV19DT01NQU5EKGlnaV9saXN0LCBkYl9zaG93X2lnaV9s aXN0KQ0KPiAgCQlkYl9wcmludGYoIiAgICBxaSAldVxuIiwgaWdpLT5pZ2lfcWkpOw0KPiAgCQlk Yl9wcmludGYoIiAgICBxcmkgJXVcbiIsIGlnaS0+aWdpX3FyaSk7DQo+ICAJCWRiX3ByaW50Zigi ICAgIHVyaSAldVxuIiwgaWdpLT5pZ2lfdXJpKTsNCj4gLQkJLyogU0xJU1RfSEVBRCgsaW5fbXVs dGkpICAgaWdpX3JlbGlubWhlYWQgKi8NCj4gIAkJLyogc3RydWN0IG1idWZxICAgIGlnaV9ncTsg Ki8NCj4gIAkJZGJfcHJpbnRmKCJcbiIpOw0KPiAgCX0NCj4gDQo+IE1vZGlmaWVkOiBoZWFkL3N5 cy9uZXRpbmV0L2lnbXBfdmFyLmgNCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+IC0tLSBoZWFk L3N5cy9uZXRpbmV0L2lnbXBfdmFyLmgJV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4CShyMzMzMTc0 KQ0KPiArKysgaGVhZC9zeXMvbmV0aW5ldC9pZ21wX3Zhci5oCVdlZCBNYXkgIDIgMTk6MzY6Mjkg MjAxOAkocjMzMzE3NSkNCj4gQEAgLTIxNCw3ICsyMTQsNiBAQCBzdHJ1Y3QgaWdtcF9pZnNvZnRj IHsNCj4gIAl1aW50MzJfdCBpZ2lfcWk7CS8qIElHTVB2MyBRdWVyeSBJbnRlcnZhbCAocykgKi8N Cj4gIAl1aW50MzJfdCBpZ2lfcXJpOwkvKiBJR01QdjMgUXVlcnkgUmVzcG9uc2UgSW50ZXJ2YWwg KHMpICovDQo+ICAJdWludDMyX3QgaWdpX3VyaTsJLyogSUdNUHYzIFVuc29saWNpdGVkIFJlcG9y dCBJbnRlcnZhbCAocykgKi8NCj4gLQlTTElTVF9IRUFEKCxpbl9tdWx0aSkJaWdpX3JlbGlubWhl YWQ7IC8qIHJlbGVhc2VkIGdyb3VwcyAqLw0KPiAgCXN0cnVjdCBtYnVmcQlpZ2lfZ3E7CQkvKiBn ZW5lcmFsIHF1ZXJ5IHJlc3BvbnNlcyBxdWV1ZSAqLw0KPiAgfTsNCj4gIA0KPiANCj4gTW9kaWZp ZWQ6IGhlYWQvc3lzL25ldGluZXQvaW4uYw0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLS0t IGhlYWQvc3lzL25ldGluZXQvaW4uYwlXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTgJKHIzMzMxNzQp DQo+ICsrKyBoZWFkL3N5cy9uZXRpbmV0L2luLmMJV2VkIE1heSAgMiAxOTozNjoyOSAyMDE4CShy MzMzMTc1KQ0KPiBAQCAtNjMyLDEyICs2MzIsMTAgQEAgaW5fZGlmYWRkcl9pb2N0bCh1X2xvbmcg Y21kLCBjYWRkcl90IGRhdGEsIHN0cnVjdCBpZm5lDQo+ICAJCXN0cnVjdCBpbl9pZmluZm8gKmlp Ow0KPiAgDQo+ICAJCWlpID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZwLT5pZl9hZmRhdGFbQUZf SU5FVF0pOw0KPiAtCQlJTl9NVUxUSV9MT0NLKCk7DQo+ICAJCWlmIChpaS0+aWlfYWxsaG9zdHMp IHsNCj4gLQkJCSh2b2lkKWluX2xlYXZlZ3JvdXBfbG9ja2VkKGlpLT5paV9hbGxob3N0cywgTlVM TCk7DQo+ICsJCQkodm9pZClpbl9sZWF2ZWdyb3VwKGlpLT5paV9hbGxob3N0cywgTlVMTCk7DQo+ ICAJCQlpaS0+aWlfYWxsaG9zdHMgPSBOVUxMOw0KPiAgCQl9DQo+IC0JCUlOX01VTFRJX1VOTE9D SygpOw0KPiAgCX0NCj4gIA0KPiAgCUlGX0FERFJfV0xPQ0soaWZwKTsNCj4gQEAgLTk5NCwxMSAr OTkyLDEyIEBAIGluX2Jyb2FkY2FzdChzdHJ1Y3QgaW5fYWRkciBpbiwgc3RydWN0IGlmbmV0ICpp ZnApDQo+ICB2b2lkDQo+ICBpbl9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gIHsNCj4g LQ0KPiArCUlOX01VTFRJX0xPQ0soKTsNCj4gIAlpbl9wY2JwdXJnZWlmMCgmVl9yaXBjYmluZm8s IGlmcCk7DQo+ICAJaW5fcGNicHVyZ2VpZjAoJlZfdWRiaW5mbywgaWZwKTsNCj4gIAlpbl9wY2Jw dXJnZWlmMCgmVl91bGl0ZWNiaW5mbywgaWZwKTsNCj4gIAlpbl9wdXJnZW1hZGRycyhpZnApOw0K PiArCUlOX01VTFRJX1VOTE9DSygpOw0KPiAgfQ0KPiAgDQo+ICAvKg0KPiBAQCAtMTAxMSwxMiAr MTAxMCwxMiBAQCBpbl9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gIHN0YXRpYyB2b2lk DQo+ICBpbl9wdXJnZW1hZGRycyhzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gIHsNCj4gLQlMSVNUX0hF QUQoLGluX211bHRpKSBwdXJnZWlubXM7DQo+IC0Jc3RydWN0IGluX211bHRpCQkqaW5tLCAqdGlu bTsNCj4gKwlzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBwdXJnZWlubXM7DQo+ICsJc3RydWN0IGluX211 bHRpCQkqaW5tOw0KPiAgCXN0cnVjdCBpZm11bHRpYWRkcgkqaWZtYTsNCj4gIA0KPiAtCUxJU1Rf SU5JVCgmcHVyZ2Vpbm1zKTsNCj4gLQlJTl9NVUxUSV9MT0NLKCk7DQo+ICsJU0xJU1RfSU5JVCgm cHVyZ2Vpbm1zKTsNCj4gKwlJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gIA0KPiAgCS8qDQo+ICAJ ICogRXh0cmFjdCBsaXN0IG9mIGluX211bHRpIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV0YWNoaW5n IGlmcA0KPiBAQCAtMTAzNCwxNyArMTAzMywxMyBAQCBpbl9wdXJnZW1hZGRycyhzdHJ1Y3QgaWZu ZXQgKmlmcCkNCj4gIAkJICAgICgiJXM6IGlmbWFfcHJvdG9zcGVjIGlzIE5VTEwiLCBfX2Z1bmNf XykpOw0KPiAgI2VuZGlmDQo+ICAJCWlubSA9IChzdHJ1Y3QgaW5fbXVsdGkgKilpZm1hLT5pZm1h X3Byb3Rvc3BlYzsNCj4gLQkJTElTVF9JTlNFUlRfSEVBRCgmcHVyZ2Vpbm1zLCBpbm0sIGlubV9s aW5rKTsNCj4gKwkJaW5tX3JlbGVfbG9ja2VkKCZwdXJnZWlubXMsIGlubSk7DQo+ICAJfQ0KPiAg CUlGX0FERFJfUlVOTE9DSyhpZnApOw0KPiAgDQo+IC0JTElTVF9GT1JFQUNIX1NBRkUoaW5tLCAm cHVyZ2Vpbm1zLCBpbm1fbGluaywgdGlubSkgew0KPiAtCQlMSVNUX1JFTU9WRShpbm0sIGlubV9s aW5rKTsNCj4gLQkJaW5tX3JlbGVhc2VfbG9ja2VkKGlubSk7DQo+IC0JfQ0KPiArCWlubV9yZWxl YXNlX2xpc3RfZGVmZXJyZWQoJnB1cmdlaW5tcyk7DQo+ICAJaWdtcF9pZmRldGFjaChpZnApOw0K PiAtDQo+IC0JSU5fTVVMVElfVU5MT0NLKCk7DQo+ICsJSU5fTVVMVElfTElTVF9VTkxPQ0soKTsN Cj4gIH0NCj4gIA0KPiAgc3RydWN0IGluX2xsZW50cnkgew0KPiANCj4gTW9kaWZpZWQ6IGhlYWQv c3lzL25ldGluZXQvaW5fbWNhc3QuYw0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gLS0tIGhl YWQvc3lzL25ldGluZXQvaW5fbWNhc3QuYwlXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTgJKHIzMzMx NzQpDQo+ICsrKyBoZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMJV2VkIE1heSAgMiAxOTozNjoy OSAyMDE4CShyMzMzMTc1KQ0KPiBAQCAtNTEsNiArNTEsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0Qk Iik7DQo+ICAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPg0KPiAgI2luY2x1ZGUgPHN5cy9rdHIuaD4N Cj4gICNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+DQo+ICsjaW5jbHVkZSA8c3lzL2d0YXNrcXVl dWUuaD4NCj4gICNpbmNsdWRlIDxzeXMvdHJlZS5oPg0KPiAgDQo+ICAjaW5jbHVkZSA8bmV0L2lm Lmg+DQo+IEBAIC01OSw2ICs2MCw4IEBAIF9fRkJTRElEKCIkRnJlZUJTRCQiKTsNCj4gICNpbmNs dWRlIDxuZXQvcm91dGUuaD4NCj4gICNpbmNsdWRlIDxuZXQvdm5ldC5oPg0KPiAgDQo+ICsjaW5j bHVkZSA8bmV0L2V0aGVybmV0Lmg+DQo+ICsNCj4gICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQo+ ICAjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPg0KPiAgI2luY2x1ZGUgPG5ldGluZXQvaW5f ZmliLmg+DQo+IEBAIC05MSwxOCArOTQsMjQgQEAgc3RhdGljIE1BTExPQ19ERUZJTkUoTV9JUE1T T1VSQ0UsICJpcF9tc291cmNlIiwNCj4gIA0KPiAgLyoNCj4gICAqIExvY2tpbmc6DQo+IC0gKiAt IExvY2sgb3JkZXIgaXM6IEdpYW50LCBJTlBfV0xPQ0ssIElOX01VTFRJX0xPQ0ssIElHTVBfTE9D SywgSUZfQUREUl9MT0NLLg0KPiArICogLSBMb2NrIG9yZGVyIGlzOiBHaWFudCwgSU5QX1dMT0NL LCBJTl9NVUxUSV9MSVNUX0xPQ0ssIElHTVBfTE9DSywgSUZfQUREUl9MT0NLLg0KPiAgICogLSBU aGUgSUZfQUREUl9MT0NLIGlzIGltcGxpY2l0bHkgdGFrZW4gYnkgaW5tX2xvb2t1cCgpIGVhcmxp ZXIsIGhvd2V2ZXINCj4gICAqICAgaXQgY2FuIGJlIHRha2VuIGJ5IGNvZGUgaW4gbmV0L2lmLmMg YWxzby4NCj4gICAqIC0gaXBfbW9wdGlvbnMgYW5kIGluX21maWx0ZXIgYXJlIGNvdmVyZWQgYnkg dGhlIElOUF9XTE9DSy4NCj4gICAqDQo+IC0gKiBzdHJ1Y3QgaW5fbXVsdGkgaXMgY292ZXJlZCBi eSBJTl9NVUxUSV9MT0NLLiBUaGVyZSBpc24ndCBzdHJpY3RseQ0KPiArICogc3RydWN0IGluX211 bHRpIGlzIGNvdmVyZWQgYnkgSU5fTVVMVElfTElTVF9MT0NLLiBUaGVyZSBpc24ndCBzdHJpY3Rs eQ0KPiAgICogYW55IG5lZWQgZm9yIGluX211bHRpIGl0c2VsZiB0byBiZSB2aXJ0dWFsaXplZCAt LSBpdCBpcyBib3VuZCB0byBhbiBpZnANCj4gICAqIGFueXdheSBubyBtYXR0ZXIgd2hhdCBoYXBw ZW5zLg0KPiAgICovDQo+IC1zdHJ1Y3QgbXR4IGluX211bHRpX210eDsNCj4gLU1UWF9TWVNJTklU KGluX211bHRpX210eCwgJmluX211bHRpX210eCwgImluX211bHRpX210eCIsIE1UWF9ERUYpOw0K PiArc3RydWN0IG10eCBpbl9tdWx0aV9saXN0X210eDsNCj4gK01UWF9TWVNJTklUKGluX211bHRp X210eCwgJmluX211bHRpX2xpc3RfbXR4LCAiaW5fbXVsdGlfbGlzdF9tdHgiLCBNVFhfREVGKTsN Cj4gIA0KPiArc3RydWN0IG10eCBpbl9tdWx0aV9mcmVlX210eDsNCj4gK01UWF9TWVNJTklUKGlu X211bHRpX2ZyZWVfbXR4LCAmaW5fbXVsdGlfZnJlZV9tdHgsICJpbl9tdWx0aV9mcmVlX210eCIs IE1UWF9ERUYpOw0KPiArDQo+ICtzdHJ1Y3Qgc3ggaW5fbXVsdGlfc3g7DQo+ICtTWF9TWVNJTklU KGluX211bHRpX3N4LCAmaW5fbXVsdGlfc3gsICJpbl9tdWx0aV9zeCIpOw0KPiArDQo+ICAvKg0K PiAgICogRnVuY3Rpb25zIHdpdGggbm9uLXN0YXRpYyBsaW5rYWdlIGRlZmluZWQgaW4gdGhpcyBm aWxlIHNob3VsZCBiZQ0KPiAgICogZGVjbGFyZWQgaW4gaW5fdmFyLmg6DQo+IEBAIC0xNTEsNiAr MTYwLDcgQEAgc3RhdGljIGludAlpbm1faXNfaWZwX2RldGFjaGVkKGNvbnN0IHN0cnVjdCBpbl9t dWx0aSAqDQo+ICBzdGF0aWMgaW50CWlubV9tZXJnZShzdHJ1Y3QgaW5fbXVsdGkgKiwgLypjb25z dCovIHN0cnVjdCBpbl9tZmlsdGVyICopOw0KPiAgc3RhdGljIHZvaWQJaW5tX3B1cmdlKHN0cnVj dCBpbl9tdWx0aSAqKTsNCj4gIHN0YXRpYyB2b2lkCWlubV9yZWFwKHN0cnVjdCBpbl9tdWx0aSAq KTsNCj4gK3N0YXRpYyB2b2lkIGlubV9yZWxlYXNlKHN0cnVjdCBpbl9tdWx0aSAqKTsNCj4gIHN0 YXRpYyBzdHJ1Y3QgaXBfbW9wdGlvbnMgKg0KPiAgCQlpbnBfZmluZG1vcHRpb25zKHN0cnVjdCBp bnBjYiAqKTsNCj4gIHN0YXRpYyB2b2lkCWlucF9mcmVlbW9wdGlvbnNfaW50ZXJuYWwoc3RydWN0 IGlwX21vcHRpb25zICopOw0KPiBAQCAtMjE2LDYgKzIyNiw2NSBAQCBpbm1faXNfaWZwX2RldGFj aGVkKGNvbnN0IHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0KPiAgfQ0KPiAgI2VuZGlmDQo+ICANCj4g K3N0YXRpYyBzdHJ1Y3QgZ3JvdXB0YXNrIGZyZWVfZ3Rhc2s7DQo+ICtzdGF0aWMgc3RydWN0IGlu X211bHRpX2hlYWQgaW5tX2ZyZWVfbGlzdDsNCj4gK3N0YXRpYyB2b2lkIGlubV9yZWxlYXNlX3Rh c2sodm9pZCAqYXJnIF9fdW51c2VkKTsNCj4gK3N0YXRpYyB2b2lkIGlubV9pbml0KHZvaWQpDQo+ ICt7DQo+ICsJU0xJU1RfSU5JVCgmaW5tX2ZyZWVfbGlzdCk7DQo+ICsJdGFza3Fncm91cF9jb25m aWdfZ3Rhc2tfaW5pdChOVUxMLCAmZnJlZV9ndGFzaywgaW5tX3JlbGVhc2VfdGFzaywgImlubSBy ZWxlYXNlDQo+IHRhc2siKTsgK30NCj4gKw0KPiArU1lTSU5JVChpbm1faW5pdCwgU0lfU1VCX1NN UCArIDEsIFNJX09SREVSX0ZJUlNULA0KPiArCWlubV9pbml0LCBOVUxMKTsNCj4gKw0KPiArDQo+ ICt2b2lkDQo+ICtpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVkKHN0cnVjdCBpbl9tdWx0aV9oZWFk ICppbm1oKQ0KPiArew0KPiArDQo+ICsJaWYgKFNMSVNUX0VNUFRZKGlubWgpKQ0KPiArCQlyZXR1 cm47DQo+ICsJbXR4X2xvY2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4gKwlTTElTVF9DT05DQVQo JmlubV9mcmVlX2xpc3QsIGlubWgsIGluX211bHRpLCBpbm1fbnJlbGUpOw0KPiArCW10eF91bmxv Y2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4gKwlHUk9VUFRBU0tfRU5RVUVVRSgmZnJlZV9ndGFz ayk7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK2lubV9yZWxlYXNlX2RlZmVycmVkKHN0cnVjdCBp bl9tdWx0aSAqaW5tKQ0KPiArew0KPiArCXN0cnVjdCBpbl9tdWx0aV9oZWFkIHRtcDsNCj4gKw0K PiArCUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gKwlNUEFTUyhpbm0tPmlubV9yZWZj b3VudCA+IDApOw0KPiArCWlmICgtLWlubS0+aW5tX3JlZmNvdW50ID09IDApIHsNCj4gKwkJU0xJ U1RfSU5JVCgmdG1wKTsNCj4gKwkJaW5tLT5pbm1faWZtYS0+aWZtYV9wcm90b3NwZWMgPSBOVUxM Ow0KPiArCQlTTElTVF9JTlNFUlRfSEVBRCgmdG1wLCBpbm0sIGlubV9ucmVsZSk7DQo+ICsJCWlu bV9yZWxlYXNlX2xpc3RfZGVmZXJyZWQoJnRtcCk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZA0KPiAraW5tX3JlbGVhc2VfdGFzayh2b2lkICphcmcgX191bnVzZWQpDQo+ICt7DQo+ ICsJc3RydWN0IGluX211bHRpX2hlYWQgaW5tX2ZyZWVfdG1wOw0KPiArCXN0cnVjdCBpbl9tdWx0 aSAqaW5tLCAqdGlubTsNCj4gKw0KPiArCVNMSVNUX0lOSVQoJmlubV9mcmVlX3RtcCk7DQo+ICsJ bXR4X2xvY2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4gKwlTTElTVF9DT05DQVQoJmlubV9mcmVl X3RtcCwgJmlubV9mcmVlX2xpc3QsIGluX211bHRpLCBpbm1fbnJlbGUpOw0KPiArCW10eF91bmxv Y2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4gKwlJTl9NVUxUSV9MT0NLKCk7DQo+ICsJU0xJU1Rf Rk9SRUFDSF9TQUZFKGlubSwgJmlubV9mcmVlX3RtcCwgaW5tX25yZWxlLCB0aW5tKSB7DQo+ICsJ CVNMSVNUX1JFTU9WRV9IRUFEKCZpbm1fZnJlZV90bXAsIGlubV9ucmVsZSk7DQo+ICsJCU1QQVNT KGlubSk7DQo+ICsJCWlubV9yZWxlYXNlKGlubSk7DQo+ICsJfQ0KPiArCUlOX01VTFRJX1VOTE9D SygpOw0KPiArfQ0KPiArDQo+ICAvKg0KPiAgICogSW5pdGlhbGl6ZSBhbiBpbl9tZmlsdGVyIHN0 cnVjdHVyZSB0byBhIGtub3duIHN0YXRlIGF0IHQwLCB0MQ0KPiAgICogd2l0aCBhbiBlbXB0eSBz b3VyY2UgZmlsdGVyIGxpc3QuDQo+IEBAIC0yMzIsNyArMzAxLDcgQEAgaW1mX2luaXQoc3RydWN0 IGluX21maWx0ZXIgKmltZiwgY29uc3QgaW50IHN0MCwgY29uc3QgDQo+ICAvKg0KPiAgICogRnVu Y3Rpb24gZm9yIGxvb2tpbmcgdXAgYW4gaW5fbXVsdGkgcmVjb3JkIGZvciBhbiBJUHY0IG11bHRp Y2FzdCBhZGRyZXNzDQo+ICAgKiBvbiBhIGdpdmVuIGludGVyZmFjZS4gaWZwIG11c3QgYmUgdmFs aWQuIElmIG5vIHJlY29yZCBmb3VuZCwgcmV0dXJuIE5VTEwuDQo+IC0gKiBUaGUgSU5fTVVMVElf TE9DSyBhbmQgSUZfQUREUl9MT0NLIG9uIGlmcCBtdXN0IGJlIGhlbGQuDQo+ICsgKiBUaGUgSU5f TVVMVElfTElTVF9MT0NLIGFuZCBJRl9BRERSX0xPQ0sgb24gaWZwIG11c3QgYmUgaGVsZC4NCj4g ICAqLw0KPiAgc3RydWN0IGluX211bHRpICoNCj4gIGlubV9sb29rdXBfbG9ja2VkKHN0cnVjdCBp Zm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciBpbmEpDQo+IEBAIC0yNDAsNyArMzA5LDcg QEAgaW5tX2xvb2t1cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9h DQo+ICAJc3RydWN0IGlmbXVsdGlhZGRyICppZm1hOw0KPiAgCXN0cnVjdCBpbl9tdWx0aSAqaW5t Ow0KPiAgDQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gKwlJTl9NVUxUSV9MSVNUX0xP Q0tfQVNTRVJUKCk7DQo+ICAJSUZfQUREUl9MT0NLX0FTU0VSVChpZnApOw0KPiAgDQo+ICAJaW5t ID0gTlVMTDsNCj4gQEAgLTI2NCw3ICszMzMsNyBAQCBpbm1fbG9va3VwKHN0cnVjdCBpZm5ldCAq aWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciBpbmENCj4gIHsNCj4gIAlzdHJ1Y3QgaW5fbXVsdGkg KmlubTsNCj4gIA0KPiAtCUlOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ICsJSU5fTVVMVElfTElT VF9MT0NLX0FTU0VSVCgpOw0KPiAgCUlGX0FERFJfUkxPQ0soaWZwKTsNCj4gIAlpbm0gPSBpbm1f bG9va3VwX2xvY2tlZChpZnAsIGluYSk7DQo+ICAJSUZfQUREUl9SVU5MT0NLKGlmcCk7DQo+IEBA IC00NTEsNyArNTIwLDcgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0 cnVjdCBpbl9hZGRyICpnDQo+ICAJSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gIA0KPiAgCWlp ID0gKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXTsNCj4gLQ0KPiAr CUlOX01VTFRJX0xJU1RfTE9DSygpOw0KPiAgCWlubSA9IGlubV9sb29rdXAoaWZwLCAqZ3JvdXAp Ow0KPiAgCWlmIChpbm0gIT0gTlVMTCkgew0KPiAgCQkvKg0KPiBAQCAtNDYwLDExICs1MjksMTMg QEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpn DQo+ICAJCSAqLw0KPiAgCQlLQVNTRVJUKGlubS0+aW5tX3JlZmNvdW50ID49IDEsDQo+ICAJCSAg ICAoIiVzOiBiYWQgcmVmY291bnQgJWQiLCBfX2Z1bmNfXywgaW5tLT5pbm1fcmVmY291bnQpKTsN Cj4gLQkJKytpbm0tPmlubV9yZWZjb3VudDsNCj4gKwkJaW5tX2FjcXVpcmVfbG9ja2VkKGlubSk7 DQo+ICAJCSpwaW5tID0gaW5tOw0KPiAtCQlyZXR1cm4gKDApOw0KPiAgCX0NCj4gLQ0KPiArCUlO X01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ICsJaWYgKGlubSAhPSBOVUxMKQ0KPiArCQlyZXR1cm4g KDApOw0KPiArCQ0KPiAgCW1lbXNldCgmZ3NpbiwgMCwgc2l6ZW9mKGdzaW4pKTsNCj4gIAlnc2lu LnNpbl9mYW1pbHkgPSBBRl9JTkVUOw0KPiAgCWdzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qg c29ja2FkZHJfaW4pOw0KPiBAQCAtNDc5LDYgKzU1MCw3IEBAIGluX2dldG11bHRpKHN0cnVjdCBp Zm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZw0KPiAgCQlyZXR1cm4gKGVycm9yKTsN Cj4gIA0KPiAgCS8qIFhYWCBpZm1hX3Byb3Rvc3BlYyBtdXN0IGJlIGNvdmVyZWQgYnkgSUZfQURE Ul9MT0NLICovDQo+ICsJSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ICAJSUZfQUREUl9XTE9DSyhp ZnApOw0KPiAgDQo+ICAJLyoNCj4gQEAgLTUwNCwxMCArNTc2LDkgQEAgaW5fZ2V0bXVsdGkoc3Ry dWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ICAJCQkgICAgX19mdW5j X18sIGlmbWEsIGlubSwgaW5ldF9udG9hX3IoKmdyb3VwLCBhZGRyYnVmKSk7DQo+ICAJCX0NCj4g ICNlbmRpZg0KPiAtCQkrK2lubS0+aW5tX3JlZmNvdW50Ow0KPiArCQlpbm1fYWNxdWlyZV9sb2Nr ZWQoaW5tKTsNCj4gIAkJKnBpbm0gPSBpbm07DQo+IC0JCUlGX0FERFJfV1VOTE9DSyhpZnApOw0K PiAtCQlyZXR1cm4gKDApOw0KPiArCQlnb3RvIG91dF9sb2NrZWQ7DQo+ICAJfQ0KPiAgDQo+ICAJ SUZfQUREUl9XTE9DS19BU1NFUlQoaWZwKTsNCj4gQEAgLTUyMiw2ICs1OTMsNyBAQCBpbl9nZXRt dWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gIAlpbm0g PSBtYWxsb2Moc2l6ZW9mKCppbm0pLCBNX0lQTUFERFIsIE1fTk9XQUlUIHwgTV9aRVJPKTsNCj4g IAlpZiAoaW5tID09IE5VTEwpIHsNCj4gIAkJSUZfQUREUl9XVU5MT0NLKGlmcCk7DQo+ICsJCUlO X01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ICAJCWlmX2RlbG11bHRpX2lmbWEoaWZtYSk7DQo+ICAJ CXJldHVybiAoRU5PTUVNKTsNCj4gIAl9DQo+IEBAIC01MzksOCArNjExLDkgQEAgaW5fZ2V0bXVs dGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ICAJaWZtYS0+ aWZtYV9wcm90b3NwZWMgPSBpbm07DQo+ICANCj4gIAkqcGlubSA9IGlubTsNCj4gLQ0KPiArIG91 dF9sb2NrZWQ6DQo+ICAJSUZfQUREUl9XVU5MT0NLKGlmcCk7DQo+ICsJSU5fTVVMVElfTElTVF9V TkxPQ0soKTsNCj4gIAlyZXR1cm4gKDApOw0KPiAgfQ0KPiAgDQo+IEBAIC01NTAsMzYgKzYyMywy OSBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIg KmcNCj4gICAqIElmIHRoZSByZWZjb3VudCBkcm9wcyB0byAwLCBmcmVlIHRoZSBpbl9tdWx0aSBy ZWNvcmQgYW5kDQo+ICAgKiBkZWxldGUgdGhlIHVuZGVybHlpbmcgbGluay1sYXllciBtZW1iZXJz aGlwLg0KPiAgICovDQo+IC12b2lkDQo+IC1pbm1fcmVsZWFzZV9sb2NrZWQoc3RydWN0IGluX211 bHRpICppbm0pDQo+ICtzdGF0aWMgdm9pZA0KPiAraW5tX3JlbGVhc2Uoc3RydWN0IGluX211bHRp ICppbm0pDQo+ICB7DQo+ICAJc3RydWN0IGlmbXVsdGlhZGRyICppZm1hOw0KPiArCXN0cnVjdCBp Zm5ldCAqaWZwOw0KPiAgDQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gLQ0KPiAgCUNU UjIoS1RSX0lHTVBWMywgIiVzOiByZWZjb3VudCBpcyAlZCIsIF9fZnVuY19fLCBpbm0tPmlubV9y ZWZjb3VudCk7DQo+IC0NCj4gLQlpZiAoLS1pbm0tPmlubV9yZWZjb3VudCA+IDApIHsNCj4gLQkJ Q1RSMihLVFJfSUdNUFYzLCAiJXM6IHJlZmNvdW50IGlzIG5vdyAlZCIsIF9fZnVuY19fLA0KPiAt CQkgICAgaW5tLT5pbm1fcmVmY291bnQpOw0KPiAtCQlyZXR1cm47DQo+IC0JfQ0KPiAtDQo+ICsJ TVBBU1MoaW5tLT5pbm1fcmVmY291bnQgPT0gMCk7DQo+ICAJQ1RSMihLVFJfSUdNUFYzLCAiJXM6 IGZyZWVpbmcgaW5tICVwIiwgX19mdW5jX18sIGlubSk7DQo+ICANCj4gIAlpZm1hID0gaW5tLT5p bm1faWZtYTsNCj4gKwlpZnAgPSBpbm0tPmlubV9pZnA7DQo+ICANCj4gIAkvKiBYWFggdGhpcyBh Y2Nlc3MgaXMgbm90IGNvdmVyZWQgYnkgSUZfQUREUl9MT0NLICovDQo+ICAJQ1RSMihLVFJfSUdN UFYzLCAiJXM6IHB1cmdpbmcgaWZtYSAlcCIsIF9fZnVuY19fLCBpZm1hKTsNCj4gLQlLQVNTRVJU KGlmbWEtPmlmbWFfcHJvdG9zcGVjID09IGlubSwNCj4gLQkgICAgKCIlczogaWZtYV9wcm90b3Nw ZWMgIT0gaW5tIiwgX19mdW5jX18pKTsNCj4gLQlpZm1hLT5pZm1hX3Byb3Rvc3BlYyA9IE5VTEw7 DQo+IC0NCj4gKwlpZiAoaWZwKQ0KPiArCQlDVVJWTkVUX1NFVChpZnAtPmlmX3ZuZXQpOw0KPiAg CWlubV9wdXJnZShpbm0pOw0KPiAtDQo+ICAJZnJlZShpbm0sIE1fSVBNQUREUik7DQo+ICANCj4g IAlpZl9kZWxtdWx0aV9pZm1hKGlmbWEpOw0KPiArCWlmIChpZnApDQo+ICsJCUNVUlZORVRfUkVT VE9SRSgpOw0KPiAgfQ0KPiAgDQo+ICAvKg0KPiBAQCAtNTkyLDcgKzY1OCw3IEBAIGlubV9jbGVh cl9yZWNvcmRlZChzdHJ1Y3QgaW5fbXVsdGkgKmlubSkNCj4gIHsNCj4gIAlzdHJ1Y3QgaXBfbXNv dXJjZQkqaW1zOw0KPiAgDQo+IC0JSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gKwlJTl9NVUxU SV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ICANCj4gIAlSQl9GT1JFQUNIKGltcywgaXBfbXNvdXJj ZV90cmVlLCAmaW5tLT5pbm1fc3Jjcykgew0KPiAgCQlpZiAoaW1zLT5pbXNfc3RwKSB7DQo+IEBA IC02MzIsNyArNjk4LDcgQEAgaW5tX3JlY29yZF9zb3VyY2Uoc3RydWN0IGluX211bHRpICppbm0s IGNvbnN0IGluX2FkZHJfDQo+ICAJc3RydWN0IGlwX21zb3VyY2UJIGZpbmQ7DQo+ICAJc3RydWN0 IGlwX21zb3VyY2UJKmltcywgKm5pbXM7DQo+ICANCj4gLQlJTl9NVUxUSV9MT0NLX0FTU0VSVCgp Ow0KPiArCUlOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gIA0KPiAgCWZpbmQuaW1zX2hh ZGRyID0gbnRvaGwobmFkZHIpOw0KPiAgCWltcyA9IFJCX0ZJTkQoaXBfbXNvdXJjZV90cmVlLCAm aW5tLT5pbm1fc3JjcywgJmZpbmQpOw0KPiBAQCAtOTU5LDYgKzEwMjUsNyBAQCBpbm1fbWVyZ2Uo c3RydWN0IGluX211bHRpICppbm0sIC8qY29uc3QqLyBzdHJ1Y3QgaW5fbWYNCj4gIAlzY2hhbmdl ZCA9IDA7DQo+ICAJZXJyb3IgPSAwOw0KPiAgCW5zcmMxID0gbnNyYzAgPSAwOw0KPiArCUlOX01V TFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gIA0KPiAgCS8qDQo+ICAJICogVXBkYXRlIHRoZSBz b3VyY2UgZmlsdGVycyBmaXJzdCwgYXMgdGhpcyBtYXkgZmFpbC4NCj4gQEAgLTExNjUsNiArMTIz Miw3IEBAIGluX2pvaW5ncm91cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVj dCBpbg0KPiAgCWludAkJCSBlcnJvcjsNCj4gIA0KPiAgCUlOX01VTFRJX0xPQ0tfQVNTRVJUKCk7 DQo+ICsJSU5fTVVMVElfTElTVF9VTkxPQ0tfQVNTRVJUKCk7DQo+ICANCj4gIAlDVFI0KEtUUl9J R01QVjMsICIlczogam9pbiAweCUwOHggb24gJXAoJXMpKSIsIF9fZnVuY19fLA0KPiAgCSAgICBu dG9obChnaW5hLT5zX2FkZHIpLCBpZnAsIGlmcC0+aWZfeG5hbWUpOw0KPiBAQCAtMTE4Niw3ICsx MjU0LDcgQEAgaW5fam9pbmdyb3VwX2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3Ry dWN0IGluDQo+ICAJCUNUUjEoS1RSX0lHTVBWMywgIiVzOiBpbl9nZXRtdWx0aSgpIGZhaWx1cmUi LCBfX2Z1bmNfXyk7DQo+ICAJCXJldHVybiAoZXJyb3IpOw0KPiAgCX0NCj4gLQ0KPiArCUlOX01V TFRJX0xJU1RfTE9DSygpOw0KPiAgCUNUUjEoS1RSX0lHTVBWMywgIiVzOiBtZXJnZSBpbm0gc3Rh dGUiLCBfX2Z1bmNfXyk7DQo+ICAJZXJyb3IgPSBpbm1fbWVyZ2UoaW5tLCBpbWYpOw0KPiAgCWlm IChlcnJvcikgew0KPiBAQCAtMTIwMSwxMCArMTI2OSwxMiBAQCBpbl9qb2luZ3JvdXBfbG9ja2Vk KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW4NCj4gIAkJZ290byBvdXRfaW5tX3Jl bGVhc2U7DQo+ICAJfQ0KPiAgDQo+IC1vdXRfaW5tX3JlbGVhc2U6DQo+ICsgb3V0X2lubV9yZWxl YXNlOg0KPiArCUlOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ICAJaWYgKGVycm9yKSB7DQo+ICsN Cj4gIAkJQ1RSMihLVFJfSUdNUFYzLCAiJXM6IGRyb3BwaW5nIHJlZiBvbiAlcCIsIF9fZnVuY19f LCBpbm0pOw0KPiAtCQlpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gKwkJaW5tX3JlbGVhc2Vf ZGVmZXJyZWQoaW5tKTsNCj4gIAl9IGVsc2Ugew0KPiAgCQkqcGlubSA9IGlubTsNCj4gIAl9DQo+ IEBAIC0xMjQ5LDYgKzEzMTksNyBAQCBpbl9sZWF2ZWdyb3VwX2xvY2tlZChzdHJ1Y3QgaW5fbXVs dGkgKmlubSwgLypjb25zdCovIHMNCj4gIAllcnJvciA9IDA7DQo+ICANCj4gIAlJTl9NVUxUSV9M T0NLX0FTU0VSVCgpOw0KPiArCUlOX01VTFRJX0xJU1RfVU5MT0NLX0FTU0VSVCgpOw0KPiAgDQo+ ICAJQ1RSNShLVFJfSUdNUFYzLCAiJXM6IGxlYXZlIGlubSAlcCwgMHglMDh4LyVzLCBpbWYgJXAi LCBfX2Z1bmNfXywNCj4gIAkgICAgaW5tLCBudG9obChpbm0tPmlubV9hZGRyLnNfYWRkciksDQo+ IEBAIC0xMjcyLDE4ICsxMzQzLDIwIEBAIGluX2xlYXZlZ3JvdXBfbG9ja2VkKHN0cnVjdCBpbl9t dWx0aSAqaW5tLCAvKmNvbnN0Ki8gcw0KPiAgCSAqIHRoZSB0cmFuc2FjdGlvbiwgaXQgTVVTVCBO T1QgZmFpbC4NCj4gIAkgKi8NCj4gIAlDVFIxKEtUUl9JR01QVjMsICIlczogbWVyZ2UgaW5tIHN0 YXRlIiwgX19mdW5jX18pOw0KPiArCUlOX01VTFRJX0xJU1RfTE9DSygpOw0KPiAgCWVycm9yID0g aW5tX21lcmdlKGlubSwgaW1mKTsNCj4gIAlLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGZhaWxl ZCB0byBtZXJnZSBpbm0gc3RhdGUiLCBfX2Z1bmNfXykpOw0KPiAgDQo+ICAJQ1RSMShLVFJfSUdN UFYzLCAiJXM6IGRvaW5nIGlnbXAgZG93bmNhbGwiLCBfX2Z1bmNfXyk7DQo+ICAJQ1VSVk5FVF9T RVQoaW5tLT5pbm1faWZwLT5pZl92bmV0KTsNCj4gIAllcnJvciA9IGlnbXBfY2hhbmdlX3N0YXRl KGlubSk7DQo+ICsJaW5tX3JlbGVhc2VfZGVmZXJyZWQoaW5tKTsNCj4gKwlJTl9NVUxUSV9MSVNU X1VOTE9DSygpOw0KPiAgCUNVUlZORVRfUkVTVE9SRSgpOw0KPiAgCWlmIChlcnJvcikNCj4gIAkJ Q1RSMShLVFJfSUdNUFYzLCAiJXM6IGZhaWxlZCBpZ21wIGRvd25jYWxsIiwgX19mdW5jX18pOw0K PiAgDQo+ICAJQ1RSMihLVFJfSUdNUFYzLCAiJXM6IGRyb3BwaW5nIHJlZiBvbiAlcCIsIF9fZnVu Y19fLCBpbm0pOw0KPiAtCWlubV9yZWxlYXNlX2xvY2tlZChpbm0pOw0KPiAgDQo+ICAJcmV0dXJu IChlcnJvcik7DQo+ICB9DQo+IEBAIC0xMzE1LDE4ICsxMzg4LDYgQEAgaW5fYWRkbXVsdGkoc3Ry dWN0IGluX2FkZHIgKmFwLCBzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gIH0NCj4gIA0KPiAgLyoNCj4g LSAqIExlYXZlIGFuIElQdjQgbXVsdGljYXN0IGdyb3VwLCBhc3N1bWVkIHRvIGJlIGluIGV4Y2x1 c2l2ZSAoKixHKSBtb2RlLg0KPiAtICogVGhpcyBLUEkgaXMgZm9yIGxlZ2FjeSBrZXJuZWwgY29u c3VtZXJzIG9ubHkuDQo+IC0gKi8NCj4gDQo+ICoqKiBESUZGIE9VVFBVVCBUUlVOQ0FURUQgQVQg MTAwMCBMSU5FUyAqKioNCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18NCj4gc3ZuLXNyYy1oZWFkQGZyZWVic2Qub3JnIG1haWxpbmcgbGlzdA0KPiBodHRw czovL2xpc3RzLmZyZWVic2Qub3JnL21haWxtYW4vbGlzdGluZm8vc3ZuLXNyYy1oZWFkDQo+IFRv IHVuc3Vic2NyaWJlLCBzZW5kIGFueSBtYWlsIHRvICJzdm4tc3JjLWhlYWQtdW5zdWJzY3JpYmVA ZnJlZWJzZC5vcmciDQoNCg0KQWZ0ZXIgKGFyb3VuZCEpIHRoaXMgdXBkYXRlLCBzb21lIGJveGVz IHdpdGggaTM1MCBkdWFsIHBvcnQgTklDcyBpbW1lZGlhdGVseSBjcmFzaCB3aXRoDQpGYXRhbCB0 cmFwIDEyOiBwYWdlIGZhdWx0IGFuZCBzb21ldGhpbmcgd2l0aCANCg0KY3VycmVudCBwcm9jZXNz OiAoaXNjLXdvcmtlcjAwMDYpDQoNCi4uLi4NCg0KVGhvc2UgYm94ZXMgZG8gbm90IGhhdmUgZGVi dWdnaW5nIGtlcm5lbC4gVGhlIHN5bXB0b21icyBhcmUgdGhlIHNhbWUuIFNpbmdsZSB1c2VyIGtl cm5lbA0Kd29ya3MsIGJ1dCB0aGUgbW9tZW50IEkgcGVyZm9ybSAvZXRjL25ldHN0YXJ0IGFuZCBh bnkga2luZCBvZiBuZXQgdHJhZmZpYyBlc3RhYmxpc2hlcywNCnRoaXMgY3JhcCBiYWlscyBvdXQu DQoNCg0KLSAtLSANCk8uIEhhcnRtYW5uDQoNCkljaCB3aWRlcnNwcmVjaGUgZGVyIE51dHp1bmcg b2RlciDDnGJlcm1pdHRsdW5nIG1laW5lciBEYXRlbiBmw7xyDQpXZXJiZXp3ZWNrZSBvZGVyIGbD vHIgZGllIE1hcmt0LSBvZGVyIE1laW51bmdzZm9yc2NodW5nICjCpyAyOCBBYnMuIDQgQkRTRyku DQotLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQ0KDQppTFVFQVJNS0FCMFdJUVFaVlpNekF0 d0MyVC84NlRyUzUyOGZ5RmhZbEFVQ1d1dGp0Z0FLQ1JEUzUyOGZ5RmhZDQpsQWt6QWY5UGhhRlR3 TmhRRDJ6Rjd4U0hKMndmdkx0b1VFalpsekdzdXNBQ3AxcGE3SkFmejBQeXYrbG0rWE5KDQp2TEVs cklmMUNtRHp1QTh5YmxaL3gvd09WU0prQWY5Qys1MERWRXRHcTVIL2JIU0ROd3ptcXJqOFlnQjdY cFNzDQpQTVJYYytJd0lhMUpnaTJ5TSs2VENTTlNzMU41YkVVaFU5Qmk4ZVh5NlkwRlNrQVplVitz DQo9UzBiQw0KLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0tDQo= From owner-svn-src-head@freebsd.org Thu May 3 19:38:21 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8D743FB78E6; Thu, 3 May 2018 19:38:21 +0000 (UTC) (envelope-from jonlooney@gmail.com) Received: from mail-wm0-f46.google.com (mail-wm0-f46.google.com [74.125.82.46]) (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 0C2A16E54A; Thu, 3 May 2018 19:38:20 +0000 (UTC) (envelope-from jonlooney@gmail.com) Received: by mail-wm0-f46.google.com with SMTP id a137-v6so4223713wme.1; Thu, 03 May 2018 12:38:20 -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:in-reply-to:references:from:date :message-id:subject:to:cc; bh=+Tzv6K1bZQRRiP50d/xHwc1Nyn+dC55xxULzP+qhS+4=; b=RpIIy9aBUQnRACQ+5XeNApRuhphkq8syxNmwD6n7BR0jEkaC2nZsXdgH4ryejatEC0 FNuP5j4Srj+J0WfMdSywcHK8cfZslPy4X9vFQ7G4g3aga42ezf3pTTfqqAUb5pgsCQ2T nag0WjrrZsvLxggOXz4V/uBWcl8gTvdWJrBROlMfHTXbik0U7dHVmy3BIv78sOpbA579 /ECc+hTZvqAeuQm5VIJuUeF+a+AQHs4uUK8f2JIBkHbMbvr1QqGxyW+SYRoaBuTI399w /4iLHFmKd0t+LVGQgPOi8i7fipZfpKS/qq6p8DmexkjxqDQlJz0uoz7ax04GxjWEK2Z0 uh2Q== X-Gm-Message-State: ALQs6tCCXzPNFrm8SHgylEsQAL4KxKET1WwhGYuLViZ9UWigP+qREDbh ooitVx1/mNprRpgHgqyis1vUJkUN X-Google-Smtp-Source: AB8JxZprsxsyLabI5awzLVLjfOSaZ7kWbkVBzuIhUfOsXDhgIUy2hJpGrMp0JUUEwBxJJlEBBOYV5g== X-Received: by 2002:a50:8e59:: with SMTP id 25-v6mr5734060edx.101.1525376294267; Thu, 03 May 2018 12:38:14 -0700 (PDT) Received: from mail-wr0-f180.google.com (mail-wr0-f180.google.com. [209.85.128.180]) by smtp.gmail.com with ESMTPSA id b16-v6sm8030827eds.81.2018.05.03.12.38.13 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 03 May 2018 12:38:13 -0700 (PDT) Received: by mail-wr0-f180.google.com with SMTP id v5-v6so18780474wrf.9; Thu, 03 May 2018 12:38:13 -0700 (PDT) X-Received: by 2002:adf:ab56:: with SMTP id r22-v6mr20353972wrc.228.1525376293651; Thu, 03 May 2018 12:38:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.223.197.74 with HTTP; Thu, 3 May 2018 12:38:13 -0700 (PDT) In-Reply-To: <201805031501.w43F1Reo024234@repo.freebsd.org> References: <201805031501.w43F1Reo024234@repo.freebsd.org> From: "Jonathan T. Looney" Date: Thu, 3 May 2018 15:38:13 -0400 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333211 - head/sys/netinet/cc To: Sean Bruno Cc: src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 03 May 2018 19:38:21 -0000 On Thu, May 3, 2018 at 11:01 AM, Sean Bruno wrote: > > @@ -242,8 +241,8 @@ tf_cwnd(int ticks_since_cong, int rtt_ticks, unsigned > { > > /* Equation 4 of I-D. */ > - return (((wmax * CUBIC_BETA) + (((THREE_X_PT2 * ticks_since_cong * > - smss) << CUBIC_SHIFT) / TWO_SUB_PT2 / rtt_ticks)) >> CUBIC_SHIFT); > + return (((wmax * CUBIC_BETA) + (((THREE_X_PT3 * ticks_since_cong * > + smss) << CUBIC_SHIFT) / TWO_SUB_PT3 / rtt_ticks)) >> CUBIC_SHIFT); > } > > #endif /* _NETINET_CC_CUBIC_H_ */ > Did you analyze this to ensure that the intermediate steps in this calculation would never overflow? Jonathan From owner-svn-src-head@freebsd.org Thu May 3 19:45:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EACA6FB7DB7; Thu, 3 May 2018 19:45:48 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9F82A6FE11; Thu, 3 May 2018 19:45:48 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 99C3024517; Thu, 3 May 2018 19:45:48 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43JjmjC074853; Thu, 3 May 2018 19:45:48 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43JjmuO074852; Thu, 3 May 2018 19:45:48 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805031945.w43JjmuO074852@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Thu, 3 May 2018 19:45:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333223 - head/sys/modules/dtb/allwinner X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/sys/modules/dtb/allwinner X-SVN-Commit-Revision: 333223 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 19:45:49 -0000 Author: kevans Date: Thu May 3 19:45:48 2018 New Revision: 333223 URL: https://svnweb.freebsd.org/changeset/base/333223 Log: dtb/allwinner: Add a83t-sid overlay Modified: head/sys/modules/dtb/allwinner/Makefile Modified: head/sys/modules/dtb/allwinner/Makefile ============================================================================== --- head/sys/modules/dtb/allwinner/Makefile Thu May 3 19:00:50 2018 (r333222) +++ head/sys/modules/dtb/allwinner/Makefile Thu May 3 19:45:48 2018 (r333223) @@ -19,7 +19,8 @@ DTS= \ sun8i-h3-orangepi-one.dts \ sun8i-h3-orangepi-plus2e.dts -DTSO= sun8i-h3-sid.dtso +DTSO= sun8i-a83t-sid.dtso \ + sun8i-h3-sid.dtso LINKS= \ ${DTBDIR}/sun4i-a10-cubieboard.dtb ${DTBDIR}/cubieboard.dtb \ From owner-svn-src-head@freebsd.org Thu May 3 19:49:40 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D321CFB7FA6; Thu, 3 May 2018 19:49:40 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7F23271C72; Thu, 3 May 2018 19:49:40 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 788CB2451E; Thu, 3 May 2018 19:49:40 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w43Jneqf075197; Thu, 3 May 2018 19:49:40 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43JneuM075196; Thu, 3 May 2018 19:49:40 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805031949.w43JneuM075196@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Thu, 3 May 2018 19:49:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333225 - head/sys/dts/arm/overlays X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/sys/dts/arm/overlays X-SVN-Commit-Revision: 333225 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 19:49:41 -0000 Author: kevans Date: Thu May 3 19:49:40 2018 New Revision: 333225 URL: https://svnweb.freebsd.org/changeset/base/333225 Log: Garbage collect the a83t emac overlays The 4.16 DTS import brought in emac support for the a83t. Since these boards' DTS is pulled from /boot and I forgot to hook these up to the build, they should be fairly safe to go away. The a83t-sid and h3-sid overlays are still relevant. a83t-sid will likely come in with 4.18 DTS. Deleted: head/sys/dts/arm/overlays/sun8i-a83t-bananapi-m3-emac.dtso head/sys/dts/arm/overlays/sun8i-a83t-emac.dtso From owner-svn-src-head@freebsd.org Thu May 3 19:53:08 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E727EFB82D7; Thu, 3 May 2018 19:53:07 +0000 (UTC) (envelope-from kmacybsd@gmail.com) Received: from mail-oi0-x243.google.com (mail-oi0-x243.google.com [IPv6:2607:f8b0:4003:c06::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 7A1B972EE6; Thu, 3 May 2018 19:53:07 +0000 (UTC) (envelope-from kmacybsd@gmail.com) Received: by mail-oi0-x243.google.com with SMTP id 11-v6so17176169ois.8; Thu, 03 May 2018 12:53: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:content-transfer-encoding; bh=i2/PS8jsZTqLlCFd1qRPvDTR6zXDfuwrIRwdxq7te48=; b=U9nWlGOQdWhJtbigOCw6rYvJ5yyxygXWLCHjkS/eQ3rkIltXKrio7yoA8W5NC2K441 hkdZ/538V7bdpvF+zP9Hh7rP1/9HmeGpw+xRiIQdnJgZ+6/bYZ0ZwSjEtaTFpQjPVmoQ hb1K118hFfKZ6/dqmudNBqTLFbxLgw6dbiMJjBiHUlhZB4ti9XeNFsluDFWoSS7zMCmS 7oOJXG5FIngsNBiPJ4nNq0q4AIjnvc3n4bG8Xkdum8yZnkf/frXjFmBd79QQKw7WpnKh mwNMdgbbPr4c3SF3Bbo3IP6VHueTFAh+RvR2AB2TzYQOaBVdmyM+EkbgXvca2jqSasuI 7Pxg== 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:content-transfer-encoding; bh=i2/PS8jsZTqLlCFd1qRPvDTR6zXDfuwrIRwdxq7te48=; b=jQgXv+zygra/7ziFY1Yiay0835rp376SnkOikoEJlESEcBT+HogRZSmR2sVePxjNiI zHWasnwjafyuPWJTxr6eNtMFrGac9sur6UF3qPpYM92biXBdGs2tyu3DtYIl/C16kZDC RzS0vHqT/s+sXSKjhS9zMX7b8QEdu0zeYigQwDLezHnvwFwXMBUMScq5MRaRiNQMLoC+ Nl9dUtnJ/E6uZDcJySQ/hhZLohkfUUPpGokBZVq1Fr0FQNFDYD5ZKTQZ64vg62EudTMe mCLRi5xpgy6oofMCGfyk9jgtdBXOU6H6pmZJy5XlLK6rPJ+TAWgpxp04DdoXpNx5UI4t 0tgw== X-Gm-Message-State: ALQs6tCfUCQaS+td6JsQSIepuRJZ2X/e/r90ss1MxGO0TIOqXiX0gRgy GjUs0mfWt8HcwFqGDcxPxLusEhbP7Mx74Htg/NqPbA== X-Google-Smtp-Source: AB8JxZpmFrHYwMaTtmWP5VMvdXfkdVjtjZoTiRnCyjK7e2VU4Gqouv3RxMzVL04pbtD2GO3aJ3uzHjqVzIV1612713U= X-Received: by 2002:aca:d906:: with SMTP id q6-v6mr14530789oig.349.1525377185943; Thu, 03 May 2018 12:53:05 -0700 (PDT) MIME-Version: 1.0 Sender: kmacybsd@gmail.com Received: by 2002:a9d:3f0:0:0:0:0:0 with HTTP; Thu, 3 May 2018 12:53:05 -0700 (PDT) In-Reply-To: <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> From: "K. Macy" Date: Thu, 3 May 2018 12:53:05 -0700 X-Google-Sender-Auth: biZlE7RN0iIOno95crp4ZfyRuxE Message-ID: Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys To: "O. Hartmann" Cc: Stephen Hurd , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 03 May 2018 19:53:08 -0000 Can you give any context on what they're doing? In addition - even on a production kernel it's possible to compile in DDB to at least get a backtrace. Your report only gives us enough information to know that there is _an_ issue. It's difficult to proceed on this alone. I do have a report from the FreeBSD CI infrastructure that we're looking in to now. With luck that is the same issue. -M On Thu, May 3, 2018 at 12:31 PM, O. Hartmann wrote= : > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > Am Wed, 2 May 2018 19:36:29 +0000 (UTC) > Stephen Hurd schrieb: > >> Author: shurd >> Date: Wed May 2 19:36:29 2018 >> New Revision: 333175 >> URL: https://svnweb.freebsd.org/changeset/base/333175 >> >> Log: >> Separate list manipulation locking from state change in multicast >> >> Multicast incorrectly calls in to drivers with a mutex held causing dr= ivers >> to have to go through all manner of contortions to use a non sleepable= lock. >> Serialize multicast updates instead. >> >> Submitted by: mmacy >> Reviewed by: shurd, sbruno >> Sponsored by: Limelight Networks >> Differential Revision: https://reviews.freebsd.org/D14969 >> >> Modified: >> head/sys/kern/subr_gtaskqueue.c >> head/sys/kern/subr_witness.c >> head/sys/net/if.c >> head/sys/netinet/igmp.c >> head/sys/netinet/igmp_var.h >> head/sys/netinet/in.c >> head/sys/netinet/in_mcast.c >> head/sys/netinet/in_pcb.c >> head/sys/netinet/in_var.h >> head/sys/netinet/ip_carp.c >> head/sys/netinet6/in6.c >> head/sys/netinet6/in6_ifattach.c >> head/sys/netinet6/in6_mcast.c >> head/sys/netinet6/in6_pcb.c >> head/sys/netinet6/in6_var.h >> head/sys/netinet6/mld6.c >> head/sys/netinet6/mld6_var.h >> head/sys/sys/gtaskqueue.h >> >> Modified: head/sys/kern/subr_gtaskqueue.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/kern/subr_gtaskqueue.c Wed May 2 17:41:00 2018 (r= 333174) >> +++ head/sys/kern/subr_gtaskqueue.c Wed May 2 19:36:29 2018 (r= 333175) >> @@ -53,6 +53,7 @@ static void gtaskqueue_thread_enqueue(void *); >> static void gtaskqueue_thread_loop(void *arg); >> >> TASKQGROUP_DEFINE(softirq, mp_ncpus, 1); >> +TASKQGROUP_DEFINE(config, 1, 1); >> >> struct gtaskqueue_busy { >> struct gtask *tb_running; >> @@ -662,7 +663,7 @@ SYSINIT(tqg_record_smp_started, SI_SUB_SMP, SI_ORDER= _F >> >> void >> taskqgroup_attach(struct taskqgroup *qgroup, struct grouptask *gtask, >> - void *uniq, int irq, char *name) >> + void *uniq, int irq, const char *name) >> { >> cpuset_t mask; >> int qid, error; >> @@ -976,4 +977,13 @@ void >> taskqgroup_destroy(struct taskqgroup *qgroup) >> { >> >> +} >> + >> +void >> +taskqgroup_config_gtask_init(void *ctx, struct grouptask *gtask, gtask_= fn_t *fn, >> + const char *name) >> +{ >> + >> + GROUPTASK_INIT(gtask, 0, fn, ctx); >> + taskqgroup_attach(qgroup_config, gtask, gtask, -1, name); >> } >> >> Modified: head/sys/kern/subr_witness.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/kern/subr_witness.c Wed May 2 17:41:00 2018 (r= 333174) >> +++ head/sys/kern/subr_witness.c Wed May 2 19:36:29 2018 (r= 333175) >> @@ -532,18 +532,22 @@ static struct witness_order_list_entry order_lists= [] =3D >> * IPv4 multicast: >> * protocol locks before interface locks, after UDP locks. >> */ >> + { "in_multi_sx", &lock_class_sx }, >> { "udpinp", &lock_class_rw }, >> - { "in_multi_mtx", &lock_class_mtx_sleep }, >> + { "in_multi_list_mtx", &lock_class_mtx_sleep }, >> { "igmp_mtx", &lock_class_mtx_sleep }, >> + { "ifnet_rw", &lock_class_rw }, >> { "if_addr_lock", &lock_class_rw }, >> { NULL, NULL }, >> /* >> * IPv6 multicast: >> * protocol locks before interface locks, after UDP locks. >> */ >> + { "in6_multi_sx", &lock_class_sx }, >> { "udpinp", &lock_class_rw }, >> - { "in6_multi_mtx", &lock_class_mtx_sleep }, >> + { "in6_multi_list_mtx", &lock_class_mtx_sleep }, >> { "mld_mtx", &lock_class_mtx_sleep }, >> + { "ifnet_rw", &lock_class_rw }, >> { "if_addr_lock", &lock_class_rw }, >> { NULL, NULL }, >> /* >> >> Modified: head/sys/net/if.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/net/if.c Wed May 2 17:41:00 2018 (r333174) >> +++ head/sys/net/if.c Wed May 2 19:36:29 2018 (r333175) >> @@ -985,11 +985,13 @@ static void >> if_purgemaddrs(struct ifnet *ifp) >> { >> struct ifmultiaddr *ifma; >> - struct ifmultiaddr *next; >> >> IF_ADDR_WLOCK(ifp); >> - TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next) >> + while (!TAILQ_EMPTY(&ifp->if_multiaddrs)) { >> + ifma =3D TAILQ_FIRST(&ifp->if_multiaddrs); >> + TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link); >> if_delmulti_locked(ifp, ifma, 1); >> + } >> IF_ADDR_WUNLOCK(ifp); >> } >> >> @@ -3429,6 +3431,12 @@ if_addmulti(struct ifnet *ifp, struct sockaddr *s= a, >> struct sockaddr_dl sdl; >> int error; >> >> +#ifdef INET >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> +#endif >> +#ifdef INET6 >> + IN6_MULTI_LIST_UNLOCK_ASSERT(); >> +#endif >> /* >> * If the address is already present, return a new reference to it= ; >> * otherwise, allocate storage and set up a new address. >> @@ -3610,6 +3618,9 @@ if_delmulti_ifma(struct ifmultiaddr *ifma) >> struct ifnet *ifp; >> int lastref; >> >> +#ifdef INET >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> +#endif >> ifp =3D ifma->ifma_ifp; >> #ifdef DIAGNOSTIC >> if (ifp =3D=3D NULL) { >> @@ -3711,8 +3722,7 @@ if_delmulti_locked(struct ifnet *ifp, struct ifmul= tiad >> if_freemulti(ll_ifma); >> } >> } >> - >> - if (ifp !=3D NULL) >> + if (ifp !=3D NULL && detaching =3D=3D 0) >> TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link); >> >> if_freemulti(ifma); >> >> Modified: head/sys/netinet/igmp.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/netinet/igmp.c Wed May 2 17:41:00 2018 (r333174) >> +++ head/sys/netinet/igmp.c Wed May 2 19:36:29 2018 (r333175) >> @@ -136,7 +136,7 @@ static int igmp_v3_enqueue_group_record(struc= t mbufq * >> struct in_multi *, const int, const int, const int); >> static int igmp_v3_enqueue_filter_change(struct mbufq *, >> struct in_multi *); >> -static void igmp_v3_process_group_timers(struct igmp_ifsoftc *, >> +static void igmp_v3_process_group_timers(struct in_multi_head *, >> struct mbufq *, struct mbufq *, struct in_multi *, >> const int); >> static int igmp_v3_merge_state_changes(struct in_multi *, >> @@ -162,12 +162,12 @@ static const struct netisr_handler igmp_nh =3D { >> * themselves are not virtualized. >> * >> * Locking: >> - * * The permitted lock order is: IN_MULTI_LOCK, IGMP_LOCK, IF_ADDR_LO= CK. >> + * * The permitted lock order is: IN_MULTI_LIST_LOCK, IGMP_LOCK, IF_AD= DR_LOCK. >> * Any may be taken independently; if any are held at the same >> * time, the above lock order must be followed. >> * * All output is delegated to the netisr. >> * Now that Giant has been eliminated, the netisr may be inlined. >> - * * IN_MULTI_LOCK covers in_multi. >> + * * IN_MULTI_LIST_LOCK covers in_multi. >> * * IGMP_LOCK covers igmp_ifsoftc and any global variables in this fi= le, >> * including the output queue. >> * * IF_ADDR_LOCK covers if_multiaddrs, which is used for a variety of >> @@ -441,7 +441,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> if (error) >> return (error); >> >> - IN_MULTI_LOCK(); >> + IN_MULTI_LIST_LOCK(); >> IGMP_LOCK(); >> >> if (name[0] <=3D 0 || name[0] > V_if_index) { >> @@ -475,7 +475,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> >> out_locked: >> IGMP_UNLOCK(); >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> return (error); >> } >> >> @@ -586,7 +586,6 @@ igi_alloc_locked(/*const*/ struct ifnet *ifp) >> igi->igi_qi =3D IGMP_QI_INIT; >> igi->igi_qri =3D IGMP_QRI_INIT; >> igi->igi_uri =3D IGMP_URI_INIT; >> - SLIST_INIT(&igi->igi_relinmhead); >> mbufq_init(&igi->igi_gq, IGMP_MAX_RESPONSE_PACKETS); >> >> LIST_INSERT_HEAD(&V_igi_head, igi, igi_link); >> @@ -612,11 +611,12 @@ igmp_ifdetach(struct ifnet *ifp) >> { >> struct igmp_ifsoftc *igi; >> struct ifmultiaddr *ifma; >> - struct in_multi *inm, *tinm; >> - >> + struct in_multi *inm; >> + struct in_multi_head inm_free_tmp; >> CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)", __func__, ifp, >> ifp->if_xname); >> >> + SLIST_INIT(&inm_free_tmp); >> IGMP_LOCK(); >> >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; >> @@ -631,24 +631,15 @@ igmp_ifdetach(struct ifnet *ifp) >> ("%s: ifma_protospec is NULL", __func__)); >> #endif >> inm =3D (struct in_multi *)ifma->ifma_protospec; >> - if (inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) { >> - SLIST_INSERT_HEAD(&igi->igi_relinmhead, >> - inm, inm_nrele); >> - } >> + if (inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) >> + inm_rele_locked(&inm_free_tmp, inm); >> inm_clear_recorded(inm); >> } >> IF_ADDR_RUNLOCK(ifp); >> - /* >> - * Free the in_multi reference(s) for this IGMP lifecycle. >> - */ >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele, >> - tinm) { >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele)= ; >> - inm_release_locked(inm); >> - } >> + inm_release_list_deferred(&inm_free_tmp); >> } >> - >> IGMP_UNLOCK(); >> + >> } >> >> /* >> @@ -684,11 +675,6 @@ igi_delete_locked(const struct ifnet *ifp) >> mbufq_drain(&igi->igi_gq); >> >> LIST_REMOVE(igi, igi_link); >> - >> - KASSERT(SLIST_EMPTY(&igi->igi_relinmhead), >> - ("%s: there are dangling in_multi references", >> - __func__)); >> - >> free(igi, M_IGMP); >> return; >> } >> @@ -722,7 +708,7 @@ igmp_input_v1_query(struct ifnet *ifp, const struct = ip >> } >> IGMPSTAT_INC(igps_rcv_gen_queries); >> >> - IN_MULTI_LOCK(); >> + IN_MULTI_LIST_LOCK(); >> IGMP_LOCK(); >> >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; >> @@ -778,7 +764,7 @@ igmp_input_v1_query(struct ifnet *ifp, const struct = ip >> >> out_locked: >> IGMP_UNLOCK(); >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> >> return (0); >> } >> @@ -816,7 +802,7 @@ igmp_input_v2_query(struct ifnet *ifp, const struct = ip >> IGMPSTAT_INC(igps_rcv_group_queries); >> } >> >> - IN_MULTI_LOCK(); >> + IN_MULTI_LIST_LOCK(); >> IGMP_LOCK(); >> >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; >> @@ -872,7 +858,7 @@ igmp_input_v2_query(struct ifnet *ifp, const struct = ip >> >> out_locked: >> IGMP_UNLOCK(); >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> >> return (0); >> } >> @@ -899,7 +885,7 @@ igmp_v2_update_group(struct in_multi *inm, const int= t >> CTR4(KTR_IGMPV3, "0x%08x: %s/%s timer=3D%d", __func__, >> ntohl(inm->inm_addr.s_addr), inm->inm_ifp->if_xname, timer); >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> switch (inm->inm_state) { >> case IGMP_NOT_MEMBER: >> @@ -1011,7 +997,7 @@ igmp_input_v3_query(struct ifnet *ifp, const struct= ip >> IGMPSTAT_INC(igps_rcv_gsr_queries); >> } >> >> - IN_MULTI_LOCK(); >> + IN_MULTI_LIST_LOCK(); >> IGMP_LOCK(); >> >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp; >> @@ -1092,7 +1078,7 @@ igmp_input_v3_query(struct ifnet *ifp, const struc= t ip >> >> out_locked: >> IGMP_UNLOCK(); >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> >> return (0); >> } >> @@ -1109,7 +1095,7 @@ igmp_input_v3_group_query(struct in_multi *inm, st= ruct >> int retval; >> uint16_t nsrc; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> retval =3D 0; >> @@ -1246,7 +1232,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*const*/ = stru >> * If we are a member of this group, and our membership should be >> * reported, stop our group timer and transition to the 'lazy' sta= te. >> */ >> - IN_MULTI_LOCK(); >> + IN_MULTI_LIST_LOCK(); >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> if (inm !=3D NULL) { >> struct igmp_ifsoftc *igi; >> @@ -1305,7 +1291,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*const*/ = stru >> } >> >> out_locked: >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> >> return (0); >> } >> @@ -1373,7 +1359,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*const*/ = stru >> * reported, and our group timer is pending or about to be reset, >> * stop our group timer by transitioning to the 'lazy' state. >> */ >> - IN_MULTI_LOCK(); >> + IN_MULTI_LIST_LOCK(); >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> if (inm !=3D NULL) { >> struct igmp_ifsoftc *igi; >> @@ -1418,7 +1404,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*const*/ = stru >> } >> >> out_locked: >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> >> return (0); >> } >> @@ -1647,6 +1633,7 @@ igmp_fasttimo_vnet(void) >> struct igmp_ifsoftc *igi; >> struct ifmultiaddr *ifma; >> struct in_multi *inm; >> + struct in_multi_head inm_free_tmp; >> int loop, uri_fasthz; >> >> loop =3D 0; >> @@ -1662,7 +1649,8 @@ igmp_fasttimo_vnet(void) >> !V_state_change_timers_running) >> return; >> >> - IN_MULTI_LOCK(); >> + SLIST_INIT(&inm_free_tmp); >> + IN_MULTI_LIST_LOCK(); >> IGMP_LOCK(); >> >> /* >> @@ -1720,7 +1708,7 @@ igmp_fasttimo_vnet(void) >> igi->igi_version); >> break; >> case IGMP_VERSION_3: >> - igmp_v3_process_group_timers(igi, &qrq, >> + igmp_v3_process_group_timers(&inm_free_tmp= , &qrq, >> &scq, inm, uri_fasthz); >> break; >> } >> @@ -1728,8 +1716,6 @@ igmp_fasttimo_vnet(void) >> IF_ADDR_RUNLOCK(ifp); >> >> if (igi->igi_version =3D=3D IGMP_VERSION_3) { >> - struct in_multi *tinm; >> - >> igmp_dispatch_queue(&qrq, 0, loop); >> igmp_dispatch_queue(&scq, 0, loop); >> >> @@ -1737,18 +1723,13 @@ igmp_fasttimo_vnet(void) >> * Free the in_multi reference(s) for this >> * IGMP lifecycle. >> */ >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, >> - inm_nrele, tinm) { >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, >> - inm_nrele); >> - inm_release_locked(inm); >> - } >> + inm_release_list_deferred(&inm_free_tmp); >> } >> } >> >> out_locked: >> IGMP_UNLOCK(); >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> } >> >> /* >> @@ -1760,7 +1741,7 @@ igmp_v1v2_process_group_timer(struct in_multi *inm= , co >> { >> int report_timer_expired; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> if (inm->inm_timer =3D=3D 0) { >> @@ -1802,14 +1783,14 @@ igmp_v1v2_process_group_timer(struct in_multi *i= nm, co >> * Note: Unlocked read from igi. >> */ >> static void >> -igmp_v3_process_group_timers(struct igmp_ifsoftc *igi, >> +igmp_v3_process_group_timers(struct in_multi_head *inmh, >> struct mbufq *qrq, struct mbufq *scq, >> struct in_multi *inm, const int uri_fasthz) >> { >> int query_response_timer_expired; >> int state_change_retransmit_timer_expired; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> query_response_timer_expired =3D 0; >> @@ -1907,8 +1888,7 @@ igmp_v3_process_group_timers(struct igmp_ifsoftc *= igi, >> if (inm->inm_state =3D=3D IGMP_LEAVING_MEMBER && >> inm->inm_scrv =3D=3D 0) { >> inm->inm_state =3D IGMP_NOT_MEMBER; >> - SLIST_INSERT_HEAD(&igi->igi_relinmhead, >> - inm, inm_nrele); >> + inm_rele_locked(inmh, inm); >> } >> } >> break; >> @@ -1929,7 +1909,7 @@ static void >> igmp_v3_suppress_group_record(struct in_multi *inm) >> { >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> KASSERT(inm->inm_igi->igi_version =3D=3D IGMP_VERSION_3, >> ("%s: not IGMPv3 mode on link", __func__)); >> @@ -2003,13 +1983,15 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoftc *= igi) >> { >> struct ifmultiaddr *ifma; >> struct ifnet *ifp; >> - struct in_multi *inm, *tinm; >> + struct in_multi *inm; >> + struct in_multi_head inm_free_tmp; >> >> CTR3(KTR_IGMPV3, "%s: cancel v3 timers on ifp %p(%s)", __func__, >> igi->igi_ifp, igi->igi_ifp->if_xname); >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> + SLIST_INIT(&inm_free_tmp); >> >> /* >> * Stop the v3 General Query Response on this link stone dead. >> @@ -2050,7 +2032,7 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoftc *ig= i) >> * message is sent upstream to the old querier -- >> * transition to NOT would lose the leave and race= . >> */ >> - SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, inm_n= rele); >> + inm_rele_locked(&inm_free_tmp, inm); >> /* FALLTHROUGH */ >> case IGMP_G_QUERY_PENDING_MEMBER: >> case IGMP_SG_QUERY_PENDING_MEMBER: >> @@ -2069,10 +2051,8 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoftc *i= gi) >> mbufq_drain(&inm->inm_scq); >> } >> IF_ADDR_RUNLOCK(ifp); >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele, tinm) { >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele); >> - inm_release_locked(inm); >> - } >> + >> + inm_release_list_deferred(&inm_free_tmp); >> } >> >> /* >> @@ -2199,7 +2179,7 @@ igmp_v1v2_queue_report(struct in_multi *inm, const= int >> struct ip *ip; >> struct mbuf *m; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> ifp =3D inm->inm_ifp; >> @@ -2276,10 +2256,8 @@ igmp_change_state(struct in_multi *inm) >> struct ifnet *ifp; >> int error; >> >> - IN_MULTI_LOCK_ASSERT(); >> - >> error =3D 0; >> - >> + IN_MULTI_LOCK_ASSERT(); >> /* >> * Try to detect if the upper layer just asked us to change state >> * for an interface which has now gone away. >> @@ -2379,9 +2357,10 @@ igmp_initial_join(struct in_multi *inm, struct ig= mp_if >> * group around for the final INCLUDE {} enqueue. >> */ >> if (igi->igi_version =3D=3D IGMP_VERSION_3 && >> - inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) >> - inm_release_locked(inm); >> - >> + inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) { >> + MPASS(inm->inm_refcount > 1); >> + inm_rele_locked(NULL, inm); >> + } >> inm->inm_state =3D IGMP_REPORTING_MEMBER; >> >> switch (igi->igi_version) { >> @@ -2473,7 +2452,7 @@ igmp_handle_state_change(struct in_multi *inm, str= uct >> >> ifp =3D inm->inm_ifp; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> KASSERT(igi && igi->igi_ifp =3D=3D ifp, ("%s: inconsistent ifp", _= _func__)); >> @@ -2531,7 +2510,7 @@ igmp_final_leave(struct in_multi *inm, struct igmp= _ifs >> __func__, ntohl(inm->inm_addr.s_addr), inm->inm_ifp, >> inm->inm_ifp->if_xname); >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> switch (inm->inm_state) { >> @@ -2658,7 +2637,7 @@ igmp_v3_enqueue_group_record(struct mbufq *mq, str= uct >> in_addr_t naddr; >> uint8_t mode; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> error =3D 0; >> ifp =3D inm->inm_ifp; >> @@ -3018,7 +2997,7 @@ igmp_v3_enqueue_filter_change(struct mbufq *mq, st= ruct >> uint8_t mode, now, then; >> rectype_t crt, drt, nrt; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> if (inm->inm_nsrc =3D=3D 0 || >> (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0)) >> @@ -3221,7 +3200,7 @@ igmp_v3_merge_state_changes(struct in_multi *inm, = stru >> domerge =3D 0; >> recslen =3D 0; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> /* >> @@ -3320,7 +3299,7 @@ igmp_v3_dispatch_general_query(struct igmp_ifsoftc= *ig >> struct in_multi *inm; >> int retval, loop; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IGMP_LOCK_ASSERT(); >> >> KASSERT(igi->igi_version =3D=3D IGMP_VERSION_3, >> @@ -3632,7 +3611,6 @@ DB_SHOW_COMMAND(igi_list, db_show_igi_list) >> db_printf(" qi %u\n", igi->igi_qi); >> db_printf(" qri %u\n", igi->igi_qri); >> db_printf(" uri %u\n", igi->igi_uri); >> - /* SLIST_HEAD(,in_multi) igi_relinmhead */ >> /* struct mbufq igi_gq; */ >> db_printf("\n"); >> } >> >> Modified: head/sys/netinet/igmp_var.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/netinet/igmp_var.h Wed May 2 17:41:00 2018 (r= 333174) >> +++ head/sys/netinet/igmp_var.h Wed May 2 19:36:29 2018 (r= 333175) >> @@ -214,7 +214,6 @@ struct igmp_ifsoftc { >> uint32_t igi_qi; /* IGMPv3 Query Interval (s) */ >> uint32_t igi_qri; /* IGMPv3 Query Response Interval (s) */ >> uint32_t igi_uri; /* IGMPv3 Unsolicited Report Interval (s) = */ >> - SLIST_HEAD(,in_multi) igi_relinmhead; /* released groups */ >> struct mbufq igi_gq; /* general query responses queue *= / >> }; >> >> >> Modified: head/sys/netinet/in.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/netinet/in.c Wed May 2 17:41:00 2018 (r333174) >> +++ head/sys/netinet/in.c Wed May 2 19:36:29 2018 (r333175) >> @@ -632,12 +632,10 @@ in_difaddr_ioctl(u_long cmd, caddr_t data, struct = ifne >> struct in_ifinfo *ii; >> >> ii =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET]); >> - IN_MULTI_LOCK(); >> if (ii->ii_allhosts) { >> - (void)in_leavegroup_locked(ii->ii_allhosts, NULL); >> + (void)in_leavegroup(ii->ii_allhosts, NULL); >> ii->ii_allhosts =3D NULL; >> } >> - IN_MULTI_UNLOCK(); >> } >> >> IF_ADDR_WLOCK(ifp); >> @@ -994,11 +992,12 @@ in_broadcast(struct in_addr in, struct ifnet *ifp) >> void >> in_ifdetach(struct ifnet *ifp) >> { >> - >> + IN_MULTI_LOCK(); >> in_pcbpurgeif0(&V_ripcbinfo, ifp); >> in_pcbpurgeif0(&V_udbinfo, ifp); >> in_pcbpurgeif0(&V_ulitecbinfo, ifp); >> in_purgemaddrs(ifp); >> + IN_MULTI_UNLOCK(); >> } >> >> /* >> @@ -1011,12 +1010,12 @@ in_ifdetach(struct ifnet *ifp) >> static void >> in_purgemaddrs(struct ifnet *ifp) >> { >> - LIST_HEAD(,in_multi) purgeinms; >> - struct in_multi *inm, *tinm; >> + struct in_multi_head purgeinms; >> + struct in_multi *inm; >> struct ifmultiaddr *ifma; >> >> - LIST_INIT(&purgeinms); >> - IN_MULTI_LOCK(); >> + SLIST_INIT(&purgeinms); >> + IN_MULTI_LIST_LOCK(); >> >> /* >> * Extract list of in_multi associated with the detaching ifp >> @@ -1034,17 +1033,13 @@ in_purgemaddrs(struct ifnet *ifp) >> ("%s: ifma_protospec is NULL", __func__)); >> #endif >> inm =3D (struct in_multi *)ifma->ifma_protospec; >> - LIST_INSERT_HEAD(&purgeinms, inm, inm_link); >> + inm_rele_locked(&purgeinms, inm); >> } >> IF_ADDR_RUNLOCK(ifp); >> >> - LIST_FOREACH_SAFE(inm, &purgeinms, inm_link, tinm) { >> - LIST_REMOVE(inm, inm_link); >> - inm_release_locked(inm); >> - } >> + inm_release_list_deferred(&purgeinms); >> igmp_ifdetach(ifp); >> - >> - IN_MULTI_UNLOCK(); >> + IN_MULTI_LIST_UNLOCK(); >> } >> >> struct in_llentry { >> >> Modified: head/sys/netinet/in_mcast.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/netinet/in_mcast.c Wed May 2 17:41:00 2018 (r= 333174) >> +++ head/sys/netinet/in_mcast.c Wed May 2 19:36:29 2018 (r= 333175) >> @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); >> #include >> #include >> #include >> +#include >> #include >> >> #include >> @@ -59,6 +60,8 @@ __FBSDID("$FreeBSD$"); >> #include >> #include >> >> +#include >> + >> #include >> #include >> #include >> @@ -91,18 +94,24 @@ static MALLOC_DEFINE(M_IPMSOURCE, "ip_msource", >> >> /* >> * Locking: >> - * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LOCK, IGMP_LOCK, IF_ADDR= _LOCK. >> + * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LIST_LOCK, IGMP_LOCK, IF= _ADDR_LOCK. >> * - The IF_ADDR_LOCK is implicitly taken by inm_lookup() earlier, howe= ver >> * it can be taken by code in net/if.c also. >> * - ip_moptions and in_mfilter are covered by the INP_WLOCK. >> * >> - * struct in_multi is covered by IN_MULTI_LOCK. There isn't strictly >> + * struct in_multi is covered by IN_MULTI_LIST_LOCK. There isn't strict= ly >> * any need for in_multi itself to be virtualized -- it is bound to an = ifp >> * anyway no matter what happens. >> */ >> -struct mtx in_multi_mtx; >> -MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DEF); >> +struct mtx in_multi_list_mtx; >> +MTX_SYSINIT(in_multi_mtx, &in_multi_list_mtx, "in_multi_list_mtx", MTX_= DEF); >> >> +struct mtx in_multi_free_mtx; >> +MTX_SYSINIT(in_multi_free_mtx, &in_multi_free_mtx, "in_multi_free_mtx",= MTX_DEF); >> + >> +struct sx in_multi_sx; >> +SX_SYSINIT(in_multi_sx, &in_multi_sx, "in_multi_sx"); >> + >> /* >> * Functions with non-static linkage defined in this file should be >> * declared in in_var.h: >> @@ -151,6 +160,7 @@ static int inm_is_ifp_detached(const struct i= n_multi * >> static int inm_merge(struct in_multi *, /*const*/ struct in_mfilter *= ); >> static void inm_purge(struct in_multi *); >> static void inm_reap(struct in_multi *); >> +static void inm_release(struct in_multi *); >> static struct ip_moptions * >> inp_findmoptions(struct inpcb *); >> static void inp_freemoptions_internal(struct ip_moptions *); >> @@ -216,6 +226,65 @@ inm_is_ifp_detached(const struct in_multi *inm) >> } >> #endif >> >> +static struct grouptask free_gtask; >> +static struct in_multi_head inm_free_list; >> +static void inm_release_task(void *arg __unused); >> +static void inm_init(void) >> +{ >> + SLIST_INIT(&inm_free_list); >> + taskqgroup_config_gtask_init(NULL, &free_gtask, inm_release_task, = "inm release >> task"); +} >> + >> +SYSINIT(inm_init, SI_SUB_SMP + 1, SI_ORDER_FIRST, >> + inm_init, NULL); >> + >> + >> +void >> +inm_release_list_deferred(struct in_multi_head *inmh) >> +{ >> + >> + if (SLIST_EMPTY(inmh)) >> + return; >> + mtx_lock(&in_multi_free_mtx); >> + SLIST_CONCAT(&inm_free_list, inmh, in_multi, inm_nrele); >> + mtx_unlock(&in_multi_free_mtx); >> + GROUPTASK_ENQUEUE(&free_gtask); >> +} >> + >> +void >> +inm_release_deferred(struct in_multi *inm) >> +{ >> + struct in_multi_head tmp; >> + >> + IN_MULTI_LIST_LOCK_ASSERT(); >> + MPASS(inm->inm_refcount > 0); >> + if (--inm->inm_refcount =3D=3D 0) { >> + SLIST_INIT(&tmp); >> + inm->inm_ifma->ifma_protospec =3D NULL; >> + SLIST_INSERT_HEAD(&tmp, inm, inm_nrele); >> + inm_release_list_deferred(&tmp); >> + } >> +} >> + >> +static void >> +inm_release_task(void *arg __unused) >> +{ >> + struct in_multi_head inm_free_tmp; >> + struct in_multi *inm, *tinm; >> + >> + SLIST_INIT(&inm_free_tmp); >> + mtx_lock(&in_multi_free_mtx); >> + SLIST_CONCAT(&inm_free_tmp, &inm_free_list, in_multi, inm_nrele); >> + mtx_unlock(&in_multi_free_mtx); >> + IN_MULTI_LOCK(); >> + SLIST_FOREACH_SAFE(inm, &inm_free_tmp, inm_nrele, tinm) { >> + SLIST_REMOVE_HEAD(&inm_free_tmp, inm_nrele); >> + MPASS(inm); >> + inm_release(inm); >> + } >> + IN_MULTI_UNLOCK(); >> +} >> + >> /* >> * Initialize an in_mfilter structure to a known state at t0, t1 >> * with an empty source filter list. >> @@ -232,7 +301,7 @@ imf_init(struct in_mfilter *imf, const int st0, cons= t >> /* >> * Function for looking up an in_multi record for an IPv4 multicast add= ress >> * on a given interface. ifp must be valid. If no record found, return = NULL. >> - * The IN_MULTI_LOCK and IF_ADDR_LOCK on ifp must be held. >> + * The IN_MULTI_LIST_LOCK and IF_ADDR_LOCK on ifp must be held. >> */ >> struct in_multi * >> inm_lookup_locked(struct ifnet *ifp, const struct in_addr ina) >> @@ -240,7 +309,7 @@ inm_lookup_locked(struct ifnet *ifp, const struct in= _a >> struct ifmultiaddr *ifma; >> struct in_multi *inm; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IF_ADDR_LOCK_ASSERT(ifp); >> >> inm =3D NULL; >> @@ -264,7 +333,7 @@ inm_lookup(struct ifnet *ifp, const struct in_addr i= na >> { >> struct in_multi *inm; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> IF_ADDR_RLOCK(ifp); >> inm =3D inm_lookup_locked(ifp, ina); >> IF_ADDR_RUNLOCK(ifp); >> @@ -451,7 +520,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr = *g >> IN_MULTI_LOCK_ASSERT(); >> >> ii =3D (struct in_ifinfo *)ifp->if_afdata[AF_INET]; >> - >> + IN_MULTI_LIST_LOCK(); >> inm =3D inm_lookup(ifp, *group); >> if (inm !=3D NULL) { >> /* >> @@ -460,11 +529,13 @@ in_getmulti(struct ifnet *ifp, const struct in_add= r *g >> */ >> KASSERT(inm->inm_refcount >=3D 1, >> ("%s: bad refcount %d", __func__, inm->inm_refcount)); >> - ++inm->inm_refcount; >> + inm_acquire_locked(inm); >> *pinm =3D inm; >> - return (0); >> } >> - >> + IN_MULTI_LIST_UNLOCK(); >> + if (inm !=3D NULL) >> + return (0); >> + >> memset(&gsin, 0, sizeof(gsin)); >> gsin.sin_family =3D AF_INET; >> gsin.sin_len =3D sizeof(struct sockaddr_in); >> @@ -479,6 +550,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr = *g >> return (error); >> >> /* XXX ifma_protospec must be covered by IF_ADDR_LOCK */ >> + IN_MULTI_LIST_LOCK(); >> IF_ADDR_WLOCK(ifp); >> >> /* >> @@ -504,10 +576,9 @@ in_getmulti(struct ifnet *ifp, const struct in_addr= *g >> __func__, ifma, inm, inet_ntoa_r(*group, addrb= uf)); >> } >> #endif >> - ++inm->inm_refcount; >> + inm_acquire_locked(inm); >> *pinm =3D inm; >> - IF_ADDR_WUNLOCK(ifp); >> - return (0); >> + goto out_locked; >> } >> >> IF_ADDR_WLOCK_ASSERT(ifp); >> @@ -522,6 +593,7 @@ in_getmulti(struct ifnet *ifp, const struct in_addr = *g >> inm =3D malloc(sizeof(*inm), M_IPMADDR, M_NOWAIT | M_ZERO); >> if (inm =3D=3D NULL) { >> IF_ADDR_WUNLOCK(ifp); >> + IN_MULTI_LIST_UNLOCK(); >> if_delmulti_ifma(ifma); >> return (ENOMEM); >> } >> @@ -539,8 +611,9 @@ in_getmulti(struct ifnet *ifp, const struct in_addr = *g >> ifma->ifma_protospec =3D inm; >> >> *pinm =3D inm; >> - >> + out_locked: >> IF_ADDR_WUNLOCK(ifp); >> + IN_MULTI_LIST_UNLOCK(); >> return (0); >> } >> >> @@ -550,36 +623,29 @@ in_getmulti(struct ifnet *ifp, const struct in_add= r *g >> * If the refcount drops to 0, free the in_multi record and >> * delete the underlying link-layer membership. >> */ >> -void >> -inm_release_locked(struct in_multi *inm) >> +static void >> +inm_release(struct in_multi *inm) >> { >> struct ifmultiaddr *ifma; >> + struct ifnet *ifp; >> >> - IN_MULTI_LOCK_ASSERT(); >> - >> CTR2(KTR_IGMPV3, "%s: refcount is %d", __func__, inm->inm_refcount= ); >> - >> - if (--inm->inm_refcount > 0) { >> - CTR2(KTR_IGMPV3, "%s: refcount is now %d", __func__, >> - inm->inm_refcount); >> - return; >> - } >> - >> + MPASS(inm->inm_refcount =3D=3D 0); >> CTR2(KTR_IGMPV3, "%s: freeing inm %p", __func__, inm); >> >> ifma =3D inm->inm_ifma; >> + ifp =3D inm->inm_ifp; >> >> /* XXX this access is not covered by IF_ADDR_LOCK */ >> CTR2(KTR_IGMPV3, "%s: purging ifma %p", __func__, ifma); >> - KASSERT(ifma->ifma_protospec =3D=3D inm, >> - ("%s: ifma_protospec !=3D inm", __func__)); >> - ifma->ifma_protospec =3D NULL; >> - >> + if (ifp) >> + CURVNET_SET(ifp->if_vnet); >> inm_purge(inm); >> - >> free(inm, M_IPMADDR); >> >> if_delmulti_ifma(ifma); >> + if (ifp) >> + CURVNET_RESTORE(); >> } >> >> /* >> @@ -592,7 +658,7 @@ inm_clear_recorded(struct in_multi *inm) >> { >> struct ip_msource *ims; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) { >> if (ims->ims_stp) { >> @@ -632,7 +698,7 @@ inm_record_source(struct in_multi *inm, const in_add= r_ >> struct ip_msource find; >> struct ip_msource *ims, *nims; >> >> - IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> find.ims_haddr =3D ntohl(naddr); >> ims =3D RB_FIND(ip_msource_tree, &inm->inm_srcs, &find); >> @@ -959,6 +1025,7 @@ inm_merge(struct in_multi *inm, /*const*/ struct in= _mf >> schanged =3D 0; >> error =3D 0; >> nsrc1 =3D nsrc0 =3D 0; >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> /* >> * Update the source filters first, as this may fail. >> @@ -1165,6 +1232,7 @@ in_joingroup_locked(struct ifnet *ifp, const struc= t in >> int error; >> >> IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> CTR4(KTR_IGMPV3, "%s: join 0x%08x on %p(%s))", __func__, >> ntohl(gina->s_addr), ifp, ifp->if_xname); >> @@ -1186,7 +1254,7 @@ in_joingroup_locked(struct ifnet *ifp, const struc= t in >> CTR1(KTR_IGMPV3, "%s: in_getmulti() failure", __func__); >> return (error); >> } >> - >> + IN_MULTI_LIST_LOCK(); >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> error =3D inm_merge(inm, imf); >> if (error) { >> @@ -1201,10 +1269,12 @@ in_joingroup_locked(struct ifnet *ifp, const str= uct in >> goto out_inm_release; >> } >> >> -out_inm_release: >> + out_inm_release: >> + IN_MULTI_LIST_UNLOCK(); >> if (error) { >> + >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); >> - inm_release_locked(inm); >> + inm_release_deferred(inm); >> } else { >> *pinm =3D inm; >> } >> @@ -1249,6 +1319,7 @@ in_leavegroup_locked(struct in_multi *inm, /*const= */ s >> error =3D 0; >> >> IN_MULTI_LOCK_ASSERT(); >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> CTR5(KTR_IGMPV3, "%s: leave inm %p, 0x%08x/%s, imf %p", __func__, >> inm, ntohl(inm->inm_addr.s_addr), >> @@ -1272,18 +1343,20 @@ in_leavegroup_locked(struct in_multi *inm, /*con= st*/ s >> * the transaction, it MUST NOT fail. >> */ >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> + IN_MULTI_LIST_LOCK(); >> error =3D inm_merge(inm, imf); >> KASSERT(error =3D=3D 0, ("%s: failed to merge inm state", __func__= )); >> >> CTR1(KTR_IGMPV3, "%s: doing igmp downcall", __func__); >> CURVNET_SET(inm->inm_ifp->if_vnet); >> error =3D igmp_change_state(inm); >> + inm_release_deferred(inm); >> + IN_MULTI_LIST_UNLOCK(); >> CURVNET_RESTORE(); >> if (error) >> CTR1(KTR_IGMPV3, "%s: failed igmp downcall", __func__); >> >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); >> - inm_release_locked(inm); >> >> return (error); >> } >> @@ -1315,18 +1388,6 @@ in_addmulti(struct in_addr *ap, struct ifnet *ifp= ) >> } >> >> /* >> - * Leave an IPv4 multicast group, assumed to be in exclusive (*,G) mode= . >> - * This KPI is for legacy kernel consumers only. >> - */ >> >> *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** >> _______________________________________________ >> 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" > > > After (around!) this update, some boxes with i350 dual port NICs immediat= ely crash with > Fatal trap 12: page fault and something with > > current process: (isc-worker0006) > > .... > > Those boxes do not have debugging kernel. The symptombs are the same. Sin= gle user kernel > works, but the moment I perform /etc/netstart and any kind of net traffic= establishes, > this crap bails out. > > > - -- > 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 Ab= s. 4 BDSG). > -----BEGIN PGP SIGNATURE----- > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutjtgAKCRDS528fyFhY > lAkzAf9PhaFTwNhQD2zF7xSHJ2wfvLtoUEjZlzGsusACp1pa7JAfz0Pyv+lm+XNJ > vLElrIf1CmDzuA8yblZ/x/wOVSJkAf9C+50DVEtGq5H/bHSDNwzmqrj8YgB7XpSs > PMRXc+IwIa1Jgi2yM+6TCSNSs1N5bEUhU9Bi8eXy6Y0FSkAZeV+s > =3DS0bC > -----END PGP SIGNATURE----- > _______________________________________________ > 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" From owner-svn-src-head@freebsd.org Thu May 3 20:24:36 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AD981FB930A; Thu, 3 May 2018 20:24:35 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (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 0B8767B067; Thu, 3 May 2018 20:24:34 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from thor.intern.walstatt.dynvpn.de ([77.14.33.35]) by mail.gmx.com (mrgmx102 [212.227.17.168]) with ESMTPSA (Nemesis) id 0LlGoc-1efohp1nJm-00b4rB; Thu, 03 May 2018 22:24:27 +0200 Date: Thu, 3 May 2018 22:23:52 +0200 From: "O. Hartmann" To: "K. Macy" Cc: "O. Hartmann" , Stephen Hurd , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys Message-ID: <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> In-Reply-To: References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> Organization: WALSTATT User-Agent: OutScare 3.1415926 X-Operating-System: ImNotAnOperatingSystem 3.141592527 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:Db843JGK12UZDTbs0dDiXarz4JKHSDh6KrpgWLPaIUNI3XncK10 r4V1cEHHlICIRwKJGeoLf0N1C+riE20cQvNdWADCxPUVxlC6yAxruJgl7TIIFBLXo9KKXIT x8APf5DSYKZmhQTUnwlFPDJ6qHyYPxGdnRpxr4FWSKHU357r3KDXG4FSc6wiGmn0veVizZy SVFa99trIDUCM1E908Lfw== X-UI-Out-Filterresults: notjunk:1;V01:K0:QwnfBKhvx7o=:1/L8FrT1Zhk1EQhXtZrK27 a3Mouzt1b6XtKKdasjV72/rcQkFL++ClCE6s5qnLL2W9Lt/NSo6HxEzEx+gtAIHcaTQ0ODaVE N2k6G2nsTr2rB9oK334AJ7dt4JUiQ9VhsaAwvTae4c5kiR6mY4A+vMl93Ywr6lr/reRsVLQyC GkW6n2sin8AINGUyhZ45uGzEchF5UKhEI/0wjj4JoVrPhbEWTSZ+mI3k6eJa/GAACtRh5G196 CmhpMTxfc6JuVGjTNozU+hw5BFq+oN8GWlGQAHvE4hwg2b5jBcEN/AlTtyXRLtjrChCkyCOxr 3lO/BWLCN+JHvH9Ll7AGBcuVPf6cWp/I9zvlbji/dmxW0m7rkAnQw0FFYEmVpIAzHXujsReW/ 6RtQpbbp71KrX6tvE0tpQ/ruP5Q3MH7W4TzGC5LRZEoDkPkA1Y3tI2Q8lyvpZd99klHgEQIYC J9fy3h8l/MLZMEKikio/qBwWPqwLGVuDRmaUuGNObHcZqNAzUzr6yPMox/M/uFDikp9CHdE/S +2TTARpyN2PJ+jr6GJAygo7f02F5q+0FBRVDytNG5piSWE+UBmnB61cwPoV77t95A4n+YXdBY FGWMXCzoqpmM26CXxgZ7ApdEsFLGYUETpptV2mFUbGAz3bAm/YOo6I3laiseXcYJQtUSjA97O N9YbFRax6j1MdWb56jT6j1+mfzGm8OaUXmTspHtC08yGqIkd1iw4iArhaLaDHNM2SBRKVQzED V2hz9RAEliStz/eI3s8oguMnL+JzHLd2jp6FWrVFC52LesDS33yi8mCCSI/ER6vxTMCObZBP4 1M767o2 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 03 May 2018 20:24:36 -0000 LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBNTEyDQoNCkFtIFRo dSwgMyBNYXkgMjAxOCAxMjo1MzowNSAtMDcwMA0KIksuIE1hY3kiIDxrbWFjeUBmcmVlYnNkLm9y Zz4gc2NocmllYjoNCg0KPiBDYW4geW91IGdpdmUgYW55IGNvbnRleHQgb24gd2hhdCB0aGV5J3Jl IGRvaW5nPyBJbiBhZGRpdGlvbiAtIGV2ZW4gb24NCj4gYSBwcm9kdWN0aW9uIGtlcm5lbCBpdCdz IHBvc3NpYmxlIHRvIGNvbXBpbGUgaW4gRERCIHRvIGF0IGxlYXN0IGdldCBhDQo+IGJhY2t0cmFj ZS4gWW91ciByZXBvcnQgb25seSBnaXZlcyB1cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8ga25vdyB0 aGF0DQoNCk5vdCBhdCB0aGUgbW9tZW50LiBUaGUgaW1tZWRpYXRlIGNyYXNoIGNvcnJ1cHRlZCB0 aGUgL3Vzci9zcmMgZmlsZXN5c3RlbSBzbyBJIGNhbiBub3QNCnJlY29tcGlsZSBhIGtlcm5lbC4g RXZlcnkgYXR0ZW1wdCB0byAvZXRjL25ldHN0YXJ0IHRoZSBuZXR3b3JrIG9uIHRoZSBidWdneSBr ZXJuZWwgZW5kcw0KdXAgaW4gYSBmdXJ0aGVyIGRlc3RydWN0aW9uLCBzbyBJIHN0b3BwZWQgYXQg dGhpcyB2ZXJ5IG1vbWVudCBhbmQgaG9wZWZ1bGx5IEkgY2FuDQpjb3B5IC91c3Ivc3JjIGZyb20g YSByMzMxNTMgYm94IChyMzMzMTUzIGlzIGZvciBtZSB0aGUgbGFzdCB3b3JraW5nIHJldmlzaW9u KSB2aWEgVVNCDQpmbGFzaCBkcml2ZSBhbmQgcmVjb21waWxlIHRoZSBrZXJuZWwuIEJ1dCBJJ2xs IGdvIGZvciByMzMzMTUzIGZpcnN0IHNpbmNlIEkgbmVlZCB0aGUNCnNlcnZlciB1cCB0b21vcnJv dyBhbmQgSSdsbCB0cnkgb24gdGhlIG90aGVyIGJveCB3aGljaCBpcyBhbHNvIGFmZmVjdGVkLCBi dXQgYWxzbw0KZXF1aXB0ZWQgd2l0aCB0aGUgaTM1MCBOSUMgb24gd2hpY2ggdGhlIHByb2JsZW0g b2NjdXJzIHZlcnkgcXVpY2tseS4NCg0KPiB0aGVyZSBpcyBfYW5fIGlzc3VlLiBJdCdzIGRpZmZp Y3VsdCB0byBwcm9jZWVkIG9uIHRoaXMgYWxvbmUuIEkgZG8NCj4gaGF2ZSBhIHJlcG9ydCBmcm9t IHRoZSBGcmVlQlNEIENJIGluZnJhc3RydWN0dXJlIHRoYXQgd2UncmUgbG9va2luZyBpbg0KPiB0 byBub3cuICBXaXRoIGx1Y2sgdGhhdCBpcyB0aGUgc2FtZSBpc3N1ZS4NCj4gDQo+IC1NDQo+IA0K PiBPbiBUaHUsIE1heSAzLCAyMDE4IGF0IDEyOjMxIFBNLCBPLiBIYXJ0bWFubiA8b2hhcnRtYW5u QHdhbHN0YXR0Lm9yZz4gd3JvdGU6DQo+ID4gLS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0Ut LS0tLQ0KPiA+IEhhc2g6IFNIQTUxMg0KPiA+DQo+ID4gQW0gV2VkLCAyIE1heSAyMDE4IDE5OjM2 OjI5ICswMDAwIChVVEMpDQo+ID4gU3RlcGhlbiBIdXJkIDxzaHVyZEBGcmVlQlNELm9yZz4gc2No cmllYjoNCj4gPiAgDQo+ID4+IEF1dGhvcjogc2h1cmQNCj4gPj4gRGF0ZTogV2VkIE1heSAgMiAx OTozNjoyOSAyMDE4DQo+ID4+IE5ldyBSZXZpc2lvbjogMzMzMTc1DQo+ID4+IFVSTDogaHR0cHM6 Ly9zdm53ZWIuZnJlZWJzZC5vcmcvY2hhbmdlc2V0L2Jhc2UvMzMzMTc1DQo+ID4+DQo+ID4+IExv ZzoNCj4gPj4gICBTZXBhcmF0ZSBsaXN0IG1hbmlwdWxhdGlvbiBsb2NraW5nIGZyb20gc3RhdGUg Y2hhbmdlIGluIG11bHRpY2FzdA0KPiA+Pg0KPiA+PiAgIE11bHRpY2FzdCBpbmNvcnJlY3RseSBj YWxscyBpbiB0byBkcml2ZXJzIHdpdGggYSBtdXRleCBoZWxkIGNhdXNpbmcgZHJpdmVycw0KPiA+ PiAgIHRvIGhhdmUgdG8gZ28gdGhyb3VnaCBhbGwgbWFubmVyIG9mIGNvbnRvcnRpb25zIHRvIHVz ZSBhIG5vbiBzbGVlcGFibGUgbG9jay4NCj4gPj4gICBTZXJpYWxpemUgbXVsdGljYXN0IHVwZGF0 ZXMgaW5zdGVhZC4NCj4gPj4NCj4gPj4gICBTdWJtaXR0ZWQgYnk6ICAgICAgIG1tYWN5IDxtbWFj eUBtYXR0bWFjeS5pbz4NCj4gPj4gICBSZXZpZXdlZCBieTogICAgICAgIHNodXJkLCBzYnJ1bm8N Cj4gPj4gICBTcG9uc29yZWQgYnk6ICAgICAgIExpbWVsaWdodCBOZXR3b3Jrcw0KPiA+PiAgIERp ZmZlcmVudGlhbCBSZXZpc2lvbjogICAgICBodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDE0 OTY5DQo+ID4+DQo+ID4+IE1vZGlmaWVkOg0KPiA+PiAgIGhlYWQvc3lzL2tlcm4vc3Vicl9ndGFz a3F1ZXVlLmMNCj4gPj4gICBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jDQo+ID4+ICAgaGVh ZC9zeXMvbmV0L2lmLmMNCj4gPj4gICBoZWFkL3N5cy9uZXRpbmV0L2lnbXAuYw0KPiA+PiAgIGhl YWQvc3lzL25ldGluZXQvaWdtcF92YXIuaA0KPiA+PiAgIGhlYWQvc3lzL25ldGluZXQvaW4uYw0K PiA+PiAgIGhlYWQvc3lzL25ldGluZXQvaW5fbWNhc3QuYw0KPiA+PiAgIGhlYWQvc3lzL25ldGlu ZXQvaW5fcGNiLmMNCj4gPj4gICBoZWFkL3N5cy9uZXRpbmV0L2luX3Zhci5oDQo+ID4+ICAgaGVh ZC9zeXMvbmV0aW5ldC9pcF9jYXJwLmMNCj4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjYuYw0K PiA+PiAgIGhlYWQvc3lzL25ldGluZXQ2L2luNl9pZmF0dGFjaC5jDQo+ID4+ICAgaGVhZC9zeXMv bmV0aW5ldDYvaW42X21jYXN0LmMNCj4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjZfcGNiLmMN Cj4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjZfdmFyLmgNCj4gPj4gICBoZWFkL3N5cy9uZXRp bmV0Ni9tbGQ2LmMNCj4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9tbGQ2X3Zhci5oDQo+ID4+ICAg aGVhZC9zeXMvc3lzL2d0YXNrcXVldWUuaA0KPiA+Pg0KPiA+PiBNb2RpZmllZDogaGVhZC9zeXMv a2Vybi9zdWJyX2d0YXNrcXVldWUuYw0KPiA+PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4g LS0tIGhlYWQvc3lzL2tlcm4vc3Vicl9ndGFza3F1ZXVlLmMgICBXZWQgTWF5ICAyIDE3OjQxOjAw IDIwMTggICAgICAgIChyMzMzMTc0KQ0KPiA+PiArKysgaGVhZC9zeXMva2Vybi9zdWJyX2d0YXNr cXVldWUuYyAgIFdlZCBNYXkgIDIgMTk6MzY6MjkgMjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4+ IEBAIC01Myw2ICs1Myw3IEBAIHN0YXRpYyB2b2lkIGd0YXNrcXVldWVfdGhyZWFkX2VucXVldWUo dm9pZCAqKTsNCj4gPj4gIHN0YXRpYyB2b2lkICBndGFza3F1ZXVlX3RocmVhZF9sb29wKHZvaWQg KmFyZyk7DQo+ID4+DQo+ID4+ICBUQVNLUUdST1VQX0RFRklORShzb2Z0aXJxLCBtcF9uY3B1cywg MSk7DQo+ID4+ICtUQVNLUUdST1VQX0RFRklORShjb25maWcsIDEsIDEpOw0KPiA+Pg0KPiA+PiAg c3RydWN0IGd0YXNrcXVldWVfYnVzeSB7DQo+ID4+ICAgICAgIHN0cnVjdCBndGFzayAgICAqdGJf cnVubmluZzsNCj4gPj4gQEAgLTY2Miw3ICs2NjMsNyBAQCBTWVNJTklUKHRxZ19yZWNvcmRfc21w X3N0YXJ0ZWQsIFNJX1NVQl9TTVAsIFNJX09SREVSX0YNCj4gPj4NCj4gPj4gIHZvaWQNCj4gPj4g IHRhc2txZ3JvdXBfYXR0YWNoKHN0cnVjdCB0YXNrcWdyb3VwICpxZ3JvdXAsIHN0cnVjdCBncm91 cHRhc2sgKmd0YXNrLA0KPiA+PiAtICAgIHZvaWQgKnVuaXEsIGludCBpcnEsIGNoYXIgKm5hbWUp DQo+ID4+ICsgICAgdm9pZCAqdW5pcSwgaW50IGlycSwgY29uc3QgY2hhciAqbmFtZSkNCj4gPj4g IHsNCj4gPj4gICAgICAgY3B1c2V0X3QgbWFzazsNCj4gPj4gICAgICAgaW50IHFpZCwgZXJyb3I7 DQo+ID4+IEBAIC05NzYsNCArOTc3LDEzIEBAIHZvaWQNCj4gPj4gIHRhc2txZ3JvdXBfZGVzdHJv eShzdHJ1Y3QgdGFza3Fncm91cCAqcWdyb3VwKQ0KPiA+PiAgew0KPiA+Pg0KPiA+PiArfQ0KPiA+ PiArDQo+ID4+ICt2b2lkDQo+ID4+ICt0YXNrcWdyb3VwX2NvbmZpZ19ndGFza19pbml0KHZvaWQg KmN0eCwgc3RydWN0IGdyb3VwdGFzayAqZ3Rhc2ssIGd0YXNrX2ZuX3QgKmZuLA0KPiA+PiArICAg ICBjb25zdCBjaGFyICpuYW1lKQ0KPiA+PiArew0KPiA+PiArDQo+ID4+ICsgICAgIEdST1VQVEFT S19JTklUKGd0YXNrLCAwLCBmbiwgY3R4KTsNCj4gPj4gKyAgICAgdGFza3Fncm91cF9hdHRhY2go cWdyb3VwX2NvbmZpZywgZ3Rhc2ssIGd0YXNrLCAtMSwgbmFtZSk7DQo+ID4+ICB9DQo+ID4+DQo+ ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jDQo+ID4+ID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQ0KPiA+PiAtLS0gaGVhZC9zeXMva2Vybi9zdWJyX3dpdG5lc3MuYyAgICAg IFdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOCAgICAgICAgKHIzMzMxNzQpDQo+ID4+ICsrKyBoZWFk L3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jICAgICAgV2VkIE1heSAgMiAxOTozNjoyOSAyMDE4ICAg ICAgICAocjMzMzE3NSkNCj4gPj4gQEAgLTUzMiwxOCArNTMyLDIyIEBAIHN0YXRpYyBzdHJ1Y3Qg d2l0bmVzc19vcmRlcl9saXN0X2VudHJ5IG9yZGVyX2xpc3RzW10gPQ0KPiA+PiAgICAgICAgKiBJ UHY0IG11bHRpY2FzdDoNCj4gPj4gICAgICAgICogcHJvdG9jb2wgbG9ja3MgYmVmb3JlIGludGVy ZmFjZSBsb2NrcywgYWZ0ZXIgVURQIGxvY2tzLg0KPiA+PiAgICAgICAgKi8NCj4gPj4gKyAgICAg eyAiaW5fbXVsdGlfc3giLCAmbG9ja19jbGFzc19zeCB9LA0KPiA+PiAgICAgICB7ICJ1ZHBpbnAi LCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiAtICAgICB7ICJpbl9tdWx0aV9tdHgiLCAmbG9ja19j bGFzc19tdHhfc2xlZXAgfSwNCj4gPj4gKyAgICAgeyAiaW5fbXVsdGlfbGlzdF9tdHgiLCAmbG9j a19jbGFzc19tdHhfc2xlZXAgfSwNCj4gPj4gICAgICAgeyAiaWdtcF9tdHgiLCAmbG9ja19jbGFz c19tdHhfc2xlZXAgfSwNCj4gPj4gKyAgICAgeyAiaWZuZXRfcnciLCAmbG9ja19jbGFzc19ydyB9 LA0KPiA+PiAgICAgICB7ICJpZl9hZGRyX2xvY2siLCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiAg ICAgICB7IE5VTEwsIE5VTEwgfSwNCj4gPj4gICAgICAgLyoNCj4gPj4gICAgICAgICogSVB2NiBt dWx0aWNhc3Q6DQo+ID4+ICAgICAgICAqIHByb3RvY29sIGxvY2tzIGJlZm9yZSBpbnRlcmZhY2Ug bG9ja3MsIGFmdGVyIFVEUCBsb2Nrcy4NCj4gPj4gICAgICAgICovDQo+ID4+ICsgICAgIHsgImlu Nl9tdWx0aV9zeCIsICZsb2NrX2NsYXNzX3N4IH0sDQo+ID4+ICAgICAgIHsgInVkcGlucCIsICZs b2NrX2NsYXNzX3J3IH0sDQo+ID4+IC0gICAgIHsgImluNl9tdWx0aV9tdHgiLCAmbG9ja19jbGFz c19tdHhfc2xlZXAgfSwNCj4gPj4gKyAgICAgeyAiaW42X211bHRpX2xpc3RfbXR4IiwgJmxvY2tf Y2xhc3NfbXR4X3NsZWVwIH0sDQo+ID4+ICAgICAgIHsgIm1sZF9tdHgiLCAmbG9ja19jbGFzc19t dHhfc2xlZXAgfSwNCj4gPj4gKyAgICAgeyAiaWZuZXRfcnciLCAmbG9ja19jbGFzc19ydyB9LA0K PiA+PiAgICAgICB7ICJpZl9hZGRyX2xvY2siLCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiAgICAg ICB7IE5VTEwsIE5VTEwgfSwNCj4gPj4gICAgICAgLyoNCj4gPj4NCj4gPj4gTW9kaWZpZWQ6IGhl YWQvc3lzL25ldC9pZi5jDQo+ID4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PiAtLS0gaGVh ZC9zeXMvbmV0L2lmLmMgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4ICAgICAgICAocjMzMzE3NCkN Cj4gPj4gKysrIGhlYWQvc3lzL25ldC9pZi5jIFdlZCBNYXkgIDIgMTk6MzY6MjkgMjAxOCAgICAg ICAgKHIzMzMxNzUpDQo+ID4+IEBAIC05ODUsMTEgKzk4NSwxMyBAQCBzdGF0aWMgdm9pZA0KPiA+ PiAgaWZfcHVyZ2VtYWRkcnMoc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ICB7DQo+ID4+ICAgICAg IHN0cnVjdCBpZm11bHRpYWRkciAqaWZtYTsNCj4gPj4gLSAgICAgc3RydWN0IGlmbXVsdGlhZGRy ICpuZXh0Ow0KPiA+Pg0KPiA+PiAgICAgICBJRl9BRERSX1dMT0NLKGlmcCk7DQo+ID4+IC0gICAg IFRBSUxRX0ZPUkVBQ0hfU0FGRShpZm1hLCAmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1hX2xpbmss IG5leHQpDQo+ID4+ICsgICAgIHdoaWxlICghVEFJTFFfRU1QVFkoJmlmcC0+aWZfbXVsdGlhZGRy cykpIHsNCj4gPj4gKyAgICAgICAgICAgICBpZm1hID0gVEFJTFFfRklSU1QoJmlmcC0+aWZfbXVs dGlhZGRycyk7DQo+ID4+ICsgICAgICAgICAgICAgVEFJTFFfUkVNT1ZFKCZpZnAtPmlmX211bHRp YWRkcnMsIGlmbWEsIGlmbWFfbGluayk7DQo+ID4+ICAgICAgICAgICAgICAgaWZfZGVsbXVsdGlf bG9ja2VkKGlmcCwgaWZtYSwgMSk7DQo+ID4+ICsgICAgIH0NCj4gPj4gICAgICAgSUZfQUREUl9X VU5MT0NLKGlmcCk7DQo+ID4+ICB9DQo+ID4+DQo+ID4+IEBAIC0zNDI5LDYgKzM0MzEsMTIgQEAg aWZfYWRkbXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBzb2NrYWRkciAqc2EsDQo+ID4+ ICAgICAgIHN0cnVjdCBzb2NrYWRkcl9kbCBzZGw7DQo+ID4+ICAgICAgIGludCBlcnJvcjsNCj4g Pj4NCj4gPj4gKyNpZmRlZiBJTkVUDQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLX0FT U0VSVCgpOw0KPiA+PiArI2VuZGlmDQo+ID4+ICsjaWZkZWYgSU5FVDYNCj4gPj4gKyAgICAgSU42 X01VTFRJX0xJU1RfVU5MT0NLX0FTU0VSVCgpOw0KPiA+PiArI2VuZGlmDQo+ID4+ICAgICAgIC8q DQo+ID4+ICAgICAgICAqIElmIHRoZSBhZGRyZXNzIGlzIGFscmVhZHkgcHJlc2VudCwgcmV0dXJu IGEgbmV3IHJlZmVyZW5jZSB0byBpdDsNCj4gPj4gICAgICAgICogb3RoZXJ3aXNlLCBhbGxvY2F0 ZSBzdG9yYWdlIGFuZCBzZXQgdXAgYSBuZXcgYWRkcmVzcy4NCj4gPj4gQEAgLTM2MTAsNiArMzYx OCw5IEBAIGlmX2RlbG11bHRpX2lmbWEoc3RydWN0IGlmbXVsdGlhZGRyICppZm1hKQ0KPiA+PiAg ICAgICBzdHJ1Y3QgaWZuZXQgKmlmcDsNCj4gPj4gICAgICAgaW50IGxhc3RyZWY7DQo+ID4+DQo+ ID4+ICsjaWZkZWYgSU5FVA0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQo KTsNCj4gPj4gKyNlbmRpZg0KPiA+PiAgICAgICBpZnAgPSBpZm1hLT5pZm1hX2lmcDsNCj4gPj4g ICNpZmRlZiBESUFHTk9TVElDDQo+ID4+ICAgICAgIGlmIChpZnAgPT0gTlVMTCkgew0KPiA+PiBA QCAtMzcxMSw4ICszNzIyLDcgQEAgaWZfZGVsbXVsdGlfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZw LCBzdHJ1Y3QgaWZtdWx0aWFkDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBpZl9mcmVlbXVs dGkobGxfaWZtYSk7DQo+ID4+ICAgICAgICAgICAgICAgfQ0KPiA+PiAgICAgICB9DQo+ID4+IC0N Cj4gPj4gLSAgICAgaWYgKGlmcCAhPSBOVUxMKQ0KPiA+PiArICAgICBpZiAoaWZwICE9IE5VTEwg JiYgZGV0YWNoaW5nID09IDApDQo+ID4+ICAgICAgICAgICAgICAgVEFJTFFfUkVNT1ZFKCZpZnAt PmlmX211bHRpYWRkcnMsIGlmbWEsIGlmbWFfbGluayk7DQo+ID4+DQo+ID4+ICAgICAgIGlmX2Zy ZWVtdWx0aShpZm1hKTsNCj4gPj4NCj4gPj4gTW9kaWZpZWQ6IGhlYWQvc3lzL25ldGluZXQvaWdt cC5jDQo+ID4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PiAtLS0gaGVhZC9zeXMvbmV0aW5l dC9pZ21wLmMgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAgICAgIChyMzMzMTc0KQ0KPiA+ PiArKysgaGVhZC9zeXMvbmV0aW5ldC9pZ21wLmMgICBXZWQgTWF5ICAyIDE5OjM2OjI5IDIwMTgg ICAgICAgIChyMzMzMTc1KQ0KPiA+PiBAQCAtMTM2LDcgKzEzNiw3IEBAIHN0YXRpYyBpbnQgICAg ICAgIGlnbXBfdjNfZW5xdWV1ZV9ncm91cF9yZWNvcmQoc3RydWN0IG1idWZxICoNCj4gPj4gICAg ICAgICAgICAgICAgICAgc3RydWN0IGluX211bHRpICosIGNvbnN0IGludCwgY29uc3QgaW50LCBj b25zdCBpbnQpOw0KPiA+PiAgc3RhdGljIGludCAgIGlnbXBfdjNfZW5xdWV1ZV9maWx0ZXJfY2hh bmdlKHN0cnVjdCBtYnVmcSAqLA0KPiA+PiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fbXVs dGkgKik7DQo+ID4+IC1zdGF0aWMgdm9pZCAgaWdtcF92M19wcm9jZXNzX2dyb3VwX3RpbWVycyhz dHJ1Y3QgaWdtcF9pZnNvZnRjICosDQo+ID4+ICtzdGF0aWMgdm9pZCAgaWdtcF92M19wcm9jZXNz X2dyb3VwX3RpbWVycyhzdHJ1Y3QgaW5fbXVsdGlfaGVhZCAqLA0KPiA+PiAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbWJ1ZnEgKiwgc3RydWN0IG1idWZxICosIHN0cnVjdCBpbl9tdWx0aSAqLA0K PiA+PiAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQpOw0KPiA+PiAgc3RhdGljIGludCAgIGln bXBfdjNfbWVyZ2Vfc3RhdGVfY2hhbmdlcyhzdHJ1Y3QgaW5fbXVsdGkgKiwNCj4gPj4gQEAgLTE2 MiwxMiArMTYyLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0aXNyX2hhbmRsZXIgaWdtcF9u aCA9IHsNCj4gPj4gICAqIHRoZW1zZWx2ZXMgYXJlIG5vdCB2aXJ0dWFsaXplZC4NCj4gPj4gICAq DQo+ID4+ICAgKiBMb2NraW5nOg0KPiA+PiAtICogICogVGhlIHBlcm1pdHRlZCBsb2NrIG9yZGVy IGlzOiBJTl9NVUxUSV9MT0NLLCBJR01QX0xPQ0ssIElGX0FERFJfTE9DSy4NCj4gPj4gKyAqICAq IFRoZSBwZXJtaXR0ZWQgbG9jayBvcmRlciBpczogSU5fTVVMVElfTElTVF9MT0NLLCBJR01QX0xP Q0ssIElGX0FERFJfTE9DSy4NCj4gPj4gICAqICAgIEFueSBtYXkgYmUgdGFrZW4gaW5kZXBlbmRl bnRseTsgaWYgYW55IGFyZSBoZWxkIGF0IHRoZSBzYW1lDQo+ID4+ICAgKiAgICB0aW1lLCB0aGUg YWJvdmUgbG9jayBvcmRlciBtdXN0IGJlIGZvbGxvd2VkLg0KPiA+PiAgICogICogQWxsIG91dHB1 dCBpcyBkZWxlZ2F0ZWQgdG8gdGhlIG5ldGlzci4NCj4gPj4gICAqICAgIE5vdyB0aGF0IEdpYW50 IGhhcyBiZWVuIGVsaW1pbmF0ZWQsIHRoZSBuZXRpc3IgbWF5IGJlIGlubGluZWQuDQo+ID4+IC0g KiAgKiBJTl9NVUxUSV9MT0NLIGNvdmVycyBpbl9tdWx0aS4NCj4gPj4gKyAqICAqIElOX01VTFRJ X0xJU1RfTE9DSyBjb3ZlcnMgaW5fbXVsdGkuDQo+ID4+ICAgKiAgKiBJR01QX0xPQ0sgY292ZXJz IGlnbXBfaWZzb2Z0YyBhbmQgYW55IGdsb2JhbCB2YXJpYWJsZXMgaW4gdGhpcyBmaWxlLA0KPiA+ PiAgICogICAgaW5jbHVkaW5nIHRoZSBvdXRwdXQgcXVldWUuDQo+ID4+ICAgKiAgKiBJRl9BRERS X0xPQ0sgY292ZXJzIGlmX211bHRpYWRkcnMsIHdoaWNoIGlzIHVzZWQgZm9yIGEgdmFyaWV0eSBv Zg0KPiA+PiBAQCAtNDQxLDcgKzQ0MSw3IEBAIHN5c2N0bF9pZ21wX2lmaW5mbyhTWVNDVExfSEFO RExFUl9BUkdTKQ0KPiA+PiAgICAgICBpZiAoZXJyb3IpDQo+ID4+ICAgICAgICAgICAgICAgcmV0 dXJuIChlcnJvcik7DQo+ID4+DQo+ID4+IC0gICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPj4gKyAg ICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ICAgICAgIElHTVBfTE9DSygpOw0KPiA+Pg0K PiA+PiAgICAgICBpZiAobmFtZVswXSA8PSAwIHx8IG5hbWVbMF0gPiBWX2lmX2luZGV4KSB7DQo+ ID4+IEBAIC00NzUsNyArNDc1LDcgQEAgc3lzY3RsX2lnbXBfaWZpbmZvKFNZU0NUTF9IQU5ETEVS X0FSR1MpDQo+ID4+DQo+ID4+ICBvdXRfbG9ja2VkOg0KPiA+PiAgICAgICBJR01QX1VOTE9DSygp Ow0KPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElT VF9VTkxPQ0soKTsNCj4gPj4gICAgICAgcmV0dXJuIChlcnJvcik7DQo+ID4+ICB9DQo+ID4+DQo+ ID4+IEBAIC01ODYsNyArNTg2LDYgQEAgaWdpX2FsbG9jX2xvY2tlZCgvKmNvbnN0Ki8gc3RydWN0 IGlmbmV0ICppZnApDQo+ID4+ICAgICAgIGlnaS0+aWdpX3FpID0gSUdNUF9RSV9JTklUOw0KPiA+ PiAgICAgICBpZ2ktPmlnaV9xcmkgPSBJR01QX1FSSV9JTklUOw0KPiA+PiAgICAgICBpZ2ktPmln aV91cmkgPSBJR01QX1VSSV9JTklUOw0KPiA+PiAtICAgICBTTElTVF9JTklUKCZpZ2ktPmlnaV9y ZWxpbm1oZWFkKTsNCj4gPj4gICAgICAgbWJ1ZnFfaW5pdCgmaWdpLT5pZ2lfZ3EsIElHTVBfTUFY X1JFU1BPTlNFX1BBQ0tFVFMpOw0KPiA+Pg0KPiA+PiAgICAgICBMSVNUX0lOU0VSVF9IRUFEKCZW X2lnaV9oZWFkLCBpZ2ksIGlnaV9saW5rKTsNCj4gPj4gQEAgLTYxMiwxMSArNjExLDEyIEBAIGln bXBfaWZkZXRhY2goc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ICB7DQo+ID4+ICAgICAgIHN0cnVj dCBpZ21wX2lmc29mdGMgICAgICppZ2k7DQo+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAg ICAgICppZm1hOw0KPiA+PiAtICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tLCAqdGlu bTsNCj4gPj4gLQ0KPiA+PiArICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tOw0KPiA+ PiArICAgICBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBpbm1fZnJlZV90bXA7DQo+ID4+ICAgICAgIENU UjMoS1RSX0lHTVBWMywgIiVzOiBjYWxsZWQgZm9yIGlmcCAlcCglcykiLCBfX2Z1bmNfXywgaWZw LA0KPiA+PiAgICAgICAgICAgaWZwLT5pZl94bmFtZSk7DQo+ID4+DQo+ID4+ICsgICAgIFNMSVNU X0lOSVQoJmlubV9mcmVlX3RtcCk7DQo+ID4+ICAgICAgIElHTVBfTE9DSygpOw0KPiA+Pg0KPiA+ PiAgICAgICBpZ2kgPSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVU XSktPmlpX2lnbXA7DQo+ID4+IEBAIC02MzEsMjQgKzYzMSwxNSBAQCBpZ21wX2lmZGV0YWNoKHN0 cnVjdCBpZm5ldCAqaWZwKQ0KPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICgiJXM6IGlm bWFfcHJvdG9zcGVjIGlzIE5VTEwiLCBfX2Z1bmNfXykpOw0KPiA+PiAgI2VuZGlmDQo+ID4+ICAg ICAgICAgICAgICAgICAgICAgICBpbm0gPSAoc3RydWN0IGluX211bHRpICopaWZtYS0+aWZtYV9w cm90b3NwZWM7DQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICBpZiAoaW5tLT5pbm1fc3RhdGUg PT0gSUdNUF9MRUFWSU5HX01FTUJFUikgew0KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBTTElTVF9JTlNFUlRfSEVBRCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwNCj4gPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubSwgaW5tX25yZWxlKTsNCj4gPj4gLSAgICAg ICAgICAgICAgICAgICAgIH0NCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChpbm0tPmlu bV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSKQ0KPiA+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpbm1fcmVsZV9sb2NrZWQoJmlubV9mcmVlX3RtcCwgaW5tKTsNCj4gPj4gICAg ICAgICAgICAgICAgICAgICAgIGlubV9jbGVhcl9yZWNvcmRlZChpbm0pOw0KPiA+PiAgICAgICAg ICAgICAgIH0NCj4gPj4gICAgICAgICAgICAgICBJRl9BRERSX1JVTkxPQ0soaWZwKTsNCj4gPj4g LSAgICAgICAgICAgICAvKg0KPiA+PiAtICAgICAgICAgICAgICAqIEZyZWUgdGhlIGluX211bHRp IHJlZmVyZW5jZShzKSBmb3IgdGhpcyBJR01QIGxpZmVjeWNsZS4NCj4gPj4gLSAgICAgICAgICAg ICAgKi8NCj4gPj4gLSAgICAgICAgICAgICBTTElTVF9GT1JFQUNIX1NBRkUoaW5tLCAmaWdpLT5p Z2lfcmVsaW5taGVhZCwgaW5tX25yZWxlLA0KPiA+PiAtICAgICAgICAgICAgICAgICB0aW5tKSB7 DQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaWdpLT5pZ2lf cmVsaW5taGVhZCwgaW5tX25yZWxlKTsNCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgIGlubV9y ZWxlYXNlX2xvY2tlZChpbm0pOw0KPiA+PiAtICAgICAgICAgICAgIH0NCj4gPj4gKyAgICAgICAg ICAgICBpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVkKCZpbm1fZnJlZV90bXApOw0KPiA+PiAgICAg ICB9DQo+ID4+IC0NCj4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsNCj4gPj4gKw0KPiA+PiAgfQ0K PiA+Pg0KPiA+PiAgLyoNCj4gPj4gQEAgLTY4NCwxMSArNjc1LDYgQEAgaWdpX2RlbGV0ZV9sb2Nr ZWQoY29uc3Qgc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBt YnVmcV9kcmFpbigmaWdpLT5pZ2lfZ3EpOw0KPiA+Pg0KPiA+PiAgICAgICAgICAgICAgICAgICAg ICAgTElTVF9SRU1PVkUoaWdpLCBpZ2lfbGluayk7DQo+ID4+IC0NCj4gPj4gLSAgICAgICAgICAg ICAgICAgICAgIEtBU1NFUlQoU0xJU1RfRU1QVFkoJmlnaS0+aWdpX3JlbGlubWhlYWQpLA0KPiA+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICgiJXM6IHRoZXJlIGFyZSBkYW5nbGluZyBpbl9t dWx0aSByZWZlcmVuY2VzIiwNCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNf XykpOw0KPiA+PiAtDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGlnaSwgTV9JR01Q KTsNCj4gPj4gICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCj4gPj4gICAgICAgICAgICAg ICB9DQo+ID4+IEBAIC03MjIsNyArNzA4LDcgQEAgaWdtcF9pbnB1dF92MV9xdWVyeShzdHJ1Y3Qg aWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlwDQo+ID4+ICAgICAgIH0NCj4gPj4gICAgICAgSUdN UFNUQVRfSU5DKGlncHNfcmN2X2dlbl9xdWVyaWVzKTsNCj4gPj4NCj4gPj4gLSAgICAgSU5fTVVM VElfTE9DSygpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4gICAgICAg SUdNUF9MT0NLKCk7DQo+ID4+DQo+ID4+ICAgICAgIGlnaSA9ICgoc3RydWN0IGluX2lmaW5mbyAq KWlmcC0+aWZfYWZkYXRhW0FGX0lORVRdKS0+aWlfaWdtcDsNCj4gPj4gQEAgLTc3OCw3ICs3NjQs NyBAQCBpZ21wX2lucHV0X3YxX3F1ZXJ5KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3Qg aXANCj4gPj4NCj4gPj4gIG91dF9sb2NrZWQ6DQo+ID4+ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VO TE9DSygpOw0KPiA+Pg0KPiA+PiAgICAgICByZXR1cm4gKDApOw0KPiA+PiAgfQ0KPiA+PiBAQCAt ODE2LDcgKzgwMiw3IEBAIGlnbXBfaW5wdXRfdjJfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNv bnN0IHN0cnVjdCBpcA0KPiA+PiAgICAgICAgICAgICAgIElHTVBTVEFUX0lOQyhpZ3BzX3Jjdl9n cm91cF9xdWVyaWVzKTsNCj4gPj4gICAgICAgfQ0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxUSV9M T0NLKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiAgICAgICBJR01Q X0xPQ0soKTsNCj4gPj4NCj4gPj4gICAgICAgaWdpID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZw LT5pZl9hZmRhdGFbQUZfSU5FVF0pLT5paV9pZ21wOw0KPiA+PiBAQCAtODcyLDcgKzg1OCw3IEBA IGlnbXBfaW5wdXRfdjJfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0K PiA+Pg0KPiA+PiAgb3V0X2xvY2tlZDoNCj4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsNCj4gPj4g LSAgICAgSU5fTVVMVElfVU5MT0NLKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NL KCk7DQo+ID4+DQo+ID4+ICAgICAgIHJldHVybiAoMCk7DQo+ID4+ICB9DQo+ID4+IEBAIC04OTks NyArODg1LDcgQEAgaWdtcF92Ml91cGRhdGVfZ3JvdXAoc3RydWN0IGluX211bHRpICppbm0sIGNv bnN0IGludCB0DQo+ID4+ICAgICAgIENUUjQoS1RSX0lHTVBWMywgIjB4JTA4eDogJXMvJXMgdGlt ZXI9JWQiLCBfX2Z1bmNfXywNCj4gPj4gICAgICAgICAgIG50b2hsKGlubS0+aW5tX2FkZHIuc19h ZGRyKSwgaW5tLT5pbm1faWZwLT5pZl94bmFtZSwgdGltZXIpOw0KPiA+Pg0KPiA+PiAtICAgICBJ Tl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNT RVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIHN3aXRjaCAoaW5tLT5pbm1fc3RhdGUpIHsNCj4gPj4g ICAgICAgY2FzZSBJR01QX05PVF9NRU1CRVI6DQo+ID4+IEBAIC0xMDExLDcgKzk5Nyw3IEBAIGln bXBfaW5wdXRfdjNfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgSUdNUFNUQVRfSU5DKGlncHNfcmN2X2dzcl9xdWVyaWVz KTsNCj4gPj4gICAgICAgfQ0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4+ ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiAgICAgICBJR01QX0xPQ0soKTsNCj4g Pj4NCj4gPj4gICAgICAgaWdpID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZwLT5pZl9hZmRhdGFb QUZfSU5FVF0pLT5paV9pZ21wOw0KPiA+PiBAQCAtMTA5Miw3ICsxMDc4LDcgQEAgaWdtcF9pbnB1 dF92M19xdWVyeShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlwDQo+ID4+DQo+ID4+ ICBvdXRfbG9ja2VkOg0KPiA+PiAgICAgICBJR01QX1VOTE9DSygpOw0KPiA+PiAtICAgICBJTl9N VUxUSV9VTkxPQ0soKTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4N Cj4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPj4gIH0NCj4gPj4gQEAgLTExMDksNyArMTA5NSw3 IEBAIGlnbXBfaW5wdXRfdjNfZ3JvdXBfcXVlcnkoc3RydWN0IGluX211bHRpICppbm0sIHN0cnVj dA0KPiA+PiAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsOw0KPiA+PiAgICAg ICB1aW50MTZfdCAgICAgICAgICAgICAgICAgbnNyYzsNCj4gPj4NCj4gPj4gLSAgICAgSU5fTVVM VElfTE9DS19BU1NFUlQoKTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgp Ow0KPiA+PiAgICAgICBJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIHJldHZh bCA9IDA7DQo+ID4+IEBAIC0xMjQ2LDcgKzEyMzIsNyBAQCBpZ21wX2lucHV0X3YxX3JlcG9ydChz dHJ1Y3QgaWZuZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gPj4gICAgICAgICogSWYgd2UgYXJl IGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAsIGFuZCBvdXIgbWVtYmVyc2hpcCBzaG91bGQgYmUNCj4g Pj4gICAgICAgICogcmVwb3J0ZWQsIHN0b3Agb3VyIGdyb3VwIHRpbWVyIGFuZCB0cmFuc2l0aW9u IHRvIHRoZSAnbGF6eScgc3RhdGUuDQo+ID4+ICAgICAgICAqLw0KPiA+PiAtICAgICBJTl9NVUxU SV9MT0NLKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiAgICAgICBp bm0gPSBpbm1fbG9va3VwKGlmcCwgaWdtcC0+aWdtcF9ncm91cCk7DQo+ID4+ICAgICAgIGlmIChp bm0gIT0gTlVMTCkgew0KPiA+PiAgICAgICAgICAgICAgIHN0cnVjdCBpZ21wX2lmc29mdGMgKmln aTsNCj4gPj4gQEAgLTEzMDUsNyArMTI5MSw3IEBAIGlnbXBfaW5wdXRfdjFfcmVwb3J0KHN0cnVj dCBpZm5ldCAqaWZwLCAvKmNvbnN0Ki8gc3RydQ0KPiA+PiAgICAgICB9DQo+ID4+DQo+ID4+ICBv dXRfbG9ja2VkOg0KPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4gKyAgICAgSU5f TVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4NCj4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPj4g IH0NCj4gPj4gQEAgLTEzNzMsNyArMTM1OSw3IEBAIGlnbXBfaW5wdXRfdjJfcmVwb3J0KHN0cnVj dCBpZm5ldCAqaWZwLCAvKmNvbnN0Ki8gc3RydQ0KPiA+PiAgICAgICAgKiByZXBvcnRlZCwgYW5k IG91ciBncm91cCB0aW1lciBpcyBwZW5kaW5nIG9yIGFib3V0IHRvIGJlIHJlc2V0LA0KPiA+PiAg ICAgICAgKiBzdG9wIG91ciBncm91cCB0aW1lciBieSB0cmFuc2l0aW9uaW5nIHRvIHRoZSAnbGF6 eScgc3RhdGUuDQo+ID4+ICAgICAgICAqLw0KPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiAgICAgICBpbm0gPSBpbm1fbG9v a3VwKGlmcCwgaWdtcC0+aWdtcF9ncm91cCk7DQo+ID4+ICAgICAgIGlmIChpbm0gIT0gTlVMTCkg ew0KPiA+PiAgICAgICAgICAgICAgIHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaTsNCj4gPj4gQEAg LTE0MTgsNyArMTQwNCw3IEBAIGlnbXBfaW5wdXRfdjJfcmVwb3J0KHN0cnVjdCBpZm5ldCAqaWZw LCAvKmNvbnN0Ki8gc3RydQ0KPiA+PiAgICAgICB9DQo+ID4+DQo+ID4+ICBvdXRfbG9ja2VkOg0K PiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9V TkxPQ0soKTsNCj4gPj4NCj4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPj4gIH0NCj4gPj4gQEAg LTE2NDcsNiArMTYzMyw3IEBAIGlnbXBfZmFzdHRpbW9fdm5ldCh2b2lkKQ0KPiA+PiAgICAgICBz dHJ1Y3QgaWdtcF9pZnNvZnRjICAgICAqaWdpOw0KPiA+PiAgICAgICBzdHJ1Y3QgaWZtdWx0aWFk ZHIgICAgICAqaWZtYTsNCj4gPj4gICAgICAgc3RydWN0IGluX211bHRpICAgICAgICAgKmlubTsN Cj4gPj4gKyAgICAgc3RydWN0IGluX211bHRpX2hlYWQgaW5tX2ZyZWVfdG1wOw0KPiA+PiAgICAg ICBpbnQgICAgICAgICAgICAgICAgICAgICAgbG9vcCwgdXJpX2Zhc3RoejsNCj4gPj4NCj4gPj4g ICAgICAgbG9vcCA9IDA7DQo+ID4+IEBAIC0xNjYyLDcgKzE2NDksOCBAQCBpZ21wX2Zhc3R0aW1v X3ZuZXQodm9pZCkNCj4gPj4gICAgICAgICAgICFWX3N0YXRlX2NoYW5nZV90aW1lcnNfcnVubmlu ZykNCj4gPj4gICAgICAgICAgICAgICByZXR1cm47DQo+ID4+DQo+ID4+IC0gICAgIElOX01VTFRJ X0xPQ0soKTsNCj4gPj4gKyAgICAgU0xJU1RfSU5JVCgmaW5tX2ZyZWVfdG1wKTsNCj4gPj4gKyAg ICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ICAgICAgIElHTVBfTE9DSygpOw0KPiA+Pg0K PiA+PiAgICAgICAvKg0KPiA+PiBAQCAtMTcyMCw3ICsxNzA4LDcgQEAgaWdtcF9mYXN0dGltb192 bmV0KHZvaWQpDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ2ktPmln aV92ZXJzaW9uKTsNCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ ID4+ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIElHTVBfVkVSU0lPTl8zOg0KPiA+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKGln aSwgJnFycSwNCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdtcF92M19wcm9j ZXNzX2dyb3VwX3RpbWVycygmaW5tX2ZyZWVfdG1wLCAmcXJxLA0KPiA+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnNjcSwgaW5tLCB1cmlfZmFzdGh6KTsNCj4gPj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4+ICAgICAgICAgICAgICAgICAgICAg ICB9DQo+ID4+IEBAIC0xNzI4LDggKzE3MTYsNiBAQCBpZ21wX2Zhc3R0aW1vX3ZuZXQodm9pZCkN Cj4gPj4gICAgICAgICAgICAgICBJRl9BRERSX1JVTkxPQ0soaWZwKTsNCj4gPj4NCj4gPj4gICAg ICAgICAgICAgICBpZiAoaWdpLT5pZ2lfdmVyc2lvbiA9PSBJR01QX1ZFUlNJT05fMykgew0KPiA+ PiAtICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGluX211bHRpICAgICAgICAgKnRpbm07DQo+ ID4+IC0NCj4gPj4gICAgICAgICAgICAgICAgICAgICAgIGlnbXBfZGlzcGF0Y2hfcXVldWUoJnFy cSwgMCwgbG9vcCk7DQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBpZ21wX2Rpc3BhdGNoX3F1 ZXVlKCZzY3EsIDAsIGxvb3ApOw0KPiA+Pg0KPiA+PiBAQCAtMTczNywxOCArMTcyMywxMyBAQCBp Z21wX2Zhc3R0aW1vX3ZuZXQodm9pZCkNCj4gPj4gICAgICAgICAgICAgICAgICAgICAgICAqIEZy ZWUgdGhlIGluX211bHRpIHJlZmVyZW5jZShzKSBmb3IgdGhpcw0KPiA+PiAgICAgICAgICAgICAg ICAgICAgICAgICogSUdNUCBsaWZlY3ljbGUuDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAg Ki8NCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgIFNMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZp Z2ktPmlnaV9yZWxpbm1oZWFkLA0KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgIGlubV9u cmVsZSwgdGlubSkgew0KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTElTVF9S RU1PVkVfSEVBRCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwNCj4gPj4gLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlubV9ucmVsZSk7DQo+ID4+IC0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlubV9yZWxlYXNlX2xvY2tlZChpbm0pOw0KPiA+PiAtICAgICAgICAgICAgICAgICAg ICAgfQ0KPiA+PiArICAgICAgICAgICAgICAgICAgICAgaW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJl ZCgmaW5tX2ZyZWVfdG1wKTsNCj4gPj4gICAgICAgICAgICAgICB9DQo+ID4+ICAgICAgIH0NCj4g Pj4NCj4gPj4gIG91dF9sb2NrZWQ6DQo+ID4+ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4+IC0g ICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygp Ow0KPiA+PiAgfQ0KPiA+Pg0KPiA+PiAgLyoNCj4gPj4gQEAgLTE3NjAsNyArMTc0MSw3IEBAIGln bXBfdjF2Ml9wcm9jZXNzX2dyb3VwX3RpbWVyKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjbw0KPiA+ PiAgew0KPiA+PiAgICAgICBpbnQgcmVwb3J0X3RpbWVyX2V4cGlyZWQ7DQo+ID4+DQo+ID4+IC0g ICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9D S19BU1NFUlQoKTsNCj4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+Pg0KPiA+PiAg ICAgICBpZiAoaW5tLT5pbm1fdGltZXIgPT0gMCkgew0KPiA+PiBAQCAtMTgwMiwxNCArMTc4Mywx NCBAQCBpZ21wX3YxdjJfcHJvY2Vzc19ncm91cF90aW1lcihzdHJ1Y3QgaW5fbXVsdGkgKmlubSwg Y28NCj4gPj4gICAqIE5vdGU6IFVubG9ja2VkIHJlYWQgZnJvbSBpZ2kuDQo+ID4+ICAgKi8NCj4g Pj4gIHN0YXRpYyB2b2lkDQo+ID4+IC1pZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0cnVj dCBpZ21wX2lmc29mdGMgKmlnaSwNCj4gPj4gK2lnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1lcnMo c3RydWN0IGluX211bHRpX2hlYWQgKmlubWgsDQo+ID4+ICAgICAgc3RydWN0IG1idWZxICpxcnEs IHN0cnVjdCBtYnVmcSAqc2NxLA0KPiA+PiAgICAgIHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjb25z dCBpbnQgdXJpX2Zhc3RoeikNCj4gPj4gIHsNCj4gPj4gICAgICAgaW50IHF1ZXJ5X3Jlc3BvbnNl X3RpbWVyX2V4cGlyZWQ7DQo+ID4+ICAgICAgIGludCBzdGF0ZV9jaGFuZ2VfcmV0cmFuc21pdF90 aW1lcl9leHBpcmVkOw0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0K PiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ICAgICAgIElHTVBf TE9DS19BU1NFUlQoKTsNCj4gPj4NCj4gPj4gICAgICAgcXVlcnlfcmVzcG9uc2VfdGltZXJfZXhw aXJlZCA9IDA7DQo+ID4+IEBAIC0xOTA3LDggKzE4ODgsNyBAQCBpZ21wX3YzX3Byb2Nlc3NfZ3Jv dXBfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaSwNCj4gPj4gICAgICAgICAgICAgICAg ICAgICAgIGlmIChpbm0tPmlubV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSICYmDQo+ID4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5tLT5pbm1fc2NydiA9PSAwKSB7DQo+ID4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubS0+aW5tX3N0YXRlID0gSUdNUF9OT1RfTUVN QkVSOw0KPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTElTVF9JTlNFUlRfSEVB RCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwNCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlubSwgaW5tX25yZWxlKTsNCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5tX3JlbGVfbG9ja2VkKGlubWgsIGlubSk7DQo+ID4+ICAgICAgICAgICAgICAgICAgICAg ICB9DQo+ID4+ICAgICAgICAgICAgICAgfQ0KPiA+PiAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ PiBAQCAtMTkyOSw3ICsxOTA5LDcgQEAgc3RhdGljIHZvaWQNCj4gPj4gIGlnbXBfdjNfc3VwcHJl c3NfZ3JvdXBfcmVjb3JkKHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0KPiA+PiAgew0KPiA+Pg0KPiA+ PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNU X0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIEtBU1NFUlQoaW5tLT5pbm1faWdpLT5p Z2lfdmVyc2lvbiA9PSBJR01QX1ZFUlNJT05fMywNCj4gPj4gICAgICAgICAgICAgICAoIiVzOiBu b3QgSUdNUHYzIG1vZGUgb24gbGluayIsIF9fZnVuY19fKSk7DQo+ID4+IEBAIC0yMDAzLDEzICsx OTgzLDE1IEBAIGlnbXBfdjNfY2FuY2VsX2xpbmtfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMg KmlnaSkNCj4gPj4gIHsNCj4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICAgICAgKmlmbWE7 DQo+ID4+ICAgICAgIHN0cnVjdCBpZm5ldCAgICAgICAgICAgICppZnA7DQo+ID4+IC0gICAgIHN0 cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm0sICp0aW5tOw0KPiA+PiArICAgICBzdHJ1Y3QgaW5f bXVsdGkgICAgICAgICAqaW5tOw0KPiA+PiArICAgICBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBpbm1f ZnJlZV90bXA7DQo+ID4+DQo+ID4+ICAgICAgIENUUjMoS1RSX0lHTVBWMywgIiVzOiBjYW5jZWwg djMgdGltZXJzIG9uIGlmcCAlcCglcykiLCBfX2Z1bmNfXywNCj4gPj4gICAgICAgICAgIGlnaS0+ aWdpX2lmcCwgaWdpLT5pZ2lfaWZwLT5pZl94bmFtZSk7DQo+ID4+DQo+ID4+IC0gICAgIElOX01V TFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQo KTsNCj4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+PiArICAgICBTTElTVF9JTklU KCZpbm1fZnJlZV90bXApOw0KPiA+Pg0KPiA+PiAgICAgICAvKg0KPiA+PiAgICAgICAgKiBTdG9w IHRoZSB2MyBHZW5lcmFsIFF1ZXJ5IFJlc3BvbnNlIG9uIHRoaXMgbGluayBzdG9uZSBkZWFkLg0K PiA+PiBAQCAtMjA1MCw3ICsyMDMyLDcgQEAgaWdtcF92M19jYW5jZWxfbGlua190aW1lcnMoc3Ry dWN0IGlnbXBfaWZzb2Z0YyAqaWdpKQ0KPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICogbWVz c2FnZSBpcyBzZW50IHVwc3RyZWFtIHRvIHRoZSBvbGQgcXVlcmllciAtLQ0KPiA+PiAgICAgICAg ICAgICAgICAgICAgICAgICogdHJhbnNpdGlvbiB0byBOT1Qgd291bGQgbG9zZSB0aGUgbGVhdmUg YW5kIHJhY2UuDQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgKi8NCj4gPj4gLSAgICAgICAg ICAgICAgICAgICAgIFNMSVNUX0lOU0VSVF9IRUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFkLCBpbm0s IGlubV9ucmVsZSk7DQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZV9sb2NrZWQo JmlubV9mcmVlX3RtcCwgaW5tKTsNCj4gPj4gICAgICAgICAgICAgICAgICAgICAgIC8qIEZBTExU SFJPVUdIICovDQo+ID4+ICAgICAgICAgICAgICAgY2FzZSBJR01QX0dfUVVFUllfUEVORElOR19N RU1CRVI6DQo+ID4+ICAgICAgICAgICAgICAgY2FzZSBJR01QX1NHX1FVRVJZX1BFTkRJTkdfTUVN QkVSOg0KPiA+PiBAQCAtMjA2OSwxMCArMjA1MSw4IEBAIGlnbXBfdjNfY2FuY2VsX2xpbmtfdGlt ZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaSkNCj4gPj4gICAgICAgICAgICAgICBtYnVmcV9k cmFpbigmaW5tLT5pbm1fc2NxKTsNCj4gPj4gICAgICAgfQ0KPiA+PiAgICAgICBJRl9BRERSX1JV TkxPQ0soaWZwKTsNCj4gPj4gLSAgICAgU0xJU1RfRk9SRUFDSF9TQUZFKGlubSwgJmlnaS0+aWdp X3JlbGlubWhlYWQsIGlubV9ucmVsZSwgdGlubSkgew0KPiA+PiAtICAgICAgICAgICAgIFNMSVNU X1JFTU9WRV9IRUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFkLCBpbm1fbnJlbGUpOw0KPiA+PiAtICAg ICAgICAgICAgIGlubV9yZWxlYXNlX2xvY2tlZChpbm0pOw0KPiA+PiAtICAgICB9DQo+ID4+ICsN Cj4gPj4gKyAgICAgaW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJlZCgmaW5tX2ZyZWVfdG1wKTsNCj4g Pj4gIH0NCj4gPj4NCj4gPj4gIC8qDQo+ID4+IEBAIC0yMTk5LDcgKzIxNzksNyBAQCBpZ21wX3Yx djJfcXVldWVfcmVwb3J0KHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjb25zdCBpbnQNCj4gPj4gICAg ICAgc3RydWN0IGlwICAgICAgICAgICAgICAgKmlwOw0KPiA+PiAgICAgICBzdHJ1Y3QgbWJ1ZiAg ICAgICAgICAgICAqbTsNCj4gPj4NCj4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsN Cj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiAgICAgICBJR01Q X0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIGlmcCA9IGlubS0+aW5tX2lmcDsNCj4g Pj4gQEAgLTIyNzYsMTAgKzIyNTYsOCBAQCBpZ21wX2NoYW5nZV9zdGF0ZShzdHJ1Y3QgaW5fbXVs dGkgKmlubSkNCj4gPj4gICAgICAgc3RydWN0IGlmbmV0ICppZnA7DQo+ID4+ICAgICAgIGludCBl cnJvcjsNCj4gPj4NCj4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gLQ0K PiA+PiAgICAgICBlcnJvciA9IDA7DQo+ID4+IC0NCj4gPj4gKyAgICAgSU5fTVVMVElfTE9DS19B U1NFUlQoKTsNCj4gPj4gICAgICAgLyoNCj4gPj4gICAgICAgICogVHJ5IHRvIGRldGVjdCBpZiB0 aGUgdXBwZXIgbGF5ZXIganVzdCBhc2tlZCB1cyB0byBjaGFuZ2Ugc3RhdGUNCj4gPj4gICAgICAg ICogZm9yIGFuIGludGVyZmFjZSB3aGljaCBoYXMgbm93IGdvbmUgYXdheS4NCj4gPj4gQEAgLTIz NzksOSArMjM1NywxMCBAQCBpZ21wX2luaXRpYWxfam9pbihzdHJ1Y3QgaW5fbXVsdGkgKmlubSwg c3RydWN0IGlnbXBfaWYNCj4gPj4gICAgICAgICAgICAgICAgKiBncm91cCBhcm91bmQgZm9yIHRo ZSBmaW5hbCBJTkNMVURFIHt9IGVucXVldWUuDQo+ID4+ICAgICAgICAgICAgICAgICovDQo+ID4+ ICAgICAgICAgICAgICAgaWYgKGlnaS0+aWdpX3ZlcnNpb24gPT0gSUdNUF9WRVJTSU9OXzMgJiYN Cj4gPj4gLSAgICAgICAgICAgICAgICAgaW5tLT5pbm1fc3RhdGUgPT0gSUdNUF9MRUFWSU5HX01F TUJFUikNCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgIGlubV9yZWxlYXNlX2xvY2tlZChpbm0p Ow0KPiA+PiAtDQo+ID4+ICsgICAgICAgICAgICAgICAgIGlubS0+aW5tX3N0YXRlID09IElHTVBf TEVBVklOR19NRU1CRVIpIHsNCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIE1QQVNTKGlubS0+ aW5tX3JlZmNvdW50ID4gMSk7DQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZV9s b2NrZWQoTlVMTCwgaW5tKTsNCj4gPj4gKyAgICAgICAgICAgICB9DQo+ID4+ICAgICAgICAgICAg ICAgaW5tLT5pbm1fc3RhdGUgPSBJR01QX1JFUE9SVElOR19NRU1CRVI7DQo+ID4+DQo+ID4+ICAg ICAgICAgICAgICAgc3dpdGNoIChpZ2ktPmlnaV92ZXJzaW9uKSB7DQo+ID4+IEBAIC0yNDczLDcg KzI0NTIsNyBAQCBpZ21wX2hhbmRsZV9zdGF0ZV9jaGFuZ2Uoc3RydWN0IGluX211bHRpICppbm0s IHN0cnVjdA0KPiA+Pg0KPiA+PiAgICAgICBpZnAgPSBpbm0tPmlubV9pZnA7DQo+ID4+DQo+ID4+ IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1Rf TE9DS19BU1NFUlQoKTsNCj4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+Pg0KPiA+ PiAgICAgICBLQVNTRVJUKGlnaSAmJiBpZ2ktPmlnaV9pZnAgPT0gaWZwLCAoIiVzOiBpbmNvbnNp c3RlbnQgaWZwIiwgX19mdW5jX18pKTsNCj4gPj4gQEAgLTI1MzEsNyArMjUxMCw3IEBAIGlnbXBf ZmluYWxfbGVhdmUoc3RydWN0IGluX211bHRpICppbm0sIHN0cnVjdCBpZ21wX2lmcw0KPiA+PiAg ICAgICAgICAgX19mdW5jX18sIG50b2hsKGlubS0+aW5tX2FkZHIuc19hZGRyKSwgaW5tLT5pbm1f aWZwLA0KPiA+PiAgICAgICAgICAgaW5tLT5pbm1faWZwLT5pZl94bmFtZSk7DQo+ID4+DQo+ID4+ IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1Rf TE9DS19BU1NFUlQoKTsNCj4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+Pg0KPiA+ PiAgICAgICBzd2l0Y2ggKGlubS0+aW5tX3N0YXRlKSB7DQo+ID4+IEBAIC0yNjU4LDcgKzI2Mzcs NyBAQCBpZ21wX3YzX2VucXVldWVfZ3JvdXBfcmVjb3JkKHN0cnVjdCBtYnVmcSAqbXEsIHN0cnVj dA0KPiA+PiAgICAgICBpbl9hZGRyX3QgICAgICAgICAgICAgICAgbmFkZHI7DQo+ID4+ICAgICAg IHVpbnQ4X3QgICAgICAgICAgICAgICAgICBtb2RlOw0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxU SV9MT0NLX0FTU0VSVCgpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7 DQo+ID4+DQo+ID4+ICAgICAgIGVycm9yID0gMDsNCj4gPj4gICAgICAgaWZwID0gaW5tLT5pbm1f aWZwOw0KPiA+PiBAQCAtMzAxOCw3ICsyOTk3LDcgQEAgaWdtcF92M19lbnF1ZXVlX2ZpbHRlcl9j aGFuZ2Uoc3RydWN0IG1idWZxICptcSwgc3RydWN0DQo+ID4+ICAgICAgIHVpbnQ4X3QgICAgICAg ICAgICAgICAgICBtb2RlLCBub3csIHRoZW47DQo+ID4+ICAgICAgIHJlY3R5cGVfdCAgICAgICAg ICAgICAgICBjcnQsIGRydCwgbnJ0Ow0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FT U0VSVCgpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ ID4+ICAgICAgIGlmIChpbm0tPmlubV9uc3JjID09IDAgfHwNCj4gPj4gICAgICAgICAgIChpbm0t PmlubV9zdFswXS5pc3NfYXNtID4gMCAmJiBpbm0tPmlubV9zdFsxXS5pc3NfYXNtID4gMCkpDQo+ ID4+IEBAIC0zMjIxLDcgKzMyMDAsNyBAQCBpZ21wX3YzX21lcmdlX3N0YXRlX2NoYW5nZXMoc3Ry dWN0IGluX211bHRpICppbm0sIHN0cnUNCj4gPj4gICAgICAgZG9tZXJnZSA9IDA7DQo+ID4+ICAg ICAgIHJlY3NsZW4gPSAwOw0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgp Ow0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ICAgICAgIElH TVBfTE9DS19BU1NFUlQoKTsNCj4gPj4NCj4gPj4gICAgICAgLyoNCj4gPj4gQEAgLTMzMjAsNyAr MzI5OSw3IEBAIGlnbXBfdjNfZGlzcGF0Y2hfZ2VuZXJhbF9xdWVyeShzdHJ1Y3QgaWdtcF9pZnNv ZnRjICppZw0KPiA+PiAgICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tOw0KPiA+PiAg ICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsLCBsb29wOw0KPiA+Pg0KPiA+PiAt ICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xP Q0tfQVNTRVJUKCk7DQo+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPj4NCj4gPj4g ICAgICAgS0FTU0VSVChpZ2ktPmlnaV92ZXJzaW9uID09IElHTVBfVkVSU0lPTl8zLA0KPiA+PiBA QCAtMzYzMiw3ICszNjExLDYgQEAgREJfU0hPV19DT01NQU5EKGlnaV9saXN0LCBkYl9zaG93X2ln aV9saXN0KQ0KPiA+PiAgICAgICAgICAgICAgIGRiX3ByaW50ZigiICAgIHFpICV1XG4iLCBpZ2kt PmlnaV9xaSk7DQo+ID4+ICAgICAgICAgICAgICAgZGJfcHJpbnRmKCIgICAgcXJpICV1XG4iLCBp Z2ktPmlnaV9xcmkpOw0KPiA+PiAgICAgICAgICAgICAgIGRiX3ByaW50ZigiICAgIHVyaSAldVxu IiwgaWdpLT5pZ2lfdXJpKTsNCj4gPj4gLSAgICAgICAgICAgICAvKiBTTElTVF9IRUFEKCxpbl9t dWx0aSkgICBpZ2lfcmVsaW5taGVhZCAqLw0KPiA+PiAgICAgICAgICAgICAgIC8qIHN0cnVjdCBt YnVmcSAgICBpZ2lfZ3E7ICovDQo+ID4+ICAgICAgICAgICAgICAgZGJfcHJpbnRmKCJcbiIpOw0K PiA+PiAgICAgICB9DQo+ID4+DQo+ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9uZXRpbmV0L2lnbXBf dmFyLmgNCj4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4+IC0tLSBoZWFkL3N5cy9uZXRp bmV0L2lnbXBfdmFyLmggICAgICAgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4ICAgICAgICAocjMz MzE3NCkNCj4gPj4gKysrIGhlYWQvc3lzL25ldGluZXQvaWdtcF92YXIuaCAgICAgICBXZWQgTWF5 ICAyIDE5OjM2OjI5IDIwMTggICAgICAgIChyMzMzMTc1KQ0KPiA+PiBAQCAtMjE0LDcgKzIxNCw2 IEBAIHN0cnVjdCBpZ21wX2lmc29mdGMgew0KPiA+PiAgICAgICB1aW50MzJfdCBpZ2lfcWk7ICAg ICAgICAvKiBJR01QdjMgUXVlcnkgSW50ZXJ2YWwgKHMpICovDQo+ID4+ICAgICAgIHVpbnQzMl90 IGlnaV9xcmk7ICAgICAgIC8qIElHTVB2MyBRdWVyeSBSZXNwb25zZSBJbnRlcnZhbCAocykgKi8N Cj4gPj4gICAgICAgdWludDMyX3QgaWdpX3VyaTsgICAgICAgLyogSUdNUHYzIFVuc29saWNpdGVk IFJlcG9ydCBJbnRlcnZhbCAocykgKi8NCj4gPj4gLSAgICAgU0xJU1RfSEVBRCgsaW5fbXVsdGkp ICAgaWdpX3JlbGlubWhlYWQ7IC8qIHJlbGVhc2VkIGdyb3VwcyAqLw0KPiA+PiAgICAgICBzdHJ1 Y3QgbWJ1ZnEgICAgaWdpX2dxOyAgICAgICAgIC8qIGdlbmVyYWwgcXVlcnkgcmVzcG9uc2VzIHF1 ZXVlICovDQo+ID4+ICB9Ow0KPiA+Pg0KPiA+Pg0KPiA+PiBNb2RpZmllZDogaGVhZC9zeXMvbmV0 aW5ldC9pbi5jDQo+ID4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PiAtLS0gaGVhZC9zeXMv bmV0aW5ldC9pbi5jICAgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAgICAgIChyMzMzMTc0 KQ0KPiA+PiArKysgaGVhZC9zeXMvbmV0aW5ldC9pbi5jICAgICBXZWQgTWF5ICAyIDE5OjM2OjI5 IDIwMTggICAgICAgIChyMzMzMTc1KQ0KPiA+PiBAQCAtNjMyLDEyICs2MzIsMTAgQEAgaW5fZGlm YWRkcl9pb2N0bCh1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIHN0cnVjdCBpZm5lDQo+ID4+ICAg ICAgICAgICAgICAgc3RydWN0IGluX2lmaW5mbyAqaWk7DQo+ID4+DQo+ID4+ICAgICAgICAgICAg ICAgaWkgPSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSk7DQo+ ID4+IC0gICAgICAgICAgICAgSU5fTVVMVElfTE9DSygpOw0KPiA+PiAgICAgICAgICAgICAgIGlm IChpaS0+aWlfYWxsaG9zdHMpIHsNCj4gPj4gLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKWlu X2xlYXZlZ3JvdXBfbG9ja2VkKGlpLT5paV9hbGxob3N0cywgTlVMTCk7DQo+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAodm9pZClpbl9sZWF2ZWdyb3VwKGlpLT5paV9hbGxob3N0cywgTlVMTCk7 DQo+ID4+ICAgICAgICAgICAgICAgICAgICAgICBpaS0+aWlfYWxsaG9zdHMgPSBOVUxMOw0KPiA+ PiAgICAgICAgICAgICAgIH0NCj4gPj4gLSAgICAgICAgICAgICBJTl9NVUxUSV9VTkxPQ0soKTsN Cj4gPj4gICAgICAgfQ0KPiA+Pg0KPiA+PiAgICAgICBJRl9BRERSX1dMT0NLKGlmcCk7DQo+ID4+ IEBAIC05OTQsMTEgKzk5MiwxMiBAQCBpbl9icm9hZGNhc3Qoc3RydWN0IGluX2FkZHIgaW4sIHN0 cnVjdCBpZm5ldCAqaWZwKQ0KPiA+PiAgdm9pZA0KPiA+PiAgaW5faWZkZXRhY2goc3RydWN0IGlm bmV0ICppZnApDQo+ID4+ICB7DQo+ID4+IC0NCj4gPj4gKyAgICAgSU5fTVVMVElfTE9DSygpOw0K PiA+PiAgICAgICBpbl9wY2JwdXJnZWlmMCgmVl9yaXBjYmluZm8sIGlmcCk7DQo+ID4+ICAgICAg IGluX3BjYnB1cmdlaWYwKCZWX3VkYmluZm8sIGlmcCk7DQo+ID4+ICAgICAgIGluX3BjYnB1cmdl aWYwKCZWX3VsaXRlY2JpbmZvLCBpZnApOw0KPiA+PiAgICAgICBpbl9wdXJnZW1hZGRycyhpZnAp Ow0KPiA+PiArICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4gIH0NCj4gPj4NCj4gPj4gIC8q DQo+ID4+IEBAIC0xMDExLDEyICsxMDEwLDEyIEBAIGluX2lmZGV0YWNoKHN0cnVjdCBpZm5ldCAq aWZwKQ0KPiA+PiAgc3RhdGljIHZvaWQNCj4gPj4gIGluX3B1cmdlbWFkZHJzKHN0cnVjdCBpZm5l dCAqaWZwKQ0KPiA+PiAgew0KPiA+PiAtICAgICBMSVNUX0hFQUQoLGluX211bHRpKSBwdXJnZWlu bXM7DQo+ID4+IC0gICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm0sICp0aW5tOw0KPiA+ PiArICAgICBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBwdXJnZWlubXM7DQo+ID4+ICsgICAgIHN0cnVj dCBpbl9tdWx0aSAgICAgICAgICppbm07DQo+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAg ICAgICppZm1hOw0KPiA+Pg0KPiA+PiAtICAgICBMSVNUX0lOSVQoJnB1cmdlaW5tcyk7DQo+ID4+ IC0gICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPj4gKyAgICAgU0xJU1RfSU5JVCgmcHVyZ2Vpbm1z KTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+DQo+ID4+ICAgICAgIC8q DQo+ID4+ICAgICAgICAqIEV4dHJhY3QgbGlzdCBvZiBpbl9tdWx0aSBhc3NvY2lhdGVkIHdpdGgg dGhlIGRldGFjaGluZyBpZnANCj4gPj4gQEAgLTEwMzQsMTcgKzEwMzMsMTMgQEAgaW5fcHVyZ2Vt YWRkcnMoc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ICAgICAgICAgICAgICAgICAgICgiJXM6IGlm bWFfcHJvdG9zcGVjIGlzIE5VTEwiLCBfX2Z1bmNfXykpOw0KPiA+PiAgI2VuZGlmDQo+ID4+ICAg ICAgICAgICAgICAgaW5tID0gKHN0cnVjdCBpbl9tdWx0aSAqKWlmbWEtPmlmbWFfcHJvdG9zcGVj Ow0KPiA+PiAtICAgICAgICAgICAgIExJU1RfSU5TRVJUX0hFQUQoJnB1cmdlaW5tcywgaW5tLCBp bm1fbGluayk7DQo+ID4+ICsgICAgICAgICAgICAgaW5tX3JlbGVfbG9ja2VkKCZwdXJnZWlubXMs IGlubSk7DQo+ID4+ICAgICAgIH0NCj4gPj4gICAgICAgSUZfQUREUl9SVU5MT0NLKGlmcCk7DQo+ ID4+DQo+ID4+IC0gICAgIExJU1RfRk9SRUFDSF9TQUZFKGlubSwgJnB1cmdlaW5tcywgaW5tX2xp bmssIHRpbm0pIHsNCj4gPj4gLSAgICAgICAgICAgICBMSVNUX1JFTU9WRShpbm0sIGlubV9saW5r KTsNCj4gPj4gLSAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4gLSAg ICAgfQ0KPiA+PiArICAgICBpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVkKCZwdXJnZWlubXMpOw0K PiA+PiAgICAgICBpZ21wX2lmZGV0YWNoKGlmcCk7DQo+ID4+IC0NCj4gPj4gLSAgICAgSU5fTVVM VElfVU5MT0NLKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ICB9 DQo+ID4+DQo+ID4+ICBzdHJ1Y3QgaW5fbGxlbnRyeSB7DQo+ID4+DQo+ID4+IE1vZGlmaWVkOiBo ZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMNCj4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ ID4+IC0tLSBoZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMgICAgICAgV2VkIE1heSAgMiAxNzo0 MTowMCAyMDE4ICAgICAgICAocjMzMzE3NCkNCj4gPj4gKysrIGhlYWQvc3lzL25ldGluZXQvaW5f bWNhc3QuYyAgICAgICBXZWQgTWF5ICAyIDE5OjM2OjI5IDIwMTggICAgICAgIChyMzMzMTc1KQ0K PiA+PiBAQCAtNTEsNiArNTEsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7DQo+ID4+ICAjaW5j bHVkZSA8c3lzL3N5c2N0bC5oPg0KPiA+PiAgI2luY2x1ZGUgPHN5cy9rdHIuaD4NCj4gPj4gICNp bmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+DQo+ID4+ICsjaW5jbHVkZSA8c3lzL2d0YXNrcXVldWUu aD4NCj4gPj4gICNpbmNsdWRlIDxzeXMvdHJlZS5oPg0KPiA+Pg0KPiA+PiAgI2luY2x1ZGUgPG5l dC9pZi5oPg0KPiA+PiBAQCAtNTksNiArNjAsOCBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7DQo+ ID4+ICAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQo+ID4+ICAjaW5jbHVkZSA8bmV0L3ZuZXQuaD4N Cj4gPj4NCj4gPj4gKyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4NCj4gPj4gKw0KPiA+PiAgI2lu Y2x1ZGUgPG5ldGluZXQvaW4uaD4NCj4gPj4gICNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+ DQo+ID4+ICAjaW5jbHVkZSA8bmV0aW5ldC9pbl9maWIuaD4NCj4gPj4gQEAgLTkxLDE4ICs5NCwy NCBAQCBzdGF0aWMgTUFMTE9DX0RFRklORShNX0lQTVNPVVJDRSwgImlwX21zb3VyY2UiLA0KPiA+ Pg0KPiA+PiAgLyoNCj4gPj4gICAqIExvY2tpbmc6DQo+ID4+IC0gKiAtIExvY2sgb3JkZXIgaXM6 IEdpYW50LCBJTlBfV0xPQ0ssIElOX01VTFRJX0xPQ0ssIElHTVBfTE9DSywgSUZfQUREUl9MT0NL Lg0KPiA+PiArICogLSBMb2NrIG9yZGVyIGlzOiBHaWFudCwgSU5QX1dMT0NLLCBJTl9NVUxUSV9M SVNUX0xPQ0ssIElHTVBfTE9DSywgSUZfQUREUl9MT0NLLg0KPiA+PiAgICogLSBUaGUgSUZfQURE Ul9MT0NLIGlzIGltcGxpY2l0bHkgdGFrZW4gYnkgaW5tX2xvb2t1cCgpIGVhcmxpZXIsIGhvd2V2 ZXINCj4gPj4gICAqICAgaXQgY2FuIGJlIHRha2VuIGJ5IGNvZGUgaW4gbmV0L2lmLmMgYWxzby4N Cj4gPj4gICAqIC0gaXBfbW9wdGlvbnMgYW5kIGluX21maWx0ZXIgYXJlIGNvdmVyZWQgYnkgdGhl IElOUF9XTE9DSy4NCj4gPj4gICAqDQo+ID4+IC0gKiBzdHJ1Y3QgaW5fbXVsdGkgaXMgY292ZXJl ZCBieSBJTl9NVUxUSV9MT0NLLiBUaGVyZSBpc24ndCBzdHJpY3RseQ0KPiA+PiArICogc3RydWN0 IGluX211bHRpIGlzIGNvdmVyZWQgYnkgSU5fTVVMVElfTElTVF9MT0NLLiBUaGVyZSBpc24ndCBz dHJpY3RseQ0KPiA+PiAgICogYW55IG5lZWQgZm9yIGluX211bHRpIGl0c2VsZiB0byBiZSB2aXJ0 dWFsaXplZCAtLSBpdCBpcyBib3VuZCB0byBhbiBpZnANCj4gPj4gICAqIGFueXdheSBubyBtYXR0 ZXIgd2hhdCBoYXBwZW5zLg0KPiA+PiAgICovDQo+ID4+IC1zdHJ1Y3QgbXR4IGluX211bHRpX210 eDsNCj4gPj4gLU1UWF9TWVNJTklUKGluX211bHRpX210eCwgJmluX211bHRpX210eCwgImluX211 bHRpX210eCIsIE1UWF9ERUYpOw0KPiA+PiArc3RydWN0IG10eCBpbl9tdWx0aV9saXN0X210eDsN Cj4gPj4gK01UWF9TWVNJTklUKGluX211bHRpX210eCwgJmluX211bHRpX2xpc3RfbXR4LCAiaW5f bXVsdGlfbGlzdF9tdHgiLCBNVFhfREVGKTsNCj4gPj4NCj4gPj4gK3N0cnVjdCBtdHggaW5fbXVs dGlfZnJlZV9tdHg7DQo+ID4+ICtNVFhfU1lTSU5JVChpbl9tdWx0aV9mcmVlX210eCwgJmluX211 bHRpX2ZyZWVfbXR4LCAiaW5fbXVsdGlfZnJlZV9tdHgiLCBNVFhfREVGKTsNCj4gPj4gKw0KPiA+ PiArc3RydWN0IHN4IGluX211bHRpX3N4Ow0KPiA+PiArU1hfU1lTSU5JVChpbl9tdWx0aV9zeCwg JmluX211bHRpX3N4LCAiaW5fbXVsdGlfc3giKTsNCj4gPj4gKw0KPiA+PiAgLyoNCj4gPj4gICAq IEZ1bmN0aW9ucyB3aXRoIG5vbi1zdGF0aWMgbGlua2FnZSBkZWZpbmVkIGluIHRoaXMgZmlsZSBz aG91bGQgYmUNCj4gPj4gICAqIGRlY2xhcmVkIGluIGluX3Zhci5oOg0KPiA+PiBAQCAtMTUxLDYg KzE2MCw3IEBAIHN0YXRpYyBpbnQgICAgICAgIGlubV9pc19pZnBfZGV0YWNoZWQoY29uc3Qgc3Ry dWN0IGluX211bHRpICoNCj4gPj4gIHN0YXRpYyBpbnQgICBpbm1fbWVyZ2Uoc3RydWN0IGluX211 bHRpICosIC8qY29uc3QqLyBzdHJ1Y3QgaW5fbWZpbHRlciAqKTsNCj4gPj4gIHN0YXRpYyB2b2lk ICBpbm1fcHVyZ2Uoc3RydWN0IGluX211bHRpICopOw0KPiA+PiAgc3RhdGljIHZvaWQgIGlubV9y ZWFwKHN0cnVjdCBpbl9tdWx0aSAqKTsNCj4gPj4gK3N0YXRpYyB2b2lkIGlubV9yZWxlYXNlKHN0 cnVjdCBpbl9tdWx0aSAqKTsNCj4gPj4gIHN0YXRpYyBzdHJ1Y3QgaXBfbW9wdGlvbnMgKg0KPiA+ PiAgICAgICAgICAgICAgIGlucF9maW5kbW9wdGlvbnMoc3RydWN0IGlucGNiICopOw0KPiA+PiAg c3RhdGljIHZvaWQgIGlucF9mcmVlbW9wdGlvbnNfaW50ZXJuYWwoc3RydWN0IGlwX21vcHRpb25z ICopOw0KPiA+PiBAQCAtMjE2LDYgKzIyNiw2NSBAQCBpbm1faXNfaWZwX2RldGFjaGVkKGNvbnN0 IHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0KPiA+PiAgfQ0KPiA+PiAgI2VuZGlmDQo+ID4+DQo+ID4+ ICtzdGF0aWMgc3RydWN0IGdyb3VwdGFzayBmcmVlX2d0YXNrOw0KPiA+PiArc3RhdGljIHN0cnVj dCBpbl9tdWx0aV9oZWFkIGlubV9mcmVlX2xpc3Q7DQo+ID4+ICtzdGF0aWMgdm9pZCBpbm1fcmVs ZWFzZV90YXNrKHZvaWQgKmFyZyBfX3VudXNlZCk7DQo+ID4+ICtzdGF0aWMgdm9pZCBpbm1faW5p dCh2b2lkKQ0KPiA+PiArew0KPiA+PiArICAgICBTTElTVF9JTklUKCZpbm1fZnJlZV9saXN0KTsN Cj4gPj4gKyAgICAgdGFza3Fncm91cF9jb25maWdfZ3Rhc2tfaW5pdChOVUxMLCAmZnJlZV9ndGFz aywgaW5tX3JlbGVhc2VfdGFzaywgImlubSByZWxlYXNlDQo+ID4+IHRhc2siKTsgK30NCj4gPj4g Kw0KPiA+PiArU1lTSU5JVChpbm1faW5pdCwgU0lfU1VCX1NNUCArIDEsIFNJX09SREVSX0ZJUlNU LA0KPiA+PiArICAgICBpbm1faW5pdCwgTlVMTCk7DQo+ID4+ICsNCj4gPj4gKw0KPiA+PiArdm9p ZA0KPiA+PiAraW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJlZChzdHJ1Y3QgaW5fbXVsdGlfaGVhZCAq aW5taCkNCj4gPj4gK3sNCj4gPj4gKw0KPiA+PiArICAgICBpZiAoU0xJU1RfRU1QVFkoaW5taCkp DQo+ID4+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+PiArICAgICBtdHhfbG9jaygmaW5fbXVs dGlfZnJlZV9tdHgpOw0KPiA+PiArICAgICBTTElTVF9DT05DQVQoJmlubV9mcmVlX2xpc3QsIGlu bWgsIGluX211bHRpLCBpbm1fbnJlbGUpOw0KPiA+PiArICAgICBtdHhfdW5sb2NrKCZpbl9tdWx0 aV9mcmVlX210eCk7DQo+ID4+ICsgICAgIEdST1VQVEFTS19FTlFVRVVFKCZmcmVlX2d0YXNrKTsN Cj4gPj4gK30NCj4gPj4gKw0KPiA+PiArdm9pZA0KPiA+PiAraW5tX3JlbGVhc2VfZGVmZXJyZWQo c3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ICt7DQo+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0 aV9oZWFkIHRtcDsNCj4gPj4gKw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJU KCk7DQo+ID4+ICsgICAgIE1QQVNTKGlubS0+aW5tX3JlZmNvdW50ID4gMCk7DQo+ID4+ICsgICAg IGlmICgtLWlubS0+aW5tX3JlZmNvdW50ID09IDApIHsNCj4gPj4gKyAgICAgICAgICAgICBTTElT VF9JTklUKCZ0bXApOw0KPiA+PiArICAgICAgICAgICAgIGlubS0+aW5tX2lmbWEtPmlmbWFfcHJv dG9zcGVjID0gTlVMTDsNCj4gPj4gKyAgICAgICAgICAgICBTTElTVF9JTlNFUlRfSEVBRCgmdG1w LCBpbm0sIGlubV9ucmVsZSk7DQo+ID4+ICsgICAgICAgICAgICAgaW5tX3JlbGVhc2VfbGlzdF9k ZWZlcnJlZCgmdG1wKTsNCj4gPj4gKyAgICAgfQ0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0 aWMgdm9pZA0KPiA+PiAraW5tX3JlbGVhc2VfdGFzayh2b2lkICphcmcgX191bnVzZWQpDQo+ID4+ ICt7DQo+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0aV9oZWFkIGlubV9mcmVlX3RtcDsNCj4gPj4g KyAgICAgc3RydWN0IGluX211bHRpICppbm0sICp0aW5tOw0KPiA+PiArDQo+ID4+ICsgICAgIFNM SVNUX0lOSVQoJmlubV9mcmVlX3RtcCk7DQo+ID4+ICsgICAgIG10eF9sb2NrKCZpbl9tdWx0aV9m cmVlX210eCk7DQo+ID4+ICsgICAgIFNMSVNUX0NPTkNBVCgmaW5tX2ZyZWVfdG1wLCAmaW5tX2Zy ZWVfbGlzdCwgaW5fbXVsdGksIGlubV9ucmVsZSk7DQo+ID4+ICsgICAgIG10eF91bmxvY2soJmlu X211bHRpX2ZyZWVfbXR4KTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTE9DSygpOw0KPiA+PiArICAg ICBTTElTVF9GT1JFQUNIX1NBRkUoaW5tLCAmaW5tX2ZyZWVfdG1wLCBpbm1fbnJlbGUsIHRpbm0p IHsNCj4gPj4gKyAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaW5tX2ZyZWVfdG1wLCBp bm1fbnJlbGUpOw0KPiA+PiArICAgICAgICAgICAgIE1QQVNTKGlubSk7DQo+ID4+ICsgICAgICAg ICAgICAgaW5tX3JlbGVhc2UoaW5tKTsNCj4gPj4gKyAgICAgfQ0KPiA+PiArICAgICBJTl9NVUxU SV9VTkxPQ0soKTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiAgLyoNCj4gPj4gICAqIEluaXRpYWxp emUgYW4gaW5fbWZpbHRlciBzdHJ1Y3R1cmUgdG8gYSBrbm93biBzdGF0ZSBhdCB0MCwgdDENCj4g Pj4gICAqIHdpdGggYW4gZW1wdHkgc291cmNlIGZpbHRlciBsaXN0Lg0KPiA+PiBAQCAtMjMyLDcg KzMwMSw3IEBAIGltZl9pbml0KHN0cnVjdCBpbl9tZmlsdGVyICppbWYsIGNvbnN0IGludCBzdDAs IGNvbnN0DQo+ID4+ICAvKg0KPiA+PiAgICogRnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgYW4gaW5f bXVsdGkgcmVjb3JkIGZvciBhbiBJUHY0IG11bHRpY2FzdCBhZGRyZXNzDQo+ID4+ICAgKiBvbiBh IGdpdmVuIGludGVyZmFjZS4gaWZwIG11c3QgYmUgdmFsaWQuIElmIG5vIHJlY29yZCBmb3VuZCwg cmV0dXJuIE5VTEwuDQo+ID4+IC0gKiBUaGUgSU5fTVVMVElfTE9DSyBhbmQgSUZfQUREUl9MT0NL IG9uIGlmcCBtdXN0IGJlIGhlbGQuDQo+ID4+ICsgKiBUaGUgSU5fTVVMVElfTElTVF9MT0NLIGFu ZCBJRl9BRERSX0xPQ0sgb24gaWZwIG11c3QgYmUgaGVsZC4NCj4gPj4gICAqLw0KPiA+PiAgc3Ry dWN0IGluX211bHRpICoNCj4gPj4gIGlubV9sb29rdXBfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZw LCBjb25zdCBzdHJ1Y3QgaW5fYWRkciBpbmEpDQo+ID4+IEBAIC0yNDAsNyArMzA5LDcgQEAgaW5t X2xvb2t1cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hDQo+ID4+ ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAqaWZtYTsNCj4gPj4gICAgICAgc3RydWN0IGluX211 bHRpICppbm07DQo+ID4+DQo+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gICAgICAgSUZfQUREUl9M T0NLX0FTU0VSVChpZnApOw0KPiA+Pg0KPiA+PiAgICAgICBpbm0gPSBOVUxMOw0KPiA+PiBAQCAt MjY0LDcgKzMzMyw3IEBAIGlubV9sb29rdXAoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVj dCBpbl9hZGRyIGluYQ0KPiA+PiAgew0KPiA+PiAgICAgICBzdHJ1Y3QgaW5fbXVsdGkgKmlubTsN Cj4gPj4NCj4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gKyAgICAgSU5f TVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiAgICAgICBJRl9BRERSX1JMT0NLKGlmcCk7 DQo+ID4+ICAgICAgIGlubSA9IGlubV9sb29rdXBfbG9ja2VkKGlmcCwgaW5hKTsNCj4gPj4gICAg ICAgSUZfQUREUl9SVU5MT0NLKGlmcCk7DQo+ID4+IEBAIC00NTEsNyArNTIwLDcgQEAgaW5fZ2V0 bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4+ICAg ICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIGlpID0gKHN0cnVj dCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXTsNCj4gPj4gLQ0KPiA+PiArICAg ICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4gICAgICAgaW5tID0gaW5tX2xvb2t1cChpZnAs ICpncm91cCk7DQo+ID4+ICAgICAgIGlmIChpbm0gIT0gTlVMTCkgew0KPiA+PiAgICAgICAgICAg ICAgIC8qDQo+ID4+IEBAIC00NjAsMTEgKzUyOSwxMyBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZu ZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gPj4gICAgICAgICAgICAgICAgKi8N Cj4gPj4gICAgICAgICAgICAgICBLQVNTRVJUKGlubS0+aW5tX3JlZmNvdW50ID49IDEsDQo+ID4+ ICAgICAgICAgICAgICAgICAgICgiJXM6IGJhZCByZWZjb3VudCAlZCIsIF9fZnVuY19fLCBpbm0t PmlubV9yZWZjb3VudCkpOw0KPiA+PiAtICAgICAgICAgICAgICsraW5tLT5pbm1fcmVmY291bnQ7 DQo+ID4+ICsgICAgICAgICAgICAgaW5tX2FjcXVpcmVfbG9ja2VkKGlubSk7DQo+ID4+ICAgICAg ICAgICAgICAgKnBpbm0gPSBpbm07DQo+ID4+IC0gICAgICAgICAgICAgcmV0dXJuICgwKTsNCj4g Pj4gICAgICAgfQ0KPiA+PiAtDQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ ID4+ICsgICAgIGlmIChpbm0gIT0gTlVMTCkNCj4gPj4gKyAgICAgICAgICAgICByZXR1cm4gKDAp Ow0KPiA+PiArDQo+ID4+ICAgICAgIG1lbXNldCgmZ3NpbiwgMCwgc2l6ZW9mKGdzaW4pKTsNCj4g Pj4gICAgICAgZ3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCj4gPj4gICAgICAgZ3Npbi5zaW5f bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7DQo+ID4+IEBAIC00NzksNiArNTUwLDcg QEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpn DQo+ID4+ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJvcik7DQo+ID4+DQo+ID4+ICAgICAgIC8q IFhYWCBpZm1hX3Byb3Rvc3BlYyBtdXN0IGJlIGNvdmVyZWQgYnkgSUZfQUREUl9MT0NLICovDQo+ ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiAgICAgICBJRl9BRERSX1dMT0NL KGlmcCk7DQo+ID4+DQo+ID4+ICAgICAgIC8qDQo+ID4+IEBAIC01MDQsMTAgKzU3Niw5IEBAIGlu X2dldG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZw0KPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpZm1hLCBpbm0sIGluZXRfbnRv YV9yKCpncm91cCwgYWRkcmJ1ZikpOw0KPiA+PiAgICAgICAgICAgICAgIH0NCj4gPj4gICNlbmRp Zg0KPiA+PiAtICAgICAgICAgICAgICsraW5tLT5pbm1fcmVmY291bnQ7DQo+ID4+ICsgICAgICAg ICAgICAgaW5tX2FjcXVpcmVfbG9ja2VkKGlubSk7DQo+ID4+ICAgICAgICAgICAgICAgKnBpbm0g PSBpbm07DQo+ID4+IC0gICAgICAgICAgICAgSUZfQUREUl9XVU5MT0NLKGlmcCk7DQo+ID4+IC0g ICAgICAgICAgICAgcmV0dXJuICgwKTsNCj4gPj4gKyAgICAgICAgICAgICBnb3RvIG91dF9sb2Nr ZWQ7DQo+ID4+ICAgICAgIH0NCj4gPj4NCj4gPj4gICAgICAgSUZfQUREUl9XTE9DS19BU1NFUlQo aWZwKTsNCj4gPj4gQEAgLTUyMiw2ICs1OTMsNyBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQg KmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gPj4gICAgICAgaW5tID0gbWFsbG9jKHNp emVvZigqaW5tKSwgTV9JUE1BRERSLCBNX05PV0FJVCB8IE1fWkVSTyk7DQo+ID4+ICAgICAgIGlm IChpbm0gPT0gTlVMTCkgew0KPiA+PiAgICAgICAgICAgICAgIElGX0FERFJfV1VOTE9DSyhpZnAp Ow0KPiA+PiArICAgICAgICAgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ICAgICAg ICAgICAgICAgaWZfZGVsbXVsdGlfaWZtYShpZm1hKTsNCj4gPj4gICAgICAgICAgICAgICByZXR1 cm4gKEVOT01FTSk7DQo+ID4+ICAgICAgIH0NCj4gPj4gQEAgLTUzOSw4ICs2MTEsOSBAQCBpbl9n ZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gPj4g ICAgICAgaWZtYS0+aWZtYV9wcm90b3NwZWMgPSBpbm07DQo+ID4+DQo+ID4+ICAgICAgICpwaW5t ID0gaW5tOw0KPiA+PiAtDQo+ID4+ICsgb3V0X2xvY2tlZDoNCj4gPj4gICAgICAgSUZfQUREUl9X VU5MT0NLKGlmcCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ICAg ICAgIHJldHVybiAoMCk7DQo+ID4+ICB9DQo+ID4+DQo+ID4+IEBAIC01NTAsMzYgKzYyMywyOSBA QCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcN Cj4gPj4gICAqIElmIHRoZSByZWZjb3VudCBkcm9wcyB0byAwLCBmcmVlIHRoZSBpbl9tdWx0aSBy ZWNvcmQgYW5kDQo+ID4+ICAgKiBkZWxldGUgdGhlIHVuZGVybHlpbmcgbGluay1sYXllciBtZW1i ZXJzaGlwLg0KPiA+PiAgICovDQo+ID4+IC12b2lkDQo+ID4+IC1pbm1fcmVsZWFzZV9sb2NrZWQo c3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ICtzdGF0aWMgdm9pZA0KPiA+PiAraW5tX3JlbGVh c2Uoc3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ICB7DQo+ID4+ICAgICAgIHN0cnVjdCBpZm11 bHRpYWRkciAqaWZtYTsNCj4gPj4gKyAgICAgc3RydWN0IGlmbmV0ICppZnA7DQo+ID4+DQo+ID4+ IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+IC0NCj4gPj4gICAgICAgQ1RSMihL VFJfSUdNUFYzLCAiJXM6IHJlZmNvdW50IGlzICVkIiwgX19mdW5jX18sIGlubS0+aW5tX3JlZmNv dW50KTsNCj4gPj4gLQ0KPiA+PiAtICAgICBpZiAoLS1pbm0tPmlubV9yZWZjb3VudCA+IDApIHsN Cj4gPj4gLSAgICAgICAgICAgICBDVFIyKEtUUl9JR01QVjMsICIlczogcmVmY291bnQgaXMgbm93 ICVkIiwgX19mdW5jX18sDQo+ID4+IC0gICAgICAgICAgICAgICAgIGlubS0+aW5tX3JlZmNvdW50 KTsNCj4gPj4gLSAgICAgICAgICAgICByZXR1cm47DQo+ID4+IC0gICAgIH0NCj4gPj4gLQ0KPiA+ PiArICAgICBNUEFTUyhpbm0tPmlubV9yZWZjb3VudCA9PSAwKTsNCj4gPj4gICAgICAgQ1RSMihL VFJfSUdNUFYzLCAiJXM6IGZyZWVpbmcgaW5tICVwIiwgX19mdW5jX18sIGlubSk7DQo+ID4+DQo+ ID4+ICAgICAgIGlmbWEgPSBpbm0tPmlubV9pZm1hOw0KPiA+PiArICAgICBpZnAgPSBpbm0tPmlu bV9pZnA7DQo+ID4+DQo+ID4+ICAgICAgIC8qIFhYWCB0aGlzIGFjY2VzcyBpcyBub3QgY292ZXJl ZCBieSBJRl9BRERSX0xPQ0sgKi8NCj4gPj4gICAgICAgQ1RSMihLVFJfSUdNUFYzLCAiJXM6IHB1 cmdpbmcgaWZtYSAlcCIsIF9fZnVuY19fLCBpZm1hKTsNCj4gPj4gLSAgICAgS0FTU0VSVChpZm1h LT5pZm1hX3Byb3Rvc3BlYyA9PSBpbm0sDQo+ID4+IC0gICAgICAgICAoIiVzOiBpZm1hX3Byb3Rv c3BlYyAhPSBpbm0iLCBfX2Z1bmNfXykpOw0KPiA+PiAtICAgICBpZm1hLT5pZm1hX3Byb3Rvc3Bl YyA9IE5VTEw7DQo+ID4+IC0NCj4gPj4gKyAgICAgaWYgKGlmcCkNCj4gPj4gKyAgICAgICAgICAg ICBDVVJWTkVUX1NFVChpZnAtPmlmX3ZuZXQpOw0KPiA+PiAgICAgICBpbm1fcHVyZ2UoaW5tKTsN Cj4gPj4gLQ0KPiA+PiAgICAgICBmcmVlKGlubSwgTV9JUE1BRERSKTsNCj4gPj4NCj4gPj4gICAg ICAgaWZfZGVsbXVsdGlfaWZtYShpZm1hKTsNCj4gPj4gKyAgICAgaWYgKGlmcCkNCj4gPj4gKyAg ICAgICAgICAgICBDVVJWTkVUX1JFU1RPUkUoKTsNCj4gPj4gIH0NCj4gPj4NCj4gPj4gIC8qDQo+ ID4+IEBAIC01OTIsNyArNjU4LDcgQEAgaW5tX2NsZWFyX3JlY29yZGVkKHN0cnVjdCBpbl9tdWx0 aSAqaW5tKQ0KPiA+PiAgew0KPiA+PiAgICAgICBzdHJ1Y3QgaXBfbXNvdXJjZSAgICAgICAqaW1z Ow0KPiA+Pg0KPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiArICAgICBJ Tl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIFJCX0ZPUkVBQ0go aW1zLCBpcF9tc291cmNlX3RyZWUsICZpbm0tPmlubV9zcmNzKSB7DQo+ID4+ICAgICAgICAgICAg ICAgaWYgKGltcy0+aW1zX3N0cCkgew0KPiA+PiBAQCAtNjMyLDcgKzY5OCw3IEBAIGlubV9yZWNv cmRfc291cmNlKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjb25zdCBpbl9hZGRyXw0KPiA+PiAgICAg ICBzdHJ1Y3QgaXBfbXNvdXJjZSAgICAgICAgZmluZDsNCj4gPj4gICAgICAgc3RydWN0IGlwX21z b3VyY2UgICAgICAgKmltcywgKm5pbXM7DQo+ID4+DQo+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tf QVNTRVJUKCk7DQo+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4N Cj4gPj4gICAgICAgZmluZC5pbXNfaGFkZHIgPSBudG9obChuYWRkcik7DQo+ID4+ICAgICAgIGlt cyA9IFJCX0ZJTkQoaXBfbXNvdXJjZV90cmVlLCAmaW5tLT5pbm1fc3JjcywgJmZpbmQpOw0KPiA+ PiBAQCAtOTU5LDYgKzEwMjUsNyBAQCBpbm1fbWVyZ2Uoc3RydWN0IGluX211bHRpICppbm0sIC8q Y29uc3QqLyBzdHJ1Y3QgaW5fbWYNCj4gPj4gICAgICAgc2NoYW5nZWQgPSAwOw0KPiA+PiAgICAg ICBlcnJvciA9IDA7DQo+ID4+ICAgICAgIG5zcmMxID0gbnNyYzAgPSAwOw0KPiA+PiArICAgICBJ Tl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+DQo+ID4+ICAgICAgIC8qDQo+ID4+ICAg ICAgICAqIFVwZGF0ZSB0aGUgc291cmNlIGZpbHRlcnMgZmlyc3QsIGFzIHRoaXMgbWF5IGZhaWwu DQo+ID4+IEBAIC0xMTY1LDYgKzEyMzIsNyBAQCBpbl9qb2luZ3JvdXBfbG9ja2VkKHN0cnVjdCBp Zm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW4NCj4gPj4gICAgICAgaW50ICAgICAgICAgICAgICAg ICAgICAgIGVycm9yOw0KPiA+Pg0KPiA+PiAgICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0K PiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4NCj4gPj4gICAg ICAgQ1RSNChLVFJfSUdNUFYzLCAiJXM6IGpvaW4gMHglMDh4IG9uICVwKCVzKSkiLCBfX2Z1bmNf XywNCj4gPj4gICAgICAgICAgIG50b2hsKGdpbmEtPnNfYWRkciksIGlmcCwgaWZwLT5pZl94bmFt ZSk7DQo+ID4+IEBAIC0xMTg2LDcgKzEyNTQsNyBAQCBpbl9qb2luZ3JvdXBfbG9ja2VkKHN0cnVj dCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW4NCj4gPj4gICAgICAgICAgICAgICBDVFIxKEtU Ul9JR01QVjMsICIlczogaW5fZ2V0bXVsdGkoKSBmYWlsdXJlIiwgX19mdW5jX18pOw0KPiA+PiAg ICAgICAgICAgICAgIHJldHVybiAoZXJyb3IpOw0KPiA+PiAgICAgICB9DQo+ID4+IC0NCj4gPj4g KyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ICAgICAgIENUUjEoS1RSX0lHTVBWMywg IiVzOiBtZXJnZSBpbm0gc3RhdGUiLCBfX2Z1bmNfXyk7DQo+ID4+ICAgICAgIGVycm9yID0gaW5t X21lcmdlKGlubSwgaW1mKTsNCj4gPj4gICAgICAgaWYgKGVycm9yKSB7DQo+ID4+IEBAIC0xMjAx LDEwICsxMjY5LDEyIEBAIGluX2pvaW5ncm91cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIGNv bnN0IHN0cnVjdCBpbg0KPiA+PiAgICAgICAgICAgICAgIGdvdG8gb3V0X2lubV9yZWxlYXNlOw0K PiA+PiAgICAgICB9DQo+ID4+DQo+ID4+IC1vdXRfaW5tX3JlbGVhc2U6DQo+ID4+ICsgb3V0X2lu bV9yZWxlYXNlOg0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+PiAgICAg ICBpZiAoZXJyb3IpIHsNCj4gPj4gKw0KPiA+PiAgICAgICAgICAgICAgIENUUjIoS1RSX0lHTVBW MywgIiVzOiBkcm9wcGluZyByZWYgb24gJXAiLCBfX2Z1bmNfXywgaW5tKTsNCj4gPj4gLSAgICAg ICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4gKyAgICAgICAgICAgICBpbm1f cmVsZWFzZV9kZWZlcnJlZChpbm0pOw0KPiA+PiAgICAgICB9IGVsc2Ugew0KPiA+PiAgICAgICAg ICAgICAgICpwaW5tID0gaW5tOw0KPiA+PiAgICAgICB9DQo+ID4+IEBAIC0xMjQ5LDYgKzEzMTks NyBAQCBpbl9sZWF2ZWdyb3VwX2xvY2tlZChzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgLypjb25zdCov IHMNCj4gPj4gICAgICAgZXJyb3IgPSAwOw0KPiA+Pg0KPiA+PiAgICAgICBJTl9NVUxUSV9MT0NL X0FTU0VSVCgpOw0KPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4g Pj4NCj4gPj4gICAgICAgQ1RSNShLVFJfSUdNUFYzLCAiJXM6IGxlYXZlIGlubSAlcCwgMHglMDh4 LyVzLCBpbWYgJXAiLCBfX2Z1bmNfXywNCj4gPj4gICAgICAgICAgIGlubSwgbnRvaGwoaW5tLT5p bm1fYWRkci5zX2FkZHIpLA0KPiA+PiBAQCAtMTI3MiwxOCArMTM0MywyMCBAQCBpbl9sZWF2ZWdy b3VwX2xvY2tlZChzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgLypjb25zdCovIHMNCj4gPj4gICAgICAg ICogdGhlIHRyYW5zYWN0aW9uLCBpdCBNVVNUIE5PVCBmYWlsLg0KPiA+PiAgICAgICAgKi8NCj4g Pj4gICAgICAgQ1RSMShLVFJfSUdNUFYzLCAiJXM6IG1lcmdlIGlubSBzdGF0ZSIsIF9fZnVuY19f KTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ICAgICAgIGVycm9yID0g aW5tX21lcmdlKGlubSwgaW1mKTsNCj4gPj4gICAgICAgS0FTU0VSVChlcnJvciA9PSAwLCAoIiVz OiBmYWlsZWQgdG8gbWVyZ2UgaW5tIHN0YXRlIiwgX19mdW5jX18pKTsNCj4gPj4NCj4gPj4gICAg ICAgQ1RSMShLVFJfSUdNUFYzLCAiJXM6IGRvaW5nIGlnbXAgZG93bmNhbGwiLCBfX2Z1bmNfXyk7 DQo+ID4+ICAgICAgIENVUlZORVRfU0VUKGlubS0+aW5tX2lmcC0+aWZfdm5ldCk7DQo+ID4+ICAg ICAgIGVycm9yID0gaWdtcF9jaGFuZ2Vfc3RhdGUoaW5tKTsNCj4gPj4gKyAgICAgaW5tX3JlbGVh c2VfZGVmZXJyZWQoaW5tKTsNCj4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4g Pj4gICAgICAgQ1VSVk5FVF9SRVNUT1JFKCk7DQo+ID4+ICAgICAgIGlmIChlcnJvcikNCj4gPj4g ICAgICAgICAgICAgICBDVFIxKEtUUl9JR01QVjMsICIlczogZmFpbGVkIGlnbXAgZG93bmNhbGwi LCBfX2Z1bmNfXyk7DQo+ID4+DQo+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBkcm9w cGluZyByZWYgb24gJXAiLCBfX2Z1bmNfXywgaW5tKTsNCj4gPj4gLSAgICAgaW5tX3JlbGVhc2Vf bG9ja2VkKGlubSk7DQo+ID4+DQo+ID4+ICAgICAgIHJldHVybiAoZXJyb3IpOw0KPiA+PiAgfQ0K PiA+PiBAQCAtMTMxNSwxOCArMTM4OCw2IEBAIGluX2FkZG11bHRpKHN0cnVjdCBpbl9hZGRyICph cCwgc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ICB9DQo+ID4+DQo+ID4+ICAvKg0KPiA+PiAtICog TGVhdmUgYW4gSVB2NCBtdWx0aWNhc3QgZ3JvdXAsIGFzc3VtZWQgdG8gYmUgaW4gZXhjbHVzaXZl ICgqLEcpIG1vZGUuDQo+ID4+IC0gKiBUaGlzIEtQSSBpcyBmb3IgbGVnYWN5IGtlcm5lbCBjb25z dW1lcnMgb25seS4NCj4gPj4gLSAqLw0KPiA+Pg0KPiA+PiAqKiogRElGRiBPVVRQVVQgVFJVTkNB VEVEIEFUIDEwMDAgTElORVMgKioqDQo+ID4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fDQo+ID4+IHN2bi1zcmMtaGVhZEBmcmVlYnNkLm9yZyBtYWlsaW5n IGxpc3QNCj4gPj4gaHR0cHM6Ly9saXN0cy5mcmVlYnNkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3N2 bi1zcmMtaGVhZA0KPiA+PiBUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkgbWFpbCB0byAic3ZuLXNy Yy1oZWFkLXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIiAgDQo+ID4NCj4gPg0KPiA+IEFmdGVyIChh cm91bmQhKSB0aGlzIHVwZGF0ZSwgc29tZSBib3hlcyB3aXRoIGkzNTAgZHVhbCBwb3J0IE5JQ3Mg aW1tZWRpYXRlbHkgY3Jhc2gNCj4gPiB3aXRoIEZhdGFsIHRyYXAgMTI6IHBhZ2UgZmF1bHQgYW5k IHNvbWV0aGluZyB3aXRoDQo+ID4NCj4gPiBjdXJyZW50IHByb2Nlc3M6IChpc2Mtd29ya2VyMDAw NikNCj4gPg0KPiA+IC4uLi4NCj4gPg0KPiA+IFRob3NlIGJveGVzIGRvIG5vdCBoYXZlIGRlYnVn Z2luZyBrZXJuZWwuIFRoZSBzeW1wdG9tYnMgYXJlIHRoZSBzYW1lLiBTaW5nbGUgdXNlcg0KPiA+ IGtlcm5lbCB3b3JrcywgYnV0IHRoZSBtb21lbnQgSSBwZXJmb3JtIC9ldGMvbmV0c3RhcnQgYW5k IGFueSBraW5kIG9mIG5ldCB0cmFmZmljDQo+ID4gZXN0YWJsaXNoZXMsIHRoaXMgY3JhcCBiYWls cyBvdXQuDQo+ID4NCj4gPg0KPiA+IC0gLS0NCj4gPiBPLiBIYXJ0bWFubg0KPiA+DQo+ID4gSWNo IHdpZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBvZGVyIMOcYmVybWl0dGx1bmcgbWVpbmVyIERhdGVu IGbDvHINCj4gPiBXZXJiZXp3ZWNrZSBvZGVyIGbDvHIgZGllIE1hcmt0LSBvZGVyIE1laW51bmdz Zm9yc2NodW5nICjCpyAyOCBBYnMuIDQgQkRTRykuDQo+ID4gLS0tLS1CRUdJTiBQR1AgU0lHTkFU VVJFLS0tLS0NCj4gPg0KPiA+IGlMVUVBUk1LQUIwV0lRUVpWWk16QXR3QzJULzg2VHJTNTI4ZnlG aFlsQVVDV3V0anRnQUtDUkRTNTI4ZnlGaFkNCj4gPiBsQWt6QWY5UGhhRlR3TmhRRDJ6Rjd4U0hK Mndmdkx0b1VFalpsekdzdXNBQ3AxcGE3SkFmejBQeXYrbG0rWE5KDQo+ID4gdkxFbHJJZjFDbUR6 dUE4eWJsWi94L3dPVlNKa0FmOUMrNTBEVkV0R3E1SC9iSFNETnd6bXFyajhZZ0I3WHBTcw0KPiA+ IFBNUlhjK0l3SWExSmdpMnlNKzZUQ1NOU3MxTjViRVVoVTlCaThlWHk2WTBGU2tBWmVWK3MNCj4g PiA9UzBiQw0KPiA+IC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0KPiA+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ID4gc3ZuLXNyYy1oZWFkQGZy ZWVic2Qub3JnIG1haWxpbmcgbGlzdA0KPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWJzZC5vcmcvbWFp bG1hbi9saXN0aW5mby9zdm4tc3JjLWhlYWQNCj4gPiBUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkg bWFpbCB0byAic3ZuLXNyYy1oZWFkLXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIiAgDQoNCg0KDQot IC0tIA0KTy4gSGFydG1hbm4NCg0KSWNoIHdpZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBvZGVyIMOc YmVybWl0dGx1bmcgbWVpbmVyIERhdGVuIGbDvHINCldlcmJlendlY2tlIG9kZXIgZsO8ciBkaWUg TWFya3QtIG9kZXIgTWVpbnVuZ3Nmb3JzY2h1bmcgKMKnIDI4IEFicy4gNCBCRFNHKS4NCi0tLS0t QkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tDQoNCmlMVUVBUk1LQUIwV0lRUVpWWk16QXR3QzJULzg2 VHJTNTI4ZnlGaFlsQVVDV3V0djh3QUtDUkRTNTI4ZnlGaFkNCmxJZTFBZndPQ0FpZ3BYYXdaN0tB akxOcFdqUlQ0RHNyemZxY0M1N01vemlWUXlLK1g5cW9RQTJ2MHBsVk5wUDANCkZMcWg1ZGtSWGlp T0xyeXI5YXVJTFVLeUxDTnlBZndMN2NGZTFZUlg3Vm5zSzV3Ly84WG0yNXRKNzRDWEM4UDANCmdh b1NxdkRxQ0tXVGo2aU4rUS9Qam9Ob2hXb0lLNzZ0aVpBV1Bqa2FIZXVGYnlwUGEyRysNCj1FcEph DQotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0NCg== From owner-svn-src-head@freebsd.org Thu May 3 21:37:47 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 78FC2FBBDBB; Thu, 3 May 2018 21:37:47 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 2EABB6A8D4; Thu, 3 May 2018 21:37:47 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2978925779; Thu, 3 May 2018 21:37:47 +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 w43LblSZ030899; Thu, 3 May 2018 21:37:47 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43LbkOT030891; Thu, 3 May 2018 21:37:46 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201805032137.w43LbkOT030891@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 3 May 2018 21:37:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333228 - in head/sys: amd64/amd64 i386/i386 kern sys X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: in head/sys: amd64/amd64 i386/i386 kern sys X-SVN-Commit-Revision: 333228 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 21:37:47 -0000 Author: kib Date: Thu May 3 21:37:46 2018 New Revision: 333228 URL: https://svnweb.freebsd.org/changeset/base/333228 Log: Implement support for ifuncs in the kernel linker. Required MD bits are only provided for x86. Reviewed by: jhb (previous version, as part of the larger patch) Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D13838 Modified: head/sys/amd64/amd64/elf_machdep.c head/sys/amd64/amd64/machdep.c head/sys/i386/i386/elf_machdep.c head/sys/i386/i386/machdep.c head/sys/kern/link_elf.c head/sys/kern/link_elf_obj.c head/sys/sys/linker.h Modified: head/sys/amd64/amd64/elf_machdep.c ============================================================================== --- head/sys/amd64/amd64/elf_machdep.c Thu May 3 20:43:39 2018 (r333227) +++ head/sys/amd64/amd64/elf_machdep.c Thu May 3 21:37:46 2018 (r333228) @@ -175,10 +175,13 @@ elf64_dump_thread(struct thread *td, void *dst, size_t *off = len; } +#define ERI_LOCAL 0x0001 +#define ERI_ONLYIFUNC 0x0002 + /* Process one elf relocation with addend. */ static int elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, - int type, int local, elf_lookup_fn lookup) + int type, elf_lookup_fn lookup, int flags) { Elf64_Addr *where, val; Elf32_Addr *where32, val32; @@ -218,6 +221,9 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas panic("unknown reloc type %d\n", type); } + if (((flags & ERI_ONLYIFUNC) == 0) ^ (rtype != R_X86_64_IRELATIVE)) + return (0); + switch (rtype) { case R_X86_64_NONE: /* none */ break; @@ -278,6 +284,13 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas *where = val; break; + case R_X86_64_IRELATIVE: + addr = relocbase + addend; + val = ((Elf64_Addr (*)(void))addr)(); + if (*where != val) + *where = val; + break; + default: printf("kldload: unexpected relocation type %ld\n", rtype); @@ -287,11 +300,20 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas } int +elf_reloc_ifunc(linker_file_t lf, Elf_Addr relocbase, const void *data, + int type, elf_lookup_fn lookup) +{ + + return (elf_reloc_internal(lf, relocbase, data, type, lookup, + ERI_ONLYIFUNC)); +} + +int elf_reloc(linker_file_t lf, Elf_Addr relocbase, const void *data, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 0, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, lookup, 0)); } int @@ -299,7 +321,8 @@ elf_reloc_local(linker_file_t lf, Elf_Addr relocbase, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 1, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, lookup, + ERI_LOCAL)); } int Modified: head/sys/amd64/amd64/machdep.c ============================================================================== --- head/sys/amd64/amd64/machdep.c Thu May 3 20:43:39 2018 (r333227) +++ head/sys/amd64/amd64/machdep.c Thu May 3 21:37:46 2018 (r333228) @@ -1566,6 +1566,8 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) identify_cpu1(); identify_hypervisor(); + /* link_elf_ireloc(kmdp); */ + /* Init basic tunables, hz etc */ init_param1(); @@ -1744,6 +1746,7 @@ hammer_time(u_int64_t modulep, u_int64_t physfree) cninit(); amd64_kdb_init(); } + link_elf_ireloc(kmdp); getmemsize(kmdp, physfree); init_param2(physmem); Modified: head/sys/i386/i386/elf_machdep.c ============================================================================== --- head/sys/i386/i386/elf_machdep.c Thu May 3 20:43:39 2018 (r333227) +++ head/sys/i386/i386/elf_machdep.c Thu May 3 21:37:46 2018 (r333228) @@ -159,10 +159,13 @@ elf32_dump_thread(struct thread *td, void *dst, size_t *off = len; } +#define ERI_LOCAL 0x0001 +#define ERI_ONLYIFUNC 0x0002 + /* Process one elf relocation with addend. */ static int elf_reloc_internal(linker_file_t lf, Elf_Addr relocbase, const void *data, - int type, int local, elf_lookup_fn lookup) + int type, elf_lookup_fn lookup, int flags) { Elf_Addr *where; Elf_Addr addr; @@ -191,7 +194,10 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas panic("unknown reloc type %d\n", type); } - if (local) { + if (((flags & ERI_ONLYIFUNC) == 0) ^ (rtype != R_386_IRELATIVE)) + return (0); + + if ((flags & ERI_LOCAL) != 0) { if (rtype == R_386_RELATIVE) { /* A + B */ addr = elf_relocaddr(lf, relocbase + addend); if (*where != addr) @@ -243,6 +249,12 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas case R_386_RELATIVE: break; + case R_386_IRELATIVE: + addr = relocbase + addend; + addr = ((Elf_Addr (*)(void))addr)(); + if (*where != addr) + *where = addr; + break; default: printf("kldload: unexpected relocation type %d\n", rtype); @@ -252,11 +264,20 @@ elf_reloc_internal(linker_file_t lf, Elf_Addr relocbas } int +elf_reloc_ifunc(linker_file_t lf, Elf_Addr relocbase, const void *data, + int type, elf_lookup_fn lookup) +{ + + return (elf_reloc_internal(lf, relocbase, data, type, lookup, + ERI_ONLYIFUNC)); +} + +int elf_reloc(linker_file_t lf, Elf_Addr relocbase, const void *data, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 0, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, lookup, 0)); } int @@ -264,7 +285,8 @@ elf_reloc_local(linker_file_t lf, Elf_Addr relocbase, int type, elf_lookup_fn lookup) { - return (elf_reloc_internal(lf, relocbase, data, type, 1, lookup)); + return (elf_reloc_internal(lf, relocbase, data, type, lookup, + ERI_LOCAL)); } int Modified: head/sys/i386/i386/machdep.c ============================================================================== --- head/sys/i386/i386/machdep.c Thu May 3 20:43:39 2018 (r333227) +++ head/sys/i386/i386/machdep.c Thu May 3 21:37:46 2018 (r333228) @@ -2302,6 +2302,7 @@ init386(int first) int gsel_tss, metadata_missing, x, pa; struct pcpu *pc; struct xstate_hdr *xhdr; + caddr_t kmdp; vm_offset_t addend; int late_console; @@ -2440,6 +2441,9 @@ init386(int first) cninit(); i386_kdb_init(); } + + kmdp = preload_search_by_type("elf kernel"); + link_elf_ireloc(kmdp); vm86_initialize(); getmemsize(first); Modified: head/sys/kern/link_elf.c ============================================================================== --- head/sys/kern/link_elf.c Thu May 3 20:43:39 2018 (r333227) +++ head/sys/kern/link_elf.c Thu May 3 21:37:46 2018 (r333228) @@ -190,6 +190,9 @@ static struct linker_class link_elf_class = { static int parse_dynamic(elf_file_t); static int relocate_file(elf_file_t); +static int relocate_file1(elf_file_t ef, int (*elf_reloc_func)( + linker_file_t lf, Elf_Addr relocbase, const void *data, + int type, elf_lookup_fn lookup)); static int link_elf_preload_parse_symbols(elf_file_t); static struct elf_set_head set_pcpu_list; @@ -1182,7 +1185,8 @@ symbol_name(elf_file_t ef, Elf_Size r_info) } static int -relocate_file(elf_file_t ef) +relocate_file1(elf_file_t ef, int (*elf_reloc_func)(linker_file_t lf, + Elf_Addr relocbase, const void *data, int type, elf_lookup_fn lookup)) { const Elf_Rel *rellim; const Elf_Rel *rel; @@ -1196,7 +1200,7 @@ relocate_file(elf_file_t ef) rellim = (const Elf_Rel *) ((const char *)ef->rel + ef->relsize); while (rel < rellim) { - if (elf_reloc(&ef->lf, (Elf_Addr)ef->address, rel, + if (elf_reloc_func(&ef->lf, (Elf_Addr)ef->address, rel, ELF_RELOC_REL, elf_lookup)) { symname = symbol_name(ef, rel->r_info); printf("link_elf: symbol %s undefined\n", symname); @@ -1212,7 +1216,7 @@ relocate_file(elf_file_t ef) relalim = (const Elf_Rela *) ((const char *)ef->rela + ef->relasize); while (rela < relalim) { - if (elf_reloc(&ef->lf, (Elf_Addr)ef->address, rela, + if (elf_reloc_func(&ef->lf, (Elf_Addr)ef->address, rela, ELF_RELOC_RELA, elf_lookup)) { symname = symbol_name(ef, rela->r_info); printf("link_elf: symbol %s undefined\n", @@ -1229,7 +1233,7 @@ relocate_file(elf_file_t ef) rellim = (const Elf_Rel *) ((const char *)ef->pltrel + ef->pltrelsize); while (rel < rellim) { - if (elf_reloc(&ef->lf, (Elf_Addr)ef->address, rel, + if (elf_reloc_func(&ef->lf, (Elf_Addr)ef->address, rel, ELF_RELOC_REL, elf_lookup)) { symname = symbol_name(ef, rel->r_info); printf("link_elf: symbol %s undefined\n", @@ -1246,7 +1250,7 @@ relocate_file(elf_file_t ef) relalim = (const Elf_Rela *) ((const char *)ef->pltrela + ef->pltrelasize); while (rela < relalim) { - if (elf_reloc(&ef->lf, (Elf_Addr)ef->address, rela, + if (elf_reloc_func(&ef->lf, (Elf_Addr)ef->address, rela, ELF_RELOC_RELA, elf_lookup)) { symname = symbol_name(ef, rela->r_info); printf("link_elf: symbol %s undefined\n", @@ -1260,6 +1264,19 @@ relocate_file(elf_file_t ef) return (0); } +static int +relocate_file(elf_file_t ef) +{ + int e; + + e = relocate_file1(ef, elf_reloc); +#if defined(__i386__) || defined(__amd64__) + if (e == 0) + e = relocate_file1(ef, elf_reloc_ifunc); +#endif + return (e); +} + /* * Hash function for symbol table lookup. Don't even think about changing * this. It is specified by the System V ABI. @@ -1317,7 +1334,8 @@ link_elf_lookup_symbol(linker_file_t lf, const char* n if (strcmp(name, strp) == 0) { if (symp->st_shndx != SHN_UNDEF || (symp->st_value != 0 && - ELF_ST_TYPE(symp->st_info) == STT_FUNC)) { + (ELF_ST_TYPE(symp->st_info) == STT_FUNC || + ELF_ST_TYPE(symp->st_info) == STT_GNU_IFUNC))) { *sym = (c_linker_sym_t) symp; return (0); } @@ -1337,7 +1355,8 @@ link_elf_lookup_symbol(linker_file_t lf, const char* n if (strcmp(name, strp) == 0) { if (symp->st_shndx != SHN_UNDEF || (symp->st_value != 0 && - ELF_ST_TYPE(symp->st_info) == STT_FUNC)) { + (ELF_ST_TYPE(symp->st_info) == STT_FUNC || + ELF_ST_TYPE(symp->st_info) == STT_GNU_IFUNC))) { *sym = (c_linker_sym_t) symp; return (0); } @@ -1352,12 +1371,18 @@ static int link_elf_symbol_values(linker_file_t lf, c_linker_sym_t sym, linker_symval_t *symval) { - elf_file_t ef = (elf_file_t) lf; - const Elf_Sym* es = (const Elf_Sym*) sym; + elf_file_t ef; + const Elf_Sym *es; + caddr_t val; + ef = (elf_file_t)lf; + es = (const Elf_Sym *)sym; if (es >= ef->symtab && es < (ef->symtab + ef->nchains)) { symval->name = ef->strtab + es->st_name; - symval->value = (caddr_t) ef->address + es->st_value; + val = (caddr_t)ef->address + es->st_value; + if (ELF_ST_TYPE(es->st_info) == STT_GNU_IFUNC) + val = ((caddr_t (*)(void))val)(); + symval->value = val; symval->size = es->st_size; return (0); } @@ -1365,7 +1390,10 @@ link_elf_symbol_values(linker_file_t lf, c_linker_sym_ return (ENOENT); if (es >= ef->ddbsymtab && es < (ef->ddbsymtab + ef->ddbsymcnt)) { symval->name = ef->ddbstrtab + es->st_name; - symval->value = (caddr_t) ef->address + es->st_value; + val = (caddr_t)ef->address + es->st_value; + if (ELF_ST_TYPE(es->st_info) == STT_GNU_IFUNC) + val = ((caddr_t (*)(void))val)(); + symval->value = val; symval->size = es->st_size; return (0); } @@ -1475,7 +1503,8 @@ link_elf_each_function_name(linker_file_t file, /* Exhaustive search */ for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) { if (symp->st_value != 0 && - ELF_ST_TYPE(symp->st_info) == STT_FUNC) { + (ELF_ST_TYPE(symp->st_info) == STT_FUNC || + ELF_ST_TYPE(symp->st_info) == STT_GNU_IFUNC)) { error = callback(ef->ddbstrtab + symp->st_name, opaque); if (error != 0) return (error); @@ -1496,7 +1525,8 @@ link_elf_each_function_nameval(linker_file_t file, /* Exhaustive search */ for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) { if (symp->st_value != 0 && - ELF_ST_TYPE(symp->st_info) == STT_FUNC) { + (ELF_ST_TYPE(symp->st_info) == STT_FUNC || + ELF_ST_TYPE(symp->st_info) == STT_GNU_IFUNC)) { error = link_elf_symbol_values(file, (c_linker_sym_t) symp, &symval); if (error != 0) @@ -1655,3 +1685,21 @@ link_elf_strtab_get(linker_file_t lf, caddr_t *strtab) return (ef->ddbstrcnt); } + +#if defined(__i386__) || defined(__amd64__) +void +link_elf_ireloc(caddr_t kmdp) +{ + struct elf_file eff; + elf_file_t ef; + + ef = &eff; + bzero(ef, sizeof(*ef)); + ef->modptr = kmdp; + ef->dynamic = (Elf_Dyn *)&_DYNAMIC; + parse_dynamic(ef); + ef->address = 0; + link_elf_preload_parse_symbols(ef); + relocate_file1(ef, elf_reloc_ifunc); +} +#endif Modified: head/sys/kern/link_elf_obj.c ============================================================================== --- head/sys/kern/link_elf_obj.c Thu May 3 20:43:39 2018 (r333227) +++ head/sys/kern/link_elf_obj.c Thu May 3 21:37:46 2018 (r333228) @@ -1201,12 +1201,19 @@ static int link_elf_symbol_values(linker_file_t lf, c_linker_sym_t sym, linker_symval_t *symval) { - elf_file_t ef = (elf_file_t) lf; - const Elf_Sym *es = (const Elf_Sym*) sym; + elf_file_t ef; + const Elf_Sym *es; + caddr_t val; + ef = (elf_file_t) lf; + es = (const Elf_Sym*) sym; + val = (caddr_t)es->st_value; if (es >= ef->ddbsymtab && es < (ef->ddbsymtab + ef->ddbsymcnt)) { symval->name = ef->ddbstrtab + es->st_name; - symval->value = (caddr_t)es->st_value; + val = (caddr_t)es->st_value; + if (ELF_ST_TYPE(es->st_info) == STT_GNU_IFUNC) + val = ((caddr_t (*)(void))val)(); + symval->value = val; symval->size = es->st_size; return 0; } @@ -1291,7 +1298,8 @@ link_elf_each_function_name(linker_file_t file, /* Exhaustive search */ for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) { if (symp->st_value != 0 && - ELF_ST_TYPE(symp->st_info) == STT_FUNC) { + (ELF_ST_TYPE(symp->st_info) == STT_FUNC || + ELF_ST_TYPE(symp->st_info) == STT_GNU_IFUNC)) { error = callback(ef->ddbstrtab + symp->st_name, opaque); if (error) return (error); @@ -1312,8 +1320,10 @@ link_elf_each_function_nameval(linker_file_t file, /* Exhaustive search */ for (i = 0, symp = ef->ddbsymtab; i < ef->ddbsymcnt; i++, symp++) { if (symp->st_value != 0 && - ELF_ST_TYPE(symp->st_info) == STT_FUNC) { - error = link_elf_symbol_values(file, (c_linker_sym_t) symp, &symval); + (ELF_ST_TYPE(symp->st_info) == STT_FUNC || + ELF_ST_TYPE(symp->st_info) == STT_GNU_IFUNC)) { + error = link_elf_symbol_values(file, + (c_linker_sym_t)symp, &symval); if (error) return (error); error = callback(file, i, &symval, opaque); Modified: head/sys/sys/linker.h ============================================================================== --- head/sys/sys/linker.h Thu May 3 20:43:39 2018 (r333227) +++ head/sys/sys/linker.h Thu May 3 21:37:46 2018 (r333228) @@ -272,11 +272,16 @@ extern int kld_debug; typedef int elf_lookup_fn(linker_file_t, Elf_Size, int, Elf_Addr *); /* Support functions */ -int elf_reloc(linker_file_t _lf, Elf_Addr base, const void *_rel, int _type, elf_lookup_fn _lu); -int elf_reloc_local(linker_file_t _lf, Elf_Addr base, const void *_rel, int _type, elf_lookup_fn _lu); +int elf_reloc(linker_file_t _lf, Elf_Addr base, const void *_rel, + int _type, elf_lookup_fn _lu); +int elf_reloc_ifunc(linker_file_t _lf, Elf_Addr base, const void *_rel, + int _type, elf_lookup_fn _lu); +int elf_reloc_local(linker_file_t _lf, Elf_Addr base, const void *_rel, + int _type, elf_lookup_fn _lu); Elf_Addr elf_relocaddr(linker_file_t _lf, Elf_Addr addr); const Elf_Sym *elf_get_sym(linker_file_t _lf, Elf_Size _symidx); const char *elf_get_symname(linker_file_t _lf, Elf_Size _symidx); +void link_elf_ireloc(caddr_t kmdp); typedef struct linker_ctf { const uint8_t *ctftab; /* Decompressed CTF data. */ From owner-svn-src-head@freebsd.org Thu May 3 21:46:00 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 62123FBD436; Thu, 3 May 2018 21:46:00 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 012DF6B137; Thu, 3 May 2018 21:46:00 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EDF472595A; Thu, 3 May 2018 21:45:59 +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 w43Ljx6u036131; Thu, 3 May 2018 21:45:59 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43Ljx8w036130; Thu, 3 May 2018 21:45:59 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201805032145.w43Ljx8w036130@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Thu, 3 May 2018 21:45:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333229 - head/sys/x86/include X-SVN-Group: head X-SVN-Commit-Author: kib X-SVN-Commit-Paths: head/sys/x86/include X-SVN-Commit-Revision: 333229 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 21:46:00 -0000 Author: kib Date: Thu May 3 21:45:59 2018 New Revision: 333229 URL: https://svnweb.freebsd.org/changeset/base/333229 Log: Add helper macros to hide some boring repeatable ceremonies to define ifuncs on x86. Also keep helpers to define 'pseudo-ifuncs' which are emulated by the indirect jmp. Reviewed by: jhb (previous version, as part of the larger patch) Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D13838 Added: head/sys/x86/include/ifunc.h (contents, props changed) Added: head/sys/x86/include/ifunc.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/x86/include/ifunc.h Thu May 3 21:45:59 2018 (r333229) @@ -0,0 +1,58 @@ +/*- + * Copyright (c) 2015, 2017 The FreeBSD Foundation + * All rights reserved. + * + * This software was developed by Konstantin Belousov + * under sponsorship from the FreeBSD Foundation. + * + * 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 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 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. + * + * $FreeBSD$ + */ + +#ifndef __X86_IFUNC_H +#define __X86_IFUNC_H + +#define DECLARE_LIFUNC(ret_type, name, args) \ +ret_type name args + +#define DEFINE_LIFUNC(scope, selector_qual, ret_type, name, args) \ +__asm__ (scope "\t" #name "\n" \ + "\t.type\t" #name ",@function\n" \ + #name ":\n" \ + "\tjmp *" #name "_selector\n" \ + "\t.size\t" #name ",\t. - "#name); \ +selector_qual ret_type (*name##_selector)args __used; \ +DECLARE_LIFUNC(ret_type, name, args) + +#define DEFINE_STATIC_LIFUNC(ret_type, name, args) \ + DEFINE_LIFUNC(".local", static, ret_type, name, args) + +#define DEFINE_GLOBAL_LIFUNC(ret_type, name, args) \ + DEFINE_LIFUNC(".globl", , ret_type, name, args) + +#define DEFINE_IFUNC(qual, ret_type, name, args, resolver_qual) \ + resolver_qual ret_type (*name##_resolver(void))args __used; \ + qual ret_type name args __attribute__((ifunc(#name "_resolver"))); \ + resolver_qual ret_type (*name##_resolver(void))args + +#endif From owner-svn-src-head@freebsd.org Thu May 3 22:51:45 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 03070FBEDAF; Thu, 3 May 2018 22:51:45 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id AA1E77A61C; Thu, 3 May 2018 22:51:44 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A534D26485; Thu, 3 May 2018 22:51:44 +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 w43Mpihh067396; Thu, 3 May 2018 22:51:44 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w43MpihV067395; Thu, 3 May 2018 22:51:44 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <201805032251.w43MpihV067395@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Thu, 3 May 2018 22:51:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333230 - head/sys/dev/pci X-SVN-Group: head X-SVN-Commit-Author: grehan X-SVN-Commit-Paths: head/sys/dev/pci X-SVN-Commit-Revision: 333230 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 03 May 2018 22:51:45 -0000 Author: grehan Date: Thu May 3 22:51:44 2018 New Revision: 333230 URL: https://svnweb.freebsd.org/changeset/base/333230 Log: Allow PCI VGA devices to be detached. GPUs often have a VGA PCI class code and are probed/attached by the VGA driver. Allow them to be detached so they can be presented as passthru devices to VM guests. Submitted by: mmacy Reviewed by: jhb, imp, rgrimes MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D15269 Modified: head/sys/dev/pci/vga_pci.c Modified: head/sys/dev/pci/vga_pci.c ============================================================================== --- head/sys/dev/pci/vga_pci.c Thu May 3 21:45:59 2018 (r333229) +++ head/sys/dev/pci/vga_pci.c Thu May 3 22:51:44 2018 (r333230) @@ -283,6 +283,17 @@ vga_pci_suspend(device_t dev) } static int +vga_pci_detach(device_t dev) +{ + int error; + + error = bus_generic_detach(dev); + if (error == 0) + error = device_delete_children(dev); + return (error); +} + +static int vga_pci_resume(device_t dev) { @@ -620,6 +631,7 @@ static device_method_t vga_pci_methods[] = { DEVMETHOD(device_attach, vga_pci_attach), DEVMETHOD(device_shutdown, bus_generic_shutdown), DEVMETHOD(device_suspend, vga_pci_suspend), + DEVMETHOD(device_detach, vga_pci_detach), DEVMETHOD(device_resume, vga_pci_resume), /* Bus interface */ From owner-svn-src-head@freebsd.org Fri May 4 00:34:29 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DDC36FC16D9; Fri, 4 May 2018 00:34:28 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9052371FDC; Fri, 4 May 2018 00:34:28 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 6D0B027553; Fri, 4 May 2018 00:34:28 +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 w440YS47023921; Fri, 4 May 2018 00:34:28 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w440YRJi023915; Fri, 4 May 2018 00:34:27 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201805040034.w440YRJi023915@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Fri, 4 May 2018 00:34:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333233 - in head/sys: geom/part sys/disk X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: in head/sys: geom/part sys/disk X-SVN-Commit-Revision: 333233 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 00:34:29 -0000 Author: emaste Date: Fri May 4 00:34:27 2018 New Revision: 333233 URL: https://svnweb.freebsd.org/changeset/base/333233 Log: gpart: add fat32lba MBR partition type FAT32 partition with LBA addressing. Reviewed by: marcel MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D15266 Modified: head/sys/geom/part/g_part.c head/sys/geom/part/g_part.h head/sys/geom/part/g_part_ebr.c head/sys/geom/part/g_part_ldm.c head/sys/geom/part/g_part_mbr.c head/sys/sys/disk/mbr.h Modified: head/sys/geom/part/g_part.c ============================================================================== --- head/sys/geom/part/g_part.c Thu May 3 23:59:39 2018 (r333232) +++ head/sys/geom/part/g_part.c Fri May 4 00:34:27 2018 (r333233) @@ -98,6 +98,7 @@ struct g_part_alias_list { { "efi", G_PART_ALIAS_EFI }, { "fat16", G_PART_ALIAS_MS_FAT16 }, { "fat32", G_PART_ALIAS_MS_FAT32 }, + { "fat32lba", G_PART_ALIAS_MS_FAT32LBA }, { "freebsd", G_PART_ALIAS_FREEBSD }, { "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT }, { "freebsd-nandfs", G_PART_ALIAS_FREEBSD_NANDFS }, Modified: head/sys/geom/part/g_part.h ============================================================================== --- head/sys/geom/part/g_part.h Thu May 3 23:59:39 2018 (r333232) +++ head/sys/geom/part/g_part.h Fri May 4 00:34:27 2018 (r333233) @@ -78,6 +78,7 @@ enum g_part_alias { G_PART_ALIAS_MS_BASIC_DATA, /* A Microsoft Data part. entry. */ G_PART_ALIAS_MS_FAT16, /* A Microsoft FAT16 partition entry. */ G_PART_ALIAS_MS_FAT32, /* A Microsoft FAT32 partition entry. */ + G_PART_ALIAS_MS_FAT32LBA, /* A Microsoft FAT32 LBA partition entry */ G_PART_ALIAS_MS_LDM_DATA, /* A Microsoft LDM Data part. entry. */ G_PART_ALIAS_MS_LDM_METADATA, /* A Microsoft LDM Metadata entry. */ G_PART_ALIAS_MS_NTFS, /* A Microsoft NTFS partition entry */ Modified: head/sys/geom/part/g_part_ebr.c ============================================================================== --- head/sys/geom/part/g_part_ebr.c Thu May 3 23:59:39 2018 (r333232) +++ head/sys/geom/part/g_part_ebr.c Fri May 4 00:34:27 2018 (r333233) @@ -137,6 +137,7 @@ static struct g_part_ebr_alias { { DOSPTYP_386BSD, G_PART_ALIAS_FREEBSD }, { DOSPTYP_NTFS, G_PART_ALIAS_MS_NTFS }, { DOSPTYP_FAT32, G_PART_ALIAS_MS_FAT32 }, + { DOSPTYP_FAT32LBA, G_PART_ALIAS_MS_FAT32LBA }, { DOSPTYP_LINSWP, G_PART_ALIAS_LINUX_SWAP }, { DOSPTYP_LINUX, G_PART_ALIAS_LINUX_DATA }, { DOSPTYP_LINLVM, G_PART_ALIAS_LINUX_LVM }, Modified: head/sys/geom/part/g_part_ldm.c ============================================================================== --- head/sys/geom/part/g_part_ldm.c Thu May 3 23:59:39 2018 (r333232) +++ head/sys/geom/part/g_part_ldm.c Fri May 4 00:34:27 2018 (r333233) @@ -371,6 +371,7 @@ static struct g_part_ldm_alias { } ldm_alias_match[] = { { DOSPTYP_NTFS, G_PART_ALIAS_MS_NTFS }, { DOSPTYP_FAT32, G_PART_ALIAS_MS_FAT32 }, + { DOSPTYP_FAT32LBA, G_PART_ALIAS_MS_FAT32LBA }, { DOSPTYP_386BSD, G_PART_ALIAS_FREEBSD }, { DOSPTYP_LDM, G_PART_ALIAS_MS_LDM_DATA }, { DOSPTYP_LINSWP, G_PART_ALIAS_LINUX_SWAP }, Modified: head/sys/geom/part/g_part_mbr.c ============================================================================== --- head/sys/geom/part/g_part_mbr.c Thu May 3 23:59:39 2018 (r333232) +++ head/sys/geom/part/g_part_mbr.c Fri May 4 00:34:27 2018 (r333233) @@ -132,6 +132,7 @@ static struct g_part_mbr_alias { { DOSPTYP_NTFS, G_PART_ALIAS_MS_NTFS }, { DOSPTYP_FAT16, G_PART_ALIAS_MS_FAT16 }, { DOSPTYP_FAT32, G_PART_ALIAS_MS_FAT32 }, + { DOSPTYP_FAT32LBA, G_PART_ALIAS_MS_FAT32LBA }, { DOSPTYP_EXTLBA, G_PART_ALIAS_EBR }, { DOSPTYP_LDM, G_PART_ALIAS_MS_LDM_DATA }, { DOSPTYP_LINSWP, G_PART_ALIAS_LINUX_SWAP }, Modified: head/sys/sys/disk/mbr.h ============================================================================== --- head/sys/sys/disk/mbr.h Thu May 3 23:59:39 2018 (r333232) +++ head/sys/sys/disk/mbr.h Fri May 4 00:34:27 2018 (r333233) @@ -46,6 +46,7 @@ #define DOSPTYP_FAT16 0x06 /* FAT16 partition */ #define DOSPTYP_NTFS 0x07 /* NTFS partition */ #define DOSPTYP_FAT32 0x0b /* FAT32 partition */ +#define DOSPTYP_FAT32LBA 0x0c /* FAT32 with LBA partition */ #define DOSPTYP_EXTLBA 0x0f /* DOS extended partition */ #define DOSPTYP_PPCBOOT 0x41 /* PReP/CHRP boot partition */ #define DOSPTYP_LDM 0x42 /* Win2k dynamic extended partition */ From owner-svn-src-head@freebsd.org Fri May 4 00:56:42 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F15F2FC1EE1; Fri, 4 May 2018 00:56:41 +0000 (UTC) (envelope-from emaste@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9DBA376A5B; Fri, 4 May 2018 00:56:41 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 94E6227885; Fri, 4 May 2018 00:56:41 +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 w440uf3R034087; Fri, 4 May 2018 00:56:41 GMT (envelope-from emaste@FreeBSD.org) Received: (from emaste@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w440ufvq034086; Fri, 4 May 2018 00:56:41 GMT (envelope-from emaste@FreeBSD.org) Message-Id: <201805040056.w440ufvq034086@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: emaste set sender to emaste@FreeBSD.org using -f From: Ed Maste Date: Fri, 4 May 2018 00:56:41 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333234 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Group: head X-SVN-Commit-Author: emaste X-SVN-Commit-Paths: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-SVN-Commit-Revision: 333234 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 00:56:42 -0000 Author: emaste Date: Fri May 4 00:56:41 2018 New Revision: 333234 URL: https://svnweb.freebsd.org/changeset/base/333234 Log: zfs_ioctl: avoid out-of-bound read admbugs: 796 Submitted by: Domagoj Stolfa Reported by: Ilja Van Sprundel Reviewed by: avg MFC after: 1 day Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Fri May 4 00:34:27 2018 (r333233) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c Fri May 4 00:56:41 2018 (r333234) @@ -6440,6 +6440,10 @@ zfsdev_ioctl(struct cdev *dev, u_long zcmd, caddr_t ar cflag = ZFS_CMD_COMPAT_V28; break; case sizeof(zfs_cmd_v15_t): + if (cmd >= sizeof(zfs_ioctl_v15_to_v28) / + sizeof(zfs_ioctl_v15_to_v28[0])) + return (EINVAL); + cflag = ZFS_CMD_COMPAT_V15; vecnum = zfs_ioctl_v15_to_v28[cmd]; From owner-svn-src-head@freebsd.org Fri May 4 01:36:50 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 47838FC2D88; Fri, 4 May 2018 01:36:50 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E9BF07E488; Fri, 4 May 2018 01:36:49 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id DE6DA27EFC; Fri, 4 May 2018 01:36:49 +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 w441an1c054213; Fri, 4 May 2018 01:36:49 GMT (envelope-from grehan@FreeBSD.org) Received: (from grehan@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w441anGr054212; Fri, 4 May 2018 01:36:49 GMT (envelope-from grehan@FreeBSD.org) Message-Id: <201805040136.w441anGr054212@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: grehan set sender to grehan@FreeBSD.org using -f From: Peter Grehan Date: Fri, 4 May 2018 01:36:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333235 - head/usr.sbin/bhyve X-SVN-Group: head X-SVN-Commit-Author: grehan X-SVN-Commit-Paths: head/usr.sbin/bhyve X-SVN-Commit-Revision: 333235 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 01:36:50 -0000 Author: grehan Date: Fri May 4 01:36:49 2018 New Revision: 333235 URL: https://svnweb.freebsd.org/changeset/base/333235 Log: Allow arbitrary numbers of columns for VNC server screen resolution. The prior code only allowed multiples of 32 for the numbers of columns. Remove this restriction to allow a forthcoming UEFI firmware update to allow arbitrary x,y resolutions. (the code for handling rows already supported non mult-32 values) Reviewed by: Leon Dang (original author) MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D15274 Modified: head/usr.sbin/bhyve/rfb.c Modified: head/usr.sbin/bhyve/rfb.c ============================================================================== --- head/usr.sbin/bhyve/rfb.c Fri May 4 00:56:41 2018 (r333234) +++ head/usr.sbin/bhyve/rfb.c Fri May 4 01:36:49 2018 (r333235) @@ -541,40 +541,23 @@ rfb_send_screen(struct rfb_softc *rc, int cfd, int all } for (x = 0; x < xcells; x++) { + if (x == (xcells - 1) && rem_x > 0) + cellwidth = rem_x; + else + cellwidth = PIX_PER_CELL; + if (rc->hw_crc) crc_p[x] = fast_crc32(p, - PIX_PER_CELL * sizeof(uint32_t), + cellwidth * sizeof(uint32_t), crc_p[x]); else crc_p[x] = (uint32_t)crc32(crc_p[x], (Bytef *)p, - PIX_PER_CELL * sizeof(uint32_t)); + cellwidth * sizeof(uint32_t)); - p += PIX_PER_CELL; + p += cellwidth; /* check for crc delta if last row in cell */ - if ((y & PIXCELL_MASK) == PIXCELL_MASK || y == (h-1)) { - if (orig_crc[x] != crc_p[x]) { - orig_crc[x] = crc_p[x]; - crc_p[x] = 1; - changes++; - } else { - crc_p[x] = 0; - } - } - } - - if (rem_x) { - if (rc->hw_crc) - crc_p[x] = fast_crc32(p, - rem_x * sizeof(uint32_t), - crc_p[x]); - else - crc_p[x] = (uint32_t)crc32(crc_p[x], - (Bytef *)p, - rem_x * sizeof(uint32_t)); - p += rem_x; - if ((y & PIXCELL_MASK) == PIXCELL_MASK || y == (h-1)) { if (orig_crc[x] != crc_p[x]) { orig_crc[x] = crc_p[x]; From owner-svn-src-head@freebsd.org Fri May 4 03:13:27 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 064A9FC5101; Fri, 4 May 2018 03:13:27 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A8142724DB; Fri, 4 May 2018 03:13:26 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id A31461018; Fri, 4 May 2018 03:13:26 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w443DQMD004810; Fri, 4 May 2018 03:13:26 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w443DQpP004804; Fri, 4 May 2018 03:13:26 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805040313.w443DQpP004804@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 4 May 2018 03:13:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333236 - in head: share/mk tools/build/options usr.bin/grep usr.bin/grep/regex X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: in head: share/mk tools/build/options usr.bin/grep usr.bin/grep/regex X-SVN-Commit-Revision: 333236 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 03:13:27 -0000 Author: kevans Date: Fri May 4 03:13:25 2018 New Revision: 333236 URL: https://svnweb.freebsd.org/changeset/base/333236 Log: bsdgrep: annihilate our in-tree TRE, previously disabled by default It was an old TRE that had plenty of bugs and no performance gain over regex(3). I disabled it by default in r323615, and there was some confusion about what the knob does- likely due to poor naming on my part- to the tune of "well, it sounds like it should speed things up" (mentioned by multiple people). To compound this, I have no intention of maintaining a second regex implementation. If someone would like to step up and volunteer to maintain a lean-and-mean implementation for grep, this is OK, but we have very few volunteers to maintain even our primary regex implementation. Deleted: head/tools/build/options/WITHOUT_BSD_GREP_FASTMATCH head/tools/build/options/WITH_BSD_GREP_FASTMATCH head/usr.bin/grep/regex/ Modified: head/share/mk/bsd.prog.mk head/share/mk/src.opts.mk head/usr.bin/grep/Makefile head/usr.bin/grep/grep.c head/usr.bin/grep/grep.h head/usr.bin/grep/util.c Modified: head/share/mk/bsd.prog.mk ============================================================================== --- head/share/mk/bsd.prog.mk Fri May 4 01:36:49 2018 (r333235) +++ head/share/mk/bsd.prog.mk Fri May 4 03:13:25 2018 (r333236) @@ -271,6 +271,7 @@ SCRIPTSGRP_${script:T}?= ${SCRIPTSGRP} SCRIPTSMODE_${script:T}?= ${SCRIPTSMODE} STAGE_AS_${script:T}= ${SCRIPTSDIR_${script:T}}/${SCRIPTSNAME_${script:T}} _scriptsinstall: _SCRIPTSINS_${script:T} + echo ">SFD>F>DF YES" _SCRIPTSINS_${script:T}: ${script} ${INSTALL} ${TAG_ARGS} -o ${SCRIPTSOWN_${.ALLSRC:T}} \ -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \ Modified: head/share/mk/src.opts.mk ============================================================================== --- head/share/mk/src.opts.mk Fri May 4 01:36:49 2018 (r333235) +++ head/share/mk/src.opts.mk Fri May 4 03:13:25 2018 (r333236) @@ -187,7 +187,6 @@ __DEFAULT_YES_OPTIONS = \ __DEFAULT_NO_OPTIONS = \ BSD_GREP \ - BSD_GREP_FASTMATCH \ CLANG_EXTRAS \ DTRACE_TESTS \ GNU_GREP_COMPAT \ Modified: head/usr.bin/grep/Makefile ============================================================================== --- head/usr.bin/grep/Makefile Fri May 4 01:36:49 2018 (r333235) +++ head/usr.bin/grep/Makefile Fri May 4 03:13:25 2018 (r333236) @@ -17,15 +17,6 @@ bsdgrep.1: grep.1 .endif SRCS= file.c grep.c queue.c util.c -.if ${MK_BSD_GREP_FASTMATCH} == "yes" -# Extra files ported backported for some regex improvements -.PATH: ${.CURDIR}/regex -SRCS+= fastmatch.c hashtable.c tre-compile.c tre-fastmatch.c -CFLAGS+=-I${.CURDIR}/regex -.else -CFLAGS+= -DWITHOUT_FASTMATCH -.endif - SCRIPTS= zgrep.sh LINKS= ${BINDIR}/zgrep ${BINDIR}/zfgrep \ ${BINDIR}/zgrep ${BINDIR}/zegrep \ Modified: head/usr.bin/grep/grep.c ============================================================================== --- head/usr.bin/grep/grep.c Fri May 4 01:36:49 2018 (r333235) +++ head/usr.bin/grep/grep.c Fri May 4 03:13:25 2018 (r333236) @@ -51,9 +51,6 @@ __FBSDID("$FreeBSD$"); #include #include -#ifndef WITHOUT_FASTMATCH -#include "fastmatch.h" -#endif #include "grep.h" #ifndef WITHOUT_NLS @@ -96,9 +93,6 @@ unsigned int patterns; static unsigned int pattern_sz; struct pat *pattern; regex_t *r_pattern; -#ifndef WITHOUT_FASTMATCH -fastmatch_t *fg_pattern; -#endif /* Filename exclusion/inclusion patterns */ unsigned int fpatterns, dpatterns; @@ -712,9 +706,6 @@ main(int argc, char *argv[]) usage(); } -#ifndef WITHOUT_FASTMATCH - fg_pattern = grep_calloc(patterns, sizeof(*fg_pattern)); -#endif r_pattern = grep_calloc(patterns, sizeof(*r_pattern)); /* Don't process any patterns if we have a blank one */ @@ -725,15 +716,6 @@ main(int argc, char *argv[]) #endif /* Check if cheating is allowed (always is for fgrep). */ for (i = 0; i < patterns; ++i) { -#ifndef WITHOUT_FASTMATCH - /* - * Attempt compilation with fastmatch regex and - * fallback to regex(3) if it fails. - */ - if (fastncomp(&fg_pattern[i], pattern[i].pat, - pattern[i].len, cflags) == 0) - continue; -#endif c = regcomp(&r_pattern[i], pattern[i].pat, cflags); if (c != 0) { regerror(c, &r_pattern[i], re_error, Modified: head/usr.bin/grep/grep.h ============================================================================== --- head/usr.bin/grep/grep.h Fri May 4 01:36:49 2018 (r333235) +++ head/usr.bin/grep/grep.h Fri May 4 03:13:25 2018 (r333236) @@ -38,10 +38,6 @@ #include #include -#ifndef WITHOUT_FASTMATCH -#include "fastmatch.h" -#endif - #ifdef WITHOUT_NLS #define getstr(n) errstr[n] #else @@ -131,9 +127,6 @@ extern unsigned int dpatterns, fpatterns, patterns; extern struct pat *pattern; extern struct epat *dpattern, *fpattern; extern regex_t *er_pattern, *r_pattern; -#ifndef WITHOUT_FASTMATCH -extern fastmatch_t *fg_pattern; -#endif /* For regex errors */ #define RE_ERROR_BUF 512 Modified: head/usr.bin/grep/util.c ============================================================================== --- head/usr.bin/grep/util.c Fri May 4 01:36:49 2018 (r333235) +++ head/usr.bin/grep/util.c Fri May 4 03:13:25 2018 (r333236) @@ -52,9 +52,6 @@ __FBSDID("$FreeBSD$"); #include #include -#ifndef WITHOUT_FASTMATCH -#include "fastmatch.h" -#endif #include "grep.h" static bool first_match = true; @@ -512,14 +509,8 @@ procline(struct parsec *pc) r = litexec(&pattern[i], pc->ln.dat, 1, &pmatch); else #endif -#ifndef WITHOUT_FASTMATCH - if (fg_pattern[i].pattern) - r = fastexec(&fg_pattern[i], - pc->ln.dat, 1, &pmatch, leflags); - else -#endif - r = regexec(&r_pattern[i], pc->ln.dat, 1, - &pmatch, leflags); + r = regexec(&r_pattern[i], pc->ln.dat, 1, &pmatch, + leflags); if (r != 0) continue; /* Check for full match */ @@ -527,11 +518,7 @@ procline(struct parsec *pc) (size_t)pmatch.rm_eo != pc->ln.len)) continue; /* Check for whole word match */ -#ifndef WITHOUT_FASTMATCH - if (wflag || fg_pattern[i].word) { -#else if (wflag) { -#endif wbegin = wend = L' '; if (pmatch.rm_so != 0 && sscanf(&pc->ln.dat[pmatch.rm_so - 1], From owner-svn-src-head@freebsd.org Fri May 4 03:17:45 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4041FFC5210; Fri, 4 May 2018 03:17:45 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id E5E72737E1; Fri, 4 May 2018 03:17:44 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E0FA11021; Fri, 4 May 2018 03:17:44 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w443HiJv004997; Fri, 4 May 2018 03:17:44 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w443HiWq004996; Fri, 4 May 2018 03:17:44 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805040317.w443HiWq004996@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 4 May 2018 03:17:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333237 - head/share/man/man5 X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/share/man/man5 X-SVN-Commit-Revision: 333237 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 03:17:45 -0000 Author: kevans Date: Fri May 4 03:17:44 2018 New Revision: 333237 URL: https://svnweb.freebsd.org/changeset/base/333237 Log: Regen src.conf(5) after r333236 Modified: head/share/man/man5/src.conf.5 Modified: head/share/man/man5/src.conf.5 ============================================================================== --- head/share/man/man5/src.conf.5 Fri May 4 03:13:25 2018 (r333236) +++ head/share/man/man5/src.conf.5 Fri May 4 03:17:44 2018 (r333237) @@ -1,6 +1,6 @@ .\" DO NOT EDIT-- this file is generated by tools/build/options/makeman. .\" $FreeBSD$ -.Dd March 7, 2018 +.Dd May 3, 2018 .Dt SRC.CONF 5 .Os .Sh NAME @@ -219,9 +219,6 @@ Set to not build the BSD licensed version of cpio base .Xr libarchive 3 . .It Va WITH_BSD_GREP Install BSD-licensed grep as '[ef]grep' instead of GNU grep. -.It Va WITH_BSD_GREP_FASTMATCH -Set this option to use the fastmatch implementation in -.Xr bsdgrep 1 . .It Va WITHOUT_BSNMP Set to not build or install .Xr bsnmpd 1 @@ -436,18 +433,12 @@ Set to not build CUSE-related programs and libraries. .It Va WITHOUT_CXGBETOOL Set to not build .Xr cxgbetool 8 -.It Va WITHOUT_MLX5TOOL -Set to not build -.Xr mlx5tool 8 .Pp This is a default setting on arm/arm, arm/armeb, arm/armv6, arm/armv7, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpcspe, riscv/riscv64 and riscv/riscv64sf. .It Va WITH_CXGBETOOL Set to build .Xr cxgbetool 8 -.It Va WITH_MLX5TOOL -Set to build -.Xr mlx5tool 8 .Pp This is a default setting on amd64/amd64, arm64/aarch64, i386/i386, powerpc/powerpc64 and sparc64/sparc64. @@ -965,12 +956,12 @@ library. Set to not build LLVM's lld linker. .Pp This is a default setting on -mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpc64, powerpc/powerpcspe, riscv/riscv64, riscv/riscv64sf and sparc64/sparc64. +riscv/riscv64, riscv/riscv64sf and sparc64/sparc64. .It Va WITH_LLD Set to build LLVM's lld linker. .Pp This is a default setting on -amd64/amd64, arm/arm, arm/armeb, arm/armv6, arm/armv7, arm64/aarch64 and i386/i386. +amd64/amd64, arm/arm, arm/armeb, arm/armv6, arm/armv7, 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_LLDB Set to not build the LLDB debugger. .Pp @@ -1022,12 +1013,12 @@ amd64/amd64, arm/arm, arm/armeb, arm/armv6, arm/armv7, Set to use GCC's stack unwinder (instead of LLVM's libunwind). .Pp This is a default setting on -arm/arm, arm/armeb, arm/armv6, arm/armv7, 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. +arm/arm, arm/armeb, arm/armv6, arm/armv7, powerpc/powerpc, powerpc/powerpc64, powerpc/powerpcspe and sparc64/sparc64. .It Va WITH_LLVM_LIBUNWIND Set to use LLVM's libunwind stack unwinder (instead of GCC's unwinder). .Pp This is a default setting on -amd64/amd64, arm64/aarch64, i386/i386, riscv/riscv64 and riscv/riscv64sf. +amd64/amd64, arm64/aarch64, i386/i386, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, riscv/riscv64 and riscv/riscv64sf. .It Va WITH_LOADER_FIREWIRE Enable firewire support in /boot/loader and /boot/zfsloader on x86. This option is a nop on all other platforms. @@ -1182,6 +1173,18 @@ This must be set in the environment, make command line .Pa /etc/src-env.conf , not .Pa /etc/src.conf . +.It Va WITHOUT_MLX5TOOL +Set to not build +.Xr mlx5tool 8 +.Pp +This is a default setting on +arm/arm, arm/armeb, arm/armv6, arm/armv7, mips/mipsel, mips/mips, mips/mips64el, mips/mips64, mips/mipsn32, mips/mipselhf, mips/mipshf, mips/mips64elhf, mips/mips64hf, powerpc/powerpc, powerpc/powerpcspe, riscv/riscv64 and riscv/riscv64sf. +.It Va WITH_MLX5TOOL +Set to build +.Xr mlx5tool 8 +.Pp +This is a default setting on +amd64/amd64, arm64/aarch64, i386/i386, powerpc/powerpc64 and sparc64/sparc64. .It Va WITH_NAND Set to build the NAND Flash components. .It Va WITHOUT_NDIS From owner-svn-src-head@freebsd.org Fri May 4 03:23:46 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 41476FC54BE; Fri, 4 May 2018 03:23:46 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DB5EB75232; Fri, 4 May 2018 03:23:45 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D0B0011BC; Fri, 4 May 2018 03:23:45 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w443NjG1009644; Fri, 4 May 2018 03:23:45 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w443Nj6u009643; Fri, 4 May 2018 03:23:45 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805040323.w443Nj6u009643@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 4 May 2018 03:23:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333238 - head/share/man/man9 X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/share/man/man9 X-SVN-Commit-Revision: 333238 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 03:23:46 -0000 Author: kevans Date: Fri May 4 03:23:45 2018 New Revision: 333238 URL: https://svnweb.freebsd.org/changeset/base/333238 Log: style(9): add some additional useful FILES/xref information Submitted by: 0mp Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D15196 Modified: head/share/man/man9/style.9 Modified: head/share/man/man9/style.9 ============================================================================== --- head/share/man/man9/style.9 Fri May 4 03:17:44 2018 (r333237) +++ head/share/man/man9/style.9 Fri May 4 03:23:45 2018 (r333238) @@ -404,8 +404,7 @@ When convention requires a make its name match the struct tag. Avoid typedefs ending in .Dq Li _t , -except as specified in Standard C or by -.Tn POSIX . +except as specified in Standard C or by POSIX. .Bd -literal /* Make the structure name match the typedef. */ typedef struct bar { @@ -861,11 +860,25 @@ Whenever possible, code should be run through a code c (e.g., various static analyzers or .Nm cc Fl Wall ) and produce minimal warnings. +.Sh FILES +.Bl -tag -width indent +.It Pa /usr/src/tools/tools/editing/freebsd.el +An Emacs plugin to follow the +.Fx +.Nm +indentation rules. +.It Pa /usr/src/tools/tools/editing/freebsd.vim +A Vim plugin to follow the +.Fx +.Nm +indentation rules. +.El .Sh SEE ALSO .Xr indent 1 , .Xr err 3 , .Xr warn 3 , -.Xr style.Makefile 5 +.Xr style.Makefile 5 , +.Xr style.lua 9 .Sh HISTORY This manual page is largely based on the .Pa src/admin/style/style From owner-svn-src-head@freebsd.org Fri May 4 03:44:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 81651FC5B50; Fri, 4 May 2018 03:44:13 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 246637911C; Fri, 4 May 2018 03:44:13 +0000 (UTC) (envelope-from pfg@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1F6E11552; Fri, 4 May 2018 03:44:13 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w443iDdi020034; Fri, 4 May 2018 03:44:13 GMT (envelope-from pfg@FreeBSD.org) Received: (from pfg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w443iDbn020033; Fri, 4 May 2018 03:44:13 GMT (envelope-from pfg@FreeBSD.org) Message-Id: <201805040344.w443iDbn020033@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: pfg set sender to pfg@FreeBSD.org using -f From: "Pedro F. Giffuni" Date: Fri, 4 May 2018 03:44:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333239 - head/sys/fs/msdosfs X-SVN-Group: head X-SVN-Commit-Author: pfg X-SVN-Commit-Paths: head/sys/fs/msdosfs X-SVN-Commit-Revision: 333239 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 03:44:13 -0000 Author: pfg Date: Fri May 4 03:44:12 2018 New Revision: 333239 URL: https://svnweb.freebsd.org/changeset/base/333239 Log: msdosfs: long names of files are created incorrectly. This fixes a regression that happened in r120492 (2003) where libkiconv was introduced and we went from checking unlen to checking for '\0'. PR: 111843 Patch by: Damjan Jovanovic MFC after: 1 week Modified: head/sys/fs/msdosfs/msdosfs_conv.c Modified: head/sys/fs/msdosfs/msdosfs_conv.c ============================================================================== --- head/sys/fs/msdosfs/msdosfs_conv.c Fri May 4 03:23:45 2018 (r333238) +++ head/sys/fs/msdosfs/msdosfs_conv.c Fri May 4 03:44:12 2018 (r333239) @@ -570,7 +570,7 @@ unix2winfn(const u_char *un, size_t unlen, struct wine if (!code) end = WIN_LAST; } - if (*un == '\0') + if (!unlen) end = WIN_LAST; wep->weCnt |= end; return !end; From owner-svn-src-head@freebsd.org Fri May 4 04:00:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3791AFC6131; Fri, 4 May 2018 04:00:49 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C8FD87C0E0; Fri, 4 May 2018 04:00:48 +0000 (UTC) (envelope-from mjg@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C2D76171F; Fri, 4 May 2018 04:00:48 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w4440mJd025060; Fri, 4 May 2018 04:00:48 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w4440moH025057; Fri, 4 May 2018 04:00:48 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <201805040400.w4440moH025057@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 4 May 2018 04:00:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333240 - in head/sys: powerpc/powerpc sys X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: in head/sys: powerpc/powerpc sys X-SVN-Commit-Revision: 333240 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 04:00:49 -0000 Author: mjg Date: Fri May 4 04:00:48 2018 New Revision: 333240 URL: https://svnweb.freebsd.org/changeset/base/333240 Log: Allow __builtin_memmove instead of bcopy for small buffers of known size See r323329 for an explanation why this is a good idea. Modified: head/sys/powerpc/powerpc/bcopy.c head/sys/sys/systm.h Modified: head/sys/powerpc/powerpc/bcopy.c ============================================================================== --- head/sys/powerpc/powerpc/bcopy.c Fri May 4 03:44:12 2018 (r333239) +++ head/sys/powerpc/powerpc/bcopy.c Fri May 4 04:00:48 2018 (r333240) @@ -143,7 +143,7 @@ done: } void -bcopy(const void *src0, void *dst0, size_t length) +(bcopy)(const void *src0, void *dst0, size_t length) { memcpy(dst0, src0, length); Modified: head/sys/sys/systm.h ============================================================================== --- head/sys/sys/systm.h Fri May 4 03:44:12 2018 (r333239) +++ head/sys/sys/systm.h Fri May 4 04:00:48 2018 (r333240) @@ -259,6 +259,12 @@ void hexdump(const void *ptr, int length, const char * #define ovbcopy(f, t, l) bcopy((f), (t), (l)) void bcopy(const void * _Nonnull from, void * _Nonnull to, size_t len); +#define bcopy(from, to, len) ({ \ + if (__builtin_constant_p(len) && (len) <= 64) \ + __builtin_memmove((to), (from), (len)); \ + else \ + bcopy((from), (to), (len)); \ +}) void bzero(void * _Nonnull buf, size_t len); #define bzero(buf, len) ({ \ if (__builtin_constant_p(len) && (len) <= 64) \ From owner-svn-src-head@freebsd.org Fri May 4 04:05:08 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0161DFC6466; Fri, 4 May 2018 04:05:08 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id A183C7E70B; Fri, 4 May 2018 04:05:07 +0000 (UTC) (envelope-from mjg@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 9C821189A; Fri, 4 May 2018 04:05:07 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44457bJ029613; Fri, 4 May 2018 04:05:07 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44457Od029612; Fri, 4 May 2018 04:05:07 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <201805040405.w44457Od029612@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 4 May 2018 04:05:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333241 - head/sys/amd64/amd64 X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/amd64/amd64 X-SVN-Commit-Revision: 333241 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 04:05:08 -0000 Author: mjg Date: Fri May 4 04:05:07 2018 New Revision: 333241 URL: https://svnweb.freebsd.org/changeset/base/333241 Log: amd64: get rid of the pessimized bcopy in syscall arg copy The code was unnecessarily conditionally copying either 5 or 6 args. It can blindly copy 6, which also means the size is known at compilation time and the operation can be depessimized. Note the entire syscall handling code is rather slow. Tested on Skylake, sample result for getppid (calls/s): without pti: 7310106 -> 10653569 with pti: 3304843 -> 4148306 Some syscalls (like read) did not note any difference, other have typically very modest wins. Modified: head/sys/amd64/amd64/trap.c Modified: head/sys/amd64/amd64/trap.c ============================================================================== --- head/sys/amd64/amd64/trap.c Fri May 4 04:00:48 2018 (r333240) +++ head/sys/amd64/amd64/trap.c Fri May 4 04:05:07 2018 (r333241) @@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td) error = 0; argp = &frame->tf_rdi; argp += reg; - bcopy(argp, sa->args, sizeof(sa->args[0]) * regcnt); + bcopy(argp, sa->args, sizeof(sa->args[0]) * 6); if (sa->narg > regcnt) { KASSERT(params != NULL, ("copyin args with no params!")); error = copyin(params, &sa->args[regcnt], From owner-svn-src-head@freebsd.org Fri May 4 06:51:02 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8CA7EFC9DBB; Fri, 4 May 2018 06:51:02 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3F0FA8487A; Fri, 4 May 2018 06:51:02 +0000 (UTC) (envelope-from mmacy@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3A1B4328D; Fri, 4 May 2018 06:51:02 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w446p2t6010840; Fri, 4 May 2018 06:51:02 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w446p2iB010839; Fri, 4 May 2018 06:51:02 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805040651.w446p2iB010839@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 May 2018 06:51:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333242 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 333242 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 06:51:02 -0000 Author: mmacy Date: Fri May 4 06:51:01 2018 New Revision: 333242 URL: https://svnweb.freebsd.org/changeset/base/333242 Log: `dup1_processes -t 96 -s 5` on a dual 8160 x dup_before + dup_after +------------------------------------------------------------+ | x + | |x x x x ++ ++| | |____AM___| |AM|| +------------------------------------------------------------+ N Min Max Median Avg Stddev x 5 1.514954e+08 1.5230351e+08 1.5206157e+08 1.5199371e+08 341205.71 + 5 1.5494336e+08 1.5519569e+08 1.5511982e+08 1.5508323e+08 96232.829 Difference at 95.0% confidence 3.08952e+06 +/- 365604 2.03266% +/- 0.245071% (Student's t, pooled s = 250681) Reported by: mjg@ MFC after: 1 week Modified: head/sys/kern/kern_descrip.c Modified: head/sys/kern/kern_descrip.c ============================================================================== --- head/sys/kern/kern_descrip.c Fri May 4 04:05:07 2018 (r333241) +++ head/sys/kern/kern_descrip.c Fri May 4 06:51:01 2018 (r333242) @@ -1503,7 +1503,7 @@ filecaps_copy(const struct filecaps *src, struct filec if (src->fc_ioctls != NULL && !locked) return (false); - *dst = *src; + memcpy(dst, src, sizeof(*src)); if (src->fc_ioctls == NULL) return (true); @@ -1512,7 +1512,7 @@ filecaps_copy(const struct filecaps *src, struct filec size = sizeof(src->fc_ioctls[0]) * src->fc_nioctls; dst->fc_ioctls = malloc(size, M_FILECAPS, M_WAITOK); - bcopy(src->fc_ioctls, dst->fc_ioctls, size); + memcpy(dst->fc_ioctls, src->fc_ioctls, size); return (true); } From owner-svn-src-head@freebsd.org Fri May 4 07:28:02 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B2C36FCAA5B; Fri, 4 May 2018 07:28:02 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 64C516A36B; Fri, 4 May 2018 07:28:02 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5B1A63CDE; Fri, 4 May 2018 07:28:02 +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 w447S2bO029526; Fri, 4 May 2018 07:28:02 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w447S2sh029525; Fri, 4 May 2018 07:28:02 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201805040728.w447S2sh029525@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Fri, 4 May 2018 07:28:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333243 - head/sys/cddl/compat/opensolaris/kern X-SVN-Group: head X-SVN-Commit-Author: avg X-SVN-Commit-Paths: head/sys/cddl/compat/opensolaris/kern X-SVN-Commit-Revision: 333243 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 07:28:02 -0000 Author: avg Date: Fri May 4 07:28:01 2018 New Revision: 333243 URL: https://svnweb.freebsd.org/changeset/base/333243 Log: opensolaris system_taskq does not need to run at maximum priority In fact, this taskqueue should use "boring" threads, nothing special about them. MFC after: 2 weeks Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c Modified: head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c ============================================================================== --- head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c Fri May 4 06:51:01 2018 (r333242) +++ head/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c Fri May 4 07:28:01 2018 (r333243) @@ -48,7 +48,8 @@ system_taskq_init(void *arg) taskq_zone = uma_zcreate("taskq_zone", sizeof(taskq_ent_t), NULL, NULL, NULL, NULL, 0, 0); - system_taskq = taskq_create("system_taskq", mp_ncpus, 0, 0, 0, 0); + system_taskq = taskq_create("system_taskq", mp_ncpus, minclsyspri, + 0, 0, 0); } SYSINIT(system_taskq_init, SI_SUB_CONFIGURE, SI_ORDER_ANY, system_taskq_init, NULL); From owner-svn-src-head@freebsd.org Fri May 4 09:28:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E3973FA65C5; Fri, 4 May 2018 09:28:12 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7E00A8790E; Fri, 4 May 2018 09:28:12 +0000 (UTC) (envelope-from ae@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 73F1E5087; Fri, 4 May 2018 09:28:12 +0000 (UTC) (envelope-from ae@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w449SCUB088587; Fri, 4 May 2018 09:28:12 GMT (envelope-from ae@FreeBSD.org) Received: (from ae@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w449SCdA088586; Fri, 4 May 2018 09:28:12 GMT (envelope-from ae@FreeBSD.org) Message-Id: <201805040928.w449SCdA088586@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ae set sender to ae@FreeBSD.org using -f From: "Andrey V. Elsukov" Date: Fri, 4 May 2018 09:28:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333244 - head/sys/netinet X-SVN-Group: head X-SVN-Commit-Author: ae X-SVN-Commit-Paths: head/sys/netinet X-SVN-Commit-Revision: 333244 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 09:28:13 -0000 Author: ae Date: Fri May 4 09:28:12 2018 New Revision: 333244 URL: https://svnweb.freebsd.org/changeset/base/333244 Log: Immediately propagate EACCES error code to application from tcp_output. In r309610 and r315514 the behavior of handling EACCES was changed, and tcp_output() now returns zero when EACCES happens. The reason of this change was a hesitation that applications that use TCP-MD5 will be affected by changes in project/ipsec. TCP-MD5 code returns EACCES when security assocition for given connection is not configured. But the same error code can return pfil(9), and this change has affected connections blocked by pfil(9). E.g. application doesn't return immediately when SYN segment is blocked, instead it waits when several tries will be failed. Actually, for TCP-MD5 application it doesn't matter will it get EACCES after first SYN, or after several tries. Security associtions must be configured before initiating TCP connection. I left the EACCES in the switch() to show that it has special handling. Reported by: Andreas Longwitz MFC after: 10 days Modified: head/sys/netinet/tcp_output.c Modified: head/sys/netinet/tcp_output.c ============================================================================== --- head/sys/netinet/tcp_output.c Fri May 4 07:28:01 2018 (r333243) +++ head/sys/netinet/tcp_output.c Fri May 4 09:28:12 2018 (r333244) @@ -1586,8 +1586,6 @@ timer: SOCKBUF_UNLOCK_ASSERT(&so->so_snd); /* Check gotos. */ switch (error) { case EACCES: - tp->t_softerror = error; - return (0); case EPERM: tp->t_softerror = error; return (error); From owner-svn-src-head@freebsd.org Fri May 4 10:17:28 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9DE58FA860F; Fri, 4 May 2018 10:17:28 +0000 (UTC) (envelope-from philip@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4A6B971EEB; Fri, 4 May 2018 10:17:28 +0000 (UTC) (envelope-from philip@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 44BF45909; Fri, 4 May 2018 10:17:28 +0000 (UTC) (envelope-from philip@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44AHSMp013624; Fri, 4 May 2018 10:17:28 GMT (envelope-from philip@FreeBSD.org) Received: (from philip@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44AHRkk013615; Fri, 4 May 2018 10:17:27 GMT (envelope-from philip@FreeBSD.org) Message-Id: <201805041017.w44AHRkk013615@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: philip set sender to philip@FreeBSD.org using -f From: Philip Paeps Date: Fri, 4 May 2018 10:17:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333247 - head/contrib/tzdata X-SVN-Group: head X-SVN-Commit-Author: philip X-SVN-Commit-Paths: head/contrib/tzdata X-SVN-Commit-Revision: 333247 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 10:17:29 -0000 Author: philip Date: Fri May 4 10:17:27 2018 New Revision: 333247 URL: https://svnweb.freebsd.org/changeset/base/333247 Log: Import tzdata 2018e Changes: https://github.com/eggert/tz/blob/2018e/NEWS MFC after: 3 days Modified: head/contrib/tzdata/Makefile head/contrib/tzdata/NEWS head/contrib/tzdata/africa head/contrib/tzdata/asia head/contrib/tzdata/australasia head/contrib/tzdata/europe head/contrib/tzdata/theory.html head/contrib/tzdata/version head/contrib/tzdata/ziguard.awk Directory Properties: head/contrib/tzdata/ (props changed) Modified: head/contrib/tzdata/Makefile ============================================================================== --- head/contrib/tzdata/Makefile Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/Makefile Fri May 4 10:17:27 2018 (r333247) @@ -21,7 +21,7 @@ DATAFORM= main # Change the line below for your time zone (after finding the zone you want in # the time zone files, or adding it to a time zone file). -# Alternately, if you discover you've got the wrong time zone, you can just +# Alternatively, if you discover you've got the wrong time zone, you can just # zic -l rightzone # to correct things. # Use the command @@ -38,7 +38,7 @@ LOCALTIME= GMT # template file are used to determine "spring forward" and "fall back" days and # times; the environment variable itself specifies UT offsets of standard and # daylight saving time. -# Alternately, if you discover you've got the wrong time zone, you can just +# Alternatively, if you discover you've got the wrong time zone, you can just # zic -p rightzone # to correct things. # Use the command @@ -236,14 +236,16 @@ GCC_DEBUG_FLAGS = -DGCC_LINT -g3 -O3 -fno-common \ $(GCC_INSTRUMENT) \ -Wall -Wextra \ -Walloc-size-larger-than=100000 -Warray-bounds=2 \ - -Wbad-function-cast -Wcast-align -Wdate-time \ + -Wbad-function-cast -Wcast-align=strict -Wdate-time \ -Wdeclaration-after-statement -Wdouble-promotion \ -Wformat=2 -Wformat-overflow=2 -Wformat-signedness -Wformat-truncation \ -Winit-self -Wjump-misses-init -Wlogical-op \ -Wmissing-declarations -Wmissing-prototypes -Wnested-externs \ -Wold-style-definition -Woverlength-strings -Wpointer-arith \ - -Wshadow -Wshift-overflow=2 -Wstrict-prototypes -Wstringop-overflow=5 \ + -Wshadow -Wshift-overflow=2 -Wstrict-prototypes -Wstringop-overflow=4 \ + -Wstringop-truncation -Wsuggest-attribute=cold \ -Wsuggest-attribute=const -Wsuggest-attribute=format \ + -Wsuggest-attribute=malloc \ -Wsuggest-attribute=noreturn -Wsuggest-attribute=pure \ -Wtrampolines -Wundef -Wuninitialized -Wunused \ -Wvariadic-macros -Wvla -Wwrite-strings \ @@ -514,6 +516,7 @@ VERSION_DEPS= \ tzfile.5 tzfile.h tzselect.8 tzselect.ksh \ workman.sh yearistype.sh \ zdump.8 zdump.c zic.8 zic.c \ + ziguard.awk zishrink.awk \ zone.tab zone1970.tab zoneinfo2tdf.pl # And for the benefit of csh users on systems that assume the user @@ -559,8 +562,8 @@ version: $(VERSION_DEPS) # These files can be tailored by setting BACKWARD, PACKRATDATA, etc. vanguard.zi main.zi rearguard.zi: $(DSTDATA_ZI_DEPS) - $(AWK) -v outfile='$@' -f ziguard.awk $(TDATA) $(PACKRATDATA) \ - >$@.out + $(AWK) -v DATAFORM=`expr $@ : '\(.*\).zi'` -f ziguard.awk \ + $(TDATA) $(PACKRATDATA) >$@.out mv $@.out $@ tzdata.zi: $(DATAFORM).zi version version=`sed 1q version` && \ @@ -900,6 +903,13 @@ check_time_t_alternatives: done rm -fr time_t.dir +TRADITIONAL_ASC = \ + tzcode$(VERSION).tar.gz.asc \ + tzdata$(VERSION).tar.gz.asc +ALL_ASC = $(TRADITIONAL_ASC) \ + tzdata$(VERSION)-rearguard.tar.gz.asc \ + tzdb-$(VERSION).tar.lz.asc + tarballs traditional_tarballs signatures traditional_signatures: version VERSION=`cat version` && \ $(MAKE) VERSION="$$VERSION" $@_version @@ -907,12 +917,13 @@ tarballs traditional_tarballs signatures traditional_s # These *_version rules are intended for use if VERSION is set by some # other means. Ordinarily these rules are used only by the above # non-_version rules, which set VERSION on the 'make' command line. -tarballs_version: traditional_tarballs_version tzdb-$(VERSION).tar.lz +tarballs_version: traditional_tarballs_version \ + tzdata$(VERSION)-rearguard.tar.gz \ + tzdb-$(VERSION).tar.lz traditional_tarballs_version: \ tzcode$(VERSION).tar.gz tzdata$(VERSION).tar.gz -signatures_version: traditional_signatures_version tzdb-$(VERSION).tar.lz.asc -traditional_signatures_version: \ - tzcode$(VERSION).tar.gz.asc tzdata$(VERSION).tar.gz.asc \ +signatures_version: $(ALL_ASC) +traditional_signatures_version: $(TRADITIONAL_ASC) tzcode$(VERSION).tar.gz: set-timestamps.out LC_ALL=C && export LC_ALL && \ @@ -927,6 +938,26 @@ tzdata$(VERSION).tar.gz: set-timestamps.out gzip $(GZIPFLAGS) >$@.out mv $@.out $@ +tzdata$(VERSION)-rearguard.tar.gz: rearguard.zi set-timestamps.out + rm -fr tzdata$(VERSION)-rearguard.dir + mkdir tzdata$(VERSION)-rearguard.dir + ln $(COMMON) $(DATA) $(MISC) tzdata$(VERSION)-rearguard.dir + cd tzdata$(VERSION)-rearguard.dir && \ + rm -f $(TDATA) $(PACKRATDATA) version + for f in $(TDATA) $(PACKRATDATA); do \ + rearf=tzdata$(VERSION)-rearguard.dir/$$f; \ + $(AWK) -v DATAFORM=rearguard -f ziguard.awk $$f >$$rearf && \ + touch -cmr `ls -t ziguard.awk $$f` $$rearf || exit; \ + done + sed '1s/$$/-rearguard/' \ + tzdata$(VERSION)-rearguard.dir/version + touch -cmr version tzdata$(VERSION)-rearguard.dir/version + LC_ALL=C && export LC_ALL && \ + (cd tzdata$(VERSION)-rearguard.dir && \ + tar $(TARFLAGS) -cf - $(COMMON) $(DATA) $(MISC) | \ + gzip $(GZIPFLAGS)) >$@.out + mv $@.out $@ + tzdb-$(VERSION).tar.lz: set-timestamps.out rm -fr tzdb-$(VERSION) mkdir tzdb-$(VERSION) @@ -937,12 +968,10 @@ tzdb-$(VERSION).tar.lz: set-timestamps.out mv $@.out $@ tzcode$(VERSION).tar.gz.asc: tzcode$(VERSION).tar.gz - gpg --armor --detach-sign $? - tzdata$(VERSION).tar.gz.asc: tzdata$(VERSION).tar.gz - gpg --armor --detach-sign $? - +tzdata$(VERSION)-rearguard.tar.gz.asc: tzdata$(VERSION)-rearguard.tar.gz tzdb-$(VERSION).tar.lz.asc: tzdb-$(VERSION).tar.lz +$(ALL_ASC): gpg --armor --detach-sign $? typecheck: Modified: head/contrib/tzdata/NEWS ============================================================================== --- head/contrib/tzdata/NEWS Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/NEWS Fri May 4 10:17:27 2018 (r333247) @@ -1,5 +1,69 @@ News for the tz database +Release 2018e - 2018-05-01 23:42:51 -0700 + + Briefly: + + North Korea switches back to +09 on 2018-05-05. + The main format uses negative DST again, for Ireland etc. + 'make tarballs' now also builds a rearguard tarball. + New 's' and 'd' suffixes in SAVE columns of Rule and Zone lines. + + Changes to past and future time stamps + + North Korea switches back from +0830 to +09 on 2018-05-05. + (Thanks to Kang Seonghoon, Arthur David Olson, Seo Sanghyeon, + and Tim Parenti.) + + Bring back the negative-DST changes of 2018a, except be more + compatible with data parsers that do not support negative DST. + Also, this now affects historical time stamps in Namibia and the + former Czechoslovakia, not just Ireland. The main format now uses + negative DST to model time stamps in Europe/Dublin (from 1971 on), + Europe/Prague (1946/7), and Africa/Windhoek (1994/2017). This + does not affect UT offsets, only time zone abbreviations and the + tm_isdst flag. Also, this does not affect rearguard or vanguard + formats; effectively the main format now uses vanguard instead of + rearguard format. Data parsers that do not support negative DST + can still use data from the rearguard tarball described below. + + Changes to build procedure + + The command 'make tarballs' now also builds the tarball + tzdataVERSION-rearguard.tar.gz, which is like tzdataVERSION.tar.gz + except that it uses rearguard format intended for trailing-edge + data parsers. + + Changes to data format and to code + + The SAVE column of Rule and Zone lines can now have an 's' or 'd' + suffix, which specifies whether the adjusted time is standard time + or daylight saving time. If no suffix is given, daylight saving + time is used if and only if the SAVE column is nonzero; this is + the longstanding behavior. Although this new feature is not used + in tzdata, it could be used to specify the legal time in Namibia + 1994-2017, as opposed to the popular time (see below). + + Changes to past time stamps + + From 1994 through 2017 Namibia observed DST in winter, not summer. + That is, it used negative DST, as Ireland still does. This change + does not affect UTC offsets; it affects only the tm_isdst flag and + the abbreviation used during summer, which is now CAT, not WAST. + Although (as noted by Michael Deckers) summer and winter time were + both simply called "standard time" in Namibian law, in common + practice winter time was considered to be DST (as noted by Stephen + Colebourne). The full effect of this change is only in vanguard + format; in rearguard and main format, the tm_isdst flag is still + zero in winter and nonzero in summer. + + In 1946/7 Czechoslovakia also observed negative DST in winter. + The full effect of this change is only in vanguard format; in + rearguard and main formats, it is modeled as plain GMT without + daylight saving. Also, the dates of some 1944/5 DST transitions + in Czechoslovakia have been changed. + + Release 2018d - 2018-03-22 07:05:46 -0700 Briefly: @@ -39,7 +103,7 @@ Release 2018d - 2018-03-22 07:05:46 -0700 Enderbury and Kiritimati skipped New Year's Eve 1994, not New Year's Day 1995. (Thanks to Kerry Shetline.) - Fix the 1912-01-01 transition for Portugual and its colonies. + Fix the 1912-01-01 transition for Portugal and its colonies. This transition was at 00:00 according to the new UT offset, not according to the old one. Also assume that Cape Verde switched on the same date as the rest, not in 1907. This affects Modified: head/contrib/tzdata/africa ============================================================================== --- head/contrib/tzdata/africa Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/africa Fri May 4 10:17:27 2018 (r333247) @@ -6,7 +6,7 @@ # tz@iana.org for general use in the future). For more, please see # the file CONTRIBUTING in the tz distribution. -# From Paul Eggert (2017-02-20): +# From Paul Eggert (2017-04-09): # # Unless otherwise specified, the source for data through 1990 is: # Thomas G. Shanks and Rique Pottenger, The International Atlas (6th edition), @@ -52,7 +52,7 @@ # cannot now come up with solid citations. # # I invented the following abbreviations; corrections are welcome! -# +02 WAST West Africa Summer Time +# +02 WAST West Africa Summer Time (no longer used) # +03 CAST Central Africa Summer Time (no longer used) # +03 SAST South Africa Summer Time (no longer used) # +03 EAT East Africa Time @@ -967,6 +967,10 @@ Link Africa/Maputo Africa/Lusaka # Zambia # commence at OOhOO on Monday 21 March 1994 and shall end at 02h00 on # Sunday 4 September 1994. +# From Michael Deckers (2017-04-06): +# ... both summer and winter time are called "standard" +# (which differs from the use in Ireland) ... + # From Petronella Sibeene (2007-03-30): # http://allafrica.com/stories/200703300178.html # While the entire country changes its time, Katima Mulilo and other @@ -992,19 +996,42 @@ Link Africa/Maputo Africa/Lusaka # Zambia # the same time they would normally start DST, the first Sunday in September: # https://www.timeanddate.com/news/time/namibia-new-time-zone.html +# From Paul Eggert (2017-04-09): +# Before the change, summer and winter time were both standard time legally. +# However in common parlance, winter time was considered to be DST. See, e.g.: +# http://www.nbc.na/news/namibias-winter-time-could-be-scrapped.2706 +# https://zone.my.na/news/times-are-changing-in-namibia +# https://www.newera.com.na/2017/02/23/namibias-winter-time-might-be-repealed/ +# Use plain "WAT" and "CAT" for the time zone abbreviations, to be compatible +# with Namibia's neighbors. + # RULE NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule Namibia 1994 only - Mar 21 0:00 0 - -Rule Namibia 1994 2016 - Sep Sun>=1 2:00 1:00 S -Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 - +# Vanguard section, for zic and other parsers that support negative DST. +Rule Namibia 1994 only - Mar 21 0:00 -1:00 WAT +Rule Namibia 1994 2017 - Sep Sun>=1 2:00 0 CAT +Rule Namibia 1995 2017 - Apr Sun>=1 2:00 -1:00 WAT +# Rearguard section, for parsers that do not support negative DST. +#Rule Namibia 1994 only - Mar 21 0:00 0 WAT +#Rule Namibia 1994 2017 - Sep Sun>=1 2:00 1:00 CAT +#Rule Namibia 1995 2017 - Apr Sun>=1 2:00 0 WAT +# End of rearguard section. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Africa/Windhoek 1:08:24 - LMT 1892 Feb 8 1:30 - +0130 1903 Mar 2:00 - SAST 1942 Sep 20 2:00 2:00 1:00 SAST 1943 Mar 21 2:00 2:00 - SAST 1990 Mar 21 # independence - 2:00 - CAT 1994 Mar 21 0:00 - 1:00 Namibia WA%sT 2017 Sep 3 2:00 - 2:00 - CAT +# Vanguard section, for zic and other parsers that support negative DST. + 2:00 Namibia %s +# Rearguard section, for parsers that do not support negative DST. +# 2:00 - CAT 1994 Mar 21 0:00 +# From Paul Eggert (2017-04-07): +# The official date of the 2017 rule change was 2017-10-24. See: +# http://www.lac.org.na/laws/annoSTAT/Namibian%20Time%20Act%209%20of%202017.pdf +# 1:00 Namibia %s 2017 Oct 24 +# 2:00 - CAT +# End of rearguard section. # Niger # See Africa/Lagos. Modified: head/contrib/tzdata/asia ============================================================================== --- head/contrib/tzdata/asia Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/asia Fri May 4 10:17:27 2018 (r333247) @@ -1983,6 +1983,19 @@ Rule ROK 1987 1988 - Oct Sun>=8 3:00 0 S # There is no common English-language abbreviation for this time zone. # Use KST, as that's what we already use for 1954-1961 in ROK. +# From Kang Seonghoon (2018-04-29): +# North Korea will revert its time zone from UTC+8:30 (PYT; Pyongyang +# Time) back to UTC+9 (KST; Korea Standard Time). +# +# From Seo Sanghyeon (2018-04-30): +# Rodong Sinmun 2018-04-30 announced Pyongyang Time transition plan. +# https://www.nknews.org/kcna/wp-content/uploads/sites/5/2018/04/rodong-2018-04-30.pdf +# ... the transition date is 2018-05-05 ... Citation should be Decree +# No. 2232 of April 30, 2018, of the Presidium of the Supreme People's +# Assembly, as published in Rodong Sinmun. +# From Tim Parenti (2018-04-29): +# It appears to be the front page story at the top in the right-most column. + # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Asia/Seoul 8:27:52 - LMT 1908 Apr 1 8:30 - KST 1912 Jan 1 @@ -1994,7 +2007,8 @@ Zone Asia/Pyongyang 8:23:00 - LMT 1908 Apr 1 8:30 - KST 1912 Jan 1 9:00 - JST 1945 Aug 24 9:00 - KST 2015 Aug 15 00:00 - 8:30 - KST + 8:30 - KST 2018 May 5 + 9:00 - KST ############################################################################### @@ -2658,7 +2672,7 @@ Zone Asia/Karachi 4:28:12 - LMT 1907 # From Sharef Mustafa (2018-03-16): # Palestine summer time will start on Mar 24th 2018 by advancing the # clock by 60 minutes as per Palestinian cabinet decision published on -# the offical website, though the decree did not specify the exact +# the official website, though the decree did not specify the exact # time of the time shift. # http://www.palestinecabinet.gov.ps/Website/AR/NDecrees/ViewFile.ashx?ID=e7a42ab7-ee23-435a-b9c8-a4f7e81f3817 # Modified: head/contrib/tzdata/australasia ============================================================================== --- head/contrib/tzdata/australasia Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/australasia Fri May 4 10:17:27 2018 (r333247) @@ -1085,6 +1085,15 @@ Zone Pacific/Wallis 12:15:20 - LMT 1901 # (1999-09-27) writes that Giles Meteorological Station uses # South Australian time even though it's located in Western Australia. +# From Paul Eggert (2018-04-01): +# The Guardian Express of Perth, Australia reported today that the +# government decided to advance the clocks permanently on January 1, +# 2019, from UT +08 to UT +09. The article noted that an exemption +# would be made for people aged 61 and over, who "can apply in writing +# to have the extra hour of sunshine removed from their area." See: +# Daylight saving coming to WA in 2019. Guardian Express. 2018-04-01. +# https://www.communitynews.com.au/guardian-express/news/exclusive-daylight-savings-coming-wa-summer-2018/ + # Queensland # From Paul Eggert (2018-02-26): Modified: head/contrib/tzdata/europe ============================================================================== --- head/contrib/tzdata/europe Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/europe Fri May 4 10:17:27 2018 (r333247) @@ -528,13 +528,13 @@ Link Europe/London Europe/Isle_of_Man # summer and negative daylight saving time in winter. It is for when # negative SAVE values are used. # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -#Rule Eire 1971 only - Oct 31 2:00u -1:00 GMT -#Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 IST -#Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 GMT -#Rule Eire 1981 max - Mar lastSun 1:00u 0 IST -#Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 GMT -#Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 GMT -#Rule Eire 1996 max - Oct lastSun 1:00u -1:00 GMT +Rule Eire 1971 only - Oct 31 2:00u -1:00 - +Rule Eire 1972 1980 - Mar Sun>=16 2:00u 0 - +Rule Eire 1972 1980 - Oct Sun>=23 2:00u -1:00 - +Rule Eire 1981 max - Mar lastSun 1:00u 0 - +Rule Eire 1981 1989 - Oct Sun>=23 1:00u -1:00 - +Rule Eire 1990 1995 - Oct Sun>=22 1:00u -1:00 - +Rule Eire 1996 max - Oct lastSun 1:00u -1:00 - # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 @@ -548,11 +548,11 @@ Zone Europe/Dublin -0:25:00 - LMT 1880 Aug 2 0:00 - GMT 1948 Apr 18 2:00s 0:00 GB-Eire GMT/IST 1968 Oct 27 # The next line is for when negative SAVE values are used. -# 1:00 Eire IST/GMT + 1:00 Eire IST/GMT # These three lines are for when SAVE values are always nonnegative. - 1:00 - IST 1971 Oct 31 2:00u - 0:00 GB-Eire GMT/IST 1996 - 0:00 EU GMT/IST +# 1:00 - IST 1971 Oct 31 2:00u +# 0:00 GB-Eire GMT/IST 1996 +# 0:00 EU GMT/IST ############################################################################### @@ -970,18 +970,30 @@ Zone Europe/Sofia 1:33:16 - LMT 1880 # Please see the 'asia' file for Asia/Nicosia. # Czech Republic / Czechia +# +# From Paul Eggert (2018-04-15): +# The source for Czech data is: Kdy zaÄíná a konÄí letní Äas. 2018-04-15. +# https://kalendar.beda.cz/kdy-zacina-a-konci-letni-cas +# We know of no English-language name for historical Czech winter time; +# abbreviate it as "GMT", as it happened to be GMT. +# # Rule NAME FROM TO TYPE IN ON AT SAVE LETTER/S -Rule Czech 1945 only - Apr 8 2:00s 1:00 S -Rule Czech 1945 only - Nov 18 2:00s 0 - +Rule Czech 1945 only - Apr Mon>=1 2:00s 1:00 S +Rule Czech 1945 only - Oct 1 2:00s 0 - Rule Czech 1946 only - May 6 2:00s 1:00 S Rule Czech 1946 1949 - Oct Sun>=1 2:00s 0 - -Rule Czech 1947 only - Apr 20 2:00s 1:00 S -Rule Czech 1948 only - Apr 18 2:00s 1:00 S +Rule Czech 1947 1948 - Apr Sun>=15 2:00s 1:00 S Rule Czech 1949 only - Apr 9 2:00s 1:00 S # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Prague 0:57:44 - LMT 1850 0:57:44 - PMT 1891 Oct # Prague Mean Time - 1:00 C-Eur CE%sT 1944 Sep 17 2:00s + 1:00 C-Eur CE%sT 1945 May 9 + 1:00 Czech CE%sT 1946 Dec 1 3:00 +# Vanguard section, for zic and other parsers that support negative DST. + 1:00 -1:00 GMT 1947 Feb 23 2:00 +# Rearguard section, for parsers that do not support negative DST. +# 0:00 - GMT 1947 Feb 23 2:00 +# End of rearguard section. 1:00 Czech CE%sT 1979 1:00 EU CE%sT # Use Europe/Prague also for Slovakia. @@ -2016,7 +2028,7 @@ Rule Neth 1938 1939 - May 15 2:00s 1:00 S Rule Neth 1945 only - Apr 2 2:00s 1:00 S Rule Neth 1945 only - Sep 16 2:00s 0 - # -# Amsterdam Mean Time was +00:19:32.13 exactly, but the .13 is omitted +# Amsterdam Mean Time was +00:19:32.13, but the .13 is omitted # below because the current format requires GMTOFF to be an integer. # Zone NAME GMTOFF RULES FORMAT [UNTIL] Zone Europe/Amsterdam 0:19:32 - LMT 1835 Modified: head/contrib/tzdata/theory.html ============================================================================== --- head/contrib/tzdata/theory.html Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/theory.html Fri May 4 10:17:27 2018 (r333247) @@ -32,7 +32,7 @@ all computer-based clocks that track civil time. It organizes time zone and daylight saving time data by partitioning the world into regions -whose clocks all agree about timestamps that occur after the of the POSIX Epoch (1970-01-01 00:00:00 backzone that is distributed along with the database proper, this file is less reliable and does not necessarily follow database guidelines. @@ -68,7 +68,7 @@ standard for UNIX-like systems. As of this writing, the current edition of POSIX is: The Open -Group Base Specifications Issue 7, IEEE Std 1003.1-2008, 2016 +Group Base Specifications Issue 7, IEEE Std 1003.1-2017, 2018 Edition. Because the database's scope encompasses real-world changes to civil timekeeping, its model for describing time is more complex than the @@ -79,7 +79,7 @@ flip back and forth between two alternatives, and the can change at times. Whether and when a tz region changes its clock, and even the region's notional base offset from UTC, are variable. -It doesn't even really make sense to talk about a region's +It does not always make sense to talk about a region's "base offset", since it is not necessarily a single number.

@@ -92,8 +92,8 @@ Each tz region has a unique corresponds to a set of time zone rules. Inexperienced users are not expected to select these names unaided. Distributors should provide documentation and/or a simple selection -interface that explains the names; for one example, see the 'tzselect' -program in the tz code. +interface that explains the names; for one example, see the +tzselect program in the tz code. The Unicode Common Locale Data Repository contains data that may be useful for other selection interfaces. @@ -137,6 +137,9 @@ region. North and South America share the same area, 'America'. Typical names are 'Africa/Cairo', 'America/New_York', and 'Pacific/Honolulu'. +Some names are further qualified to help avoid confusion; for example, +'America/Indiana/Petersburg' distinguishes Petersburg, +Indiana from other Petersburgs in America.

@@ -159,7 +162,8 @@ in decreasing order of importance: TZ strings. A file name component must not exceed 14 characters or start with '-'. - E.g., prefer 'Brunei' to 'Bandar_Seri_Begawan'. + E.g., prefer Asia/Brunei to + Asia/Bandar_Seri_Begawan. Exceptions: see the discussion of legacy names below.

  • @@ -177,8 +181,8 @@ in decreasing order of importance: name AB (ignoring case), then B must not start with '/', as a regular file cannot have the same name as a directory in POSIX. - For example, 'America/New_York' precludes - 'America/New_York/Bronx'. + For example, America/New_York precludes + America/New_York/Bronx.
  • Uninhabited regions like the North Pole and Bouvet Island @@ -193,50 +197,56 @@ in decreasing order of importance:
  • If all the clocks in a region have agreed since 1970, - don't bother to include more than one location + do not bother to include more than one location even if subregions' clocks disagreed before 1970. Otherwise these tables would become annoyingly large.
  • If a name is ambiguous, use a less ambiguous alternative; e.g., many cities are named San José and Georgetown, so - prefer 'Costa_Rica' to 'San_Jose' and - 'Guyana' to 'Georgetown'. + prefer America/Costa_Rica to + America/San_Jose and America/Guyana + to America/Georgetown.
  • Keep locations compact. Use cities or small islands, not countries or regions, so that any future changes do not split individual locations into different tz regions. - E.g., prefer 'Paris' to 'France', since + E.g., prefer Europe/Paris to Europe/France, + since France has had multiple time zones.
  • - Use mainstream English spelling, e.g., prefer 'Rome' - to 'Roma', and prefer 'Athens' to the - Greek 'Αθήνα' or the Romanized 'Athína'. + Use mainstream English spelling, e.g., prefer + Europe/Rome to Europe/Roma, and + prefer Europe/Athens to the Greek + Europe/Αθήνα or the Romanized + Europe/Athína. The POSIX file name restrictions encourage this guideline.
  • Use the most populous among locations in a region, - e.g., prefer 'Shanghai' to - 'Beijing'. + e.g., prefer Asia/Shanghai to + Asia/Beijing. Among locations with similar populations, pick the best-known - location, e.g., prefer 'Rome' to - 'Milan'. + location, e.g., prefer Europe/Rome to + Europe/Milan.
  • - Use the singular form, e.g., prefer 'Canary' to - 'Canaries'. + Use the singular form, e.g., prefer Atlantic/Canary to + Atlantic/Canaries.
  • Omit common suffixes like '_Islands' and '_City', unless that would lead to ambiguity. - E.g., prefer 'Cayman' to - 'Cayman_Islands' and 'Guatemala' to - 'Guatemala_City', but prefer - 'Mexico_City' to 'Mexico' + E.g., prefer America/Cayman to + America/Cayman_Islands and + America/Guatemala to + America/Guatemala_City, but prefer + America/Mexico_City to + America/Mexico because the country of Mexico has several time zones.
  • @@ -245,13 +255,14 @@ in decreasing order of importance:
  • Omit '.' from abbreviations in names. - E.g., prefer 'St_Helena' to 'St._Helena'. + E.g., prefer Atlantic/St_Helena to + Atlantic/St._Helena.
  • Do not change established names if they only marginally violate the above guidelines. - For example, don't change the existing name 'Rome' to - 'Milan' merely because Milan's population has grown + For example, do not change the existing name Europe/Rome to + Europe/Milan merely because Milan's population has grown to be somewhat greater than Rome's.
  • @@ -318,8 +329,10 @@ in decreasing order of importance: Use three to six characters that are ASCII alphanumerics or '+' or '-'. Previous editions of this database also used characters like - ' ' and '?', but these characters have a - special meaning to the shell and cause commands like + space and '?', but these characters have a + special meaning to the + UNIX shell + and cause commands like 'set `date`' to have unexpected effects. @@ -688,7 +701,7 @@ href="https://www.dissentmagazine.org/blog/booked-a-gl subsecond accuracy is needed.
  • - Civil time was not based on atomic time before 1972, and we don't + Civil time was not based on atomic time before 1972, and we do not know the history of earth's rotation accurately enough to map tzsetwall; - if such code is moved to "old" systems that don't - provide tzsetwall, you won't be able to generate an + if such code is moved to "old" systems that do not + provide tzsetwall, you will not be able to generate an executable program. (These functions also arrange for local wall clock time to be used if tzset is called – directly or - indirectly – and there's no TZ environment + indirectly – and there is no TZ environment variable; portable applications should not, however, rely on this - behavior since it's not the way SVR2 systems behave.) + behavior since it is not the way SVR2 + systems behave.)
  • Negative time_t values are supported, on systems @@ -1040,7 +1055,7 @@ The vestigial APIs are:
  • The 7th Edition UNIX timezone function is not present in this - package; it's impossible to reliably map timezone's + package; it is impossible to reliably map timezone's arguments (a "minutes west of GMT" value and a "daylight saving time in effect" flag) to a time zone abbreviation, and we refuse to guess. @@ -1052,7 +1067,9 @@ The vestigial APIs are: zone abbreviation to use.
  • - The 4.2BSD gettimeofday function is not + The 4.2BSD + gettimeofday function is not used in this package. This formerly let users obtain the current UTC offset and DST flag, but this functionality was removed in @@ -1061,7 +1078,7 @@ The vestigial APIs are:
  • In SVR2, time conversion fails for near-minimum or near-maximum time_t values when doing conversions - for places that don't use UT. + for places that do not use UT. This package takes care to do these conversions correctly. A comment in the source code tells how to get compatibly wrong results. @@ -1155,10 +1172,10 @@ based on guesswork and these guesses may be corrected Calendrical issues are a bit out of scope for a time zone database, but they indicate the sort of problems that we would run into if we extended the time zone database further into the past. -An excellent resource in this area is Nachum Dershowitz and Edward M. -Reingold, Calendrical -Calculations: Third Edition, Cambridge University Press (2008). +An excellent resource in this area is Edward M. Reingold +and Nachum Dershowitz, Calendrical +Calculations: The Ultimate Edition, Cambridge University Press (2018). Other information and sources are given in the file 'calendars' in the tz distribution. They sometimes disagree. @@ -1170,11 +1187,11 @@ They sometimes disagree.

    Some people's work schedules use Mars time. -Jet Propulsion Laboratory (JPL) coordinators have kept Mars time on -and off at least since 1997 for the +Jet Propulsion Laboratory (JPL) coordinators kept Mars time on +and off during the Mars Pathfinder mission. -Some of their family members have also adapted to Mars time. +Some of their family members also adapted to Mars time. Dozens of special Mars watches were built for JPL workers who kept Mars time during the Mars Exploration Rovers mission (2004). These timepieces look like normal Seikos and Citizens but use Mars @@ -1262,7 +1279,7 @@ Sources for time on other planets: Jia-Rui Chong, "Workdays Fit for a Martian", Los Angeles Times - (2004-01-14), pp A1, A20-A21. + (2004-01-14), pp A1, A20–A21.

  • Tom Chmielewski, Modified: head/contrib/tzdata/version ============================================================================== --- head/contrib/tzdata/version Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/version Fri May 4 10:17:27 2018 (r333247) @@ -1 +1 @@ -2018d +2018e Modified: head/contrib/tzdata/ziguard.awk ============================================================================== --- head/contrib/tzdata/ziguard.awk Fri May 4 10:11:18 2018 (r333246) +++ head/contrib/tzdata/ziguard.awk Fri May 4 10:17:27 2018 (r333247) @@ -13,20 +13,31 @@ # rearguard format. BEGIN { - dst_type["vanguard.zi"] = 1 - dst_type["main.zi"] = 1 - dst_type["rearguard.zi"] = 1 + dataform_type["vanguard"] = 1 + dataform_type["main"] = 1 + dataform_type["rearguard"] = 1 - # The command line should set OUTFILE to the name of the output file. - if (!dst_type[outfile]) exit 1 - vanguard = outfile == "vanguard.zi" + # The command line should set DATAFORM. + if (!dataform_type[DATAFORM]) exit 1 + vanguard = DATAFORM == "vanguard" } /^Zone/ { zone = $2 } -outfile != "main.zi" { +DATAFORM != "main" { in_comment = /^#/ + uncomment = comment_out = 0 + # If the line should differ due to Czechoslovakia using negative SAVE values, + # uncomment the desired version and comment out the undesired one. + if (zone == "Europe/Prague" && /1947 Feb 23/) { + if (($(in_comment + 2) != "-") == vanguard) { + uncomment = in_comment + } else { + comment_out = !in_comment + } + } + # If this line should differ due to Ireland using negative SAVE values, # uncomment the desired version and comment out the undesired one. Rule_Eire = /^#?Rule[\t ]+Eire[\t ]/ @@ -37,10 +48,37 @@ outfile != "main.zi" { if ((Rule_Eire \ || (Zone_Dublin_post_1968 && $(in_comment + 3) == "IST/GMT")) \ == vanguard) { - sub(/^#/, "") - } else if (/^[^#]/) { - sub(/^/, "#") + uncomment = in_comment + } else { + comment_out = !in_comment } + } + + # If this line should differ due to Namibia using Rule SAVE suffixes, + # uncomment the desired version and comment out the undesired one. + Rule_Namibia = /^#?Rule[\t ]+Namibia[\t ]/ + Zone_using_Namibia_rule \ + = (zone == "Africa/Windhoek" \ + && ($(in_comment + 2) == "Namibia" \ + || (1994 <= $(in_comment + 4) && $(in_comment + 4) <= 2017) \ + || in_comment + 3 == NF)) + if (Rule_Namibia || Zone_using_Namibia_rule) { + if ((Rule_Namibia \ + ? ($(in_comment + 9) ~ /^-/ \ + || ($(in_comment + 9) == 0 && $(in_comment + 10) == "CAT")) \ + : $(in_comment + 1) == "2:00" && $(in_comment + 2) == "Namibia") \ + == vanguard) { + uncomment = in_comment + } else { + comment_out = !in_comment + } + } + + if (uncomment) { + sub(/^#/, "") + } + if (comment_out) { + sub(/^/, "#") } } From owner-svn-src-head@freebsd.org Fri May 4 10:52:18 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6BFD8FA9357; Fri, 4 May 2018 10:52:18 +0000 (UTC) (envelope-from philip@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1A11E79158; Fri, 4 May 2018 10:52:18 +0000 (UTC) (envelope-from philip@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 151A75F55; Fri, 4 May 2018 10:52:18 +0000 (UTC) (envelope-from philip@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44AqHI1032402; Fri, 4 May 2018 10:52:17 GMT (envelope-from philip@FreeBSD.org) Received: (from philip@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44AqHK2032401; Fri, 4 May 2018 10:52:17 GMT (envelope-from philip@FreeBSD.org) Message-Id: <201805041052.w44AqHK2032401@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: philip set sender to philip@FreeBSD.org using -f From: Philip Paeps Date: Fri, 4 May 2018 10:52:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333248 - head X-SVN-Group: head X-SVN-Commit-Author: philip X-SVN-Commit-Paths: head X-SVN-Commit-Revision: 333248 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 10:52:18 -0000 Author: philip Date: Fri May 4 10:52:17 2018 New Revision: 333248 URL: https://svnweb.freebsd.org/changeset/base/333248 Log: Point out that the tzdata 2018e update brings in negative DST for certain time zones. This does not affect the vast majority of users who do not care about (or even know about) the tm_isdst flag but may be slightly surprising to those with a more specialised interest in time zone arcana. MFC after: 3 days Modified: head/UPDATING Modified: head/UPDATING ============================================================================== --- head/UPDATING Fri May 4 10:17:27 2018 (r333247) +++ head/UPDATING Fri May 4 10:52:17 2018 (r333248) @@ -51,6 +51,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW: ****************************** SPECIAL WARNING: ****************************** +20180504: + The tz database (tzdb) has been updated to 2018e. This version more + correctly models time stamps in time zones with negative DST such as + Europe/Dublin (from 1971 on), Europe/Prague (1946/7), and + Africa/Windhoek (1994/2017). This does not affect the UT offsets, only + time zone abbreviations and the tm_isdst flag. + 20180502: The ixgb(4) driver has been removed. This driver was for an early and uncommon legacy PCI 10GbE for a single ASIC, Intel 82597EX. Intel From owner-svn-src-head@freebsd.org Fri May 4 14:07:18 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D6EDAFAE7A3; Fri, 4 May 2018 14:07:18 +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 31B258343E; Fri, 4 May 2018 14:07:17 +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 w44E7FhU042499; Fri, 4 May 2018 07:07:15 -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 w44E7EHg042498; Fri, 4 May 2018 07:07:14 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805041407.w44E7EHg042498@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333242 - head/sys/kern In-Reply-To: <201805040651.w446p2iB010839@repo.freebsd.org> To: Matt Macy Date: Fri, 4 May 2018 07:07:14 -0700 (PDT) CC: 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.25 Precedence: list List-Id: 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, 04 May 2018 14:07:19 -0000 > Author: mmacy > Date: Fri May 4 06:51:01 2018 > New Revision: 333242 > URL: https://svnweb.freebsd.org/changeset/base/333242 > > Log: > `dup1_processes -t 96 -s 5` on a dual 8160 > > x dup_before > + dup_after > +------------------------------------------------------------+ > | x + | > |x x x x ++ ++| > | |____AM___| |AM|| > +------------------------------------------------------------+ > N Min Max Median Avg Stddev > x 5 1.514954e+08 1.5230351e+08 1.5206157e+08 1.5199371e+08 341205.71 > + 5 1.5494336e+08 1.5519569e+08 1.5511982e+08 1.5508323e+08 96232.829 > Difference at 95.0% confidence > 3.08952e+06 +/- 365604 > 2.03266% +/- 0.245071% > (Student's t, pooled s = 250681) Um, a benchmark result is not a very good commit message, how about something along the lines of: Use memcpy over struct and bcopy to improve performance. > > Reported by: mjg@ > MFC after: 1 week Missing Approved by: sbruno? > Modified: > head/sys/kern/kern_descrip.c > > Modified: head/sys/kern/kern_descrip.c > ============================================================================== > --- head/sys/kern/kern_descrip.c Fri May 4 04:05:07 2018 (r333241) > +++ head/sys/kern/kern_descrip.c Fri May 4 06:51:01 2018 (r333242) > @@ -1503,7 +1503,7 @@ filecaps_copy(const struct filecaps *src, struct filec > > if (src->fc_ioctls != NULL && !locked) > return (false); > - *dst = *src; > + memcpy(dst, src, sizeof(*src)); > if (src->fc_ioctls == NULL) > return (true); > > @@ -1512,7 +1512,7 @@ filecaps_copy(const struct filecaps *src, struct filec > > size = sizeof(src->fc_ioctls[0]) * src->fc_nioctls; > dst->fc_ioctls = malloc(size, M_FILECAPS, M_WAITOK); > - bcopy(src->fc_ioctls, dst->fc_ioctls, size); > + memcpy(dst->fc_ioctls, src->fc_ioctls, size); > return (true); > } > > > -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Fri May 4 14:38:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AC40CFAF06A; Fri, 4 May 2018 14:38:49 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 54B746A161; Fri, 4 May 2018 14:38:49 +0000 (UTC) (envelope-from kevans@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 492D01031A; Fri, 4 May 2018 14:38:49 +0000 (UTC) (envelope-from kevans@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44Ecnk5045181; Fri, 4 May 2018 14:38:49 GMT (envelope-from kevans@FreeBSD.org) Received: (from kevans@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44Ecn7Z045179; Fri, 4 May 2018 14:38:49 GMT (envelope-from kevans@FreeBSD.org) Message-Id: <201805041438.w44Ecn7Z045179@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kevans set sender to kevans@FreeBSD.org using -f From: Kyle Evans Date: Fri, 4 May 2018 14:38:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333250 - head/sys/dts/arm/overlays X-SVN-Group: head X-SVN-Commit-Author: kevans X-SVN-Commit-Paths: head/sys/dts/arm/overlays X-SVN-Commit-Revision: 333250 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 14:38:49 -0000 Author: kevans Date: Fri May 4 14:38:48 2018 New Revision: 333250 URL: https://svnweb.freebsd.org/changeset/base/333250 Log: arm: overlays: Update to new path-based sugar format Modified: head/sys/dts/arm/overlays/sun8i-a83t-sid.dtso head/sys/dts/arm/overlays/sun8i-h3-sid.dtso Modified: head/sys/dts/arm/overlays/sun8i-a83t-sid.dtso ============================================================================== --- head/sys/dts/arm/overlays/sun8i-a83t-sid.dtso Fri May 4 13:40:59 2018 (r333249) +++ head/sys/dts/arm/overlays/sun8i-a83t-sid.dtso Fri May 4 14:38:48 2018 (r333250) @@ -3,15 +3,12 @@ / { compatible = "allwinner,sun8i-a83t"; +}; - fragment@0 { - target-path = "/soc"; - __overlay__ { - sid: eeprom@1c14000 { - compatible = "allwinner,sun8i-a83t-sid"; - reg = <0x1c14000 0x400>; - status = "okay"; - }; - }; +&{/soc} { + sid: eeprom@1c14000 { + compatible = "allwinner,sun8i-a83t-sid"; + reg = <0x1c14000 0x400>; + status = "okay"; }; }; Modified: head/sys/dts/arm/overlays/sun8i-h3-sid.dtso ============================================================================== --- head/sys/dts/arm/overlays/sun8i-h3-sid.dtso Fri May 4 13:40:59 2018 (r333249) +++ head/sys/dts/arm/overlays/sun8i-h3-sid.dtso Fri May 4 14:38:48 2018 (r333250) @@ -3,16 +3,12 @@ / { compatible = "allwinner,sun8i-h3"; +}; - fragment@0 { - target-path = "/soc"; - - __overlay__ { - sid: eeprom@1c14000 { - compatible = "allwinner,sun8i-h3-sid"; - reg = <0x1c14000 0x400>; - status = "okay"; - }; - }; +&{/soc} { + sid: eeprom@1c14000 { + compatible = "allwinner,sun8i-h3-sid"; + reg = <0x1c14000 0x400>; + status = "okay"; }; }; From owner-svn-src-head@freebsd.org Fri May 4 14:39:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AE30AFAF0DC; Fri, 4 May 2018 14:39:32 +0000 (UTC) (envelope-from asomers@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 5C6166A88B; Fri, 4 May 2018 14:39:32 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 5750A1031B; Fri, 4 May 2018 14:39:32 +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 w44EdWxh045250; Fri, 4 May 2018 14:39:32 GMT (envelope-from asomers@FreeBSD.org) Received: (from asomers@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44EdWho045249; Fri, 4 May 2018 14:39:32 GMT (envelope-from asomers@FreeBSD.org) Message-Id: <201805041439.w44EdWho045249@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: asomers set sender to asomers@FreeBSD.org using -f From: Alan Somers Date: Fri, 4 May 2018 14:39:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333251 - head/usr.bin/time X-SVN-Group: head X-SVN-Commit-Author: asomers X-SVN-Commit-Paths: head/usr.bin/time X-SVN-Commit-Revision: 333251 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 14:39:32 -0000 Author: asomers Date: Fri May 4 14:39:32 2018 New Revision: 333251 URL: https://svnweb.freebsd.org/changeset/base/333251 Log: time(1): use the monotonic clock The monotonic clock is more appropriate than the realtime clock for measuring durations. Reviewed by: ken, jilles Differential Revision: https://reviews.freebsd.org/D14032 Modified: head/usr.bin/time/time.c Modified: head/usr.bin/time/time.c ============================================================================== --- head/usr.bin/time/time.c Fri May 4 14:38:48 2018 (r333250) +++ head/usr.bin/time/time.c Fri May 4 14:39:32 2018 (r333251) @@ -121,7 +121,7 @@ main(int argc, char **argv) setvbuf(out, (char *)NULL, _IONBF, (size_t)0); } - if (clock_gettime(CLOCK_REALTIME, &before_ts)) + if (clock_gettime(CLOCK_MONOTONIC, &before_ts)) err(1, "clock_gettime"); switch(pid = fork()) { case -1: /* error */ @@ -141,13 +141,13 @@ main(int argc, char **argv) while (wait4(pid, &status, 0, &ru) != pid) { if (siginfo_recvd) { siginfo_recvd = 0; - if (clock_gettime(CLOCK_REALTIME, &after)) + if (clock_gettime(CLOCK_MONOTONIC, &after)) err(1, "clock_gettime"); getrusage(RUSAGE_CHILDREN, &ru); showtime(stdout, &before_ts, &after, &ru); } } - if (clock_gettime(CLOCK_REALTIME, &after)) + if (clock_gettime(CLOCK_MONOTONIC, &after)) err(1, "clock_gettime"); if ( ! WIFEXITED(status)) warnx("command terminated abnormally"); From owner-svn-src-head@freebsd.org Fri May 4 15:11:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id F05EAFAFAF8; Fri, 4 May 2018 15:11:16 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9E6D66E89E; Fri, 4 May 2018 15:11:16 +0000 (UTC) (envelope-from shurd@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 997A510822; Fri, 4 May 2018 15:11:16 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44FBGpd060909; Fri, 4 May 2018 15:11:16 GMT (envelope-from shurd@FreeBSD.org) Received: (from shurd@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44FBG3F060908; Fri, 4 May 2018 15:11:16 GMT (envelope-from shurd@FreeBSD.org) Message-Id: <201805041511.w44FBG3F060908@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: shurd set sender to shurd@FreeBSD.org using -f From: Stephen Hurd Date: Fri, 4 May 2018 15:11:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333253 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: shurd X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 333253 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 15:11:17 -0000 Author: shurd Date: Fri May 4 15:11:16 2018 New Revision: 333253 URL: https://svnweb.freebsd.org/changeset/base/333253 Log: iflib: remove unused brscp pointer from iflib_queues_alloc This pointer was no longer written to as of r315217. Since nothing writes to the variable, remove it. Submitted by: Jacob Keller Reviewed by: gallatin, kmacy, sbruno Differential Revision: https://reviews.freebsd.org/D15284 Modified: head/sys/net/iflib.c Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Fri May 4 14:49:37 2018 (r333252) +++ head/sys/net/iflib.c Fri May 4 15:11:16 2018 (r333253) @@ -4773,12 +4773,10 @@ iflib_queues_alloc(if_ctx_t ctx) int nfree_lists = sctx->isc_nfl ? sctx->isc_nfl : 1; caddr_t *vaddrs; uint64_t *paddrs; - struct ifmp_ring **brscp; KASSERT(ntxqs > 0, ("number of queues per qset must be at least 1")); KASSERT(nrxqs > 0, ("number of queues per qset must be at least 1")); - brscp = NULL; txq = NULL; rxq = NULL; @@ -4966,8 +4964,6 @@ err_tx_desc: free(ctx->ifc_txqs, M_IFLIB); ctx->ifc_txqs = NULL; rx_fail: - if (brscp != NULL) - free(brscp, M_IFLIB); if (rxq != NULL) free(rxq, M_IFLIB); if (txq != NULL) From owner-svn-src-head@freebsd.org Fri May 4 15:20:35 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5BD49FAFCAB; Fri, 4 May 2018 15:20:35 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0A8C770FE0; Fri, 4 May 2018 15:20:35 +0000 (UTC) (envelope-from shurd@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 0595B1098B; Fri, 4 May 2018 15:20:35 +0000 (UTC) (envelope-from shurd@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44FKY1L065357; Fri, 4 May 2018 15:20:34 GMT (envelope-from shurd@FreeBSD.org) Received: (from shurd@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44FKYqI065356; Fri, 4 May 2018 15:20:34 GMT (envelope-from shurd@FreeBSD.org) Message-Id: <201805041520.w44FKYqI065356@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: shurd set sender to shurd@FreeBSD.org using -f From: Stephen Hurd Date: Fri, 4 May 2018 15:20:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333254 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: shurd X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 333254 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 15:20:35 -0000 Author: shurd Date: Fri May 4 15:20:34 2018 New Revision: 333254 URL: https://svnweb.freebsd.org/changeset/base/333254 Log: iflib: fix invalid free during queue allocation failure In r301567, code was added to cleanup to prevent memory leaks for the Tx and Rx ring structs. This code carefully tracked txq and rxq, and made sure to free them properly during cleanup. Because we assigned the txq and rxq pointers into the ctx->ifc_txqs and ctx->ifc_rxqs, we carefully reset these pointers to NULL, so that cleanup code would not accidentally free the memory twice. This was changed by r304021 ("Update iflib to support more NIC designs"), which removed this resetting of the pointers to NULL, because it re-used the txq and rxq pointers as an index into the queue set array. Unfortunately, the cleanup code was left alone. Thus, if we fail to allocate DMA or fail to configure the queues using the drivers ifdi methods, we will attempt to free txq and rxq. These variables would now incorrectly point to the wrong location, resulting in a page fault. There are a number of methods to correct this, but ultimately the root cause was that we reuse the txq and rxq pointers for two different purposes. Instead, when allocating, store the returned pointer directly into ctx->ifc_txqs and ctx->ifc_rxqs. Then, assign this to txq and rxq as index pointers before starting the loop to allocate each queue. Drop the cleanup code for txq and rxq, and only use ctx->ifc_txqs and ctx->ifc_rxqs. Thus, we no longer need to free txq or rxq under any error flow, and intsead rely solely on the pointers stored in ctx->ifc_txqs and ctx->ifc_rxqs. This prevents the invalid free(), and ensures that we still properly cleanup after ourselves as before when failing to allocate. Submitted by: Jacob Keller Reviewed by: gallatin, sbruno Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D15285 Modified: head/sys/net/iflib.c Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Fri May 4 15:11:16 2018 (r333253) +++ head/sys/net/iflib.c Fri May 4 15:20:34 2018 (r333254) @@ -4777,11 +4777,8 @@ iflib_queues_alloc(if_ctx_t ctx) KASSERT(ntxqs > 0, ("number of queues per qset must be at least 1")); KASSERT(nrxqs > 0, ("number of queues per qset must be at least 1")); - txq = NULL; - rxq = NULL; - /* Allocate the TX ring struct memory */ - if (!(txq = + if (!(ctx->ifc_txqs = (iflib_txq_t) malloc(sizeof(struct iflib_txq) * ntxqsets, M_IFLIB, M_NOWAIT | M_ZERO))) { device_printf(dev, "Unable to allocate TX ring memory\n"); @@ -4790,7 +4787,7 @@ iflib_queues_alloc(if_ctx_t ctx) } /* Now allocate the RX */ - if (!(rxq = + if (!(ctx->ifc_rxqs = (iflib_rxq_t) malloc(sizeof(struct iflib_rxq) * nrxqsets, M_IFLIB, M_NOWAIT | M_ZERO))) { device_printf(dev, "Unable to allocate RX ring memory\n"); @@ -4798,8 +4795,8 @@ iflib_queues_alloc(if_ctx_t ctx) goto rx_fail; } - ctx->ifc_txqs = txq; - ctx->ifc_rxqs = rxq; + txq = ctx->ifc_txqs; + rxq = ctx->ifc_rxqs; /* * XXX handle allocation failure @@ -4957,17 +4954,13 @@ iflib_queues_alloc(if_ctx_t ctx) /* XXX handle allocation failure changes */ err_rx_desc: err_tx_desc: +rx_fail: if (ctx->ifc_rxqs != NULL) free(ctx->ifc_rxqs, M_IFLIB); ctx->ifc_rxqs = NULL; if (ctx->ifc_txqs != NULL) free(ctx->ifc_txqs, M_IFLIB); ctx->ifc_txqs = NULL; -rx_fail: - if (rxq != NULL) - free(rxq, M_IFLIB); - if (txq != NULL) - free(txq, M_IFLIB); fail: return (err); } From owner-svn-src-head@freebsd.org Fri May 4 15:53:08 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6196AFB0CB8; Fri, 4 May 2018 15:53:08 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: from spindle.one-eyed-alien.net (spindle.one-eyed-alien.net [199.48.129.229]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 984B9792DF; Fri, 4 May 2018 15:53:07 +0000 (UTC) (envelope-from brooks@spindle.one-eyed-alien.net) Received: by spindle.one-eyed-alien.net (Postfix, from userid 3001) id 49E695A9F12; Fri, 4 May 2018 15:53:01 +0000 (UTC) Date: Fri, 4 May 2018 15:53:01 +0000 From: Brooks Davis To: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys Message-ID: <20180504155301.GA56280@spindle.one-eyed-alien.net> References: <201805040400.w4440moH025057@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="r5Pyd7+fXNt84Ff3" Content-Disposition: inline In-Reply-To: <201805040400.w4440moH025057@repo.freebsd.org> User-Agent: Mutt/1.9.4 (2018-02-28) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 15:53:08 -0000 --r5Pyd7+fXNt84Ff3 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, May 04, 2018 at 04:00:48AM +0000, Mateusz Guzik wrote: > Author: mjg > Date: Fri May 4 04:00:48 2018 > New Revision: 333240 > URL: https://svnweb.freebsd.org/changeset/base/333240 >=20 > Log: > Allow __builtin_memmove instead of bcopy for small buffers of known size What is the justification for forcing a size rather than using the compiler's built-in fallback to memmove? Is the kernel compilation environment disabling that? -- Brooks --r5Pyd7+fXNt84Ff3 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEcBAEBAgAGBQJa7IHcAAoJEKzQXbSebgfAOeQH/jZeWm52/PIApAvo21GWfHNj ccHIcXS5HekTTL/66GCCzPJTsBANrtNZEE9sAkTy4+FTMzhGm0r1DkShEF1yqeow w8oRLEOl4G726LxWtF+4GHrlEOZPyqLjtw0FKrZo01M9We1gqvF5HsGLA3evtSpp AToE9zzZkkC3DHjjtQsnyBGGCXLSPjoHfKlLfAIozR2jhoKB7qKFxbPVH/6h95bY lLBheSWIZZvGWPw3c23wyT0auAbx/TMXdjDoYitNGeMb6mRc5H3ZRHGlToKvfDS9 lskFOmGXLVeXASADQbfjWfZ+JaQeyfMOgf2a/xBlcCFRcOjB67Syqd5oFsOsxzI= =GWsD -----END PGP SIGNATURE----- --r5Pyd7+fXNt84Ff3-- From owner-svn-src-head@freebsd.org Fri May 4 16:14:17 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7E343FB13DA; Fri, 4 May 2018 16:14:17 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: from mail-it0-f48.google.com (mail-it0-f48.google.com [209.85.214.48]) (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 1C3F97C55E; Fri, 4 May 2018 16:14:16 +0000 (UTC) (envelope-from cse.cem@gmail.com) Received: by mail-it0-f48.google.com with SMTP id f65-v6so3992897itd.3; Fri, 04 May 2018 09:14:16 -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=egYJmxFge7teY5kISE9BeoqDdCRisZGiSmA6c2QWN38=; b=CnlFqX33cdVDh7TUawx1YqXiGEZz7p/x1FwcoJmbZVwn/1IbNVoqnz9lKs6W0XelzV Aw9X3bOTuO/tx/pO1jNXS5HTQq3ComVGGwRYhf+JgUt54t6N3h37WCn9zaq6PNha3hJR TmBoFFdRPLdr5eExf805nYU3w3nqU+9zkSFIXwzjslGtjmGti5guUG1Fsewf3eWNafgl Vgo3RX1zhJulcqjBTmLmeMPjGjNfyO+pZhUw/p6cML8ZqUChhFmgYTqwfdoRodrdiD8D 0nY+tbuwmAOIRx50A/VIKZPuFtxK0rokwWuLQZmcmlWdIPnW+/o7u73Ux6FeSld0F4tQ NvuA== X-Gm-Message-State: ALQs6tCz7q3K/0J2hVg9lgvCD+AmOOXMoHuC/2hyQ8AJz0zxNsz5JXrx PFpY0wk//hIRdSABP336tu1Y7fSa X-Google-Smtp-Source: AB8JxZrxNkMnsr+/7UCD/vwLOZ+j7am9qDVzY7XDJDuc7bQ/oWOwDZoGiKYTOobPdcWGkxti2d05iQ== X-Received: by 2002:a24:f983:: with SMTP id l125-v6mr27910218ith.96.1525450455813; Fri, 04 May 2018 09:14:15 -0700 (PDT) Received: from mail-io0-f172.google.com (mail-io0-f172.google.com. [209.85.223.172]) by smtp.gmail.com with ESMTPSA id g1-v6sm1213746itg.27.2018.05.04.09.14.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 04 May 2018 09:14:15 -0700 (PDT) Received: by mail-io0-f172.google.com with SMTP id e20-v6so26258066iof.4; Fri, 04 May 2018 09:14:15 -0700 (PDT) X-Received: by 2002:a6b:da04:: with SMTP id x4-v6mr30213490iob.19.1525450455588; Fri, 04 May 2018 09:14:15 -0700 (PDT) MIME-Version: 1.0 Reply-To: cem@freebsd.org Received: by 2002:a02:a40b:0:0:0:0:0 with HTTP; Fri, 4 May 2018 09:14:15 -0700 (PDT) In-Reply-To: <20180504155301.GA56280@spindle.one-eyed-alien.net> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> From: Conrad Meyer Date: Fri, 4 May 2018 09:14:15 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys To: Brooks Davis 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.25 Precedence: list List-Id: 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, 04 May 2018 16:14:17 -0000 On Fri, May 4, 2018 at 8:53 AM, Brooks Davis wrote: > On Fri, May 04, 2018 at 04:00:48AM +0000, Mateusz Guzik wrote: >> Author: mjg >> Date: Fri May 4 04:00:48 2018 >> New Revision: 333240 >> URL: https://svnweb.freebsd.org/changeset/base/333240 >> >> Log: >> Allow __builtin_memmove instead of bcopy for small buffers of known size > > What is the justification for forcing a size rather than using the > compiler's built-in fallback to memmove? Is the kernel compilation > environment disabling that? Yes. I think the compiler can't use its builtin bcopy() in standalone mode. From owner-svn-src-head@freebsd.org Fri May 4 16:20:52 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 72BA2FB1537; Fri, 4 May 2018 16:20:52 +0000 (UTC) (envelope-from kmacybsd@gmail.com) Received: from mail-ot0-x242.google.com (mail-ot0-x242.google.com [IPv6:2607:f8b0:4003:c0f::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 0126F7EEF0; Fri, 4 May 2018 16:20:52 +0000 (UTC) (envelope-from kmacybsd@gmail.com) Received: by mail-ot0-x242.google.com with SMTP id l22-v6so25114708otj.0; Fri, 04 May 2018 09:20:51 -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=5okFOr+OecUDRqzcjddo/dR//BcR+R+IFvb1yJ2+M2I=; b=oBrqdjNKYxQ7KfdVolkNBv9eMy1Exgc20u/67NCMKtHcZGmFvGCTEQwNSvGl7t6ees 7XSIBOdwStMyy0E3sxJLeq5yWZ7ShKVzbxwzRmR9jIn6LeQtMfa0SqqLyeDwttr2vp/y d6v51DsxFST4wyZyi0T5QOULw4oJYJJryfKRjrKBTa5ubqyaE1Hvm0RWoOf+TV3D3Y7v t4SJQp/EutOL3xWBqTzr4uHBiCtgMMUVqXiwUnGNnS5JWy4Jz07OIX/LXc/gNFslihCn fH9B/iiG+O6DZYb1hPD+TwssX27jvRX2ZwF6kmVeTYpDrtuC0U9o9dd4zOWP9bF2Z2wM bzCw== 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=5okFOr+OecUDRqzcjddo/dR//BcR+R+IFvb1yJ2+M2I=; b=UIrO9QGxa/rvhhp7iyjAbKc7aJns7hDcYxpQYOHEDWKV/+hsWIncxRQE7GV6/P3rSb 5iXIEnhadDnkv5uTa5H4/C1NCt9ptlsob7SrhJsFeYeZY6zlXIDTzv8ycrjv3x1QkXhN +0aGvHZGtcM4efSLWCIYydCR4huroeP1n4l0lsly7cnKQm+1bJZ2c6KcMaWcv0bNQuuk y9YidvDDCnq+rVtYWkLDWsqUDfYOcFwXRcJEqXyHkJku9Je98VX6yd2OE9K18PKT3fkc 3/bT9uPSvdfp4BujWeYoGJTyi9tnfXMzR9c19MAYEQ6N7/pKAZWoXx/0WDDvjwRqYZ61 eG4Q== X-Gm-Message-State: ALQs6tCND4ljI62rdKJJNvkgEu/n3cclpUiOIiPuBlOeoF/nVDvM3ewZ IOWCuA+eJLqTS2S6NXOM7SzBPXsNdLRKHRpo2KuvaA== X-Google-Smtp-Source: AB8JxZoEbA+NK/U3R6l5Ga4NbtXgNNKVrJmcbkUY1VpYrS18GPtu2r/bfuxeaXfO7aEAAe/GMnO+Df469Ds9ELaci4s= X-Received: by 2002:a9d:3c0a:: with SMTP id q10-v6mr322946otc.39.1525450851124; Fri, 04 May 2018 09:20:51 -0700 (PDT) MIME-Version: 1.0 Sender: kmacybsd@gmail.com Received: by 2002:a9d:3f0:0:0:0:0:0 with HTTP; Fri, 4 May 2018 09:20:50 -0700 (PDT) In-Reply-To: <201805041407.w44E7EHg042498@pdx.rh.CN85.dnsmgr.net> References: <201805040651.w446p2iB010839@repo.freebsd.org> <201805041407.w44E7EHg042498@pdx.rh.CN85.dnsmgr.net> From: "K. Macy" Date: Fri, 4 May 2018 09:20:50 -0700 X-Google-Sender-Auth: V1EKBN9iHKrLEhw-HC-7c8LDPVs Message-ID: Subject: Re: svn commit: r333242 - head/sys/kern To: rgrimes@freebsd.org Cc: Matt Macy , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Content-Type: text/plain; charset="UTF-8" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 16:20:52 -0000 Yes. Good catch. Thanks. -M > > Missing Approved by: sbruno? > > >> Modified: >> head/sys/kern/kern_descrip.c >> >> Modified: head/sys/kern/kern_descrip.c >> ============================================================================== >> --- head/sys/kern/kern_descrip.c Fri May 4 04:05:07 2018 (r333241) >> +++ head/sys/kern/kern_descrip.c Fri May 4 06:51:01 2018 (r333242) >> @@ -1503,7 +1503,7 @@ filecaps_copy(const struct filecaps *src, struct filec >> >> if (src->fc_ioctls != NULL && !locked) >> return (false); >> - *dst = *src; >> + memcpy(dst, src, sizeof(*src)); >> if (src->fc_ioctls == NULL) >> return (true); >> >> @@ -1512,7 +1512,7 @@ filecaps_copy(const struct filecaps *src, struct filec >> >> size = sizeof(src->fc_ioctls[0]) * src->fc_nioctls; >> dst->fc_ioctls = malloc(size, M_FILECAPS, M_WAITOK); >> - bcopy(src->fc_ioctls, dst->fc_ioctls, size); >> + memcpy(dst->fc_ioctls, src->fc_ioctls, size); >> return (true); >> } >> >> >> > > -- > Rod Grimes rgrimes@freebsd.org > _______________________________________________ > 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" From owner-svn-src-head@freebsd.org Fri May 4 16:23:55 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1CCE7FB1771; Fri, 4 May 2018 16:23:55 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C4A137F39C; Fri, 4 May 2018 16:23: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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BFADE11519; Fri, 4 May 2018 16:23:54 +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 w44GNs1T099966; Fri, 4 May 2018 16:23:54 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44GNs6i099965; Fri, 4 May 2018 16:23:54 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201805041623.w44GNs6i099965@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Fri, 4 May 2018 16:23:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333255 - head/sys/arm/freescale/imx X-SVN-Group: head X-SVN-Commit-Author: ian X-SVN-Commit-Paths: head/sys/arm/freescale/imx X-SVN-Commit-Revision: 333255 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 16:23:55 -0000 Author: ian Date: Fri May 4 16:23:54 2018 New Revision: 333255 URL: https://svnweb.freebsd.org/changeset/base/333255 Log: Make reading imx6 gpio pins work correctly whether the pin is in open-drain mode or not. An earlier attempt to make this work was done in r320456, by always reading the pad status register (PSR) instead of the data register. But it turns out the values in PSR only reflect the electrical level of an output pin if the pad is configured with the SION (Set Input On) bit in the pinmux config, and most output gpio pads are not configured that way. So now a gpio read is done by returning the value from the data register, which works right whether the pin is configured for input or output, unless the pin has been set for OPENDRAIN mode, in which case the PSR is read instead. For this to work, the pin must also be configured with SION turned on in the fdt pinmux data, which is a reasonable thing to require for the unusual case of reading an open-drain output pin. Modified: head/sys/arm/freescale/imx/imx_gpio.c Modified: head/sys/arm/freescale/imx/imx_gpio.c ============================================================================== --- head/sys/arm/freescale/imx/imx_gpio.c Fri May 4 15:20:34 2018 (r333254) +++ head/sys/arm/freescale/imx/imx_gpio.c Fri May 4 16:23:54 2018 (r333255) @@ -644,7 +644,20 @@ imx51_gpio_pin_get(device_t dev, uint32_t pin, unsigne if (pin >= sc->gpio_npins) return (EINVAL); - *val = (READ4(sc, IMX_GPIO_PSR_REG) >> pin) & 1; + /* + * Normally a pin set for output can be read by reading the DR reg which + * indicates what value is being driven to that pin. The exception is + * pins configured for open-drain mode, in which case we have to read + * the pad status register in case the pin is being driven externally. + * Doing so requires that the SION bit be configured in pinmux, which + * isn't the case for most normal gpio pins, so only try to read via PSR + * if the OPENDRAIN flag is set, and it's the user's job to correctly + * configure SION along with open-drain output mode for those pins. + */ + if (sc->gpio_pins[pin].gp_flags & GPIO_PIN_OPENDRAIN) + *val = (READ4(sc, IMX_GPIO_PSR_REG) >> pin) & 1; + else + *val = (READ4(sc, IMX_GPIO_DR_REG) >> pin) & 1; return (0); } From owner-svn-src-head@freebsd.org Fri May 4 17:17:32 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1D4ABFB2482; Fri, 4 May 2018 17:17:32 +0000 (UTC) (envelope-from markj@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C57F569B5E; Fri, 4 May 2018 17:17:31 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BF9F911D03; Fri, 4 May 2018 17:17:31 +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 w44HHV8Z025061; Fri, 4 May 2018 17:17:31 GMT (envelope-from markj@FreeBSD.org) Received: (from markj@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44HHVV5025054; Fri, 4 May 2018 17:17:31 GMT (envelope-from markj@FreeBSD.org) Message-Id: <201805041717.w44HHVV5025054@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: markj set sender to markj@FreeBSD.org using -f From: Mark Johnston Date: Fri, 4 May 2018 17:17:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333256 - in head/sys: kern vm X-SVN-Group: head X-SVN-Commit-Author: markj X-SVN-Commit-Paths: in head/sys: kern vm X-SVN-Commit-Revision: 333256 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 17:17:32 -0000 Author: markj Date: Fri May 4 17:17:30 2018 New Revision: 333256 URL: https://svnweb.freebsd.org/changeset/base/333256 Log: Fix some races introduced in r332974. With r332974, when performing a synchronized access of a page's "queue" field, one must first check whether the page is logically dequeued. If so, then the page lock does not prevent the page from being removed from its page queue. Intoduce vm_page_queue(), which returns the page's logical queue index. In some cases, direct access to the "queue" field is still required, but such accesses should be confined to sys/vm. Reported and tested by: pho Reviewed by: kib Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D15280 Modified: head/sys/kern/kern_sendfile.c head/sys/kern/vfs_bio.c head/sys/vm/vm_object.c head/sys/vm/vm_page.c head/sys/vm/vm_page.h head/sys/vm/vm_pageout.c Modified: head/sys/kern/kern_sendfile.c ============================================================================== --- head/sys/kern/kern_sendfile.c Fri May 4 16:23:54 2018 (r333255) +++ head/sys/kern/kern_sendfile.c Fri May 4 17:17:30 2018 (r333256) @@ -163,7 +163,7 @@ sendfile_free_page(vm_page_t pg, bool nocache) */ if (nocache) vm_page_deactivate_noreuse(pg); - else if (pg->queue == PQ_ACTIVE) + else if (vm_page_active(pg)) vm_page_reference(pg); else vm_page_deactivate(pg); Modified: head/sys/kern/vfs_bio.c ============================================================================== --- head/sys/kern/vfs_bio.c Fri May 4 16:23:54 2018 (r333255) +++ head/sys/kern/vfs_bio.c Fri May 4 17:17:30 2018 (r333256) @@ -2933,7 +2933,7 @@ vfs_vmio_unwire(struct buf *bp, vm_page_t m) */ if (m->valid == 0 || (bp->b_flags & B_NOREUSE) != 0) vm_page_deactivate_noreuse(m); - else if (m->queue == PQ_ACTIVE) + else if (vm_page_active(m)) vm_page_reference(m); else vm_page_deactivate(m); Modified: head/sys/vm/vm_object.c ============================================================================== --- head/sys/vm/vm_object.c Fri May 4 16:23:54 2018 (r333255) +++ head/sys/vm/vm_object.c Fri May 4 17:17:30 2018 (r333256) @@ -2379,9 +2379,9 @@ sysctl_vm_object_list(SYSCTL_HANDLER_ARGS) * sysctl is only meant to give an * approximation of the system anyway. */ - if (vm_page_active(m)) + if (m->queue == PQ_ACTIVE) kvo->kvo_active++; - else if (vm_page_inactive(m)) + else if (m->queue == PQ_INACTIVE) kvo->kvo_inactive++; } Modified: head/sys/vm/vm_page.c ============================================================================== --- head/sys/vm/vm_page.c Fri May 4 16:23:54 2018 (r333255) +++ head/sys/vm/vm_page.c Fri May 4 17:17:30 2018 (r333256) @@ -2403,7 +2403,7 @@ retry: vm_reserv_size(level)) - pa); #endif } else if (object->memattr == VM_MEMATTR_DEFAULT && - vm_page_enqueued(m) && !vm_page_busied(m)) { + vm_page_queue(m) != PQ_NONE && !vm_page_busied(m)) { /* * The page is allocated but eligible for * relocation. Extend the current run by one @@ -2554,7 +2554,8 @@ retry: error = EINVAL; else if (object->memattr != VM_MEMATTR_DEFAULT) error = EINVAL; - else if (vm_page_enqueued(m) && !vm_page_busied(m)) { + else if (vm_page_queue(m) != PQ_NONE && + !vm_page_busied(m)) { KASSERT(pmap_page_get_memattr(m) == VM_MEMATTR_DEFAULT, ("page %p has an unexpected memattr", m)); @@ -3391,9 +3392,9 @@ vm_page_activate(vm_page_t m) { int queue; - vm_page_lock_assert(m, MA_OWNED); + vm_page_assert_locked(m); - if ((queue = m->queue) == PQ_ACTIVE || m->wire_count > 0 || + if ((queue = vm_page_queue(m)) == PQ_ACTIVE || m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) { if (queue == PQ_ACTIVE && m->act_count < ACT_INIT) m->act_count = ACT_INIT; @@ -3610,7 +3611,7 @@ vm_page_unwire(vm_page_t m, uint8_t queue) if (!unwired || (m->oflags & VPO_UNMANAGED) != 0 || m->object == NULL) return (unwired); - if (m->queue == queue) { + if (vm_page_queue(m) == queue) { if (queue == PQ_ACTIVE) vm_page_reference(m); else if (queue != PQ_NONE) @@ -3716,7 +3717,7 @@ vm_page_launder(vm_page_t m) if (m->wire_count > 0 || (m->oflags & VPO_UNMANAGED) != 0) return; - if (m->queue == PQ_LAUNDRY) + if (vm_page_in_laundry(m)) vm_page_requeue(m); else { vm_page_remque(m); Modified: head/sys/vm/vm_page.h ============================================================================== --- head/sys/vm/vm_page.h Fri May 4 16:23:54 2018 (r333255) +++ head/sys/vm/vm_page.h Fri May 4 17:17:30 2018 (r333256) @@ -785,43 +785,45 @@ vm_page_replace_checked(vm_page_t mnew, vm_object_t ob (void)mret; } -static inline bool -vm_page_active(vm_page_t m) +/* + * vm_page_queue: + * + * Return the index of the queue containing m. This index is guaranteed + * not to change while the page lock is held. + */ +static inline uint8_t +vm_page_queue(vm_page_t m) { - return (m->queue == PQ_ACTIVE); + vm_page_assert_locked(m); + + if ((m->aflags & PGA_DEQUEUE) != 0) + return (PQ_NONE); + atomic_thread_fence_acq(); + return (m->queue); } static inline bool -vm_page_inactive(vm_page_t m) +vm_page_active(vm_page_t m) { - return (m->queue == PQ_INACTIVE); + return (vm_page_queue(m) == PQ_ACTIVE); } static inline bool -vm_page_in_laundry(vm_page_t m) +vm_page_inactive(vm_page_t m) { - return (m->queue == PQ_LAUNDRY || m->queue == PQ_UNSWAPPABLE); + return (vm_page_queue(m) == PQ_INACTIVE); } -/* - * vm_page_enqueued: - * - * Return true if the page is logically enqueued and no deferred - * dequeue is pending. - */ static inline bool -vm_page_enqueued(vm_page_t m) +vm_page_in_laundry(vm_page_t m) { + uint8_t queue; - vm_page_assert_locked(m); - - if ((m->aflags & PGA_DEQUEUE) != 0) - return (false); - atomic_thread_fence_acq(); - return (m->queue != PQ_NONE); + queue = vm_page_queue(m); + return (queue == PQ_LAUNDRY || queue == PQ_UNSWAPPABLE); } /* Modified: head/sys/vm/vm_pageout.c ============================================================================== --- head/sys/vm/vm_pageout.c Fri May 4 16:23:54 2018 (r333255) +++ head/sys/vm/vm_pageout.c Fri May 4 17:17:30 2018 (r333256) @@ -384,12 +384,12 @@ more: break; } vm_page_test_dirty(p); - if (p->dirty == 0 || !vm_page_in_laundry(p)) { + if (p->dirty == 0) { ib = 0; break; } vm_page_lock(p); - if (vm_page_held(p)) { + if (vm_page_held(p) || !vm_page_in_laundry(p)) { vm_page_unlock(p); ib = 0; break; @@ -412,10 +412,10 @@ more: if ((p = vm_page_next(ps)) == NULL || vm_page_busied(p)) break; vm_page_test_dirty(p); - if (p->dirty == 0 || !vm_page_in_laundry(p)) + if (p->dirty == 0) break; vm_page_lock(p); - if (vm_page_held(p)) { + if (vm_page_held(p) || !vm_page_in_laundry(p)) { vm_page_unlock(p); break; } @@ -1129,7 +1129,7 @@ vm_pageout_reinsert_inactive_page(struct scan_state *s { struct vm_domain *vmd; - if (!vm_page_inactive(m) || (m->aflags & PGA_ENQUEUED) != 0) + if (m->queue != PQ_INACTIVE || (m->aflags & PGA_ENQUEUED) != 0) return (0); vm_page_aflag_set(m, PGA_ENQUEUED); if ((m->aflags & PGA_REQUEUE_HEAD) != 0) { From owner-svn-src-head@freebsd.org Fri May 4 17:28:45 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 341C0FB288E; Fri, 4 May 2018 17:28:45 +0000 (UTC) (envelope-from sbruno@freebsd.org) Received: from mail.ignoranthack.me (ignoranthack.me [199.102.79.106]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B6FDC6D458; Fri, 4 May 2018 17:28:44 +0000 (UTC) (envelope-from sbruno@freebsd.org) Received: from [192.168.0.6] (67-0-214-163.albq.qwest.net [67.0.214.163]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: sbruno@ignoranthack.me) by mail.ignoranthack.me (Postfix) with ESMTPSA id 10CA219426D; Fri, 4 May 2018 09:17:32 +0000 (UTC) Subject: Re: svn commit: r333242 - head/sys/kern To: "K. Macy" , rgrimes@freebsd.org Cc: Matt Macy , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers References: <201805040651.w446p2iB010839@repo.freebsd.org> <201805041407.w44E7EHg042498@pdx.rh.CN85.dnsmgr.net> From: Sean Bruno Openpgp: preference=signencrypt Autocrypt: addr=sbruno@freebsd.org; prefer-encrypt=mutual; keydata= xsBNBFk+0UEBCADaf4bgxxKvMOhRV5NPoGWRCCGm49d6+1VFNlQ77WsY/+Zvf95TPULdRlnG w648KfxWt7+O3kdKhdRwnqlXWC7zA2Qt0dRE1yIqOGJ4jp4INvp/bcxWzgr0aoKOjrlnfxRV bh+s0rzdZt6TsNL3cVYxkC8oezjaUkHdW4mFJU249U1QJogkF8g0FeKNfEcjEkwJNX6lQJH+ EzCWT0NCk6J+Xyo+zOOljxPp1OUfdvZi3ulkU/qTZstGVWxFVsP8xQklV/y3AFcbIYx6iGJ4 5L7WuB0IWhO7Z4yHENr8wFaNYwpod9i4egX2BugbrM8pOfhN2/qqdeG1L5LMtXw3yyAhABEB AAHNN1NlYW4gQnJ1bm8gKEZyZWVCU0QgRGV2ZWxvcGVyIEtleSkgPHNicnVub0BmcmVlYnNk Lm9yZz7CwJQEEwEKAD4WIQToxOn4gDUE4eP0ujS95PX+ibX8tgUCWT7RQQIbAwUJBaOagAUL CQgHAwUVCgkICwUWAwIBAAIeAQIXgAAKCRC95PX+ibX8ttKTCACFKzRc56EBAlVotq02EjZP SfX+unlk6AuPBzShxqRxeK+bGYVCigrYd1M8nnskv0dEiZ5iYeND9HIxbpEyopqgpVTibA7w gBXaZ7SOEhNX1wXwg14JrralfSmPFMYni+sWegPMX/zwfAsn1z4mG1Nn44Xqo3o7CfpkMPy6 M5Bow2IDzIhEYISLR+urxs74/aHU35PLtBSDtu18914SEMDdva27MARN8mbeCDbuJVfGCPWy YHuy2t+9u2Zn5Dd+t3sBXLM9gpeaMm+4x6TNPpESygbVdh4tDdjVZ9DK/bWFg0kMgfZoaq6J l0jNsQXrZV3bzYNFbVw04pFcvA2GIJ7xzsBNBFk+0UEBCADIXBmQOaKMHGbc9vwjhV4Oj5aZ DdhNedn12FVeTdOXJvuTOusgxS29lla0RenHGDsgD08UiFpasBXWq/E+BhQ19d+iRbLLR17O KKc1ZGefoVbLARLXD68J5j4XAyK+6k2KqBLlqzAEpHTzsksM9naARkVXiEVcrt6ciw0FSm8n kuK3gDKKe93XfzfP+TQdbvvzJc7Fa+appLbXz61TM1aikaQlda8bWubDegwXbuoJdB34xU1m yjr/N4o+raL0x7QrzdH+wwgrTTo+H4S2c1972Skt5K5tbxLowfHicRl23V8itVQr3sBtlX4+ 66q+Apm7+R36bUS/k+G45Sp6iPpxABEBAAHCwHwEGAEKACYWIQToxOn4gDUE4eP0ujS95PX+ ibX8tgUCWT7RQQIbDAUJBaOagAAKCRC95PX+ibX8trrIB/9Pljqt/JGamD9tx4dOVmxSyFg9 z2xzgklTLuDgS73MM120mM7ao9AQUeWiSle/H0UCK7xPOzC/aeUC4oygDQKAfkkNbCNTo3+A qDjBRA8qx0e9a/QjDL+RFgD4L5kLT4tToY8T8HaBp8h03LBfk510IaI8oL/Jg7vpM3PDtJMW tUi2H+yNFmL3NfM2oBToWKLFsoP54f/eeeImrNnrlLjLHPzqS+/9apgYqX2Jwiv3tHBc4FTO GuY8VvF7BpixJs8Pc2RUuCfSyodrp1YG1kRGlXAH0cqwwr0Zmk4+7dZvtVQMCl6kS6q1+84q JwtItxS2eXSEA4NO0sQ3BXUywANh Message-ID: <715d0d1b-d71e-b190-7855-a0d3dc6c7212@freebsd.org> Date: Fri, 4 May 2018 11:28:33 -0600 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:52.0) Gecko/20100101 Thunderbird/52.7.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="wvbWc5rwFoJQweoYQu6rFMvvKpZunD1jW" X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 17:28:45 -0000 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --wvbWc5rwFoJQweoYQu6rFMvvKpZunD1jW Content-Type: multipart/mixed; boundary="YmTKEIzqwR4oR3SPw0ECbsOf8HMHLkqgO"; protected-headers="v1" From: Sean Bruno To: "K. Macy" , rgrimes@freebsd.org Cc: Matt Macy , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Message-ID: <715d0d1b-d71e-b190-7855-a0d3dc6c7212@freebsd.org> Subject: Re: svn commit: r333242 - head/sys/kern References: <201805040651.w446p2iB010839@repo.freebsd.org> <201805041407.w44E7EHg042498@pdx.rh.CN85.dnsmgr.net> In-Reply-To: --YmTKEIzqwR4oR3SPw0ECbsOf8HMHLkqgO Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable For the "official" record: Approved-by: sbruno :-) sean p.s. silly svn didn't stop this commit, I wonder why. On 05/04/18 10:20, K. Macy wrote: > Yes. Good catch. Thanks. >=20 > -M >=20 >> >> Missing Approved by: sbruno? >> >> >>> Modified: >>> head/sys/kern/kern_descrip.c >>> >>> Modified: head/sys/kern/kern_descrip.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/kern/kern_descrip.c Fri May 4 04:05:07 2018 = (r333241) >>> +++ head/sys/kern/kern_descrip.c Fri May 4 06:51:01 2018 = (r333242) >>> @@ -1503,7 +1503,7 @@ filecaps_copy(const struct filecaps *src, struc= t filec >>> >>> if (src->fc_ioctls !=3D NULL && !locked) >>> return (false); >>> - *dst =3D *src; >>> + memcpy(dst, src, sizeof(*src)); >>> if (src->fc_ioctls =3D=3D NULL) >>> return (true); >>> >>> @@ -1512,7 +1512,7 @@ filecaps_copy(const struct filecaps *src, struc= t filec >>> >>> size =3D sizeof(src->fc_ioctls[0]) * src->fc_nioctls; >>> dst->fc_ioctls =3D malloc(size, M_FILECAPS, M_WAITOK); >>> - bcopy(src->fc_ioctls, dst->fc_ioctls, size); >>> + memcpy(dst->fc_ioctls, src->fc_ioctls, size); >>> return (true); >>> } >>> >>> >>> >> >> -- >> Rod Grimes rgrimes@fre= ebsd.org >> _______________________________________________ >> 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= " >=20 >=20 --YmTKEIzqwR4oR3SPw0ECbsOf8HMHLkqgO-- --wvbWc5rwFoJQweoYQu6rFMvvKpZunD1jW Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQGSBAEBCgB9FiEE6MTp+IA1BOHj9Lo0veT1/om1/LYFAlrsmEFfFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEU4 QzRFOUY4ODAzNTA0RTFFM0Y0QkEzNEJERTRGNUZFODlCNUZDQjYACgkQveT1/om1 /LY8Kwf4uEIE7xaBLzSrBoflWhI2CzoqlbwCqyszDanZEFf3burxecM5oCKMJkt1 4RNXfWDviKV83C+70068IVrA0NnRYUFYgbzf6L8Z7reytJ21rapyTzUKytwJV3eT BQw0a8yzsT9tJh6f3iy6OyTOPxya/HKhya8wVMhGGkijQ6pPO13euAEWS9ZhGk6o wt0T+fGLWh04Qew0fruAspA2DucWNz2w4pBEyYE6KZpYCpt4ZAQupXBrmbtLBDqP MFULnmzWDIcfx0xcJx3E4x4XNjTSZpf41MWInoZ6T2yXXyWrCHGvwGt5AGLxWsv3 CNx1NvwbHdwl68UXewgANGwGlwi9 =pNCp -----END PGP SIGNATURE----- --wvbWc5rwFoJQweoYQu6rFMvvKpZunD1jW-- From owner-svn-src-head@freebsd.org Fri May 4 18:25:08 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7A865FB46D7; Fri, 4 May 2018 18:25:08 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 28B607F9E1; Fri, 4 May 2018 18:25:08 +0000 (UTC) (envelope-from mmacy@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1F66F12889; Fri, 4 May 2018 18:25:08 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44IP7oZ064348; Fri, 4 May 2018 18:25:07 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44IP7w7064347; Fri, 4 May 2018 18:25:07 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805041825.w44IP7w7064347@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 May 2018 18:25:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333257 - head/sys/conf X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/sys/conf X-SVN-Commit-Revision: 333257 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 18:25:08 -0000 Author: mmacy Date: Fri May 4 18:25:07 2018 New Revision: 333257 URL: https://svnweb.freebsd.org/changeset/base/333257 Log: fix gcc8 compile Approved by: sbruno Modified: head/sys/conf/kern.mk Modified: head/sys/conf/kern.mk ============================================================================== --- head/sys/conf/kern.mk Fri May 4 17:17:30 2018 (r333256) +++ head/sys/conf/kern.mk Fri May 4 18:25:07 2018 (r333257) @@ -65,6 +65,9 @@ CWARNEXTRA+= -Wno-error=misleading-indentation \ -Wno-error=shift-overflow \ -Wno-error=tautological-compare .endif +.if ${COMPILER_VERSION} >= 80000 +CWARNEXTRA+= -Wno-error=packed-not-aligned +.endif .else # For gcc 4.2, eliminate the too-often-wrong warnings about uninitialized vars. CWARNEXTRA?= -Wno-uninitialized From owner-svn-src-head@freebsd.org Fri May 4 18:57:06 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CF162FB5447; Fri, 4 May 2018 18:57:05 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7A69D6D941; Fri, 4 May 2018 18:57:05 +0000 (UTC) (envelope-from mmacy@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7571B12D66; Fri, 4 May 2018 18:57:05 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44Iv5gm079338; Fri, 4 May 2018 18:57:05 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44Iv5iX079337; Fri, 4 May 2018 18:57:05 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805041857.w44Iv5iX079337@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 May 2018 18:57:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333258 - head/sys/net X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/sys/net X-SVN-Commit-Revision: 333258 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 18:57:06 -0000 Author: mmacy Date: Fri May 4 18:57:05 2018 New Revision: 333258 URL: https://svnweb.freebsd.org/changeset/base/333258 Log: fix gcc8 warnings Approved by: sbruno Modified: head/sys/net/iflib.c Modified: head/sys/net/iflib.c ============================================================================== --- head/sys/net/iflib.c Fri May 4 18:25:07 2018 (r333257) +++ head/sys/net/iflib.c Fri May 4 18:57:05 2018 (r333258) @@ -829,6 +829,7 @@ netmap_fl_refill(iflib_rxq_t rxq, struct netmap_kring * so move head back by one unit */ head = nm_prev(head, lim); + nic_i = UINT_MAX; while (nm_i != head) { for (int tmp_pidx = 0; tmp_pidx < IFLIB_MAX_RX_REFRESH && nm_i != head; tmp_pidx++) { struct netmap_slot *slot = &ring->slot[nm_i]; @@ -876,7 +877,8 @@ netmap_fl_refill(iflib_rxq_t rxq, struct netmap_kring if (map) bus_dmamap_sync(fl->ifl_ifdi->idi_tag, fl->ifl_ifdi->idi_map, BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); - ctx->isc_rxd_flush(ctx->ifc_softc, rxq->ifr_id, fl->ifl_id, nic_i); + if (__predict_true(nic_i != UINT_MAX)) + ctx->isc_rxd_flush(ctx->ifc_softc, rxq->ifr_id, fl->ifl_id, nic_i); return (0); } @@ -1409,7 +1411,7 @@ iflib_fast_intr_rxtx(void *arg) iflib_filter_info_t info = arg; struct grouptask *gtask = info->ifi_task; iflib_rxq_t rxq = (iflib_rxq_t)info->ifi_ctx; - if_ctx_t ctx; + if_ctx_t ctx = NULL;; int i, cidx; if (!iflib_started) @@ -1419,6 +1421,7 @@ iflib_fast_intr_rxtx(void *arg) if (info->ifi_filter != NULL && info->ifi_filter(info->ifi_filter_arg) == FILTER_HANDLED) return (FILTER_HANDLED); + MPASS(rxq->ifr_ntxqirq); for (i = 0; i < rxq->ifr_ntxqirq; i++) { qidx_t txqid = rxq->ifr_txqid[i]; @@ -1889,10 +1892,8 @@ _iflib_fl_refill(if_ctx_t ctx, iflib_fl_t fl, int coun #endif { struct rxq_refill_cb_arg cb_arg; - iflib_rxq_t q; cb_arg.error = 0; - q = fl->ifl_rxq; MPASS(sd_map != NULL); MPASS(sd_map[frag_idx] != NULL); err = bus_dmamap_load(fl->ifl_desc_tag, sd_map[frag_idx], @@ -3541,8 +3542,9 @@ iflib_txq_drain(struct ifmp_ring *r, uint32_t cidx, ui #endif do_prefetch = (ctx->ifc_flags & IFC_PREFETCH); avail = TXQ_AVAIL(txq); + err = 0; for (desc_used = i = 0; i < count && avail > MAX_TX_DESC(ctx) + 2; i++) { - int pidx_prev, rem = do_prefetch ? count - i : 0; + int rem = do_prefetch ? count - i : 0; mp = _ring_peek_one(r, cidx, i, rem); MPASS(mp != NULL && *mp != NULL); @@ -3552,7 +3554,6 @@ iflib_txq_drain(struct ifmp_ring *r, uint32_t cidx, ui continue; } in_use_prev = txq->ift_in_use; - pidx_prev = txq->ift_pidx; err = iflib_encap(txq, mp); if (__predict_false(err)) { DBG_COUNTER_INC(txq_drain_encapfail); @@ -3646,7 +3647,6 @@ _task_fn_tx(void *context) iflib_txq_t txq = context; if_ctx_t ctx = txq->ift_ctx; struct ifnet *ifp = ctx->ifc_ifp; - int rc; #ifdef IFLIB_DIAGNOSTICS txq->ift_cpu_exec_count[curcpu]++; @@ -3665,8 +3665,11 @@ _task_fn_tx(void *context) if (ctx->ifc_flags & IFC_LEGACY) IFDI_INTR_ENABLE(ctx); else { - rc = IFDI_TX_QUEUE_INTR_ENABLE(ctx, txq->ift_id); - KASSERT(rc != ENOTSUP, ("MSI-X support requires queue_intr_enable, but not implemented in driver")); +#ifdef INVARIANTS + int rc = +#endif + IFDI_TX_QUEUE_INTR_ENABLE(ctx, txq->ift_id); + KASSERT(rc != ENOTSUP, ("MSI-X support requires queue_intr_enable, but not implemented in driver")); } } @@ -3676,7 +3679,6 @@ _task_fn_rx(void *context) iflib_rxq_t rxq = context; if_ctx_t ctx = rxq->ifr_ctx; bool more; - int rc; uint16_t budget; #ifdef IFLIB_DIAGNOSTICS @@ -3701,9 +3703,12 @@ _task_fn_rx(void *context) if (ctx->ifc_flags & IFC_LEGACY) IFDI_INTR_ENABLE(ctx); else { - DBG_COUNTER_INC(rx_intr_enables); - rc = IFDI_RX_QUEUE_INTR_ENABLE(ctx, rxq->ifr_id); +#ifdef INVARIANTS + int rc = +#endif + IFDI_RX_QUEUE_INTR_ENABLE(ctx, rxq->ifr_id); KASSERT(rc != ENOTSUP, ("MSI-X support requires queue_intr_enable, but not implemented in driver")); + DBG_COUNTER_INC(rx_intr_enables); } } if (__predict_false(!(if_getdrvflags(ctx->ifc_ifp) & IFF_DRV_RUNNING))) @@ -4198,7 +4203,7 @@ iflib_device_probe(device_t dev) int iflib_device_register(device_t dev, void *sc, if_shared_ctx_t sctx, if_ctx_t *ctxp) { - int err, rid, msix, msix_bar; + int err, rid, msix; if_ctx_t ctx; if_t ifp; if_softc_ctx_t scctx; @@ -4308,7 +4313,6 @@ iflib_device_register(device_t dev, void *sc, if_share ctx->ifc_flags |= IFC_DMAR; #endif - msix_bar = scctx->isc_msix_bar; main_txq = (sctx->isc_flags & IFLIB_HAS_TXCQ) ? 1 : 0; main_rxq = (sctx->isc_flags & IFLIB_HAS_RXCQ) ? 1 : 0; @@ -5757,6 +5761,8 @@ mp_ndesc_handler(SYSCTL_HANDLER_ARGS) if (ctx->ifc_sctx) nqs = ctx->ifc_sctx->isc_nrxqs; break; + default: + panic("unhandled type"); } if (nqs == 0) nqs = 8; From owner-svn-src-head@freebsd.org Fri May 4 18:59:01 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A3C65FB5520; Fri, 4 May 2018 18:59:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 551A36E2BB; Fri, 4 May 2018 18:59:01 +0000 (UTC) (envelope-from mmacy@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4E99012D72; Fri, 4 May 2018 18:59:01 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44Ix11G079443; Fri, 4 May 2018 18:59:01 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44Ix1Tt079442; Fri, 4 May 2018 18:59:01 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805041859.w44Ix1Tt079442@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 May 2018 18:59:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333259 - head/sys/dev/e1000 X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/sys/dev/e1000 X-SVN-Commit-Revision: 333259 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 18:59:01 -0000 Author: mmacy Date: Fri May 4 18:59:01 2018 New Revision: 333259 URL: https://svnweb.freebsd.org/changeset/base/333259 Log: fix case where pidx_last might be used uninitialized Reviewed by: sbruno Modified: head/sys/dev/e1000/em_txrx.c Modified: head/sys/dev/e1000/em_txrx.c ============================================================================== --- head/sys/dev/e1000/em_txrx.c Fri May 4 18:57:05 2018 (r333258) +++ head/sys/dev/e1000/em_txrx.c Fri May 4 18:59:01 2018 (r333259) @@ -401,7 +401,7 @@ em_isc_txd_encap(void *arg, if_pkt_info_t pi) * needs End Of Packet (EOP) * and Report Status (RS) */ - if (txd_flags) { + if (txd_flags && nsegs) { txr->tx_rsq[txr->tx_rs_pidx] = pidx_last; DPRINTF(iflib_get_dev(sc->ctx), "setting to RS on %d rs_pidx %d first: %d\n", pidx_last, txr->tx_rs_pidx, first); txr->tx_rs_pidx = (txr->tx_rs_pidx+1) & (ntxd-1); From owner-svn-src-head@freebsd.org Fri May 4 19:21:03 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A8198FB5A8D; Fri, 4 May 2018 19:21:03 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 55FD17923C; Fri, 4 May 2018 19:21:03 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (ralph.baldwin.cx [66.234.199.215]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: jhb) by smtp.freebsd.org (Postfix) with ESMTPSA id 35E7A1F013; Fri, 4 May 2018 19:21:03 +0000 (UTC) (envelope-from jhb@freebsd.org) From: John Baldwin To: Sean Bruno Cc: "K. Macy" , rgrimes@freebsd.org, Matt Macy , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers Subject: Re: svn commit: r333242 - head/sys/kern Date: Fri, 04 May 2018 12:20:45 -0700 Message-ID: <2931484.uUDN2z4XQf@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.1-STABLE; KDE/4.14.30; amd64; ; ) In-Reply-To: <715d0d1b-d71e-b190-7855-a0d3dc6c7212@freebsd.org> References: <201805040651.w446p2iB010839@repo.freebsd.org> <715d0d1b-d71e-b190-7855-a0d3dc6c7212@freebsd.org> 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.25 Precedence: list List-Id: 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, 04 May 2018 19:21:03 -0000 On Friday, May 04, 2018 11:28:33 AM Sean Bruno wrote: > For the "official" record: > > Approved-by: sbruno > > :-) > > sean > > p.s. silly svn didn't stop this commit, I wonder why. There is no commit hook for mentor approvals. It's on the honor system as it were. -- John Baldwin From owner-svn-src-head@freebsd.org Fri May 4 19:21:04 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C6391FB5A96; Fri, 4 May 2018 19:21:04 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from smtp.freebsd.org (unknown [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 7BADF79257; Fri, 4 May 2018 19:21:04 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (ralph.baldwin.cx [66.234.199.215]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: jhb) by smtp.freebsd.org (Postfix) with ESMTPSA id 5FB051F014; Fri, 4 May 2018 19:21:04 +0000 (UTC) (envelope-from jhb@freebsd.org) From: John Baldwin To: Matt Macy Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333242 - head/sys/kern Date: Fri, 04 May 2018 12:16:42 -0700 Message-ID: <3408582.QRuzgOyxgv@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.1-STABLE; KDE/4.14.30; amd64; ; ) In-Reply-To: <201805040651.w446p2iB010839@repo.freebsd.org> References: <201805040651.w446p2iB010839@repo.freebsd.org> 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.25 Precedence: list List-Id: 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, 04 May 2018 19:21:04 -0000 On Friday, May 04, 2018 06:51:02 AM Matt Macy wrote: > Author: mmacy > Date: Fri May 4 06:51:01 2018 > New Revision: 333242 > URL: https://svnweb.freebsd.org/changeset/base/333242 > > Log: > `dup1_processes -t 96 -s 5` on a dual 8160 > > x dup_before > + dup_after > +------------------------------------------------------------+ > | x + | > |x x x x ++ ++| > | |____AM___| |AM|| > +------------------------------------------------------------+ > N Min Max Median Avg Stddev > x 5 1.514954e+08 1.5230351e+08 1.5206157e+08 1.5199371e+08 341205.71 > + 5 1.5494336e+08 1.5519569e+08 1.5511982e+08 1.5508323e+08 96232.829 > Difference at 95.0% confidence > 3.08952e+06 +/- 365604 > 2.03266% +/- 0.245071% > (Student's t, pooled s = 250681) The log doesn't quite describe what the change is though and why it results in this change. bcopy -> memcpy to permit using the compiler builtin I understand, but using memcpy instead of a structure copy seems rather odd as I would expect the compiler to treat a structure copy as the same as __builtin_memcpy(). > Reported by: mjg@ > MFC after: 1 week > > Modified: > head/sys/kern/kern_descrip.c > > Modified: head/sys/kern/kern_descrip.c > ============================================================================== > --- head/sys/kern/kern_descrip.c Fri May 4 04:05:07 2018 (r333241) > +++ head/sys/kern/kern_descrip.c Fri May 4 06:51:01 2018 (r333242) > @@ -1503,7 +1503,7 @@ filecaps_copy(const struct filecaps *src, struct filec > > if (src->fc_ioctls != NULL && !locked) > return (false); > - *dst = *src; > + memcpy(dst, src, sizeof(*src)); > if (src->fc_ioctls == NULL) > return (true); > > @@ -1512,7 +1512,7 @@ filecaps_copy(const struct filecaps *src, struct filec > > size = sizeof(src->fc_ioctls[0]) * src->fc_nioctls; > dst->fc_ioctls = malloc(size, M_FILECAPS, M_WAITOK); > - bcopy(src->fc_ioctls, dst->fc_ioctls, size); > + memcpy(dst->fc_ioctls, src->fc_ioctls, size); > return (true); > } > > -- John Baldwin From owner-svn-src-head@freebsd.org Fri May 4 19:21:06 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7AED3FB5AB3; Fri, 4 May 2018 19:21:06 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C996779298; Fri, 4 May 2018 19:21:05 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from ralph.baldwin.cx (ralph.baldwin.cx [66.234.199.215]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) (Authenticated sender: jhb) by smtp.freebsd.org (Postfix) with ESMTPSA id 9A5481F015; Fri, 4 May 2018 19:21:05 +0000 (UTC) (envelope-from jhb@freebsd.org) From: John Baldwin To: Peter Grehan Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333230 - head/sys/dev/pci Date: Fri, 04 May 2018 12:14:27 -0700 Message-ID: <2195289.fHIjn0Ke9p@ralph.baldwin.cx> User-Agent: KMail/4.14.10 (FreeBSD/11.1-STABLE; KDE/4.14.30; amd64; ; ) In-Reply-To: <201805032251.w43MpihV067395@repo.freebsd.org> References: <201805032251.w43MpihV067395@repo.freebsd.org> 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.25 Precedence: list List-Id: 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, 04 May 2018 19:21:06 -0000 On Thursday, May 03, 2018 10:51:44 PM Peter Grehan wrote: > Author: grehan > Date: Thu May 3 22:51:44 2018 > New Revision: 333230 > URL: https://svnweb.freebsd.org/changeset/base/333230 > > Log: > Allow PCI VGA devices to be detached. > > GPUs often have a VGA PCI class code and are probed/attached > by the VGA driver. Allow them to be detached so they can > be presented as passthru devices to VM guests. > > Submitted by: mmacy > Reviewed by: jhb, imp, rgrimes > MFC after: 3 weeks > Differential Revision: https://reviews.freebsd.org/D15269 I forgout about this earlier, sorry. We probably should also explicitly release any resources cached in sc->vga_bios and sc->vga_bars. In theory they should be clear by the time bus_generic_detach finishes, but perhaps we should walk the resources and whine if they aren't released and then release them. -- John Baldwin From owner-svn-src-head@freebsd.org Fri May 4 19:28:06 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 306CBFB5DB9; Fri, 4 May 2018 19:28:06 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id D85647B454; Fri, 4 May 2018 19:28: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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id B527D13240; Fri, 4 May 2018 19:28:05 +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 w44JS51i094032; Fri, 4 May 2018 19:28:05 GMT (envelope-from ian@FreeBSD.org) Received: (from ian@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44JS5vo094031; Fri, 4 May 2018 19:28:05 GMT (envelope-from ian@FreeBSD.org) Message-Id: <201805041928.w44JS5vo094031@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ian set sender to ian@FreeBSD.org using -f From: Ian Lepore Date: Fri, 4 May 2018 19:28:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333260 - head/sys/arm/freescale/imx X-SVN-Group: head X-SVN-Commit-Author: ian X-SVN-Commit-Paths: head/sys/arm/freescale/imx X-SVN-Commit-Revision: 333260 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 19:28:06 -0000 Author: ian Date: Fri May 4 19:28:05 2018 New Revision: 333260 URL: https://svnweb.freebsd.org/changeset/base/333260 Log: Properly support the GPIO_PIN_PRESET_{LOW,HIGH} options when configuring a gpio pin. If neither of the options is specified, pre-set the pin's output value to the pin's current input value, to achieve glitch-free transitions to output mode on pins that are pulled up or down at reset or via fdt pinctrl data. Modified: head/sys/arm/freescale/imx/imx_gpio.c Modified: head/sys/arm/freescale/imx/imx_gpio.c ============================================================================== --- head/sys/arm/freescale/imx/imx_gpio.c Fri May 4 18:59:01 2018 (r333259) +++ head/sys/arm/freescale/imx/imx_gpio.c Fri May 4 19:28:05 2018 (r333260) @@ -506,21 +506,41 @@ static void imx51_gpio_pin_configure(struct imx51_gpio_softc *sc, struct gpio_pin *pin, unsigned int flags) { - u_int newflags; + u_int newflags, pad; mtx_lock_spin(&sc->sc_mtx); /* - * Manage input/output; other flags not supported yet. + * Manage input/output; other flags not supported yet (maybe not ever, + * since we have no connection to the pad config registers from here). * + * When setting a pin to output, honor the PRESET_[LOW,HIGH] flags if + * present. Otherwise, for glitchless transistions on pins with pulls, + * read the current state of the pad and preset the DR register to drive + * the current value onto the pin before enabling the pin for output. + * * Note that changes to pin->gp_flags must be acccumulated in newflags * and stored with a single writeback to gp_flags at the end, to enable - * unlocked reads of that value elsewhere. + * unlocked reads of that value elsewhere. This is only about unlocked + * access to gp_flags from elsewhere; we still use locking in this + * function to protect r-m-w access to the hardware registers. */ if (flags & (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT)) { newflags = pin->gp_flags & ~(GPIO_PIN_INPUT | GPIO_PIN_OUTPUT); if (flags & GPIO_PIN_OUTPUT) { + if (flags & GPIO_PIN_PRESET_LOW) { + pad = 0; + } else if (flags & GPIO_PIN_PRESET_HIGH) { + pad = 1; + } else { + if (flags & GPIO_PIN_OPENDRAIN) + pad = READ4(sc, IMX_GPIO_PSR_REG); + else + pad = READ4(sc, IMX_GPIO_DR_REG); + pad = (pad >> pin->gp_pin) & 1; + } newflags |= GPIO_PIN_OUTPUT; + SET4(sc, IMX_GPIO_DR_REG, (pad << pin->gp_pin)); SET4(sc, IMX_GPIO_OE_REG, (1U << pin->gp_pin)); } else { newflags |= GPIO_PIN_INPUT; @@ -692,7 +712,7 @@ imx51_gpio_pin_access_32(device_t dev, uint32_t first_ sc = device_get_softc(dev); if (orig_pins != NULL) - *orig_pins = READ4(sc, IMX_GPIO_PSR_REG); + *orig_pins = READ4(sc, IMX_GPIO_DR_REG); if ((clear_pins | change_pins) != 0) { mtx_lock_spin(&sc->sc_mtx); @@ -718,7 +738,7 @@ imx51_gpio_pin_config_32(device_t dev, uint32_t first_ return (EINVAL); drclr = drset = oeclr = oeset = 0; - pads = READ4(sc, IMX_GPIO_PSR_REG); + pads = READ4(sc, IMX_GPIO_DR_REG); for (i = 0; i < num_pins; ++i) { bit = 1u << i; From owner-svn-src-head@freebsd.org Fri May 4 19:31:28 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D9787FB5FD6; Fri, 4 May 2018 19:31:28 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8A7FE7CA66; Fri, 4 May 2018 19:31:28 +0000 (UTC) (envelope-from mmacy@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 843D713297; Fri, 4 May 2018 19:31:28 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44JVSY4096408; Fri, 4 May 2018 19:31:28 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44JVS3d096407; Fri, 4 May 2018 19:31:28 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805041931.w44JVS3d096407@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Fri, 4 May 2018 19:31:28 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333261 - head/sys/conf X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: head/sys/conf X-SVN-Commit-Revision: 333261 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 19:31:29 -0000 Author: mmacy Date: Fri May 4 19:31:28 2018 New Revision: 333261 URL: https://svnweb.freebsd.org/changeset/base/333261 Log: % WITHOUT_FORMAT_EXTENSIONS= XCC=/usr/local/bin/gcc8 make -j96 buildkernel KERNCONF=GENERIC-NODEBUG -s >& log % grep "inlining failed" log | wc 234 3570 36065 Consensus on those polled is that inlining failure warnings are not useful Approved by: sbruno Modified: head/sys/conf/kern.mk Modified: head/sys/conf/kern.mk ============================================================================== --- head/sys/conf/kern.mk Fri May 4 19:28:05 2018 (r333260) +++ head/sys/conf/kern.mk Fri May 4 19:31:28 2018 (r333261) @@ -4,7 +4,7 @@ # Warning flags for compiling the kernel and components of the kernel: # CWARNFLAGS?= -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \ - -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual \ + -Wmissing-prototypes -Wpointer-arith -Wcast-qual \ -Wundef -Wno-pointer-sign ${FORMAT_EXTENSIONS} \ -Wmissing-include-dirs -fdiagnostics-show-option \ -Wno-unknown-pragmas \ From owner-svn-src-head@freebsd.org Fri May 4 19:40:36 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4760CFB62D5; Fri, 4 May 2018 19:40:36 +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 BB2D3814DE; Fri, 4 May 2018 19:40:35 +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 w44JeVMm043761; Fri, 4 May 2018 12:40:31 -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 w44JeV3b043760; Fri, 4 May 2018 12:40:31 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805041940.w44JeV3b043760@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333261 - head/sys/conf In-Reply-To: <201805041931.w44JVS3d096407@repo.freebsd.org> To: Matt Macy Date: Fri, 4 May 2018 12:40:31 -0700 (PDT) CC: 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.25 Precedence: list List-Id: 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, 04 May 2018 19:40:36 -0000 [ Charset UTF-8 unsupported, converting... ] > Author: mmacy > Date: Fri May 4 19:31:28 2018 > New Revision: 333261 > URL: https://svnweb.freebsd.org/changeset/base/333261 > > Log: > % WITHOUT_FORMAT_EXTENSIONS= XCC=/usr/local/bin/gcc8 make -j96 buildkernel KERNCONF=GENERIC-NODEBUG -s >& log > % grep "inlining failed" log | wc > 234 3570 36065 > Consensus on those polled is that inlining failure warnings are not useful Please try to write plain english commit messages. > Approved by: sbruno > > Modified: > head/sys/conf/kern.mk > > Modified: head/sys/conf/kern.mk > ============================================================================== > --- head/sys/conf/kern.mk Fri May 4 19:28:05 2018 (r333260) > +++ head/sys/conf/kern.mk Fri May 4 19:31:28 2018 (r333261) > @@ -4,7 +4,7 @@ > # Warning flags for compiling the kernel and components of the kernel: > # > CWARNFLAGS?= -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes \ > - -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual \ > + -Wmissing-prototypes -Wpointer-arith -Wcast-qual \ > -Wundef -Wno-pointer-sign ${FORMAT_EXTENSIONS} \ > -Wmissing-include-dirs -fdiagnostics-show-option \ > -Wno-unknown-pragmas \ This effects ALL compilers at this point in the file, not just gcc. -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Fri May 4 19:43:42 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 915FCFB65CC for ; Fri, 4 May 2018 19:43:42 +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 194CF82CC9 for ; Fri, 4 May 2018 19:43:41 +0000 (UTC) (envelope-from ian@freebsd.org) X-MHO-User: 6b2fe5c7-4fd3-11e8-8e23-5bc9f169c8f5 X-Report-Abuse-To: https://support.duocircle.com/support/solutions/articles/5000540958-duocircle-standard-smtp-abuse-information X-Originating-IP: 67.177.211.60 X-Mail-Handler: DuoCircle Outbound SMTP Received: from ilsoft.org (unknown [67.177.211.60]) by outbound1.eu.mailhop.org (Halon) with ESMTPSA id 6b2fe5c7-4fd3-11e8-8e23-5bc9f169c8f5; Fri, 04 May 2018 19:43:31 +0000 (UTC) Received: from rev (rev [172.22.42.240]) by ilsoft.org (8.15.2/8.15.2) with ESMTP id w44JhT67048339; Fri, 4 May 2018 13:43:29 -0600 (MDT) (envelope-from ian@freebsd.org) Message-ID: <1525463009.57768.281.camel@freebsd.org> Subject: Re: svn commit: r333261 - head/sys/conf From: Ian Lepore To: Matt Macy , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Date: Fri, 04 May 2018 13:43:29 -0600 In-Reply-To: <201805041931.w44JVS3d096407@repo.freebsd.org> References: <201805041931.w44JVS3d096407@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.25 Precedence: list List-Id: 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, 04 May 2018 19:43:42 -0000 On Fri, 2018-05-04 at 19:31 +0000, Matt Macy wrote: > Author: mmacy > Date: Fri May  4 19:31:28 2018 > New Revision: 333261 > URL: https://svnweb.freebsd.org/changeset/base/333261 > > Log: >   % WITHOUT_FORMAT_EXTENSIONS=  XCC=/usr/local/bin/gcc8 make -j96 > buildkernel KERNCONF=GENERIC-NODEBUG -s >& log >   % grep "inlining failed" log | wc >        234    3570   36065 >   Consensus on those polled is that inlining failure warnings are not > useful >    >   Approved by: sbruno This is another marginal commit message. A good commit messages starts with a sentence or two that summarizes what's been changed, followed by some non-zero amount of extra information that says why (for all but the most trivial self-obvious changes). This is pretty good on the "why". Consider how this is going to look buried in the output of "svn log kern.mk" (or on svnweb.freebsd.org) when you're skimming through the commit history looking for what changed while you're tracking down some problem. When you run into this commit in the log, you're going to have no option but to stop what you're doing and look at the diff to see if it's germane to your search, because of the missing summary information. -- Ian From owner-svn-src-head@freebsd.org Fri May 4 20:38:27 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6A9FAFB75CE; Fri, 4 May 2018 20:38:27 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1DC2A7D473; Fri, 4 May 2018 20:38:27 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1491A13DA9; Fri, 4 May 2018 20:38:27 +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 w44KcQQk028909; Fri, 4 May 2018 20:38:26 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44KcQJs028908; Fri, 4 May 2018 20:38:26 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201805042038.w44KcQJs028908@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Fri, 4 May 2018 20:38:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333262 - head/release/tools X-SVN-Group: head X-SVN-Commit-Author: gjb X-SVN-Commit-Paths: head/release/tools X-SVN-Commit-Revision: 333262 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 20:38:27 -0000 Author: gjb Date: Fri May 4 20:38:26 2018 New Revision: 333262 URL: https://svnweb.freebsd.org/changeset/base/333262 Log: Ensure the ports and src trees are available on GCE images, satisfying a requirement to allow FreeBSD to be considered a top-tier supported OS in Google Compute Engine. MFC after: 3 days Sponsored by: The FreeBSD Foundation Modified: head/release/tools/gce.conf Modified: head/release/tools/gce.conf ============================================================================== --- head/release/tools/gce.conf Fri May 4 19:31:28 2018 (r333261) +++ head/release/tools/gce.conf Fri May 4 20:38:26 2018 (r333262) @@ -85,6 +85,29 @@ debug.trace_on_panic=1 debug.debugger_on_panic=0 EOF + # To meet GCE marketplace requirements, extract the src.txz and + # ports.txz distributions to the target virtual machine disk image + # and fetch the sources for the third-part software installed on + # the image. + if [ ! -c "${DESTDIR}/dev/null" ]; then + mkdir -p ${DESTDIR}/dev + mount -t devfs devfs ${DESTDIR}/dev + fi + if [ -e "${DESTDIR}/../ftp/src.txz" ]; then + tar fxJ ${DESTDIR}/../ftp/src.txz -C ${DESTDIR} + fi + if [ -e "${DESTDIR}/../ftp/ports.txz" ]; then + tar fxJ ${DESTDIR}/../ftp/ports.txz -C ${DESTDIR} + _INSTALLED_PACKAGES=$(chroot ${DESTDIR} pkg info -o -q -a) + for PACKAGE in ${_INSTALLED_PACKAGES}; do + chroot ${DESTDIR} \ + make -C /usr/ports/${PACKAGE} fetch + done + fi + if [ -c "${DESTDIR}/dev/null" ]; then + umount_loop ${DESTDIR}/dev + fi + ## XXX: Verify this is needed. I do not see this requirement ## in the docs, and it impairs the ability to boot-test a copy ## of the image prior to packaging for upload to GCE. From owner-svn-src-head@freebsd.org Fri May 4 20:54:29 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 92CB6FB7B5E; Fri, 4 May 2018 20:54:29 +0000 (UTC) (envelope-from jamie@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4547484533; Fri, 4 May 2018 20:54:29 +0000 (UTC) (envelope-from jamie@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 3BE2A140EB; Fri, 4 May 2018 20:54:29 +0000 (UTC) (envelope-from jamie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44KsTBm038825; Fri, 4 May 2018 20:54:29 GMT (envelope-from jamie@FreeBSD.org) Received: (from jamie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44KsRtc038808; Fri, 4 May 2018 20:54:27 GMT (envelope-from jamie@FreeBSD.org) Message-Id: <201805042054.w44KsRtc038808@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jamie set sender to jamie@FreeBSD.org using -f From: Jamie Gritton Date: Fri, 4 May 2018 20:54:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333263 - in head: lib/libjail sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/compat/linprocfs sys/compat/linsysfs sys/fs/devfs sys/fs/fdescfs sys/fs/nullfs sys/fs/procfs sys/fs/pse... X-SVN-Group: head X-SVN-Commit-Author: jamie X-SVN-Commit-Paths: in head: lib/libjail sys/cddl/contrib/opensolaris/uts/common/fs/zfs sys/compat/linprocfs sys/compat/linsysfs sys/fs/devfs sys/fs/fdescfs sys/fs/nullfs sys/fs/procfs sys/fs/pseudofs sys/fs/tmpfs sys/ke... X-SVN-Commit-Revision: 333263 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 20:54:30 -0000 Author: jamie Date: Fri May 4 20:54:27 2018 New Revision: 333263 URL: https://svnweb.freebsd.org/changeset/base/333263 Log: Make it easier for filesystems to count themselves as jail-enabled, by doing most of the work in a new function prison_add_vfs in kern_jail.c Now a jail-enabled filesystem need only mark itself with VFCF_JAIL, and the rest is taken care of. This includes adding a jail parameter like allow.mount.foofs, and a sysctl like security.jail.mount_foofs_allowed. Both of these used to be a static list of known filesystems, with predefined permission bits. Reviewed by: kib Differential Revision: D14681 Modified: head/lib/libjail/jail.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c head/sys/compat/linprocfs/linprocfs.c head/sys/compat/linsysfs/linsysfs.c head/sys/fs/devfs/devfs_vfsops.c head/sys/fs/fdescfs/fdesc_vfsops.c head/sys/fs/nullfs/null_vfsops.c head/sys/fs/procfs/procfs.c head/sys/fs/pseudofs/pseudofs.h head/sys/fs/tmpfs/tmpfs_vfsops.c head/sys/kern/kern_jail.c head/sys/kern/vfs_init.c head/sys/kern/vfs_mount.c head/sys/kern/vfs_subr.c head/sys/sys/jail.h head/sys/sys/mount.h head/usr.sbin/jail/jail.8 Modified: head/lib/libjail/jail.c ============================================================================== --- head/lib/libjail/jail.c Fri May 4 20:38:26 2018 (r333262) +++ head/lib/libjail/jail.c Fri May 4 20:54:27 2018 (r333263) @@ -1048,7 +1048,13 @@ kldload_param(const char *name) else if (strcmp(name, "sysvmsg") == 0 || strcmp(name, "sysvsem") == 0 || strcmp(name, "sysvshm") == 0) kl = kldload(name); - else { + else if (strncmp(name, "allow.mount.", 12) == 0) { + /* Load the matching filesystem */ + kl = kldload(name + 12); + if (kl < 0 && errno == ENOENT && + strncmp(name + 12, "no", 2) == 0) + kl = kldload(name + 14); + } else { errno = ENOENT; return (-1); } Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c Fri May 4 20:54:27 2018 (r333263) @@ -1640,9 +1640,6 @@ zfs_mount(vfs_t *vfsp) osname = spn.pn_path; #else /* !illumos */ - if (!prison_allow(td->td_ucred, PR_ALLOW_MOUNT_ZFS)) - return (SET_ERROR(EPERM)); - if (vfs_getopt(vfsp->mnt_optnew, "from", (void **)&osname, NULL)) return (SET_ERROR(EINVAL)); Modified: head/sys/compat/linprocfs/linprocfs.c ============================================================================== --- head/sys/compat/linprocfs/linprocfs.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/compat/linprocfs/linprocfs.c Fri May 4 20:54:27 2018 (r333263) @@ -1652,7 +1652,7 @@ linprocfs_uninit(PFS_INIT_ARGS) return (0); } -PSEUDOFS(linprocfs, 1, PR_ALLOW_MOUNT_LINPROCFS); +PSEUDOFS(linprocfs, 1, VFCF_JAIL); #if defined(__amd64__) MODULE_DEPEND(linprocfs, linux_common, 1, 1, 1); #else Modified: head/sys/compat/linsysfs/linsysfs.c ============================================================================== --- head/sys/compat/linsysfs/linsysfs.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/compat/linsysfs/linsysfs.c Fri May 4 20:54:27 2018 (r333263) @@ -556,7 +556,7 @@ linsysfs_uninit(PFS_INIT_ARGS) return (0); } -PSEUDOFS(linsysfs, 1, PR_ALLOW_MOUNT_LINSYSFS); +PSEUDOFS(linsysfs, 1, VFCF_JAIL); #if defined(__amd64__) MODULE_DEPEND(linsysfs, linux_common, 1, 1, 1); #else Modified: head/sys/fs/devfs/devfs_vfsops.c ============================================================================== --- head/sys/fs/devfs/devfs_vfsops.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/fs/devfs/devfs_vfsops.c Fri May 4 20:54:27 2018 (r333263) @@ -83,9 +83,6 @@ devfs_mount(struct mount *mp) if (mp->mnt_flag & MNT_ROOTFS) return (EOPNOTSUPP); - if (!prison_allow(td->td_ucred, PR_ALLOW_MOUNT_DEVFS)) - return (EPERM); - rsnum = 0; injail = jailed(td->td_ucred); Modified: head/sys/fs/fdescfs/fdesc_vfsops.c ============================================================================== --- head/sys/fs/fdescfs/fdesc_vfsops.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/fs/fdescfs/fdesc_vfsops.c Fri May 4 20:54:27 2018 (r333263) @@ -81,12 +81,8 @@ static int fdesc_mount(struct mount *mp) { struct fdescmount *fmp; - struct thread *td = curthread; struct vnode *rvp; int error; - - if (!prison_allow(td->td_ucred, PR_ALLOW_MOUNT_FDESCFS)) - return (EPERM); /* * Update is a no-op Modified: head/sys/fs/nullfs/null_vfsops.c ============================================================================== --- head/sys/fs/nullfs/null_vfsops.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/fs/nullfs/null_vfsops.c Fri May 4 20:54:27 2018 (r333263) @@ -78,15 +78,12 @@ nullfs_mount(struct mount *mp) struct vnode *lowerrootvp, *vp; struct vnode *nullm_rootvp; struct null_mount *xmp; - struct thread *td = curthread; char *target; int isvnunlocked = 0, len; struct nameidata nd, *ndp = &nd; NULLFSDEBUG("nullfs_mount(mp = %p)\n", (void *)mp); - if (!prison_allow(td->td_ucred, PR_ALLOW_MOUNT_NULLFS)) - return (EPERM); if (mp->mnt_flag & MNT_ROOTFS) return (EOPNOTSUPP); Modified: head/sys/fs/procfs/procfs.c ============================================================================== --- head/sys/fs/procfs/procfs.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/fs/procfs/procfs.c Fri May 4 20:54:27 2018 (r333263) @@ -215,4 +215,4 @@ procfs_uninit(PFS_INIT_ARGS) return (0); } -PSEUDOFS(procfs, 1, PR_ALLOW_MOUNT_PROCFS); +PSEUDOFS(procfs, 1, VFCF_JAIL); Modified: head/sys/fs/pseudofs/pseudofs.h ============================================================================== --- head/sys/fs/pseudofs/pseudofs.h Fri May 4 20:38:26 2018 (r333262) +++ head/sys/fs/pseudofs/pseudofs.h Fri May 4 20:54:27 2018 (r333263) @@ -272,7 +272,7 @@ int pfs_destroy (struct pfs_node *pn); /* * Now for some initialization magic... */ -#define PSEUDOFS(name, version, jflag) \ +#define PSEUDOFS(name, version, flags) \ \ static struct pfs_info name##_info = { \ #name, \ @@ -282,8 +282,6 @@ static struct pfs_info name##_info = { \ \ static int \ _##name##_mount(struct mount *mp) { \ - if (jflag && !prison_allow(curthread->td_ucred, jflag)) \ - return (EPERM); \ return (pfs_mount(&name##_info, mp)); \ } \ \ @@ -306,7 +304,7 @@ static struct vfsops name##_vfsops = { \ .vfs_uninit = _##name##_uninit, \ .vfs_unmount = pfs_unmount, \ }; \ -VFS_SET(name##_vfsops, name, VFCF_SYNTHETIC | (jflag ? VFCF_JAIL : 0)); \ +VFS_SET(name##_vfsops, name, VFCF_SYNTHETIC | flags); \ MODULE_VERSION(name, version); \ MODULE_DEPEND(name, pseudofs, 1, 1, 1); Modified: head/sys/fs/tmpfs/tmpfs_vfsops.c ============================================================================== --- head/sys/fs/tmpfs/tmpfs_vfsops.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/fs/tmpfs/tmpfs_vfsops.c Fri May 4 20:54:27 2018 (r333263) @@ -141,7 +141,6 @@ tmpfs_mount(struct mount *mp) sizeof(struct tmpfs_dirent) + sizeof(struct tmpfs_node)); struct tmpfs_mount *tmp; struct tmpfs_node *root; - struct thread *td = curthread; int error; bool nonc; /* Size counters. */ @@ -154,9 +153,6 @@ tmpfs_mount(struct mount *mp) mode_t root_mode; struct vattr va; - - if (!prison_allow(td->td_ucred, PR_ALLOW_MOUNT_TMPFS)) - return (EPERM); if (vfs_filteropt(mp->mnt_optnew, tmpfs_opts)) return (EINVAL); Modified: head/sys/kern/kern_jail.c ============================================================================== --- head/sys/kern/kern_jail.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/kern/kern_jail.c Fri May 4 20:54:27 2018 (r333263) @@ -111,7 +111,7 @@ struct prison prison0 = { #else .pr_flags = PR_HOST|_PR_IP_SADDRSEL, #endif - .pr_allow = PR_ALLOW_ALL, + .pr_allow = PR_ALLOW_ALL_STATIC, }; MTX_SYSINIT(prison0, &prison0.pr_mtx, "jail mutex", MTX_DEF); @@ -181,7 +181,8 @@ static struct jailsys_flags pr_flag_jailsys[] = { }; const size_t pr_flag_jailsys_size = sizeof(pr_flag_jailsys); -static struct bool_flags pr_flag_allow[] = { +/* Make this array full-size so dynamic parameters can be added. */ +static struct bool_flags pr_flag_allow[NBBY * NBPW] = { {"allow.set_hostname", "allow.noset_hostname", PR_ALLOW_SET_HOSTNAME}, {"allow.sysvipc", "allow.nosysvipc", PR_ALLOW_SYSVIPC}, {"allow.raw_sockets", "allow.noraw_sockets", PR_ALLOW_RAW_SOCKETS}, @@ -189,17 +190,6 @@ static struct bool_flags pr_flag_allow[] = { {"allow.mount", "allow.nomount", PR_ALLOW_MOUNT}, {"allow.quotas", "allow.noquotas", PR_ALLOW_QUOTAS}, {"allow.socket_af", "allow.nosocket_af", PR_ALLOW_SOCKET_AF}, - {"allow.mount.devfs", "allow.mount.nodevfs", PR_ALLOW_MOUNT_DEVFS}, - {"allow.mount.nullfs", "allow.mount.nonullfs", PR_ALLOW_MOUNT_NULLFS}, - {"allow.mount.zfs", "allow.mount.nozfs", PR_ALLOW_MOUNT_ZFS}, - {"allow.mount.procfs", "allow.mount.noprocfs", PR_ALLOW_MOUNT_PROCFS}, - {"allow.mount.tmpfs", "allow.mount.notmpfs", PR_ALLOW_MOUNT_TMPFS}, - {"allow.mount.fdescfs", "allow.mount.nofdescfs", - PR_ALLOW_MOUNT_FDESCFS}, - {"allow.mount.linprocfs", "allow.mount.nolinprocfs", - PR_ALLOW_MOUNT_LINPROCFS}, - {"allow.mount.linsysfs", "allow.mount.nolinsysfs", - PR_ALLOW_MOUNT_LINSYSFS}, {"allow.reserved_ports", "allow.noreserved_ports", PR_ALLOW_RESERVED_PORTS}, }; @@ -318,7 +308,8 @@ kern_jail(struct thread *td, struct jail *j) /* Set permissions for top-level jails from sysctls. */ if (!jailed(td->td_ucred)) { for (bf = pr_flag_allow; - bf < pr_flag_allow + nitems(pr_flag_allow); + bf < pr_flag_allow + nitems(pr_flag_allow) && + bf->flag != 0; bf++) { optiov[opt.uio_iovcnt].iov_base = __DECONST(char *, (jail_default_allow & bf->flag) @@ -654,7 +645,7 @@ kern_jail_set(struct thread *td, struct uio *optuio, i pr_allow = ch_allow = 0; for (bf = pr_flag_allow; - bf < pr_flag_allow + nitems(pr_flag_allow); + bf < pr_flag_allow + nitems(pr_flag_allow) && bf->flag != 0; bf++) { vfs_flagopt(opts, bf->name, &pr_allow, bf->flag); vfs_flagopt(opts, bf->noname, &ch_allow, bf->flag); @@ -2115,7 +2106,7 @@ kern_jail_get(struct thread *td, struct uio *optuio, i goto done_deref; } for (bf = pr_flag_allow; - bf < pr_flag_allow + nitems(pr_flag_allow); + bf < pr_flag_allow + nitems(pr_flag_allow) && bf->flag != 0; bf++) { i = (pr->pr_allow & bf->flag) ? 1 : 0; error = vfs_setopt(opts, bf->name, &i, sizeof(i)); @@ -3615,38 +3606,6 @@ SYSCTL_PROC(_security_jail, OID_AUTO, mount_allowed, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, PR_ALLOW_MOUNT, sysctl_jail_default_allow, "I", "Processes in jail can mount/unmount jail-friendly file systems (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_devfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_DEVFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the devfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_fdescfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_FDESCFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the fdescfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_nullfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_NULLFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the nullfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_procfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_PROCFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the procfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_linprocfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_LINPROCFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the linprocfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_linsysfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_LINSYSFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the linsysfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_tmpfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_TMPFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the tmpfs file system (deprecated)"); -SYSCTL_PROC(_security_jail, OID_AUTO, mount_zfs_allowed, - CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, - NULL, PR_ALLOW_MOUNT_ZFS, sysctl_jail_default_allow, "I", - "Processes in jail can mount the zfs file system (deprecated)"); static int sysctl_jail_default_level(SYSCTL_HANDLER_ARGS) @@ -3799,23 +3758,111 @@ SYSCTL_JAIL_PARAM(_allow, reserved_ports, CTLTYPE_INT SYSCTL_JAIL_PARAM_SUBNODE(allow, mount, "Jail mount/unmount permission flags"); SYSCTL_JAIL_PARAM(_allow_mount, , CTLTYPE_INT | CTLFLAG_RW, "B", "Jail may mount/unmount jail-friendly file systems in general"); -SYSCTL_JAIL_PARAM(_allow_mount, devfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the devfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, fdescfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the fdescfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, nullfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the nullfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, procfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the procfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, linprocfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the linprocfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, linsysfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the linsysfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, tmpfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the tmpfs file system"); -SYSCTL_JAIL_PARAM(_allow_mount, zfs, CTLTYPE_INT | CTLFLAG_RW, - "B", "Jail may mount the zfs file system"); +/* + * The VFS system will register jail-aware filesystems here. They each get + * a parameter allow.mount.xxxfs and a flag to check when a jailed user + * attempts to mount. + */ +void +prison_add_vfs(struct vfsconf *vfsp) +{ + char *allow_name, *allow_noname, *mount_allowed; + struct bool_flags *bf; +#ifndef NO_SYSCTL_DESCR + char *descr; +#endif + unsigned allow_flag; + + if (asprintf(&allow_name, M_PRISON, "allow.mount.%s", vfsp->vfc_name) < + 0 || asprintf(&allow_noname, M_PRISON, "allow.mount.no%s", + vfsp->vfc_name) < 0) { + free(allow_name, M_PRISON); + return; + } + + /* + * See if this parameter has already beed added, i.e. if the filesystem + * was previously loaded/unloaded. + */ + mtx_lock(&prison0.pr_mtx); + for (bf = pr_flag_allow; + bf < pr_flag_allow + nitems(pr_flag_allow) && bf->flag != 0; + bf++) { + if (strcmp(bf->name, allow_name) == 0) { + vfsp->vfc_prison_flag = bf->flag; + goto no_add; + } + } + + /* + * Find a free bit in prison0's pr_allow, failing if there are none + * (which shouldn't happen as long as we keep track of how many + * filesystems are jail-aware). + */ + for (allow_flag = 1;; allow_flag <<= 1) { + if (allow_flag == 0) + goto no_add; + if ((prison0.pr_allow & allow_flag) == 0) + break; + } + + /* + * Note the parameter in the next open slot in pr_flag_allow. + * Set the flag last so code that checks pr_flag_allow can do so + * without locking. + */ + for (bf = pr_flag_allow; bf->flag != 0; bf++) + if (bf == pr_flag_allow + nitems(pr_flag_allow)) { + /* This should never happen, but is not fatal. */ + goto no_add; + } + prison0.pr_allow |= allow_flag; + bf->name = allow_name; + bf->noname = allow_noname; + bf->flag = allow_flag; + vfsp->vfc_prison_flag = allow_flag; + mtx_unlock(&prison0.pr_mtx); + + /* + * Create sysctls for the paramter, and the back-compat global + * permission. + */ +#ifndef NO_SYSCTL_DESCR + (void)asprintf(&descr, M_TEMP, "Jail may mount the %s file system", + vfsp->vfc_name); +#endif + (void)SYSCTL_ADD_PROC(NULL, + SYSCTL_CHILDREN(&sysctl___security_jail_param_allow_mount), + OID_AUTO, vfsp->vfc_name, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, + NULL, 0, sysctl_jail_param, "B", descr); +#ifndef NO_SYSCTL_DESCR + free(descr, M_TEMP); +#endif + if (asprintf(&mount_allowed, M_TEMP, "mount_%s_allowed", + vfsp->vfc_name) >= 0) { +#ifndef NO_SYSCTL_DESCR + (void)asprintf(&descr, M_TEMP, + "Processes in jail can mount the %s file system (deprecated)", + vfsp->vfc_name); +#endif + (void)SYSCTL_ADD_PROC(NULL, + SYSCTL_CHILDREN(&sysctl___security_jail), OID_AUTO, + mount_allowed, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, + NULL, allow_flag, sysctl_jail_default_allow, "I", descr); +#ifndef NO_SYSCTL_DESCR + free(descr, M_TEMP); +#endif + free(mount_allowed, M_TEMP); + } + return; + + no_add: + mtx_unlock(&prison0.pr_mtx); + free(allow_name, M_PRISON); + free(allow_noname, M_PRISON); +} + #ifdef RACCT void prison_racct_foreach(void (*callback)(struct racct *racct, @@ -4050,7 +4097,7 @@ db_show_prison(struct prison *pr) } db_printf(" allow = 0x%x", pr->pr_allow); for (bf = pr_flag_allow; - bf < pr_flag_allow + nitems(pr_flag_allow); + bf < pr_flag_allow + nitems(pr_flag_allow) && bf->flag != 0; bf++) if (pr->pr_allow & bf->flag) db_printf(" %s", bf->name); Modified: head/sys/kern/vfs_init.c ============================================================================== --- head/sys/kern/vfs_init.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/kern/vfs_init.c Fri May 4 20:54:27 2018 (r333263) @@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -276,7 +277,10 @@ vfs_register(struct vfsconf *vfc) vfsops->vfs_extattrctl = vfs_stdextattrctl; if (vfsops->vfs_sysctl == NULL) vfsops->vfs_sysctl = vfs_stdsysctl; - + + if (vfc->vfc_flags & VFCF_JAIL) + prison_add_vfs(vfc); + /* * Call init function for this VFS... */ Modified: head/sys/kern/vfs_mount.c ============================================================================== --- head/sys/kern/vfs_mount.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/kern/vfs_mount.c Fri May 4 20:54:27 2018 (r333263) @@ -843,6 +843,16 @@ vfs_domount_first( KASSERT((fsflags & MNT_UPDATE) == 0, ("MNT_UPDATE shouldn't be here")); /* + * If the jail of the calling thread lacks permission for this type of + * file system, deny immediately. + */ + if (jailed(td->td_ucred) && !prison_allow(td->td_ucred, + vfsp->vfc_prison_flag)) { + vput(vp); + return (EPERM); + } + + /* * If the user is not root, ensure that they own the directory * onto which we are attempting to mount. */ @@ -1149,8 +1159,6 @@ vfs_domount( vfsp = vfs_byname_kld(fstype, td, &error); if (vfsp == NULL) return (ENODEV); - if (jailed(td->td_ucred) && !(vfsp->vfc_flags & VFCF_JAIL)) - return (EPERM); } /* Modified: head/sys/kern/vfs_subr.c ============================================================================== --- head/sys/kern/vfs_subr.c Fri May 4 20:38:26 2018 (r333262) +++ head/sys/kern/vfs_subr.c Fri May 4 20:54:27 2018 (r333263) @@ -683,19 +683,21 @@ vfs_suser(struct mount *mp, struct thread *td) { int error; - /* - * If the thread is jailed, but this is not a jail-friendly file - * system, deny immediately. - */ - if (!(mp->mnt_vfc->vfc_flags & VFCF_JAIL) && jailed(td->td_ucred)) - return (EPERM); + if (jailed(td->td_ucred)) { + /* + * If the jail of the calling thread lacks permission for + * this type of file system, deny immediately. + */ + if (!prison_allow(td->td_ucred, mp->mnt_vfc->vfc_prison_flag)) + return (EPERM); - /* - * If the file system was mounted outside the jail of the calling - * thread, deny immediately. - */ - if (prison_check(td->td_ucred, mp->mnt_cred) != 0) - return (EPERM); + /* + * If the file system was mounted outside the jail of the + * calling thread, deny immediately. + */ + if (prison_check(td->td_ucred, mp->mnt_cred) != 0) + return (EPERM); + } /* * If file system supports delegated administration, we don't check Modified: head/sys/sys/jail.h ============================================================================== --- head/sys/sys/jail.h Fri May 4 20:38:26 2018 (r333262) +++ head/sys/sys/jail.h Fri May 4 20:54:27 2018 (r333263) @@ -216,7 +216,10 @@ struct prison_racct { #define PR_IP6 0x04000000 /* IPv6 restricted or disabled */ /* by this jail or an ancestor */ -/* Flags for pr_allow */ +/* + * Flags for pr_allow + * Bits not noted here may be used for dynamic allow.mount.xxxfs. + */ #define PR_ALLOW_SET_HOSTNAME 0x00000001 #define PR_ALLOW_SYSVIPC 0x00000002 #define PR_ALLOW_RAW_SOCKETS 0x00000004 @@ -224,17 +227,9 @@ struct prison_racct { #define PR_ALLOW_MOUNT 0x00000010 #define PR_ALLOW_QUOTAS 0x00000020 #define PR_ALLOW_SOCKET_AF 0x00000040 -#define PR_ALLOW_MOUNT_DEVFS 0x00000080 -#define PR_ALLOW_MOUNT_NULLFS 0x00000100 -#define PR_ALLOW_MOUNT_ZFS 0x00000200 -#define PR_ALLOW_MOUNT_PROCFS 0x00000400 -#define PR_ALLOW_MOUNT_TMPFS 0x00000800 -#define PR_ALLOW_MOUNT_FDESCFS 0x00001000 -#define PR_ALLOW_MOUNT_LINPROCFS 0x00002000 -#define PR_ALLOW_MOUNT_LINSYSFS 0x00004000 #define PR_ALLOW_RESERVED_PORTS 0x00008000 #define PR_ALLOW_KMEM_ACCESS 0x00010000 /* reserved, not used yet */ -#define PR_ALLOW_ALL 0x0001ffff +#define PR_ALLOW_ALL_STATIC 0x0001807f /* * OSD methods @@ -364,6 +359,7 @@ struct ucred; struct mount; struct sockaddr; struct statfs; +struct vfsconf; int jailed(struct ucred *cred); int jailed_without_vnet(struct ucred *); void getcredhostname(struct ucred *, char *, size_t); @@ -413,6 +409,7 @@ int prison_if(struct ucred *cred, struct sockaddr *sa) char *prison_name(struct prison *, struct prison *); int prison_priv_check(struct ucred *cred, int priv); int sysctl_jail_param(SYSCTL_HANDLER_ARGS); +void prison_add_vfs(struct vfsconf *vfsp); void prison_racct_foreach(void (*callback)(struct racct *racct, void *arg2, void *arg3), void (*pre)(void), void (*post)(void), void *arg2, void *arg3); Modified: head/sys/sys/mount.h ============================================================================== --- head/sys/sys/mount.h Fri May 4 20:38:26 2018 (r333262) +++ head/sys/sys/mount.h Fri May 4 20:54:27 2018 (r333263) @@ -516,6 +516,7 @@ struct vfsconf { int vfc_typenum; /* historic filesystem type number */ int vfc_refcount; /* number mounted of this type */ int vfc_flags; /* permanent flags */ + int vfc_prison_flag; /* prison allow.mount.* flag */ struct vfsoptdecl *vfc_opts; /* mount options */ TAILQ_ENTRY(vfsconf) vfc_list; /* list of vfscons */ }; @@ -851,7 +852,8 @@ vfs_statfs_t __vfs_statfs; */ #define VFS_VERSION_00 0x19660120 #define VFS_VERSION_01 0x20121030 -#define VFS_VERSION VFS_VERSION_01 +#define VFS_VERSION_02 0x20180504 +#define VFS_VERSION VFS_VERSION_02 #define VFS_SET(vfsops, fsname, flags) \ static struct vfsconf fsname ## _vfsconf = { \ Modified: head/usr.sbin/jail/jail.8 ============================================================================== --- head/usr.sbin/jail/jail.8 Fri May 4 20:38:26 2018 (r333262) +++ head/usr.sbin/jail/jail.8 Fri May 4 20:54:27 2018 (r333263) @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd June 5, 2017 +.Dd May 4, 2018 .Dt JAIL 8 .Os .Sh NAME @@ -545,6 +545,33 @@ is set to a value lower than 2. The devfs ruleset should be restricted from the default by using the .Va devfs_ruleset option. +.It Va allow.quotas +The jail root may administer quotas on the jail's filesystem(s). +This includes filesystems that the jail may share with other jails or +with non-jailed parts of the system. +.It Va allow.socket_af +Sockets within a jail are normally restricted to IPv4, IPv6, local +(UNIX), and route. This allows access to other protocol stacks that +have not had jail functionality added to them. +.It Va allow.reserved_ports +The jail root may bind to ports lower than 1024. +.El +.El +.Pp +Kernel modules may add their own parameters, which only exist when the +module is loaded. +These are typically headed under a parameter named after the module, +with values of +.Dq inherit +to give the jail full use of the module, +.Dq new +to encapsulate the jail in some module-specific way, +and +.Dq disable +to make the module unavailable to the jail. +There also may be other parameters to define jail behavior within the module. +Module-specific parameters include: +.Bl -tag -width indent .It Va allow.mount.fdescfs privileged users inside the jail will be able to mount and unmount the fdescfs file system. @@ -605,33 +632,6 @@ See .Xr zfs 8 for information on how to configure the ZFS filesystem to operate from within a jail. -.It Va allow.quotas -The jail root may administer quotas on the jail's filesystem(s). -This includes filesystems that the jail may share with other jails or -with non-jailed parts of the system. -.It Va allow.socket_af -Sockets within a jail are normally restricted to IPv4, IPv6, local -(UNIX), and route. This allows access to other protocol stacks that -have not had jail functionality added to them. -.It Va allow.reserved_ports -The jail root may bind to ports lower than 1024. -.El -.El -.Pp -Kernel modules may add their own parameters, which only exist when the -module is loaded. -These are typically headed under a parameter named after the module, -with values of -.Dq inherit -to give the jail full use of the module, -.Dq new -to encapsulate the jail in some module-specific way, -and -.Dq disable -to make the module unavailable to the jail. -There also may be other parameters to define jail behavior within the module. -Module-specific parameters include: -.Bl -tag -width indent .It Va linux Determine how a jail's Linux emulation environment appears. A value of From owner-svn-src-head@freebsd.org Fri May 4 21:17:30 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 05B67FB8866; Fri, 4 May 2018 21:17:29 +0000 (UTC) (envelope-from gjb@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 91EE56B413; Fri, 4 May 2018 21:17:29 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 869C41441D; Fri, 4 May 2018 21:17:29 +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 w44LHTuR048798; Fri, 4 May 2018 21:17:29 GMT (envelope-from gjb@FreeBSD.org) Received: (from gjb@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44LHT6T048797; Fri, 4 May 2018 21:17:29 GMT (envelope-from gjb@FreeBSD.org) Message-Id: <201805042117.w44LHT6T048797@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: gjb set sender to gjb@FreeBSD.org using -f From: Glen Barber Date: Fri, 4 May 2018 21:17:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333264 - head/release/tools X-SVN-Group: head X-SVN-Commit-Author: gjb X-SVN-Commit-Paths: head/release/tools X-SVN-Commit-Revision: 333264 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 21:17:30 -0000 Author: gjb Date: Fri May 4 21:17:29 2018 New Revision: 333264 URL: https://svnweb.freebsd.org/changeset/base/333264 Log: Fix a typo. Submitted by: lidl MFC after: 3 days MFC with: r333262 Sponsored by: The FreeBSD Foundation Modified: head/release/tools/gce.conf Modified: head/release/tools/gce.conf ============================================================================== --- head/release/tools/gce.conf Fri May 4 20:54:27 2018 (r333263) +++ head/release/tools/gce.conf Fri May 4 21:17:29 2018 (r333264) @@ -87,7 +87,7 @@ EOF # To meet GCE marketplace requirements, extract the src.txz and # ports.txz distributions to the target virtual machine disk image - # and fetch the sources for the third-part software installed on + # and fetch the sources for the third-party software installed on # the image. if [ ! -c "${DESTDIR}/dev/null" ]; then mkdir -p ${DESTDIR}/dev From owner-svn-src-head@freebsd.org Fri May 4 22:33:55 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E347FFBA23A; Fri, 4 May 2018 22:33:54 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 9A3A57DED9; Fri, 4 May 2018 22:33:54 +0000 (UTC) (envelope-from mjg@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 94DE0150F2; Fri, 4 May 2018 22:33:54 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44MXs2w089193; Fri, 4 May 2018 22:33:54 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44MXsC7089190; Fri, 4 May 2018 22:33:54 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <201805042233.w44MXsC7089190@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 4 May 2018 22:33:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333265 - head/sys/sys X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/sys X-SVN-Commit-Revision: 333265 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 22:33:55 -0000 Author: mjg Date: Fri May 4 22:33:54 2018 New Revision: 333265 URL: https://svnweb.freebsd.org/changeset/base/333265 Log: Allow the compiler to use __builtin_memcpy In particular this allows the compiler to avoid heavy-handed machinery if the to be copied buffer is small. Reviewed by: jhb Modified: head/sys/sys/systm.h head/sys/sys/zutil.h Modified: head/sys/sys/systm.h ============================================================================== --- head/sys/sys/systm.h Fri May 4 21:17:29 2018 (r333264) +++ head/sys/sys/systm.h Fri May 4 22:33:54 2018 (r333265) @@ -275,6 +275,7 @@ void bzero(void * _Nonnull buf, size_t len); void explicit_bzero(void * _Nonnull, size_t); void *memcpy(void * _Nonnull to, const void * _Nonnull from, size_t len); +#define memcpy(to, from, len) __builtin_memcpy(to, from, len) void *memmove(void * _Nonnull dest, const void * _Nonnull src, size_t n); int copystr(const void * _Nonnull __restrict kfaddr, Modified: head/sys/sys/zutil.h ============================================================================== --- head/sys/sys/zutil.h Fri May 4 21:17:29 2018 (r333264) +++ head/sys/sys/zutil.h Fri May 4 22:33:54 2018 (r333265) @@ -32,7 +32,6 @@ #include #include # define HAVE_MEMCPY -# define memcpy(d, s, n) bcopy((s), (d), (n)) # define memset(d, v, n) bzero((d), (n)) # define memcmp bcmp From owner-svn-src-head@freebsd.org Fri May 4 22:38:34 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9D61FFBA2EA; Fri, 4 May 2018 22:38:34 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-qt0-x242.google.com (mail-qt0-x242.google.com [IPv6:2607:f8b0:400d:c0d::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 40D7D7E715; Fri, 4 May 2018 22:38:34 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-qt0-x242.google.com with SMTP id g13-v6so29419349qth.8; Fri, 04 May 2018 15:38:34 -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=74Wqc4BxTRTcIMk4wiVtzL2kHTLMjmZj2zX4bzgdBGU=; b=o+UZNtiU66OGPbBFqql+d79r0aI3xGBuaStQsPqxdjEKPwbO5PWQNawAj+3/c8sYIj lgoBiJRAd6x5oKNvmnrfamv0XPPdm0NPpMSskgGcE3K4hXYsie8NG1rLM+zJjsrAxDlV /nG+OtkOG1HYTjRRpIpxz9kphB4zJMeDzeRRWawygfkJHyI1WOpeCC2D9UR1pClbWtJp JBKFBQT1U9uX69oLJ07THUB/ZmoI8zQleWhfCkSMzpynLkemEvXZS7k/2T4jo4UPTn+w TAXvRfiLfDtbe3ycPr9xWcJX5FJaHx67VIliUdVGtqVN/cHdnzaPHQe0NeTige0B4L15 f2Cw== 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=74Wqc4BxTRTcIMk4wiVtzL2kHTLMjmZj2zX4bzgdBGU=; b=FXKHfLwmxQyfQkOEtbSkTPWDfFLZsD0Yn69d2bJjB5yEq/AascByHNN9Wt/FSPx5Xh ZwGkPwIPaZ9GsiTi6VYT68ucSDentrJOfgjHnRsSg3NPdMMClGxO0GNudflZkM5ftZW9 RGuI3h9PqJO31bxk7dhFKELzPH99r8scc1Noo40DcalYHoqlGPlKCQvqRl3W9wh4DLH/ n1aM4VgCJ4OADl7k4GLEAC7ToGuX3ewoznLqVjuoYFRD5jycnwicRf9Lx1EA9ptiMAF1 6UCVl6g5b+ud/HAx1bsvVQ5Z4yQ746RDjqFKkmUlbSLxdoGV7OmzlyRmpvo9qWdwGPxk zukQ== X-Gm-Message-State: ALQs6tAgIuzop1/b87tQ5HrZy7UAGXFZYDjmuIBOPyopJy6bYIp5Jz6v JMt4hdTeuD3S2lJIkny8KcZFS+cpuoLBoLKWDbw= X-Google-Smtp-Source: AB8JxZpaN4kJwOMtmSGms1zMknMIwzxAQABBmZooDAAs0TUwBqjQBXCkyd9HU7jXvpJeSSG/UX/7Sg2zCu+MbX1THuI= X-Received: by 2002:a0c:b2c2:: with SMTP id d2-v6mr9507555qvf.16.1525473513672; Fri, 04 May 2018 15:38:33 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.28.74 with HTTP; Fri, 4 May 2018 15:38:33 -0700 (PDT) In-Reply-To: <20180504155301.GA56280@spindle.one-eyed-alien.net> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> From: Mateusz Guzik Date: Sat, 5 May 2018 00:38:33 +0200 Message-ID: Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys To: Brooks Davis Cc: Mateusz Guzik , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 22:38:34 -0000 On Fri, May 4, 2018 at 5:53 PM, Brooks Davis wrote: > On Fri, May 04, 2018 at 04:00:48AM +0000, Mateusz Guzik wrote: > > Author: mjg > > Date: Fri May 4 04:00:48 2018 > > New Revision: 333240 > > URL: https://svnweb.freebsd.org/changeset/base/333240 > > > > Log: > > Allow __builtin_memmove instead of bcopy for small buffers of known > size > > What is the justification for forcing a size rather than using the > compiler's built-in fallback to memmove? Is the kernel compilation > environment disabling that? > > It will fallback to memmove which is super pessimized as being wrapped around bcopy. These limits will get lifted after the fallback routines get sorted out. -- Mateusz Guzik From owner-svn-src-head@freebsd.org Fri May 4 22:41:13 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 234C5FBA3C3; Fri, 4 May 2018 22:41:13 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C08CF7EE08; Fri, 4 May 2018 22:41:12 +0000 (UTC) (envelope-from mjg@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id BAB1315125; Fri, 4 May 2018 22:41:12 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44MfCFS090894; Fri, 4 May 2018 22:41:12 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44MfC9E090893; Fri, 4 May 2018 22:41:12 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <201805042241.w44MfC9E090893@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 4 May 2018 22:41:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333266 - head/sys/amd64/amd64 X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/amd64/amd64 X-SVN-Commit-Revision: 333266 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 22:41:13 -0000 Author: mjg Date: Fri May 4 22:41:12 2018 New Revision: 333266 URL: https://svnweb.freebsd.org/changeset/base/333266 Log: amd64: syscall path bcopy -> memcpy Modified: head/sys/amd64/amd64/trap.c Modified: head/sys/amd64/amd64/trap.c ============================================================================== --- head/sys/amd64/amd64/trap.c Fri May 4 22:33:54 2018 (r333265) +++ head/sys/amd64/amd64/trap.c Fri May 4 22:41:12 2018 (r333266) @@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td) error = 0; argp = &frame->tf_rdi; argp += reg; - bcopy(argp, sa->args, sizeof(sa->args[0]) * 6); + memcpy(sa->args, argp, sizeof(sa->args[0]) * 6); if (sa->narg > regcnt) { KASSERT(params != NULL, ("copyin args with no params!")); error = copyin(params, &sa->args[regcnt], From owner-svn-src-head@freebsd.org Fri May 4 22:48:11 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 43E16FBA605; Fri, 4 May 2018 22:48:11 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EEC28814AA; Fri, 4 May 2018 22:48:10 +0000 (UTC) (envelope-from mjg@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id E55801527F; Fri, 4 May 2018 22:48:10 +0000 (UTC) (envelope-from mjg@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w44MmARu094151; Fri, 4 May 2018 22:48:10 GMT (envelope-from mjg@FreeBSD.org) Received: (from mjg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w44MmAbu094150; Fri, 4 May 2018 22:48:10 GMT (envelope-from mjg@FreeBSD.org) Message-Id: <201805042248.w44MmAbu094150@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mjg set sender to mjg@FreeBSD.org using -f From: Mateusz Guzik Date: Fri, 4 May 2018 22:48:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333267 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: mjg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 333267 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 04 May 2018 22:48:11 -0000 Author: mjg Date: Fri May 4 22:48:10 2018 New Revision: 333267 URL: https://svnweb.freebsd.org/changeset/base/333267 Log: tc: bcopy -> memcpy Modified: head/sys/kern/kern_tc.c Modified: head/sys/kern/kern_tc.c ============================================================================== --- head/sys/kern/kern_tc.c Fri May 4 22:41:12 2018 (r333266) +++ head/sys/kern/kern_tc.c Fri May 4 22:48:10 2018 (r333267) @@ -1352,7 +1352,7 @@ tc_windup(struct bintime *new_boottimebin) ogen = th->th_generation; th->th_generation = 0; atomic_thread_fence_rel(); - bcopy(tho, th, offsetof(struct timehands, th_generation)); + memcpy(th, tho, offsetof(struct timehands, th_generation)); if (new_boottimebin != NULL) th->th_boottime = *new_boottimebin; From owner-svn-src-head@freebsd.org Fri May 4 22:58:22 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 7500FFBA8F8 for ; Fri, 4 May 2018 22:58:22 +0000 (UTC) (envelope-from steven@multiplay.co.uk) Received: from mail-lf0-x22d.google.com (mail-lf0-x22d.google.com [IPv6:2a00:1450:4010:c07::22d]) (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 ACAAD82D1E for ; Fri, 4 May 2018 22:58:21 +0000 (UTC) (envelope-from steven@multiplay.co.uk) Received: by mail-lf0-x22d.google.com with SMTP id b23-v6so33033807lfg.4 for ; Fri, 04 May 2018 15:58:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=multiplay-co-uk.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7LkSp2Mnc7UxVgMyQYZaBWGRngsvnB2JBt/htDOCHE4=; b=dIyVXXuO3ghNqTN28gv9Gdx9uZXmqor+rJ6nG7N3wJcd3rugd5UvZ6WyNH0Mbn7vA6 3EvgtrQ1Qd3AMyaPsScxzhSISnTrBFtWh5xtlUaZddQPchD527NnW4r1xCwoh+BgGVsF AhXoXNIX+AFb/1Yh07T8p5hUfq1jGToTA0DG95EVz76Lr+lpwhcHzomKfPrRLTYHCHAg meABOmhLQUAhZCMrDMM2z5tJhH7T0rS0Unpm2LuMKsa/OYgE8eHWldcpuRmks6kfNnOg PDGkmwerLVKibfGhgRI2fwbdgyH+Sg2nvH4/8zq8f/nBRkkYLxOZA+KJ/6CCQrgYGSPP TODw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7LkSp2Mnc7UxVgMyQYZaBWGRngsvnB2JBt/htDOCHE4=; b=AZl0tElhkHZhkqwMG3ThAh/BPtNWO4DfrBVYZ3M91qUljQ9ez+Amkkebb77q59kmhE ekcfOwR07tVWi7S5Kz06n+PqYo2iWi9TzG/D1NnHf5BKhs928ngdZc8ecs0cJWqJfMwB qvCXQu9mNzxTtbk2naRoYhDsHmY0DnVwmmv71TnmyfLwS14aks+rRkyNZ26r4irqMNJA 7bqQd5ub/O8tWbWbQKrsoULfG0a/pADSopP9gRm10BLyRx+Wi0CZiRSDjwDxflwiu0qf Eg3/17a8KRhSBE6cB0/o/3DBpIo1NSx/oVjo0gJ5KK8Dq+138aDUCR9rv3nWfbzUxUu4 qvaQ== X-Gm-Message-State: ALQs6tBgibvSvr9R+GtAoMMpkkfaLp4CDnAJmDs2yfIF478uW5iPiHBW I9RzfbDuK2Syl0njhCFcd4NIr0dd8lbiYFnM4yfk+g== X-Google-Smtp-Source: AB8JxZoHxM1SI3Pl/pG8aMngTuQ+A8VE7ha66ThsdZpOSVYX8ecDKr+hFSe/tH6TxDfTOsloavPyjszi+6S07J2pI6E= X-Received: by 2002:a19:5209:: with SMTP id m9-v6mr17573475lfb.72.1525474700004; Fri, 04 May 2018 15:58:20 -0700 (PDT) MIME-Version: 1.0 References: <201805042241.w44MfC9E090893@repo.freebsd.org> In-Reply-To: <201805042241.w44MfC9E090893@repo.freebsd.org> From: Steven Hartland Date: Fri, 04 May 2018 22:58:09 +0000 Message-ID: Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 To: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 22:58:22 -0000 Can we get the why in commit messages please? This sort of message doesnt provide anything more that can be obtained from reading the diff, which just leaves us wondering why? I=E2=80=99m sure there is a good reason, but without confirmation we=E2=80= =99re just left guessing. The knock on to this is if some assumption that caused the why changes, anyone looking at this will not be able to make an informed descision that that was the case. On Fri, 4 May 2018 at 23:41, Mateusz Guzik wrote: > Author: mjg > Date: Fri May 4 22:41:12 2018 > New Revision: 333266 > URL: https://svnweb.freebsd.org/changeset/base/333266 > > Log: > amd64: syscall path bcopy -> memcpy > > Modified: > head/sys/amd64/amd64/trap.c > > Modified: head/sys/amd64/amd64/trap.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/amd64/amd64/trap.c Fri May 4 22:33:54 2018 (r333265) > +++ head/sys/amd64/amd64/trap.c Fri May 4 22:41:12 2018 (r333266) > @@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td) > error =3D 0; > argp =3D &frame->tf_rdi; > argp +=3D reg; > - bcopy(argp, sa->args, sizeof(sa->args[0]) * 6); > + memcpy(sa->args, argp, sizeof(sa->args[0]) * 6); > if (sa->narg > regcnt) { > KASSERT(params !=3D NULL, ("copyin args with no params!")= ); > error =3D copyin(params, &sa->args[regcnt], > > From owner-svn-src-head@freebsd.org Fri May 4 22:58:42 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 472E2FBA92F for ; Fri, 4 May 2018 22:58:42 +0000 (UTC) (envelope-from steven@multiplay.co.uk) Received: from mail-lf0-x22d.google.com (mail-lf0-x22d.google.com [IPv6:2a00:1450:4010:c07::22d]) (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 9BE4682E31 for ; Fri, 4 May 2018 22:58:41 +0000 (UTC) (envelope-from steven@multiplay.co.uk) Received: by mail-lf0-x22d.google.com with SMTP id m18-v6so33066019lfb.0 for ; Fri, 04 May 2018 15:58:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=multiplay-co-uk.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=KqBPRKbMXWkeCiP7qcBPe+rfEwECalf4BB3wW9R480A=; b=sRzD2MTtNDv7NwFd0yH6Ek1jVaj2HGliPh4Xr1tPEqt1XmWU8NWRm3DIJW6FhIJHDt KScdKrvBKgG5tNa0g6Q+7H350XzcnLz+/VWaZQDBzYVlePtkvkcabRL7xcNMdxuP1LYk l5e6fJQd1Rq4K/pu0VLUrk5MMOf4PEhKAf9eNkF7m2tz8exsdzfY3G3okpEhphT23Otu Bjo9eL3KbvH+cTRoOeNNs6oyeqk+AxFH0CfZQ7DWarUhe9OYZDqVoeQzWbgf8VsPh6O9 UdYMdCN44wIpPR6tvQEc+2EIF8Ws1iYCu5hH1t5CVtCRadk06We7rN/Tj2o1w+CpmFEw UdAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=KqBPRKbMXWkeCiP7qcBPe+rfEwECalf4BB3wW9R480A=; b=NGSNNPMT+4BnuA3MHnQdLd5WHvufu3LqEqCgQeMwJrNvQoLdNO/Xn/4/Rz4Pz+BGnA VkBvqdEQ7nX8NKAthwUksbrbZ1WfBnmkr2hJCvfTURvdcpyJUmbT8FZiJaDWtF5HVvd3 aRapuXT3RJnERQBfiHHEjFBZG+rQHohAAVtcjJ6sXlm1EV3VWjMe4mTDGjLborezEMe3 Lok0F7UcEibfz0v1ZhlbiwJx7hZAztlfTOmZMTfjD473QoHwQaC9P41bV1VO2Dl6+S2S OKNnCGN2ueIdjswn/iVhBFbWHem8qTyiCQn839rFWwiMLQR+poCIACk1cpHHcQlKBp+I P+Zw== X-Gm-Message-State: ALQs6tDhAaG8d3K7vChFSumlFo3WlFBpD/N29+C3S/bmZYYg0zlDyaGn 68eFyOMBANpAdtK4kDpjsmgYUaFw3aWisRZXoR8oGg== X-Google-Smtp-Source: AB8JxZor6UYdHGIO0GOUYcc6sQ3KmQuu8p9UvLlOxLm5HBrtTomjA1dX+S01amEhdo/7s9NZ/T8E06zmgVGR9jZZYA0= X-Received: by 2002:a2e:4082:: with SMTP id r2-v6mr20932397lje.48.1525474720237; Fri, 04 May 2018 15:58:40 -0700 (PDT) MIME-Version: 1.0 References: <201805042248.w44MmAbu094150@repo.freebsd.org> In-Reply-To: <201805042248.w44MmAbu094150@repo.freebsd.org> From: Steven Hartland Date: Fri, 04 May 2018 22:58:29 +0000 Message-ID: Subject: Re: svn commit: r333267 - head/sys/kern To: Mateusz Guzik Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 22:58:42 -0000 Again why? On Fri, 4 May 2018 at 23:48, Mateusz Guzik wrote: > Author: mjg > Date: Fri May 4 22:48:10 2018 > New Revision: 333267 > URL: https://svnweb.freebsd.org/changeset/base/333267 > > Log: > tc: bcopy -> memcpy > > Modified: > head/sys/kern/kern_tc.c > > Modified: head/sys/kern/kern_tc.c > > ============================================================================== > --- head/sys/kern/kern_tc.c Fri May 4 22:41:12 2018 (r333266) > +++ head/sys/kern/kern_tc.c Fri May 4 22:48:10 2018 (r333267) > @@ -1352,7 +1352,7 @@ tc_windup(struct bintime *new_boottimebin) > ogen = th->th_generation; > th->th_generation = 0; > atomic_thread_fence_rel(); > - bcopy(tho, th, offsetof(struct timehands, th_generation)); > + memcpy(th, tho, offsetof(struct timehands, th_generation)); > if (new_boottimebin != NULL) > th->th_boottime = *new_boottimebin; > > > From owner-svn-src-head@freebsd.org Fri May 4 23:03:03 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E92D4FBABBB for ; Fri, 4 May 2018 23:03:02 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-io0-x22d.google.com (mail-io0-x22d.google.com [IPv6:2607:f8b0:4001:c06::22d]) (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 70F7A8464F for ; Fri, 4 May 2018 23:03:02 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-io0-x22d.google.com with SMTP id e78-v6so27479298iod.0 for ; Fri, 04 May 2018 16:03:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0QtzySXEwOv+QugdOlLF+0o6/UOj9Afwc00C6+xUCOg=; b=p/fMsHtK21SOYVjtjU/IXVOKq5mntNHM7V6nU2ed8q9YLhcEdzaNTRjLu1A56b7034 /uPSh7nn3fEEFtsvE92NvFOisv+pqpGsuciQenNzIgjyjdzw+ycOkWkmHPp3smfD1jKW Ykmm7jHftGlVHzm/a5Qa8PNbJcSVj+V/fbkOozv9v2S4l1cPEwLZSFe4p4cqUyArGzrh JPLGJcsb2w622WSu++wvTkBt/amSLikt12SebhqKOpwneEeZ3+hG5uZGYMAeEIR2hKpx pKVGraX5z9euGM1bGTVbIuqD3vBDNXPXE+kB7efeoSbz+Agy7eWqvBuyy2ksO4jSKCDX mOTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0QtzySXEwOv+QugdOlLF+0o6/UOj9Afwc00C6+xUCOg=; b=Y7tJo0+OohMMNAvDOC3I3Rf/n54e6D4bdC/Y/eZm/fS7Z5PBbzKeHvxyyv1W+Po8Q6 bl1WdC+XkB+g0Hmb58SB2/aRxc6Qsuo1hFmisFIkG8LDgN25qjkbEOJJQmbh/uZntMjM qOdtE4nVx6rHYX+tqkiqCkEoYweJfU4VKAkQleofCaSmOCeBt3m7Z8YJdX9lmoLIRg3O psawicq+Uyalh5AC62bDXtcNfnPKe8DYktOKlzqrjkb2F5r/E0oixDrBBqbEiTpa4+we jvb1LmxhwgDXVyFElNFQiHjDRJqY5WmX8zUsKv8x2iOo0xK81bAiccPgZ/achLMGgwvI yAxg== X-Gm-Message-State: ALQs6tAHzPswrvvtv2csp+wOs3B0v+KcBSt+0Jv6tUxRdnwDqkoXvU4w KITH1iEeDh8qD2PhaLjeU5i0CL2T5erpKl7Ppi8iRg== X-Google-Smtp-Source: AB8JxZrsqYVcvALaNEFTJyzJYhbiI7AeKNO/ovAl+fuGJIiS/go6HJzIoQ/St8ndAp2Gp5Uvd5qTBlPnFEa2YetcAek= X-Received: by 2002:a6b:5a0d:: with SMTP id o13-v6mr31021120iob.39.1525474981528; Fri, 04 May 2018 16:03:01 -0700 (PDT) MIME-Version: 1.0 References: <201805042241.w44MfC9E090893@repo.freebsd.org> In-Reply-To: From: Warner Losh Date: Fri, 04 May 2018 23:02:50 +0000 Message-ID: Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 To: Steven Hartland Cc: Mateusz Guzik , 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-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 23:03:03 -0000 While i wholeheartedly agree, an earlier commit explained why in this case. It allows the compiler to inline for small copies. Warner On Fri, May 4, 2018, 4:58 PM Steven Hartland < steven.hartland@multiplay.co.uk> wrote: > Can we get the why in commit messages please? > > This sort of message doesnt provide anything more that can be obtained > from reading the diff, which just leaves us wondering why? > > I=E2=80=99m sure there is a good reason, but without confirmation we=E2= =80=99re just left > guessing. The knock on to this is if some assumption that caused the why > changes, anyone looking at this will not be able to make an informed > descision that that was the case. > > On Fri, 4 May 2018 at 23:41, Mateusz Guzik wrote: > >> Author: mjg >> Date: Fri May 4 22:41:12 2018 >> New Revision: 333266 >> URL: https://svnweb.freebsd.org/changeset/base/333266 >> >> Log: >> amd64: syscall path bcopy -> memcpy >> >> Modified: >> head/sys/amd64/amd64/trap.c >> >> Modified: head/sys/amd64/amd64/trap.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/amd64/amd64/trap.c Fri May 4 22:33:54 2018 (r333265= ) >> +++ head/sys/amd64/amd64/trap.c Fri May 4 22:41:12 2018 (r333266= ) >> @@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td) >> error =3D 0; >> argp =3D &frame->tf_rdi; >> argp +=3D reg; >> - bcopy(argp, sa->args, sizeof(sa->args[0]) * 6); >> + memcpy(sa->args, argp, sizeof(sa->args[0]) * 6); >> if (sa->narg > regcnt) { >> KASSERT(params !=3D NULL, ("copyin args with no params!"= )); >> error =3D copyin(params, &sa->args[regcnt], >> >> From owner-svn-src-head@freebsd.org Fri May 4 23:12:48 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3190FFBAEB4; Fri, 4 May 2018 23:12:48 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-qk0-x243.google.com (mail-qk0-x243.google.com [IPv6:2607:f8b0:400d:c09::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 B8DA987202; Fri, 4 May 2018 23:12:47 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-qk0-x243.google.com with SMTP id p186so17914184qkd.1; Fri, 04 May 2018 16:12:47 -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=DI7Me33TWwo7wA+idU3CooCTWjKnTbqrWX2tDhp2gfE=; b=p9RmOLbmg3SUFhhT3gb1rOB/LPitsK6PZSyOAiXcqgC/suHnZm7nnn/fjSoocKMUqX /T1M/7JWslKzlxb1VIvJFTjvpu1HDEuUcDBenr4gognw9AhOV5NzDqovAgqA9ayQFKoU wHe0TyMUgK7NeS+leLfuWvy5NroDplrl4/jwkd2tRiTkXvpDWk0dnDMYNTNyIEERRN/j sc1ZQCVrlZS/euK6+K+JJFcdGVtD3NsTv1aVNjU9RbnXkclZ35GLywCb3oRAXSGJoPDQ B3YaSAzDJsRMvUOVKUNhorLVzAK4JLWtiKeghVqhCUEZQ+65ah4lnzF3co32uAvDypzb CVYA== 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=DI7Me33TWwo7wA+idU3CooCTWjKnTbqrWX2tDhp2gfE=; b=pUUI/K3Vt12sv337E9KvAZZW+2Z0x9Sj4ZM5trcw4rDh/6zj8e/4iZh+MhC3ZEqCJk P2adoeOO2Y7qpClNvxuGoIy0D6DmyyvpgNzKt3VMq1eo3R+/zHrvaDIIPhuj9l99jj58 begMRYuuV+jZPZuGvkkBdKvtN9nmWt5hRrUKIEGctjgbYc5jnOHr0qN8HNPTAdKtDqlM oso0Rlj/+RIP/N+ZV921i6YuY5EAb+qXaGi1snMDmEPfYqbtfr9GCAHGyTa3GsdgUs6U rzdr5voVIQVk0t6LrzmTefKQvC68uLfWqWJDSrAUe02FlZ8RUQOwmKUS2+qitKycOQc7 DtjQ== X-Gm-Message-State: ALQs6tBnSDaGqx2ijwo9/t5T7GdH4fXWvja92rxw+54AakV6eNrVWF5l kTEjFMCxUAsnQ/FCGNCBCZzNff5HVCOJzkVkSNc= X-Google-Smtp-Source: AB8JxZrvDN/zzdPqZgySTwMY9NITdPN8TBprPReglysGr0MY/lbKPQJDiGTQWJT/k9mx0PpGAsY9foliG5VhVi3u8Po= X-Received: by 10.55.147.66 with SMTP id v63mr24993686qkd.40.1525475567356; Fri, 04 May 2018 16:12:47 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.28.74 with HTTP; Fri, 4 May 2018 16:12:46 -0700 (PDT) In-Reply-To: References: <201805042241.w44MfC9E090893@repo.freebsd.org> From: Mateusz Guzik Date: Sat, 5 May 2018 01:12:46 +0200 Message-ID: Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 To: Steven Hartland Cc: Mateusz Guzik , 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-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 23:12:48 -0000 On Sat, May 5, 2018 at 12:58 AM, Steven Hartland < steven.hartland@multiplay.co.uk> wrote: > Can we get the why in commit messages please? > > This sort of message doesnt provide anything more that can be obtained > from reading the diff, which just leaves us wondering why? > > I=E2=80=99m sure there is a good reason, but without confirmation we=E2= =80=99re just left > guessing. The knock on to this is if some assumption that caused the why > changes, anyone looking at this will not be able to make an informed > descision that that was the case. > > bcopy is an equivalent of memmove, i.e. it accepts overlapping buffers. But if we know for a fact they don't overlap (like here), doing this over memcpy (which does not accept such buffers) only puts avoidable constraints on the optimizer. This is a rather pedestrian change which can be made in many places, I don't see the point of repeating the explanation in each one. Although I guess it would make sense to point at a specific commit which explains things. > On Fri, 4 May 2018 at 23:41, Mateusz Guzik wrote: > >> Author: mjg >> Date: Fri May 4 22:41:12 2018 >> New Revision: 333266 >> URL: https://svnweb.freebsd.org/changeset/base/333266 >> >> Log: >> amd64: syscall path bcopy -> memcpy >> >> Modified: >> head/sys/amd64/amd64/trap.c >> >> Modified: head/sys/amd64/amd64/trap.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/amd64/amd64/trap.c Fri May 4 22:33:54 2018 (r333265= ) >> +++ head/sys/amd64/amd64/trap.c Fri May 4 22:41:12 2018 (r333266= ) >> @@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td) >> error =3D 0; >> argp =3D &frame->tf_rdi; >> argp +=3D reg; >> - bcopy(argp, sa->args, sizeof(sa->args[0]) * 6); >> + memcpy(sa->args, argp, sizeof(sa->args[0]) * 6); >> if (sa->narg > regcnt) { >> KASSERT(params !=3D NULL, ("copyin args with no params!"= )); >> error =3D copyin(params, &sa->args[regcnt], >> >> --=20 Mateusz Guzik From owner-svn-src-head@freebsd.org Fri May 4 23:39:58 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8A02EFBBA56; Fri, 4 May 2018 23:39:58 +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 8D6DC6E1CF; Fri, 4 May 2018 23:39:57 +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 w44Ndr38044527; Fri, 4 May 2018 16:39:53 -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 w44Ndr2E044526; Fri, 4 May 2018 16:39:53 -0700 (PDT) (envelope-from freebsd) From: "Rodney W. Grimes" Message-Id: <201805042339.w44Ndr2E044526@pdx.rh.CN85.dnsmgr.net> Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 In-Reply-To: To: Mateusz Guzik Date: Fri, 4 May 2018 16:39:53 -0700 (PDT) CC: Steven Hartland , Mateusz Guzik , 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.25 Precedence: list List-Id: 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, 04 May 2018 23:39:58 -0000 [ Charset UTF-8 unsupported, converting... ] > On Sat, May 5, 2018 at 12:58 AM, Steven Hartland < > steven.hartland@multiplay.co.uk> wrote: > > > Can we get the why in commit messages please? > > > > This sort of message doesnt provide anything more that can be obtained > > from reading the diff, which just leaves us wondering why? > > > > I?m sure there is a good reason, but without confirmation we?re just left > > guessing. The knock on to this is if some assumption that caused the why > > changes, anyone looking at this will not be able to make an informed > > descision that that was the case. > > > > > bcopy is an equivalent of memmove, i.e. it accepts overlapping buffers. > But if we know for a fact they don't overlap (like here), doing this over > memcpy (which does not accept such buffers) only puts avoidable > constraints on the optimizer. > > This is a rather pedestrian change which can be made in many places, > I don't see the point of repeating the explanation in each one. Although > I guess it would make sense to point at a specific commit which explains > things. Though this makes sense at the present time when one is reading commits one after the other, in 2 years time when I am looking at just the log file of just one of the effected files that context is lost, so please document things in a way that the information in the log is usefull, part of the purpose of the log is to help us locate and to understand why something was done to the code. It is really rather painful to be reading logs and have to do 30 svn diffs rXXXXX to see what the log entry is trying to explain, and in this case even that does not tell why it was done. > > > On Fri, 4 May 2018 at 23:41, Mateusz Guzik wrote: > > > >> Author: mjg > >> Date: Fri May 4 22:41:12 2018 > >> New Revision: 333266 > >> URL: https://svnweb.freebsd.org/changeset/base/333266 > >> > >> Log: > >> amd64: syscall path bcopy -> memcpy > >> > >> Modified: > >> head/sys/amd64/amd64/trap.c > >> > >> Modified: head/sys/amd64/amd64/trap.c > >> ============================================================ > >> ================== > >> --- head/sys/amd64/amd64/trap.c Fri May 4 22:33:54 2018 (r333265) > >> +++ head/sys/amd64/amd64/trap.c Fri May 4 22:41:12 2018 (r333266) > >> @@ -908,7 +908,7 @@ cpu_fetch_syscall_args(struct thread *td) > >> error = 0; > >> argp = &frame->tf_rdi; > >> argp += reg; > >> - bcopy(argp, sa->args, sizeof(sa->args[0]) * 6); > >> + memcpy(sa->args, argp, sizeof(sa->args[0]) * 6); > >> if (sa->narg > regcnt) { > >> KASSERT(params != NULL, ("copyin args with no params!")); > >> error = copyin(params, &sa->args[regcnt], > >> > >> > > > -- > Mateusz Guzik -- Rod Grimes rgrimes@freebsd.org From owner-svn-src-head@freebsd.org Fri May 4 23:44:50 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 92DD9FBBCE6 for ; Fri, 4 May 2018 23:44:50 +0000 (UTC) (envelope-from juli@northcloak.com) Received: from mail-qt0-x22d.google.com (mail-qt0-x22d.google.com [IPv6:2607:f8b0:400d:c0d::22d]) (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 2E9006E5D5 for ; Fri, 4 May 2018 23:44:49 +0000 (UTC) (envelope-from juli@northcloak.com) Received: by mail-qt0-x22d.google.com with SMTP id m9-v6so8824116qtb.5 for ; Fri, 04 May 2018 16:44:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=northcloak-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=aaP2NRbHR2gjVqG9rFDivwEQtTQ+WTm9lT/VmdPuCQA=; b=nSaP31APHUmjzt1juCQP36cqM4UX05aUGzFST7wgnmkySfzxNOhgIW+9dr/3psEaDX XZN2veWrP3BGdAdTO3HdFAq9+MuO5USfLvMCkt5rKNOojOhBhCMCGgFE+eKoIMVTZA9u o6zdYCujKsNLhM3ync1XLBonRFGGAaU9CkEyWnCDo8sxUmpTLW6HWS8oIpq5ZD7gsFlZ 2YinMLMH2fJRFFSjbZyV6VCuw0xDiK1hA2QNt8PA1N4V+lINwrXrL2Jx9J3ppGjG+R0y r79ZGYO7p6da4EkDHlWsC/j1Pn317KjlkshG8u1mGlnXMJXDliXFjutI9P3blhXc5Qpt h7Og== 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=aaP2NRbHR2gjVqG9rFDivwEQtTQ+WTm9lT/VmdPuCQA=; b=B6t1ehqORU4dV13beOjhCvKDBdnLkVs81a20+38T8JERITmzmeUYO6z1FZ22E7NU3J acOraY+woS+dIxrJt544h3qt9UJWVMfdqLznuoQE7yYyDy8KgFHsRNZ0EliYqG8kTTPa zS50QgcCpyF68BupYUqivuU+paV7dMuuwzpsUWOUt28UDTWq7D/R28cRTgkt8I+hwIIP 550O6Bg3skz2Ei1wATJsvr/Zo7eCjEhfv2s0ZvZT4uti6rTzSzcNtpToQDpJjDiAz2r8 NitjMDAcDIwdZills9YgyimM5qQnf5fkXwSBsmiPQtZ19EyI02wj2mcpCiEXsMgWVCW7 FiXQ== X-Gm-Message-State: ALQs6tAPLNwjFl3CG8r/3g7Aj+XNKroRr1NVE0TLMY88ZjMm8B7DvhEQ //UahSz1FkGig0Ypati/7/bZoiAaXmcEDyyjNQ2DXQ== X-Google-Smtp-Source: AB8JxZovzZcmaIXKowLZMca2mLmEpzAf22pkP70bQnyQev5lT1B3mDbCl+j64GCXU76b5V1sF0GZj9rZfQ9JbzamyXA= X-Received: by 2002:aed:23a1:: with SMTP id j30-v6mr15510498qtc.361.1525477489609; Fri, 04 May 2018 16:44:49 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.69.23 with HTTP; Fri, 4 May 2018 16:44:09 -0700 (PDT) In-Reply-To: References: <201805042241.w44MfC9E090893@repo.freebsd.org> From: Juli Mallett Date: Fri, 4 May 2018 16:44:09 -0700 Message-ID: Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 To: Mateusz Guzik Cc: Steven Hartland , Mateusz Guzik , 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-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 04 May 2018 23:44:50 -0000 On 4 May 2018 at 16:12, Mateusz Guzik wrote: > On Sat, May 5, 2018 at 12:58 AM, Steven Hartland < > steven.hartland@multiplay.co.uk> wrote: > >> Can we get the why in commit messages please? >> >> This sort of message doesnt provide anything more that can be obtained >> from reading the diff, which just leaves us wondering why? >> >> I=E2=80=99m sure there is a good reason, but without confirmation we=E2= =80=99re just left >> guessing. The knock on to this is if some assumption that caused the why >> changes, anyone looking at this will not be able to make an informed >> descision that that was the case. >> >> > bcopy is an equivalent of memmove, i.e. it accepts overlapping buffers. > But if we know for a fact they don't overlap (like here), doing this over > memcpy (which does not accept such buffers) only puts avoidable > constraints on the optimizer. > > This is a rather pedestrian change which can be made in many places, > I don't see the point of repeating the explanation in each one. Although > I guess it would make sense to point at a specific commit which explains > things. > I feel like the second paragraph in particular suggests a methodical project (maybe in a branch?) to convert or mark all instances as not-to-be-converted based on their context and practical concerns (like performance) might be better than doing a bunch of one-off commits, with batched commits to -CURRENT from time-to-time. Then it's easy to say "Phase IV of bcopy analysis in kernel: convert to memcpy for all non-overlapping small copies" with a whole bunch of changes lumped together= . From owner-svn-src-head@freebsd.org Sat May 5 00:26:47 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 98D3FFBDD39 for ; Sat, 5 May 2018 00:26:47 +0000 (UTC) (envelope-from wlosh@bsdimp.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 009D07945A for ; Sat, 5 May 2018 00:26:47 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: by mail-io0-x22a.google.com with SMTP id e20-v6so27591389iof.4 for ; Fri, 04 May 2018 17:26:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20150623.gappssmtp.com; s=20150623; h=mime-version:sender:in-reply-to:references:from:date:message-id :subject:to:cc; bh=Sv0St9+nqGs1hYTvKmCWqU2P70RuVR5eJqFyGtL14rA=; b=H3sIzoPG8DN0wahdnoGVTivNQ0dBsbLyEMG5IQ5SVkMoKylHDWl/rI5SzjlPHPIdCd dHrxLgarr1Xj08dyJAUkfarrKXqWrc9xLfGlN49Yl6kdAf99qB9l6mt/a0flrjAmJApz 1Hkmgtx7K7fNKgefL6GxDYMYrMCfCQePr32PFyb9ERUg0gOzClz7kRpeGIWwjTy5tN0L qhz8/NWVm3/jFEft4B/QOVT1ziUpgQuxkG43KdPsHk248OKuV9VCYSxxLX7DrQwbOTr6 H7I+JjHtltdvqOaHsClnHVvlvUvVidkxg+FxGB0o9zdxeXcnAkaHpf3vm7MtYn5J3uWY G5Vg== 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=Sv0St9+nqGs1hYTvKmCWqU2P70RuVR5eJqFyGtL14rA=; b=HHYtdQLVMXX/3KfHnEUmz5TghvtEVXZ2GB47GrEJrjymquolK+b0XuvHq4mrR2miIK 7h01e5wc1+AOShuPBrog16J0BB05X0wXiWWDWHUM4jaA/OeOhZsfzpWpe/av3NKU0YxO E/InYUYQ5Y1xItTZ8ppyonYRV72S3Fo/ARbjt1h31sm9SLnntKe+vc2RfFccAzMxXb6a k4hajHNZJUFczc5psRdGZr/5m9Z0DxyZ8LbF6YWIPDQO7A6w8fLwU9nfrE1IdU01/JNC 0rh6xIZtuwQUZz9YV5qNbmKXPClxVUGrDyrv5jnVsjXdvkxvB/Dm5wC/LXirzZFv/oEd No+g== X-Gm-Message-State: ALQs6tD1iXKQMluu7CuG2NbkEjdZhOdMh5Jj8dmrAJ8yrITQeJ/rnd1o WEfJUsrA/n/FKYcQCz3NP4aWjhLJ1SAKATypVtwjlA== X-Google-Smtp-Source: AB8JxZqOv0dYXLxYkL/9fKHPhOzVQIxUs8oDVkD3bzMM9PbA/arGkF/ZJAgyqFNDWeIFqzKcaa6XMeGrpyqDEE+mhDU= X-Received: by 2002:a6b:d404:: with SMTP id l4-v6mr31993702iog.37.1525480006209; Fri, 04 May 2018 17:26:46 -0700 (PDT) MIME-Version: 1.0 Sender: wlosh@bsdimp.com Received: by 2002:a4f:a65a:0:0:0:0:0 with HTTP; Fri, 4 May 2018 17:26:45 -0700 (PDT) X-Originating-IP: [2603:300b:6:5100:1052:acc7:f9de:2b6d] In-Reply-To: References: <201805042241.w44MfC9E090893@repo.freebsd.org> From: Warner Losh Date: Fri, 4 May 2018 18:26:45 -0600 X-Google-Sender-Auth: ibXL-8sv6U6ipV7aq35zy55yf7M Message-ID: Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 To: Mateusz Guzik Cc: Steven Hartland , Mateusz Guzik , 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-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 00:26:47 -0000 On Fri, May 4, 2018 at 5:12 PM, Mateusz Guzik wrote: > On Sat, May 5, 2018 at 12:58 AM, Steven Hartland < > steven.hartland@multiplay.co.uk> wrote: > >> Can we get the why in commit messages please? >> >> This sort of message doesnt provide anything more that can be obtained >> from reading the diff, which just leaves us wondering why? >> >> I=E2=80=99m sure there is a good reason, but without confirmation we=E2= =80=99re just left >> guessing. The knock on to this is if some assumption that caused the why >> changes, anyone looking at this will not be able to make an informed >> descision that that was the case. >> >> > bcopy is an equivalent of memmove, i.e. it accepts overlapping buffers. > But if we know for a fact they don't overlap (like here), doing this over > memcpy (which does not accept such buffers) only puts avoidable > constraints on the optimizer. > bcopy, in userland, is memmove. bcopy in the kernel has had a more complicated history. Today it's more like memmove, but at times in the history of BSD/Unix it's be more akin to memcpy with a companion ovbcopy used for overlapping copies. FreeBSD has almost always been more in the 'bcopy is memmove' rather than the 'bcopy is memcpy' though some of the lower-tier architectures pulled in ovbcopy which we recently GC'd from NetBSD and/or OpenBSD. Plus there's been an irrational encouragement of using bcopy over mem* which has lead to the current state of affairs. For the vast majority of uses, it hasn't really mattered much in the past. It hasn't shown up on radar. However, as its optimization has moved into the compiler I'm guessing that's changed. It's that change of heart I think that are taking people by surprise. Warner From owner-svn-src-head@freebsd.org Sat May 5 00:38:40 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CAA8DFBE20A; Sat, 5 May 2018 00:38:39 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail108.syd.optusnet.com.au (mail108.syd.optusnet.com.au [211.29.132.59]) by mx1.freebsd.org (Postfix) with ESMTP id 090177B2E0; Sat, 5 May 2018 00:38:38 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id 0C7531A43EF; Sat, 5 May 2018 10:38:30 +1000 (AEST) Date: Sat, 5 May 2018 10:38:29 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Conrad Meyer cc: Brooks Davis , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys In-Reply-To: Message-ID: <20180505090954.X1307@besplex.bde.org> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> 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=cIaQihWN c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=kj9zAlcOel0A:10 a=6I5d2MoRAAAA:8 a=sgXCNgMsof7162YS8y4A:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 00:38:40 -0000 On Fri, 4 May 2018, Conrad Meyer wrote: > On Fri, May 4, 2018 at 8:53 AM, Brooks Davis wrote: >> On Fri, May 04, 2018 at 04:00:48AM +0000, Mateusz Guzik wrote: >>> Author: mjg >>> Date: Fri May 4 04:00:48 2018 >>> New Revision: 333240 >>> URL: https://svnweb.freebsd.org/changeset/base/333240 >>> >>> Log: >>> Allow __builtin_memmove instead of bcopy for small buffers of known size >> >> What is the justification for forcing a size rather than using the >> compiler's built-in fallback to memmove? It is much the same as for using 'register' -- the programmer knows more than the compiler (for 1% of the targets supported by the 1% of compilers known to the programmer). >> Is the kernel compilation >> environment disabling that? > > Yes. I think the compiler can't use its builtin bcopy() in standalone mode. Not quite. Builtin bcopy() doesn't exist even for clang (5.0.1) in hosted mode. But the question was about using __builtin_memmove(). This exists for both gcc and clang, but doesn't work right: - for gcc4.2.1, __builtin_memmove() never works right. It always falls back to memmove(). This is broken in the -ffreestanding case, since memmove() can be anything then. Actually, in the kernel a function named memmove(9) exists and has the same semantics as memmove(3), but is slightly slower. So the effect of the change for gcc-4.2.1 is to pessimize the case that was supposed to be optimized: fixed-sized moves of size <= 64 are pessimized to use memmove() instead of bcopy(), while other args still use bcopy(). - for clang-5.0.1, on x86 for most -march settings, SSE is used even with -ffreestanding. The kernel uses various -m flags to prevent use of SSE and the FPU. This forces the compiler to copy through integer registers. This reduces the number of cases that must be analyzed to see how broken the hard-coded 64 is: - with AVX present and not killed, inlining occurs up to size 256 (8 pairs of vmovups through 256-bit registers) - else with SSE present and not killed, inlining occurs up to size 128 (8 pairs of movaps through 128-bit registers). This also depends on other CPU capabilitities. E.g., this uses movaps instead of movups since movups is slower on the target CPU (core2) even in the aligned case, while vmovups doesn't have this problem. - the above cases don't apply in the kernel - on 64-bit arches, inlining occurs up to size 64 (8 pairs movq through 64-bit integer registers) - on 32-bit arches, inlining occurs up to size 64 (8 pairs movq through 32-bit integer registers). So the effect of the change for clang is to pessimize half of the cases that were supposed to be optimized on i386 (and probably similarly on other 32-bit arches): fixed-sized moves of size > 32 and <= 64 are pessimized to use memmove() instead of bcopy(). Summary: this change wouldn't have passed my review. I have used similar changes for 15-20 years but never made them production quality since there are too many variations to consider and testing showed insignificant improvements except for micro-benchmarks. This change should be harmless if done right. E.g., it could spell 64 as (8 * sizeof(register_t)) so as to not pessimize i386 and probably similarly on other 32-bit arches. It is still too chummy with the implementations. x86 compilers used to get this wrong too, and probably still do except when they can use AVX. gcc got it wrong 20-30 years ago on i386 by inlining to "rep movsl" up to sizes much larger than 32. Eventually it learned that it didn't understand memory and left this to the library. Now on x86 CPUs that have "fast-strings", inlined "rep movsb" is better than most libraries. x86 kernel "libraries" still reduce to "rep movs*" plus lots of extra instructions that more than double the overhead. With fast-strings, the problem with using "rep movsb" is almost entirely in its overhead. On Haswell, IIRC, it takes 25 cycles to start up. Then it copies 32 bytes per cycle if both the source and the target are in the L1 cache. So the copy size must be 25 * 32 = 800 just to amortize half of the startup overhead. Even copying through 32-bit integer registers is much faster than that. There are often cache misses so that all methods are slow, but micro-benchmarks rarely cover the slow cases. I don't believe the claimed speeding of using the optimized bcopy() in cpu_fetch_sycall_args() on amd64 (r333241). This changes the copy size from a variable to 6*8 bytes. It is claimed to speed up getppid() from 7.31M/sec to 10.65M/sec on Skylake. But here it and other changes in the last week give a small pessimization for getpid() on Haswell at 4.08GHz: last week, 100M getpid()'s took 8.27 seconds (12.09M/sec). Now they take 8.30 seconds (12.05M/sec). (This is with very old libraries, so there is no possibility of getpid() being done in userland.) 0.03 seconds is 122.4M cycles. So the speed difference is 1.224 cycles. Here the timing has a resolution of only 0.01 seconds, so most digits in this 1.224 are noise, but the difference is apparently a single cycle. I would have expected more like the "rep movs*" setup overhead of 25 cycles. Another way to look at this is: 12.09M/sec syscalls means 82.71 nsec or 337 cycles each. Not too bad. The cache latency for this system according to lmbench-2.0 is 1 nsec for L1, 4.5 nsec for L2, and 16.3 nsec for main memory (old lmbench doesn't understand L3...). 66 cycles for main memory. I don't quite believe that. 100-200 cycles is more common. I think Skylake is slightly slower. Anyway, there can't be many cache misses in 337 cycles. We can hope for improvements of ~25 cycles each by avoiding "rep movs*" instructions. bcopy() actually has 2 of these (it ends up with 1 rep movsb which is null except in misaligned cases. This started being pessimal with the i486 and is relatively worse with fast-strings). However, fixes in this area rarely make as much difference as hoped for, except possibly on in-order arches. On Haswell and Skylake, everything is pipelined so it extra cycles in bcopy() don't matter provided nothing depends on the result very soon, and nearby code is equally inefficient and the resources used by the bcopy() don't contend too much with the resources used by the nearby code. Resources used by bcopy() do contend a lot in practice, but not 100%. Bruce From owner-svn-src-head@freebsd.org Sat May 5 01:46:58 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 2B17DFC12EF; Sat, 5 May 2018 01:46:58 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail108.syd.optusnet.com.au (mail108.syd.optusnet.com.au [211.29.132.59]) by mx1.freebsd.org (Postfix) with ESMTP id 775296BFE9; Sat, 5 May 2018 01:46:56 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id EEFDA1A4567; Sat, 5 May 2018 11:46:53 +1000 (AEST) Date: Sat, 5 May 2018 11:46:53 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Mateusz Guzik cc: Brooks Davis , Mateusz Guzik , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys In-Reply-To: Message-ID: <20180505103837.A1307@besplex.bde.org> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> 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=VJytp5HX c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=kj9zAlcOel0A:10 a=6I5d2MoRAAAA:8 a=dNsih-8PXwqfbXkUOPYA:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 01:46:58 -0000 On Sat, 5 May 2018, Mateusz Guzik wrote: > On Fri, May 4, 2018 at 5:53 PM, Brooks Davis wrote: > >> On Fri, May 04, 2018 at 04:00:48AM +0000, Mateusz Guzik wrote: >>> Author: mjg >>> Date: Fri May 4 04:00:48 2018 >>> New Revision: 333240 >>> URL: https://svnweb.freebsd.org/changeset/base/333240 >>> >>> Log: >>> Allow __builtin_memmove instead of bcopy for small buffers of known >> size >> >> What is the justification for forcing a size rather than using the >> compiler's built-in fallback to memmove? Is the kernel compilation >> environment disabling that? >> > It will fallback to memmove which is super pessimized as being wrapped > around bcopy. Actually, the pessimization is tiny. A quick test in userland on freefall gives: - 22.81 seconds for 10**9 bcopy()s of 128 bytes (75 cycles each; bandwidth 5.61G/sec) - 23.43 seconds for 10**9 mymemmove()s of 128 bytes where mymemmove() == kernel wrapper of bcopy() (77.3 cycles each; bandwidth 5.46G/sec) but that was only for the first run. On another run, the bcopy()s took 23.11 seconds and the mymmemove()s took 22.62 seconds. So the errors in the measurement are much larger than the 2-cycle difference. Nevertheless, I expect the difference to be about 2 cycles or 3%. Most of the bandwidth is wasted by both methods. gcc inlines memcpy() to 16 movq pairs and this takes 4.38 to 5.16 seconds (it tends to get faster with every run, which I suspect is due to SCHED_ULE affinity not understanding HTT but getting better with training -- I have been fixing this in SCHED_4BSD). - 4.38 seconds for 10**9 memcpys()s of 128 bytes (14.5 cycles each; bandwidth 29.22G/sec) Even without fancy -march, clang inlines memcpy() to movaps on vanilla amd64 since SSE is available: - 2.84-2.89 seconds for 10**9 memcpys()s of 128 bytes (9.4 cycles each; bandwidth 45.07G/sec). clang does a weird optimization for my counting loop unless its counter is declared volatile -- it doesn't optimize the loop to a single copy, but reduces the count by 10 each iteration instead of the expected 1 or everything. Semi-semi-finally, with -march=native to get AVX instead of SSE: - 1.65-1.88 seconds for 10**9 memcpys()s of 128 bytes (5.5 cycles each; bandwidth 77.57G/sec). This is still far short of the 128-non-disk-manufacturersG that is reached by Haswell at 4GHz using simple "rep movsb". The size is too small to amortize the overhead. Semi-finally, with AVX and the size doubled to 256 bytes: - 2.98-3.06 seconds for 10**9 memcpys()s of 256 bytes (9.8 cycles each; bandwidth 85.90G/sec). Finally, with the size increased to 4K and the count reduced to 10M: - 0.62-0.66 seconds for 10**7 memcpys()s of 4K bytes (204.6 cycles each; bandwidth 66.02G/sec). Oops, that wasn't final. It shows that freefall's Xeon behaves much like Haswell. The user library is clueless about all this and just uses "rep movsq" and even 4K is too small to amortize the startup overhead of not-so-fast-strings. With the size increased to 8K and the count kept at 10M: - 1.12-1.16 seconds for 10**7 memcpys()s of 8K bytes (369.6 cycles each; bandwidth 73.14G/sec). This almost reaches the AVX bandwidth. But the bandwidth is only this high with both the source and the target in the L1 cache. Doubling the size again runs out of L1. So there is no size large enough to amortize the ~25 cycle startup overhead of not-so-fast-strings. > These limits will get lifted after the fallback routines get sorted out. They should be left out to begin with. Any hard-coded limits are sure to be wrong for many cases. E.g., 32 is wrong on i386. Using __builtin_memmove() at all is a pessimization for gcc-4.2.1, but that can be fixed (reduced to a null change) by sorting out memmove(). Bruce From owner-svn-src-head@freebsd.org Sat May 5 02:54:28 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6F3A3FC5182 for ; Sat, 5 May 2018 02:54:28 +0000 (UTC) (envelope-from shawn.webb@hardenedbsd.org) Received: from mail-wm0-x236.google.com (mail-wm0-x236.google.com [IPv6:2a00:1450:400c:c09::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 C9F067BB31 for ; Sat, 5 May 2018 02:54:27 +0000 (UTC) (envelope-from shawn.webb@hardenedbsd.org) Received: by mail-wm0-x236.google.com with SMTP id a137-v6so8994773wme.1 for ; Fri, 04 May 2018 19:54:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hardenedbsd-org.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=G7o5jbyiVnLisCRAYwBUb1O6lfSphowTm5WQ9Jq/ULI=; b=F125p/k4GvIJSuYdg13onhNlzJQTuzLKnIFwgImMEk5A9RAdbycQ+BUmZEo9D9FV/C hN2HXjIO3jBMH61pIILxEt4ZKKGCnv15n19TcmFFBLGMdo1+8e7Q+MQVu6nRoo3PvK7M 5Ma2zYADQiNr4UPaCV3oCtbcheqjnnlF1rPYe1ZjGfutJUpkeY1dv5CUNub/s/2AqhuD QLAAUib8d9DKo2CcV5vG1yB0sVZdr45KXTZinNZNWnqt9Qyno4ODYewH3kbIVT1GUKP7 niYUUdma/M6DFstWzO8gZEJKMReGPX9pb44srnkx/yS6UiUsqhRq9MsptT0GGFD3ZD0P XWJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=G7o5jbyiVnLisCRAYwBUb1O6lfSphowTm5WQ9Jq/ULI=; b=SMKe8VWd0M/KImb6shgWxSk6I5jHO31jJwFE7R9ctOpBCEs3Q41Z9eEB+sI4t7WF4i /y1m7nNz4JZOPAWSOVoty95XusO5dVx+4dG30YQVqvNvvnWVmYSXN4pOmlm8HLYgXSOo 7/v8jUigjc3Ji1Wi0oL784v3XkNFYj1hQcaZdPaYUhIjB0W9EG/ZRcpvPYCnZNUh6jF4 1CdcsXJgKbvsEqgUfo8UDAw0vaw+bXnJhUpXwomRHqLvsL5uKXUu1sDPftNe/Q8pK5qu C9ZHMNGixToXSKe2b7PrLTSbF3aH1WH6ER4dBJ1WapR/E0Sp2VeicLJyqKgYY3Dq1xCW tLng== X-Gm-Message-State: ALQs6tA7VzJgf0ouQMTECmBv1L57oRWxcxhVqN1kkcFIoZ40tmj8JS57 735Y4mXl0PmSlos7jC/XCgsgBA== X-Google-Smtp-Source: AB8JxZoG9PDY6oAVfyFpbuIcuBeX8Ux0XCXfbOIcYV8HINeSD5X5zdMeTmdrBw2N8egWZUX/AoAD3A== X-Received: by 2002:a50:83a5:: with SMTP id 34-v6mr25731559edi.276.1525488865903; Fri, 04 May 2018 19:54:25 -0700 (PDT) Received: from mutt-hbsd (tor-exit.csail.mit.edu. [128.31.0.13]) by smtp.gmail.com with ESMTPSA id f16-v6sm9722245edr.32.2018.05.04.19.54.21 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 04 May 2018 19:54:24 -0700 (PDT) Date: Fri, 4 May 2018 22:54:12 -0400 From: Shawn Webb To: Konstantin Belousov Cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r318736 - in head: cddl/lib/libzfs contrib/compiler-rt/lib/sanitizer_common contrib/openbsm/libbsm include lib/libarchive lib/libc/gen lib/libc/include lib/libc/sys lib/libkvm lib/libmi... Message-ID: <20180505025412.tnifiree3rtckrnt@mutt-hbsd> References: <201705230929.v4N9T5g1028124@repo.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="d55xq456qxp2sgxk" Content-Disposition: inline In-Reply-To: <201705230929.v4N9T5g1028124@repo.freebsd.org> X-Operating-System: FreeBSD mutt-hbsd 12.0-CURRENT FreeBSD 12.0-CURRENT X-PGP-Key: http://pgp.mit.edu/pks/lookup?op=vindex&search=0x6A84658F52456EEE User-Agent: NeoMutt/20180323 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 02:54:28 -0000 --d55xq456qxp2sgxk Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, May 23, 2017 at 09:29:05AM +0000, Konstantin Belousov wrote: > Author: kib > Date: Tue May 23 09:29:05 2017 > New Revision: 318736 > URL: https://svnweb.freebsd.org/changeset/base/318736 >=20 > Log: > Commit the 64-bit inode project. > =20 > Extend the ino_t, dev_t, nlink_t types to 64-bit ints. Modify > struct dirent layout to add d_off, increase the size of d_fileno > to 64-bits, increase the size of d_namlen to 16-bits, and change > the required alignment. Increase struct statfs f_mntfromname[] and > f_mntonname[] array length MNAMELEN to 1024. > =20 > ABI breakage is mitigated by providing compatibility using versioned > symbols, ingenious use of the existing padding in structures, and > by employing other tricks. Unfortunately, not everything can be > fixed, especially outside the base system. For instance, third-party > APIs which pass struct stat around are broken in backward and > forward incompatible ways. > =20 > Kinfo sysctl MIBs ABI is changed in backward-compatible way, but > there is no general mechanism to handle other sysctl MIBS which > return structures where the layout has changed. It was considered > that the breakage is either in the management interfaces, where we > usually allow ABI slip, or is not important. > =20 > Struct xvnode changed layout, no compat shims are provided. > =20 > For struct xtty, dev_t tty device member was reduced to uint32_t. > It was decided that keeping ABI compat in this case is more useful > than reporting 64-bit dev_t, for the sake of pstat. > =20 > Update note: strictly follow the instructions in UPDATING. Build > and install the new kernel with COMPAT_FREEBSD11 option enabled, > then reboot, and only then install new world. > =20 > Credits: The 64-bit inode project, also known as ino64, started life > many years ago as a project by Gleb Kurtsou (gleb). Kirk McKusick > (mckusick) then picked up and updated the patch, and acted as a > flag-waver. Feedback, suggestions, and discussions were carried > by Ed Maste (emaste), John Baldwin (jhb), Jilles Tjoelker (jilles), > and Rick Macklem (rmacklem). Kris Moore (kris) performed an initial > ports investigation followed by an exp-run by Antoine Brodin (antoine). > Essential and all-embracing testing was done by Peter Holm (pho). > The heavy lifting of coordinating all these efforts and bringing the > project to completion were done by Konstantin Belousov (kib). > =20 > Sponsored by: The FreeBSD Foundation (emaste, kib) > Differential revision: https://reviews.freebsd.org/D10439 >=20 > Modified: > head/contrib/openbsm/libbsm/bsm_wrappers.c Hey Kostik, Did the OpenBSM changes ever make it upstream to the OpenBSM project? I'm looking through the commits of the OpenBSM project and it looks like they never did. Thanks, --=20 Shawn Webb Cofounder and Security Engineer HardenedBSD Tor-ified Signal: +1 443-546-8752 Tor+XMPP+OTR: lattera@is.a.hacker.sx GPG Key ID: 0x6A84658F52456EEE GPG Key Fingerprint: 2ABA B6BD EF6A F486 BE89 3D9E 6A84 658F 5245 6EEE --d55xq456qxp2sgxk Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEKrq2ve9q9Ia+iT2eaoRlj1JFbu4FAlrtHM8ACgkQaoRlj1JF bu5qhg/8DwOGuFEojTSycH+CEDKj1t8IgmyciruRsXM7LmWj/PkMiiuE3m+628dB 2h1iENd2bPeORxGl0y+Te3z3NF7JNjcyJJJ4RLztvMLKFqyZBIUxVdGypdxpic4Y XbpmKJTcnvFnzczQWuZuFv5TNtf0p1UP6h6iN801uI8CGbgV/urwFUmMtCkM/Pe8 byvOsJrCN0HjIljnS2w7Aim5TNqpEkQv87PGdm3OANvXRghjSjXZWTYRfDTIgVWu HgBkKnIRO5GnX18qAaiqS5dDCY7UG5Aj8mKhqWS/Mv/z+5D8EYrEPxCOXnDE3Koh er2kcaMng3cqIUS7NaMJYi5hfkQVe7718OukqVsnZT1Ao9UGa5H2sVYW7Dvk/rqQ 2yz46JvWIAe02vuGPbpxhxi78XU/OIpVk/DjVz2KmrskgGUi+r1vai8ITkX04MUW 6LGzLhPgIBrSyrMhnkEctBa22sDPjZjbL2QmjeWQMNnfoXDZ6GmJCQ7CP7dJxKIX w6AVq/NNuo4yuryyClgy6KdRjw3TLy4nD8K7d9KWhStCY/XfALeHMgXMPYCpGrjf qUTEKlKVhnMJLxGwQTexGgO9bPNxIXssYbaIphzLaS5xih0q0T5/eVjvvcG8Y1zl yXCCVgpSiSwM+jPwBZIK1T77XCtPnGKimru5veH/XRdUdNHsjoI= =Ll7N -----END PGP SIGNATURE----- --d55xq456qxp2sgxk-- From owner-svn-src-head@freebsd.org Sat May 5 02:58:31 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 848D6FC5347; Sat, 5 May 2018 02:58:31 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail110.syd.optusnet.com.au (mail110.syd.optusnet.com.au [211.29.132.97]) by mx1.freebsd.org (Postfix) with ESMTP id C859D7C2B6; Sat, 5 May 2018 02:58:30 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail110.syd.optusnet.com.au (Postfix) with ESMTPS id 9E361108670; Sat, 5 May 2018 12:58:27 +1000 (AEST) Date: Sat, 5 May 2018 12:58:27 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: John Baldwin cc: Matt Macy , src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333242 - head/sys/kern In-Reply-To: <3408582.QRuzgOyxgv@ralph.baldwin.cx> Message-ID: <20180505114700.G1307@besplex.bde.org> References: <201805040651.w446p2iB010839@repo.freebsd.org> <3408582.QRuzgOyxgv@ralph.baldwin.cx> 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=cIaQihWN c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=kj9zAlcOel0A:10 a=6I5d2MoRAAAA:8 a=-tkF9WCgqhqwDzhr3awA:9 a=CjuIK1q_8ugA:10 a=IjZwj45LgO3ly-622nXo:22 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 02:58:31 -0000 On Fri, 4 May 2018, John Baldwin wrote: > On Friday, May 04, 2018 06:51:02 AM Matt Macy wrote: >> Author: mmacy >> Date: Fri May 4 06:51:01 2018 >> New Revision: 333242 >> URL: https://svnweb.freebsd.org/changeset/base/333242 >> >> Log: >> `dup1_processes -t 96 -s 5` on a dual 8160 >> >> x dup_before >> + dup_after >> +------------------------------------------------------------+ >> | x + | >> |x x x x ++ ++| >> | |____AM___| |AM|| >> +------------------------------------------------------------+ >> N Min Max Median Avg Stddev >> x 5 1.514954e+08 1.5230351e+08 1.5206157e+08 1.5199371e+08 341205.71 >> + 5 1.5494336e+08 1.5519569e+08 1.5511982e+08 1.5508323e+08 96232.829 >> Difference at 95.0% confidence >> 3.08952e+06 +/- 365604 >> 2.03266% +/- 0.245071% >> (Student's t, pooled s = 250681) > > The log doesn't quite describe what the change is though and why it results > in this change. bcopy -> memcpy to permit using the compiler builtin I understand, > but using memcpy instead of a structure copy seems rather odd as I would expect > the compiler to treat a structure copy as the same as __builtin_memcpy(). It is obvious what it does, and that it can't possibly give the claimed change, and shouldn't have passed any review. >> Reported by: mjg@ >> MFC after: 1 week >> >> Modified: >> head/sys/kern/kern_descrip.c >> >> Modified: head/sys/kern/kern_descrip.c >> ============================================================================== >> --- head/sys/kern/kern_descrip.c Fri May 4 04:05:07 2018 (r333241) >> +++ head/sys/kern/kern_descrip.c Fri May 4 06:51:01 2018 (r333242) >> @@ -1503,7 +1503,7 @@ filecaps_copy(const struct filecaps *src, struct filec >> >> if (src->fc_ioctls != NULL && !locked) >> return (false); >> - *dst = *src; >> + memcpy(dst, src, sizeof(*src)); >> if (src->fc_ioctls == NULL) >> return (true); >> This seems to have no effect except on 32-bit arches. The size of struct filecaps seems to be 36 on i386 and 40 on amd64. Thus it is automatically inlined in all cases that I checked. memcpy() in the kernel used to be and extern function, so it was just slower. But now it is a macro that reduces to __builtin_memcpy(). The implementation of this macro is broken -- it is missing parentheses for args. >> @@ -1512,7 +1512,7 @@ filecaps_copy(const struct filecaps *src, struct filec >> >> size = sizeof(src->fc_ioctls[0]) * src->fc_nioctls; >> dst->fc_ioctls = malloc(size, M_FILECAPS, M_WAITOK); >> - bcopy(src->fc_ioctls, dst->fc_ioctls, size); >> + memcpy(dst->fc_ioctls, src->fc_ioctls, size); >> return (true); >> } This is at best a very minor optimization. bcopy() was changed to a macro that uses __builtin_memmove() just before memcpy() was changed to use __builtin_memcpy(). (The first change has more technical complications and was copied from a similar change for bzero() and is has smaller bugs -- it is not missing parentheses for args, but is missing them for the nested bcopy() call like for the nested bzero() call (this looks like an endlessly recursive call and parentheses should be used to clarify that it isn't).) memcpy() might tbe faster than bcopy() since it doesn't have to work for overlapped copies. But when both reduce to builtins, in cases like the above the compiler should be able to see that the copies don't overlap and further reduce to inlined memcpy() in both cases. This shows another reason why it is wrong to not reduce bcopy() to __builtin_memmove() in all cases -- it prevents the compiler further reducing to memcpy() in the non-inlined case. bcopy() and memcpy() are almost equally pessimal on x86, but bcopy() is inherently slower. Unfortunately, there are compiler bugs in this area. -ffreestanding -mno-sse -m32 breaks __builtin_memmove() with both clang and gcc for a struct copy of size 36. For a struct copy, the result is just bad code: - gcc-4.2.1 generates 9 pairs of movl's through integer registers. Too many I think. - clang generates "rep movsl". This is much slower than even the large code generated by gcc. __builtin_memcpy() instead of __builtin_memmove() generates the same not so good code as for a struct copy. Adjusting the above analysis for this gives: - changing the struct copy to memcpy() has no effect - using __builtin_memmove() to implement bcopy() suffers from compiler bugs. The compiler not only fails to reduce to __builtin_memcpy() in most cases - the second change above does have an effect since it bypasses the compiler bugs. Further examples of the compiler bugs: - __builtin_memmove() with size 36 does work with clang on amd64 with -ffreestanding -mno-sse (but no -m32). So the kernel implementation works OK on amd64 with clang. I thought that the limit was 32 for all of these functions. The limit should obviously be larger with larger registers including AVX. In these tests, I didn't use any special inlining flags. The kernel uses expanded inlining flags which might make a difference. The -Winline flag to detect failed inlining was recently broken (removed). There should be a similar flag to detect using builtins that don't work. - __builtin_memmove() doesn't work with gcc-4.2.1 for any size on either amd64 or i386 with or without special flags (it reduces to memmove(). So the kernel implementation doesn't works on either amd64 or i386 with gcc. Bruce From owner-svn-src-head@freebsd.org Sat May 5 04:21:16 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 902C0FC8A29; Sat, 5 May 2018 04:21:16 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail109.syd.optusnet.com.au (mail109.syd.optusnet.com.au [211.29.132.80]) by mx1.freebsd.org (Postfix) with ESMTP id 867AE6E8F3; Sat, 5 May 2018 04:21:15 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail109.syd.optusnet.com.au (Postfix) with ESMTPS id C411DD6F3AD; Sat, 5 May 2018 14:21:06 +1000 (AEST) Date: Sat, 5 May 2018 14:21:05 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Warner Losh cc: Steven Hartland , Mateusz Guzik , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 In-Reply-To: Message-ID: <20180505135330.Y2917@besplex.bde.org> References: <201805042241.w44MfC9E090893@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=cIaQihWN c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=kj9zAlcOel0A:10 a=oXPNzy3kUUnsnLgNDLwA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 04:21:16 -0000 On Fri, 4 May 2018, Warner Losh wrote: > While i wholeheartedly agree, an earlier commit explained why in this case. > It allows the compiler to inline for small copies. [This should have been killfiled due to top-posting.] No, it has nothing to do with that. The compiler can inline either bcopy() or memcpy(), and does so after related recent changes that implement bcopy() using builtins. What this does is work around bugs in the recent changes, and compiler bugs. bcopy() handles overlapping copies, but memcpy() doesn't, so it is not just a style bug to use memcpy() instead of bcopy(). However, if bcopy() is exposed to the compiler using builtins (note that -ffreestanding prevents even memcpy() being known to the compiler unless memcpy() is spelled __builtin_memcpy(), and there are similar but larger complications for bcopy()) then the compiler can almost always see when overlap occurs and further reduce bcopy() to __builtin_memcpy(). The full reduction should be: bcopy() -> __builtin_memmove() -> __builtin_memcpy() -> { either inline code or a call to __memcpy() } but the actual reduction is: bcopy() -> { __builtin_memmove() for small sizes, else bcopy() (bug1) } -> { __builtin_memcpy() if inlined, else a call to memmove() (bugs2,3) }, else bcopy() where bug1 is an implementation bug (not telling the compiler about large copies), bug2 is a compiler bug (forgetting that it reduced to *memcpy when calling the library to handle large sizes), and bug3 is a compiler bug (calling the library function memmove() which might be unrelated in the freestanding case). Fixing the implementation and compiler would optimize thousands of calls to bcopy() without churning the source code, but I'm a bit worried about security bugs from this. The security bugs are larger for bzero(). When bzero() was not exposed to the compiler as __builtin_memset(), it was guaranteed to always zero memory so there was no need for explicit_bzero() or explicit_memset() in the kernel, and using these was just a style bug, as is using memset() to 0 instead of bzero(). Usually the compiler doesn't have enough information to optimize away __builtin_memset(). But changing thousands of bzero()s to __builtin_memset()s is likely to find a couple of cases where the compiler does do this optimization and it breaks security. Bruce From owner-svn-src-head@freebsd.org Sat May 5 05:19:33 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9E258FCA4BE; Sat, 5 May 2018 05:19:33 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4EA187CD6E; Sat, 5 May 2018 05:19:33 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 2FC1419522; Sat, 5 May 2018 05:19:33 +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 w455JX48090004; Sat, 5 May 2018 05:19:33 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w455JXNB090003; Sat, 5 May 2018 05:19:33 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201805050519.w455JXNB090003@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Sat, 5 May 2018 05:19:33 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333268 - head/sys/kern X-SVN-Group: head X-SVN-Commit-Author: avg X-SVN-Commit-Paths: head/sys/kern X-SVN-Commit-Revision: 333268 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 05:19:33 -0000 Author: avg Date: Sat May 5 05:19:32 2018 New Revision: 333268 URL: https://svnweb.freebsd.org/changeset/base/333268 Log: for bus suspend, detach and shutdown iterate children in reverse order For most buses all children are equal, so the order does not matter. Other buses, such as acpi, carefully order their child devices to express implicit dependencies between them. For such buses it is safer to bring down devices in the reverse order. I believe that this is the reason why hpet_suspend had to be disabled. Some drivers depend on a working event timer until they are suspended. But previously we would suspend hpet very early. I tested this change by makinbg hpet_suspend actually stop HPET timers and tested that too. Note that this change is not a complete solution as it does not take into account bus passes. A better approach would be to track the actual attach order of the devices and to use the reverse of that. Reviewed by: imp, mav MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D15291 Modified: head/sys/kern/subr_bus.c Modified: head/sys/kern/subr_bus.c ============================================================================== --- head/sys/kern/subr_bus.c Fri May 4 22:48:10 2018 (r333267) +++ head/sys/kern/subr_bus.c Sat May 5 05:19:32 2018 (r333268) @@ -3708,7 +3708,11 @@ bus_generic_detach(device_t dev) if (dev->state != DS_ATTACHED) return (EBUSY); - TAILQ_FOREACH(child, &dev->children, link) { + /* + * Detach children in the reverse order. + * See bus_generic_suspend for details. + */ + TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) { if ((error = device_detach(child)) != 0) return (error); } @@ -3728,7 +3732,11 @@ bus_generic_shutdown(device_t dev) { device_t child; - TAILQ_FOREACH(child, &dev->children, link) { + /* + * Shut down children in the reverse order. + * See bus_generic_suspend for details. + */ + TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) { device_shutdown(child); } @@ -3781,15 +3789,23 @@ int bus_generic_suspend(device_t dev) { int error; - device_t child, child2; + device_t child; - TAILQ_FOREACH(child, &dev->children, link) { + /* + * Suspend children in the reverse order. + * For most buses all children are equal, so the order does not matter. + * Other buses, such as acpi, carefully order their child devices to + * express implicit dependencies between them. For such buses it is + * safer to bring down devices in the reverse order. + */ + TAILQ_FOREACH_REVERSE(child, &dev->children, device_list, link) { error = BUS_SUSPEND_CHILD(dev, child); - if (error) { - for (child2 = TAILQ_FIRST(&dev->children); - child2 && child2 != child; - child2 = TAILQ_NEXT(child2, link)) - BUS_RESUME_CHILD(dev, child2); + if (error != 0) { + child = TAILQ_NEXT(child, link); + if (child != NULL) { + TAILQ_FOREACH_FROM(child, &dev->children, link) + BUS_RESUME_CHILD(dev, child); + } return (error); } } From owner-svn-src-head@freebsd.org Sat May 5 05:22:12 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6AA89FCA7F1; Sat, 5 May 2018 05:22:12 +0000 (UTC) (envelope-from avg@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 1E8607D80D; Sat, 5 May 2018 05:22: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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 000F41969C; Sat, 5 May 2018 05:22: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 w455MBAo093860; Sat, 5 May 2018 05:22:11 GMT (envelope-from avg@FreeBSD.org) Received: (from avg@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w455MBKa093858; Sat, 5 May 2018 05:22:11 GMT (envelope-from avg@FreeBSD.org) Message-Id: <201805050522.w455MBKa093858@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: avg set sender to avg@FreeBSD.org using -f From: Andriy Gapon Date: Sat, 5 May 2018 05:22:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333269 - head/sys/dev/amdsbwd X-SVN-Group: head X-SVN-Commit-Author: avg X-SVN-Commit-Paths: head/sys/dev/amdsbwd X-SVN-Commit-Revision: 333269 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 05:22:12 -0000 Author: avg Date: Sat May 5 05:22:11 2018 New Revision: 333269 URL: https://svnweb.freebsd.org/changeset/base/333269 Log: amdsbwd: fix reboot status reporting Originally, I overlooked that PMIO register 0xc0 has a dual personality. It can either be S5/Reset Status register or Misc. Fix register (aka debug status register). The mode is controlled by bit 2 in PMIO register 0xc4. Apparently there are register programming requirements for the second personality, so many BIOSes leave the register, after programming it, in that mode. So, we need to switch the register to the correct mode. Additionally, AMDSB8_WD_RST_STS was defined incorrectly as bit 13 while it is actually bit 25 (and the register's width is 32 bits, not 16). With this change I see the following in dmesg after a reset by the watchdog: amdsbwd0: ResetStatus = 0x42000000 amdsbwd0: Previous Reset was caused by Watchdog MFC after: 2 weeks Modified: head/sys/dev/amdsbwd/amd_chipset.h head/sys/dev/amdsbwd/amdsbwd.c Modified: head/sys/dev/amdsbwd/amd_chipset.h ============================================================================== --- head/sys/dev/amdsbwd/amd_chipset.h Sat May 5 05:19:32 2018 (r333268) +++ head/sys/dev/amdsbwd/amd_chipset.h Sat May 5 05:22:11 2018 (r333269) @@ -95,9 +95,10 @@ #define AMDSB8_WDT_32KHZ 0x00 #define AMDSB8_WDT_1HZ 0x03 #define AMDSB8_WDT_RES_MASK 0x03 -#define AMDSB8_PM_RESET_STATUS0 0xc0 -#define AMDSB8_PM_RESET_STATUS1 0xc1 -#define AMDSB8_WD_RST_STS 0x20 +#define AMDSB8_PM_RESET_STATUS 0xc0 /* 32 bit wide */ +#define AMDSB8_WD_RST_STS 0x2000000 +#define AMDSB8_PM_RESET_CTRL 0xc4 +#define AMDSB8_RST_STS_DIS 0x04 /* * Newer FCH registers in the PMIO space. Modified: head/sys/dev/amdsbwd/amdsbwd.c ============================================================================== --- head/sys/dev/amdsbwd/amdsbwd.c Sat May 5 05:19:32 2018 (r333268) +++ head/sys/dev/amdsbwd/amdsbwd.c Sat May 5 05:22:11 2018 (r333269) @@ -321,16 +321,23 @@ amdsbwd_probe_sb7xx(device_t dev, struct resource *pmr static void amdsbwd_probe_sb8xx(device_t dev, struct resource *pmres, uint32_t *addr) { - uint8_t val; - int i; + uint32_t val; + int i; /* Report cause of previous reset for user's convenience. */ - val = pmio_read(pmres, AMDSB8_PM_RESET_STATUS0); + + val = pmio_read(pmres, AMDSB8_PM_RESET_CTRL); + if ((val & AMDSB8_RST_STS_DIS) != 0) { + val &= ~AMDSB8_RST_STS_DIS; + pmio_write(pmres, AMDSB8_PM_RESET_CTRL, val); + } + val = 0; + for (i = 3; i >= 0; i--) { + val <<= 8; + val |= pmio_read(pmres, AMDSB8_PM_RESET_STATUS + i); + } if (val != 0) - amdsbwd_verbose_printf(dev, "ResetStatus0 = %#04x\n", val); - val = pmio_read(pmres, AMDSB8_PM_RESET_STATUS1); - if (val != 0) - amdsbwd_verbose_printf(dev, "ResetStatus1 = %#04x\n", val); + amdsbwd_verbose_printf(dev, "ResetStatus = 0x%08x\n", val); if ((val & AMDSB8_WD_RST_STS) != 0) device_printf(dev, "Previous Reset was caused by Watchdog\n"); From owner-svn-src-head@freebsd.org Sat May 5 05:28:49 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AB7D0FCAB3A; Sat, 5 May 2018 05:28:49 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail106.syd.optusnet.com.au (mail106.syd.optusnet.com.au [211.29.132.42]) by mx1.freebsd.org (Postfix) with ESMTP id 149427E9EA; Sat, 5 May 2018 05:28:48 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail106.syd.optusnet.com.au (Postfix) with ESMTPS id 989033CFA18; Sat, 5 May 2018 14:57:42 +1000 (AEST) Date: Sat, 5 May 2018 14:57:42 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Warner Losh cc: Mateusz Guzik , Steven Hartland , Mateusz Guzik , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333266 - head/sys/amd64/amd64 In-Reply-To: Message-ID: <20180505142152.W2917@besplex.bde.org> References: <201805042241.w44MfC9E090893@repo.freebsd.org> MIME-Version: 1.0 X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.2 cv=cIaQihWN c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=nlC_4_pT8q9DhB4Ho9EA:9 a=pGLkceISAAAA:8 a=ASrO2z8EAAAA:8 a=cqUc1000STbUteopt-EA:9 a=45ClL6m2LaAA:10 a=hMlqHZxbFqNCaWTKXPQf:22 Content-Type: TEXT/PLAIN; charset=X-UNKNOWN; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 05:28:50 -0000 On Fri, 4 May 2018, Warner Losh wrote: > On Fri, May 4, 2018 at 5:12 PM, Mateusz Guzik wrote: > >> On Sat, May 5, 2018 at 12:58 AM, Steven Hartland < >> steven.hartland@multiplay.co.uk> wrote: >> >>> Can we get the why in commit messages please? >>> >>> This sort of message doesnt provide anything more that can be obtained >>> from reading the diff, which just leaves us wondering why? >>> >>> I=E2=80=99m sure there is a good reason, but without confirmation we=E2= =80=99re just left >>> guessing. The knock on to this is if some assumption that caused the wh= y >>> changes, anyone looking at this will not be able to make an informed >>> descision that that was the case. >>> >> bcopy is an equivalent of memmove, i.e. it accepts overlapping buffers. >> But if we know for a fact they don't overlap (like here), doing this ove= r >> memcpy (which does not accept such buffers) only puts avoidable >> constraints on the optimizer. Indeed, but clang already does adequate optimization for som manye cases (especially amd64), so these small changes are not much more than special micro-optimizations for gcc on 32-bit arches. I care about gcc and 32-bit arches, but you don't. > bcopy, in userland, is memmove. bcopy in the kernel has had a more > complicated history. Today it's more like memmove, but at times in the > history of BSD/Unix it's be more akin to memcpy with a companion ovbcopy > used for overlapping copies. FreeBSD has almost always been more in the I think (but don't know) that ovbcopy is a SYSVism and bcopy() always handled overlapping copies in BSD. It was not well documented that it did, but with only 1 memory-copying function that function has to handle overlapping copies or be even better documented to not handle them. > 'bcopy is memmove' rather than the 'bcopy is memcpy' though some of the > lower-tier architectures pulled in ovbcopy which we recently GC'd from > NetBSD and/or OpenBSD. In all of 4.4BSD /sys, ovbcopy is only referenced on 34 lines (almost half in tags files), mostly to implement it on some arches: - news3400, hp300, i386, luna68k: alias for bcopy - sparc64: separate from bcopy. bcopy seems to be like memcpy and doesn't handle overlapping copies. - vax/inline/machpats.c: separate and too vaxish for me to understand (seem= s to be just a prologue) - netiso/iso_pcb.c, net/slcompress.c, sparc/pmap.c. netinet/ip_output.c, netinet/ip_nroute.c: actually use it The sparc64 and vax code is an indication that bcopy didn't always handle overlapping copies in BSD. > Plus there's been an irrational encouragement of > using bcopy over mem* which has lead to the current state of affairs. You mean a rational encouragement. > For the vast majority of uses, it hasn't really mattered much in the past= =2E > It hasn't shown up on radar. It matters even less now. Deciding if the copies overlap takes about 1 branch, and with modern branch prediction that often costs about 1 cycle. The x86 library implementation wastes more like 50 cycles in other ways. > However, as its optimization has moved into > the compiler I'm guessing that's changed. It's that change of heart I thi= nk > that are taking people by surprise. I blame micro-benchmarks. Amdahls' law applies and gives a limit of about 1% for the possible improvements from optimizing bcopy(), except in micro-benchmarks. That is even though the kernel spends a relatively large amount of time in bcopy(). Userland might take 80% of the time, the kernel 20%, and bcopy() 10% of the 20% =3D 2%. After optimizing bcopy(= ) to be twice as fast (which is difficult), you have speeded up applications by 1% at most. Bruce From owner-svn-src-head@freebsd.org Sat May 5 05:31:14 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 4A2DFFCAC03; Sat, 5 May 2018 05:31:14 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail105.syd.optusnet.com.au (mail105.syd.optusnet.com.au [211.29.132.249]) by mx1.freebsd.org (Postfix) with ESMTP id 672EF7F5F6; Sat, 5 May 2018 05:31:13 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from [192.168.0.102] (c110-21-101-228.carlnfd1.nsw.optusnet.com.au [110.21.101.228]) by mail105.syd.optusnet.com.au (Postfix) with ESMTPS id 22CD8104FCFA; Sat, 5 May 2018 15:31:12 +1000 (AEST) Date: Sat, 5 May 2018 15:31:11 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Mateusz Guzik cc: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: Re: svn commit: r333265 - head/sys/sys In-Reply-To: <201805042233.w44MXsC7089190@repo.freebsd.org> Message-ID: <20180505151622.Q3442@besplex.bde.org> References: <201805042233.w44MXsC7089190@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=FNpr/6gs c=1 sm=1 tr=0 a=PalzARQSbocsUSjMRkwAPg==:117 a=PalzARQSbocsUSjMRkwAPg==:17 a=kj9zAlcOel0A:10 a=y8u3x2SE7Zv_5vRtElYA:9 a=CjuIK1q_8ugA:10 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 05:31:14 -0000 On Fri, 4 May 2018, Mateusz Guzik wrote: > Log: > Allow the compiler to use __builtin_memcpy > > In particular this allows the compiler to avoid heavy-handed machinery > if the to be copied buffer is small. > > Reviewed by: jhb Bugs in this: > Modified: head/sys/sys/systm.h > ============================================================================== > --- head/sys/sys/systm.h Fri May 4 21:17:29 2018 (r333264) > +++ head/sys/sys/systm.h Fri May 4 22:33:54 2018 (r333265) > @@ -275,6 +275,7 @@ void bzero(void * _Nonnull buf, size_t len); > void explicit_bzero(void * _Nonnull, size_t); > > void *memcpy(void * _Nonnull to, const void * _Nonnull from, size_t len); > +#define memcpy(to, from, len) __builtin_memcpy(to, from, len) - space instead of tab after #define. systm.h has rotted to have several other instances of this bug - space instead of tab between macro and macro expansion. This bug is less common. - args not parenthesized. I wonder how memcpy() handles attributes like _Nonnull. FreeBSD doesn't declare any attributes for builtins (is this possible?) so it gets the ones that the compiler defaults to, if any. I haven't noticed any documentation of these defaults even for compilers like gcc that have documentation. > void *memmove(void * _Nonnull dest, const void * _Nonnull src, size_t n); > > int copystr(const void * _Nonnull __restrict kfaddr, > > Modified: head/sys/sys/zutil.h > ============================================================================== > --- head/sys/sys/zutil.h Fri May 4 21:17:29 2018 (r333264) > +++ head/sys/sys/zutil.h Fri May 4 22:33:54 2018 (r333265) > @@ -32,7 +32,6 @@ > #include > #include > # define HAVE_MEMCPY > -# define memcpy(d, s, n) bcopy((s), (d), (n)) > # define memset(d, v, n) bzero((d), (n)) > # define memcmp bcmp Example of parenthesizing args in old code. Example of other style bugs for #define (spaces after '#' to indent). Reduction of portability here. I think zutil.h tries to provide its own wrappers for everything. It still does this for memset() although this is wrong when (n) != 0. I think you removed memcpy() since memcpy() is now implemented as an inconsistent macro, while memset() is still a function in systm.h so there is no conflict for memset(). Since there is no conflict, the bug is not even detected. memcmp() here is even more broken that memset(). memcmp() cannot be implemented using bcmp(), since it is tri-state while bcmp() is boolean. The system memcmp() had the same bug for a long time. Bruce From owner-svn-src-head@freebsd.org Sat May 5 08:16:20 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 854EAFA607A; Sat, 5 May 2018 08:16:20 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 29C378702D; Sat, 5 May 2018 08:16:20 +0000 (UTC) (envelope-from eadler@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1F2B91B20E; Sat, 5 May 2018 08:16:20 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w458GJXN079655; Sat, 5 May 2018 08:16:19 GMT (envelope-from eadler@FreeBSD.org) Received: (from eadler@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w458GJHI079653; Sat, 5 May 2018 08:16:19 GMT (envelope-from eadler@FreeBSD.org) Message-Id: <201805050816.w458GJHI079653@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: eadler set sender to eadler@FreeBSD.org using -f From: Eitan Adler Date: Sat, 5 May 2018 08:16:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333270 - in head: . share/skel X-SVN-Group: head X-SVN-Commit-Author: eadler X-SVN-Commit-Paths: in head: . share/skel X-SVN-Commit-Revision: 333270 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 08:16:20 -0000 Author: eadler Date: Sat May 5 08:16:19 2018 New Revision: 333270 URL: https://svnweb.freebsd.org/changeset/base/333270 Log: [skel] Remove dot.rhosts from share/skel The rcmds were removed in r324351. Chase that removal. Deleted: head/share/skel/dot.rhosts Modified: head/ObsoleteFiles.inc head/share/skel/Makefile Modified: head/ObsoleteFiles.inc ============================================================================== --- head/ObsoleteFiles.inc Sat May 5 05:22:11 2018 (r333269) +++ head/ObsoleteFiles.inc Sat May 5 08:16:19 2018 (r333270) @@ -38,6 +38,8 @@ # xargs -n1 | sort | uniq -d; # done +# 20180505: rhosts +OLD_FILES+=usr/share/skel/dot.rhosts # 20180502: retire ixgb OLD_FILES+=usr/share/man/man4/if_ixgb.4.gz OLD_FILES+=usr/share/man/man4/ixgb.4.gz Modified: head/share/skel/Makefile ============================================================================== --- head/share/skel/Makefile Sat May 5 05:22:11 2018 (r333269) +++ head/share/skel/Makefile Sat May 5 08:16:19 2018 (r333270) @@ -4,7 +4,7 @@ FILESGROUPS= FILES1 FILES2 FILES1= dot.cshrc dot.login dot.login_conf dot.mailrc dot.profile \ dot.shrc -FILES2= dot.mail_aliases dot.rhosts +FILES2= dot.mail_aliases FILES1DIR= ${SHAREDIR}/skel FILES2DIR= ${SHAREDIR}/skel FILES1MODE= 0644 From owner-svn-src-head@freebsd.org Sat May 5 09:02:02 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5A3E4FA7609; Sat, 5 May 2018 09:02:02 +0000 (UTC) (envelope-from o.hartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 9D4C16993B; Sat, 5 May 2018 09:02:01 +0000 (UTC) (envelope-from o.hartmann@walstatt.org) Received: from thor.intern.walstatt.dynvpn.de ([77.14.80.170]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0M1SLt-1eLh3P162z-00tXMc; Sat, 05 May 2018 11:01:50 +0200 Date: Sat, 5 May 2018 11:01:11 +0200 From: "O. Hartmann" To: "K. Macy" , Stephen Hurd Cc: "O. Hartmann" , svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers , FreeBSD CURRENT Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys: TRAP 12 Message-ID: <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> In-Reply-To: <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> Organization: WALSTATT User-Agent: OutScare 3.1415926 X-Operating-System: ImNotAnOperatingSystem 3.141592527 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:MnDkm2d5rKwgZK3RWRh2AEWyuRhScfqav79bp9XhK4jIrmkKdQ1 fR1fwLfUHjwK/pj3C46HSZaM/C96yET7i8Dx1r0txRm3qurD7iX9VkuQCm9FBPb7PCgRjwd LqzoeJGpVxWBfN0i43N1QNv5CZg4ba4InY/X1tjEZ5k+mFGxPnx5JNwFqtrCJz2PecDWrd1 v1tae55kUr/mIrem+/TKQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:Hms12gabo6I=:IpjPtXHD1zzM1102MYF4wN UejCrh1Nh+ddzd/ESVG+d00fQEYJLp8Bto/Ft3Q9Zamd8cKOimCYwcoRdGL5oqlZidCvP7Vf0 iYa4ynaDKhdI0CamvKF+IdHMW/MOc4HNNLRteuw0fCc+89iD0XEF9zoR7F8bcyT36RIKWMTPm p4MvE2CaPMZfc0BSAua0tHA22ROAvwXb0RO677zglIeO6JE9N36F3Fj+l+WlDUshrFG+/MPtw NLd9mE0MuiECM2JHjlJRsfZS73uS8WfFPKeqASkJcaGEq6CGBXlTXIWlXq4YlrkDT9CLnvmRm TWju+fF6tHxSNfH+Hs/5gtreJtlrd2iN69PqePx6dXV/WvIeDh7Q0l3Y+YzIcqfU7W6aFrKHh 1r5k1SGQYHgFRlpxMpJUcfwlEtlyP7bP/tM+yKSWEJ4qqHz+6CwhY+P+guQZahoJXQFc46Ll4 rqdLZ/3R/6yQ9RIoBVlrZTyCjuiCOsWGZ8f0U2TUuEm3RkUio/SM4WJG9unECD0+DZsg1NnZY UbJA6WrMRA7Ze5RG6JnIXby4GPvPbnQpNUBQY7aKY+DlNJicqvw9J6F9kl66ZQPPNzxFUmQJv DnCtmBJtRytEWiUUusMG9vpUXuHAMhMd/b2jCFw51fTlyP6gsWHFwleZiaoRMiycVHtlnMGEu 9hCWV8ltOYLlUDFxUlGlaC2SWhGDDiV2u1bvLFAugw+TzQGvx2hkdLf8TYqKsibFh3HU1HZrg hseHuNj1sNa1x1PoUMsnvtT30p31fCj96XmX4q1dCXQJXTp41HADJfYmKZA/m27oyHF3Q1Biu pIs8ysr X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 09:02:03 -0000 LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBNTEyDQoNCkFtIFRo dSwgMyBNYXkgMjAxOCAyMjoyMzo1MiArMDIwMA0KIk8uIEhhcnRtYW5uIiA8b2hhcnRtYW5uQHdh bHN0YXR0Lm9yZz4gc2NocmllYjoNCg0KDQpJJ20gbm90IGZhbWlsaWFyIHdpdGgga2VybmVsIGRl YnVnZ2luZywgc28gdGhlcmUgYXJlIHNvbWUgc3RydWdnbGVzLg0KDQpBZnRlciBjb21waWxpbmcg YSBkZWJ1Z2dpbmcga2VybmVsIG9uIA0KDQpWZXJzaW9uIFN0cmluZzogRnJlZUJTRCAxMi4wLUNV UlJFTlQgIzIgcjMzMzI2OTogU2F0IE1heSAgNSAwODoxMDozMiBDRVNUIDIwMTgNCg0KUGFuaWMg U3RyaW5nOiBMb2NrIHRjcCBub3QgZXhjbHVzaXZlbHkgbG9ja2VkIEAgL3Vzci9zcmMvc3lzL25l dGluZXQvaW5fcGNiLmM6MTM5MQ0KDQoNCkFuZCB0aGlzIGlzIHdoYXQgSSBjYW4gcHJvdmlkZSB5 b3Ugd2l0aDoNCg0KDQpSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdXNyL29iai91c3Ivc3JjL2FtZDY0 LmFtZDY0L3N5cy9XQUxIQUxMLURFQlVHL2tlcm5lbC5mdWxsLi4uZG9uZS4NCg0KVW5yZWFkIHBv cnRpb24gb2YgdGhlIGtlcm5lbCBtZXNzYWdlIGJ1ZmZlcjoNCnBhbmljOiBMb2NrIHRjcCBub3Qg ZXhjbHVzaXZlbHkgbG9ja2VkIEAgL3Vzci9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmM6MTM5MQ0K DQpjcHVpZCA9IDQNCnRpbWUgPSAxNTI1NTEwMjkxDQpLREI6IHN0YWNrIGJhY2t0cmFjZToNCmRi X3RyYWNlX3NlbGZfd3JhcHBlcigpIGF0IGRiX3RyYWNlX3NlbGZfd3JhcHBlcisweDJiL2ZyYW1l IDB4ZmZmZmZlMDBlNDg1ZTY3MA0KdnBhbmljKCkgYXQgdnBhbmljKzB4MWEzL2ZyYW1lIDB4ZmZm ZmZlMDBlNDg1ZTZkMA0KcGFuaWMoKSBhdCBwYW5pYysweDQzL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1 ZTczMA0KX3J3X3d1bmxvY2tfY29va2llKCkgYXQgX3J3X3d1bmxvY2tfY29va2llKzB4MTM3L2Zy YW1lIDB4ZmZmZmZlMDBlNDg1ZTc2MA0KaW5fcGNiZnJlZSgpIGF0IGluX3BjYmZyZWUrMHg1MWEv ZnJhbWUgMHhmZmZmZmUwMGU0ODVlN2IwDQp0Y3BfdXNyX2RldGFjaCgpIGF0IHRjcF91c3JfZGV0 YWNoKzB4MTVlL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTdmMA0Kc29mcmVlKCkgYXQgc29mcmVlKzB4 MmY0L2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTg0MA0Kc29jbG9zZSgpIGF0IHNvY2xvc2UrMHgzODcv ZnJhbWUgMHhmZmZmZmUwMGU0ODVlOGIwDQpjbG9zZWYoKSBhdCBjbG9zZWYrMHgxZjUvZnJhbWUg MHhmZmZmZmUwMGU0ODVlOTQwDQpjbG9zZWZwKCkgYXQgY2xvc2VmcCsweGEwL2ZyYW1lIDB4ZmZm ZmZlMDBlNDg1ZTk4MA0KYW1kNjRfc3lzY2FsbCgpIGF0IGFtZDY0X3N5c2NhbGwrMHg2ZDMvZnJh bWUgMHhmZmZmZmUwMGU0ODVlYWIwDQpmYXN0X3N5c2NhbGxfY29tbW9uKCkgYXQgZmFzdF9zeXNj YWxsX2NvbW1vbisweDEwMS9mcmFtZSAweGZmZmZmZTAwZTQ4NWVhYjANCi0gLS0tIHN5c2NhbGwg KDYsIEZyZWVCU0QgRUxGNjQsIHN5c19jbG9zZSksIHJpcCA9IDB4ODAxMTFhZGRhLCByc3AgPSAw eDdmZmZkZjNmNzIyOCwgcmJwID0NCjB4N2ZmZmRmM2Y3MjQwIC0tLSBLREI6IGVudGVyOiBwYW5p Yw0KDQpfX2N1cnRocmVhZCAoKSBhdCAuL21hY2hpbmUvcGNwdS5oOjIzMQ0KMjMxICAgICAgICAg ICAgIF9fYXNtKCJtb3ZxICUlZ3M6JTEsJTAiIDogIj1yIiAodGQpDQooa2dkYikgYnQNCihrZ2Ri KSBidA0KIzAgIF9fY3VydGhyZWFkICgpIGF0IC4vbWFjaGluZS9wY3B1Lmg6MjMxDQojMSAgZG9h ZHVtcCAodGV4dGR1bXA9MCkgYXQgL3Vzci9zcmMvc3lzL2tlcm4va2Vybl9zaHV0ZG93bi5jOjM2 NQ0KIzIgIDB4ZmZmZmZmZmY4MDU5N2Q1YiBpbiBkYl9kdW1wIChkdW1teT08b3B0aW1pemVkIG91 dD4sIGR1bW15Mj08dW5hdmFpbGFibGU+LA0KZHVtbXkzPTx1bmF2YWlsYWJsZT4sIGR1bW15ND08 dW5hdmFpbGFibGU+KSBhdCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo1NzQNCiMzICAw eGZmZmZmZmZmODA1OTdhZTYgaW4gZGJfY29tbWFuZCAobGFzdF9jbWRwPTxvcHRpbWl6ZWQgb3V0 PiwgY21kX3RhYmxlPTxvcHRpbWl6ZWQNCm91dD4sIGRvcGFnZXI9PG9wdGltaXplZCBvdXQ+KSBh dCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo0ODEgIzQNCm91dD4weGZmZmZmZmZmODA1 OTc4MTQgaW4gZGJfY29tbWFuZF9sb29wICgpIGF0IC91c3Ivc3JjL3N5cy9kZGIvZGJfY29tbWFu ZC5jOjUzNA0KIzUgIDB4ZmZmZmZmZmY4MDU5YjA0ZiBpbiBkYl90cmFwICh0eXBlPTxvcHRpbWl6 ZWQgb3V0PiwgY29kZT08b3B0aW1pemVkIG91dD4pDQphdCAvdXNyL3NyYy9zeXMvZGRiL2RiX21h aW4uYzoyNTAgIzYgIDB4ZmZmZmZmZmY4MDkyNDQ2MyBpbiBrZGJfdHJhcCAodHlwZT0zLA0KY29k ZT0tNjE0NTYsIHRmPTxvcHRpbWl6ZWQgb3V0PikgYXQgL3Vzci9zcmMvc3lzL2tlcm4vc3Vicl9r ZGIuYzo2OTcgIzcNCjB4ZmZmZmZmZmY4MGM4MGFiNyBpbiB0cmFwIChmcmFtZT0weGZmZmZmZTAw ZTQ4NWU1YTApDQphdCAvdXNyL3NyYy9zeXMvYW1kNjQvYW1kNjQvdHJhcC5jOjU1MCAjOCAgPHNp Z25hbCBoYW5kbGVyIGNhbGxlZD4gIzkgIGtkYl9lbnRlcg0KKHdoeT0weGZmZmZmZmZmODBkZDdi NTQgInBhbmljIiwgbXNnPTxvcHRpbWl6ZWQgb3V0PikgYXQgL3Vzci9zcmMvc3lzL2tlcm4vc3Vi cl9rZGIuYzo0NzkNCiMxMCAweGZmZmZmZmZmODA4ZGI1MDAgaW4gdnBhbmljIChmbXQ9PG9wdGlt aXplZCBvdXQ+LCBhcD0weGZmZmZmZTAwZTQ4NWU3MTApDQphdCAvdXNyL3NyYy9zeXMva2Vybi9r ZXJuX3NodXRkb3duLmM6ODUxICMxMSAweGZmZmZmZmZmODA4ZGI1OTMgaW4gcGFuaWMNCihmbXQ9 MHhmZmZmZmZmZjgxMjViYmQ4IDxjbnB1dHNfbXR4PiAiXDI1MVwzMTJcMzMyXDIwMFwzNzdcMzc3 XDM3N1wzNzciKQ0KYXQgL3Vzci9zcmMvc3lzL2tlcm4va2Vybl9zaHV0ZG93bi5jOjc4OSAjMTIg MHhmZmZmZmZmZjgwOGQ2NWI3IGluIF9fcndfYXNzZXJ0DQooYz0weGZmZmZmZTAwMTExZWU2NTAs IHdoYXQ9NCwgZmlsZT0weGZmZmZmZmZmODBkYzUxNTcgIi91c3Ivc3JjL3N5cy9uZXRpbmV0L2lu X3BjYi5jIiwNCmxpbmU9MTM5MSkgYXQgL3Vzci9zcmMvc3lzL2tlcm4va2Vybl9yd2xvY2suYzox NDI2ICMxMyBfcndfd3VubG9ja19jb29raWUNCihjPTB4ZmZmZmZlMDAxMTFlZTY1MCwgZmlsZT0w eGZmZmZmZmZmODBkYzUxNTcgIi91c3Ivc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jIiwNCmxpbmU9 MTM5MSkgYXQgL3Vzci9zcmMvc3lzL2tlcm4va2Vybl9yd2xvY2suYzozNjIgIzE0IDB4ZmZmZmZm ZmY4MGE2OGNhYSBpbiBpbl9wY2JmcmVlDQooaW5wPTB4ZmZmZmY4MDA2NjA1OGIxMCkgYXQgL3Vz ci9zcmMvc3lzL25ldGluZXQvaW5fcGNiLmM6MTM5MSAjMTUgMHhmZmZmZmZmZjgwYjA5YTZlIGlu DQp0Y3BfZGV0YWNoIChzbz08b3B0aW1pemVkIG91dD4sIGlucD08b3B0aW1pemVkIG91dD4pDQph dCAvdXNyL3NyYy9zeXMvbmV0aW5ldC90Y3BfdXNycmVxLmM6MjU4ICMxNiB0Y3BfdXNyX2RldGFj aCAoc289PG9wdGltaXplZCBvdXQ+KQ0KYXQgL3Vzci9zcmMvc3lzL25ldGluZXQvdGNwX3VzcnJl cS5jOjI4OSAjMTcgMHhmZmZmZmZmZjgwOTdjMzk0IGluIHNvZnJlZQ0KKHNvPTB4ZmZmZmY4MDAx OTg4ZDM1OCkgYXQgL3Vzci9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYzoxMDMyICMxOCAweGZm ZmZmZmZmODA5N2Q0ODcgaW4NCnNvY2xvc2UgKHNvPTB4ZmZmZmY4MDAxOTg4ZDM1OCkgYXQgL3Vz ci9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYzoxMTI2ICMxOQ0KMHhmZmZmZmZmZjgwODg1YWQ1 IGluIGZvX2Nsb3NlIChmcD08b3B0aW1pemVkIG91dD4sIHRkPTxvcHRpbWl6ZWQgb3V0PikNCmF0 IC91c3Ivc3JjL3N5cy9zeXMvZmlsZS5oOjM0OCAjMjAgX2Zkcm9wIChmcD08b3B0aW1pemVkIG91 dD4sIHRkPTxvcHRpbWl6ZWQgb3V0PikNCmF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fZGVzY3Jp cC5jOjI5NTcgIzIxIGNsb3NlZiAoZnA9MHhmZmZmZjgwMDA0ZWY0ZWIwLA0KdGQ9MHhmZmZmZjgw MDE5ODkxNTYwKSBhdCAvdXNyL3NyYy9zeXMva2Vybi9rZXJuX2Rlc2NyaXAuYzoyNTM4ICMyMiAw eGZmZmZmZmZmODA4ODI5MjAgaW4NCmNsb3NlZnAgKGZkcD0weGZmZmZmODAwMTk1NTM0NTAsIGZk PTEyLCBmcD0weGZmZmZmODAwMDRlZjRlYjAsIHRkPTB4ZmZmZmY4MDAxOTg5MTU2MCwNCmhvbGRs ZWFkZXJzPTApIGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fZGVzY3JpcC5jOjEyMDggIzIzIDB4 ZmZmZmZmZmY4MGM4MjAzMyBpbg0Kc3lzY2FsbGVudGVyICh0ZD0weGZmZmZmODAwMTk4OTE1NjAp DQphdCAvdXNyL3NyYy9zeXMvYW1kNjQvYW1kNjQvLi4vLi4va2Vybi9zdWJyX3N5c2NhbGwuYzox MzUgIzI0IGFtZDY0X3N5c2NhbGwNCih0ZD0weGZmZmZmODAwMTk4OTE1NjAsIHRyYWNlZD0wKSBh dCAvdXNyL3NyYy9zeXMvYW1kNjQvYW1kNjQvdHJhcC5jOjk0NSAjMjUgPHNpZ25hbA0KaGFuZGxl ciBjYWxsZWQ+ICMyNiAweDAwMDAwMDA4MDExMWFkZGEgaW4gPz8gKCkgQmFja3RyYWNlIHN0b3Bw ZWQ6IENhbm5vdCBhY2Nlc3MgbWVtb3J5DQphdCBhZGRyZXNzIDB4N2ZmZmRmM2Y3MjI4IChrZ2Ri KSANCg0KDQoNCg0KPiAtLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tDQo+IEhhc2g6 IFNIQTUxMg0KPiANCj4gQW0gVGh1LCAzIE1heSAyMDE4IDEyOjUzOjA1IC0wNzAwDQo+ICJLLiBN YWN5IiA8a21hY3lAZnJlZWJzZC5vcmc+IHNjaHJpZWI6DQo+IA0KPiA+IENhbiB5b3UgZ2l2ZSBh bnkgY29udGV4dCBvbiB3aGF0IHRoZXkncmUgZG9pbmc/IEluIGFkZGl0aW9uIC0gZXZlbiBvbg0K PiA+IGEgcHJvZHVjdGlvbiBrZXJuZWwgaXQncyBwb3NzaWJsZSB0byBjb21waWxlIGluIEREQiB0 byBhdCBsZWFzdCBnZXQgYQ0KPiA+IGJhY2t0cmFjZS4gWW91ciByZXBvcnQgb25seSBnaXZlcyB1 cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8ga25vdyB0aGF0ICANCj4gDQo+IE5vdCBhdCB0aGUgbW9t ZW50LiBUaGUgaW1tZWRpYXRlIGNyYXNoIGNvcnJ1cHRlZCB0aGUgL3Vzci9zcmMgZmlsZXN5c3Rl bSBzbyBJIGNhbiBub3QNCj4gcmVjb21waWxlIGEga2VybmVsLiBFdmVyeSBhdHRlbXB0IHRvIC9l dGMvbmV0c3RhcnQgdGhlIG5ldHdvcmsgb24gdGhlIGJ1Z2d5IGtlcm5lbCBlbmRzDQo+IHVwIGlu IGEgZnVydGhlciBkZXN0cnVjdGlvbiwgc28gSSBzdG9wcGVkIGF0IHRoaXMgdmVyeSBtb21lbnQg YW5kIGhvcGVmdWxseSBJIGNhbg0KPiBjb3B5IC91c3Ivc3JjIGZyb20gYSByMzMxNTMgYm94IChy MzMzMTUzIGlzIGZvciBtZSB0aGUgbGFzdCB3b3JraW5nIHJldmlzaW9uKSB2aWEgVVNCDQo+IGZs YXNoIGRyaXZlIGFuZCByZWNvbXBpbGUgdGhlIGtlcm5lbC4gQnV0IEknbGwgZ28gZm9yIHIzMzMx NTMgZmlyc3Qgc2luY2UgSSBuZWVkIHRoZQ0KPiBzZXJ2ZXIgdXAgdG9tb3Jyb3cgYW5kIEknbGwg dHJ5IG9uIHRoZSBvdGhlciBib3ggd2hpY2ggaXMgYWxzbyBhZmZlY3RlZCwgYnV0IGFsc28NCj4g ZXF1aXB0ZWQgd2l0aCB0aGUgaTM1MCBOSUMgb24gd2hpY2ggdGhlIHByb2JsZW0gb2NjdXJzIHZl cnkgcXVpY2tseS4NCj4gDQo+ID4gdGhlcmUgaXMgX2FuXyBpc3N1ZS4gSXQncyBkaWZmaWN1bHQg dG8gcHJvY2VlZCBvbiB0aGlzIGFsb25lLiBJIGRvDQo+ID4gaGF2ZSBhIHJlcG9ydCBmcm9tIHRo ZSBGcmVlQlNEIENJIGluZnJhc3RydWN0dXJlIHRoYXQgd2UncmUgbG9va2luZyBpbg0KPiA+IHRv IG5vdy4gIFdpdGggbHVjayB0aGF0IGlzIHRoZSBzYW1lIGlzc3VlLg0KPiA+IA0KPiA+IC1NDQo+ ID4gDQo+ID4gT24gVGh1LCBNYXkgMywgMjAxOCBhdCAxMjozMSBQTSwgTy4gSGFydG1hbm4gPG9o YXJ0bWFubkB3YWxzdGF0dC5vcmc+IHdyb3RlOiAgDQo+ID4gPiAtLS0tLUJFR0lOIFBHUCBTSUdO RUQgTUVTU0FHRS0tLS0tDQo+ID4gPiBIYXNoOiBTSEE1MTINCj4gPiA+DQo+ID4gPiBBbSBXZWQs IDIgTWF5IDIwMTggMTk6MzY6MjkgKzAwMDAgKFVUQykNCj4gPiA+IFN0ZXBoZW4gSHVyZCA8c2h1 cmRARnJlZUJTRC5vcmc+IHNjaHJpZWI6DQo+ID4gPiAgICANCj4gPiA+PiBBdXRob3I6IHNodXJk DQo+ID4gPj4gRGF0ZTogV2VkIE1heSAgMiAxOTozNjoyOSAyMDE4DQo+ID4gPj4gTmV3IFJldmlz aW9uOiAzMzMxNzUNCj4gPiA+PiBVUkw6IGh0dHBzOi8vc3Zud2ViLmZyZWVic2Qub3JnL2NoYW5n ZXNldC9iYXNlLzMzMzE3NQ0KPiA+ID4+DQo+ID4gPj4gTG9nOg0KPiA+ID4+ICAgU2VwYXJhdGUg bGlzdCBtYW5pcHVsYXRpb24gbG9ja2luZyBmcm9tIHN0YXRlIGNoYW5nZSBpbiBtdWx0aWNhc3QN Cj4gPiA+Pg0KPiA+ID4+ICAgTXVsdGljYXN0IGluY29ycmVjdGx5IGNhbGxzIGluIHRvIGRyaXZl cnMgd2l0aCBhIG11dGV4IGhlbGQgY2F1c2luZyBkcml2ZXJzDQo+ID4gPj4gICB0byBoYXZlIHRv IGdvIHRocm91Z2ggYWxsIG1hbm5lciBvZiBjb250b3J0aW9ucyB0byB1c2UgYSBub24gc2xlZXBh YmxlIGxvY2suDQo+ID4gPj4gICBTZXJpYWxpemUgbXVsdGljYXN0IHVwZGF0ZXMgaW5zdGVhZC4N Cj4gPiA+Pg0KPiA+ID4+ICAgU3VibWl0dGVkIGJ5OiAgICAgICBtbWFjeSA8bW1hY3lAbWF0dG1h Y3kuaW8+DQo+ID4gPj4gICBSZXZpZXdlZCBieTogICAgICAgIHNodXJkLCBzYnJ1bm8NCj4gPiA+ PiAgIFNwb25zb3JlZCBieTogICAgICAgTGltZWxpZ2h0IE5ldHdvcmtzDQo+ID4gPj4gICBEaWZm ZXJlbnRpYWwgUmV2aXNpb246ICAgICAgaHR0cHM6Ly9yZXZpZXdzLmZyZWVic2Qub3JnL0QxNDk2 OQ0KPiA+ID4+DQo+ID4gPj4gTW9kaWZpZWQ6DQo+ID4gPj4gICBoZWFkL3N5cy9rZXJuL3N1YnJf Z3Rhc2txdWV1ZS5jDQo+ID4gPj4gICBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jDQo+ID4g Pj4gICBoZWFkL3N5cy9uZXQvaWYuYw0KPiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldC9pZ21wLmMN Cj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQvaWdtcF92YXIuaA0KPiA+ID4+ICAgaGVhZC9zeXMv bmV0aW5ldC9pbi5jDQo+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMNCj4gPiA+ PiAgIGhlYWQvc3lzL25ldGluZXQvaW5fcGNiLmMNCj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQv aW5fdmFyLmgNCj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQvaXBfY2FycC5jDQo+ID4gPj4gICBo ZWFkL3N5cy9uZXRpbmV0Ni9pbjYuYw0KPiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldDYvaW42X2lm YXR0YWNoLmMNCj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQ2L2luNl9tY2FzdC5jDQo+ID4gPj4g ICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjZfcGNiLmMNCj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQ2 L2luNl92YXIuaA0KPiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldDYvbWxkNi5jDQo+ID4gPj4gICBo ZWFkL3N5cy9uZXRpbmV0Ni9tbGQ2X3Zhci5oDQo+ID4gPj4gICBoZWFkL3N5cy9zeXMvZ3Rhc2tx dWV1ZS5oDQo+ID4gPj4NCj4gPiA+PiBNb2RpZmllZDogaGVhZC9zeXMva2Vybi9zdWJyX2d0YXNr cXVldWUuYw0KPiA+ID4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+ID4+IC0tLSBoZWFkL3N5 cy9rZXJuL3N1YnJfZ3Rhc2txdWV1ZS5jICAgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4ICAgICAg ICAocjMzMzE3NCkNCj4gPiA+PiArKysgaGVhZC9zeXMva2Vybi9zdWJyX2d0YXNrcXVldWUuYyAg IFdlZCBNYXkgIDIgMTk6MzY6MjkgMjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4gPj4gQEAgLTUz LDYgKzUzLDcgQEAgc3RhdGljIHZvaWQgZ3Rhc2txdWV1ZV90aHJlYWRfZW5xdWV1ZSh2b2lkICop Ow0KPiA+ID4+ICBzdGF0aWMgdm9pZCAgZ3Rhc2txdWV1ZV90aHJlYWRfbG9vcCh2b2lkICphcmcp Ow0KPiA+ID4+DQo+ID4gPj4gIFRBU0tRR1JPVVBfREVGSU5FKHNvZnRpcnEsIG1wX25jcHVzLCAx KTsNCj4gPiA+PiArVEFTS1FHUk9VUF9ERUZJTkUoY29uZmlnLCAxLCAxKTsNCj4gPiA+Pg0KPiA+ ID4+ICBzdHJ1Y3QgZ3Rhc2txdWV1ZV9idXN5IHsNCj4gPiA+PiAgICAgICBzdHJ1Y3QgZ3Rhc2sg ICAgKnRiX3J1bm5pbmc7DQo+ID4gPj4gQEAgLTY2Miw3ICs2NjMsNyBAQCBTWVNJTklUKHRxZ19y ZWNvcmRfc21wX3N0YXJ0ZWQsIFNJX1NVQl9TTVAsIFNJX09SREVSX0YNCj4gPiA+Pg0KPiA+ID4+ ICB2b2lkDQo+ID4gPj4gIHRhc2txZ3JvdXBfYXR0YWNoKHN0cnVjdCB0YXNrcWdyb3VwICpxZ3Jv dXAsIHN0cnVjdCBncm91cHRhc2sgKmd0YXNrLA0KPiA+ID4+IC0gICAgdm9pZCAqdW5pcSwgaW50 IGlycSwgY2hhciAqbmFtZSkNCj4gPiA+PiArICAgIHZvaWQgKnVuaXEsIGludCBpcnEsIGNvbnN0 IGNoYXIgKm5hbWUpDQo+ID4gPj4gIHsNCj4gPiA+PiAgICAgICBjcHVzZXRfdCBtYXNrOw0KPiA+ ID4+ICAgICAgIGludCBxaWQsIGVycm9yOw0KPiA+ID4+IEBAIC05NzYsNCArOTc3LDEzIEBAIHZv aWQNCj4gPiA+PiAgdGFza3Fncm91cF9kZXN0cm95KHN0cnVjdCB0YXNrcWdyb3VwICpxZ3JvdXAp DQo+ID4gPj4gIHsNCj4gPiA+Pg0KPiA+ID4+ICt9DQo+ID4gPj4gKw0KPiA+ID4+ICt2b2lkDQo+ ID4gPj4gK3Rhc2txZ3JvdXBfY29uZmlnX2d0YXNrX2luaXQodm9pZCAqY3R4LCBzdHJ1Y3QgZ3Jv dXB0YXNrICpndGFzaywgZ3Rhc2tfZm5fdCAqZm4sDQo+ID4gPj4gKyAgICAgY29uc3QgY2hhciAq bmFtZSkNCj4gPiA+PiArew0KPiA+ID4+ICsNCj4gPiA+PiArICAgICBHUk9VUFRBU0tfSU5JVChn dGFzaywgMCwgZm4sIGN0eCk7DQo+ID4gPj4gKyAgICAgdGFza3Fncm91cF9hdHRhY2gocWdyb3Vw X2NvbmZpZywgZ3Rhc2ssIGd0YXNrLCAtMSwgbmFtZSk7DQo+ID4gPj4gIH0NCj4gPiA+Pg0KPiA+ ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jDQo+ID4gPj4gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQo+ID4gPj4gLS0tIGhlYWQvc3lzL2tlcm4vc3Vicl93aXRuZXNzLmMg ICAgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAgICAgIChyMzMzMTc0KQ0KPiA+ID4+ICsr KyBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jICAgICAgV2VkIE1heSAgMiAxOTozNjoyOSAy MDE4ICAgICAgICAocjMzMzE3NSkNCj4gPiA+PiBAQCAtNTMyLDE4ICs1MzIsMjIgQEAgc3RhdGlj IHN0cnVjdCB3aXRuZXNzX29yZGVyX2xpc3RfZW50cnkgb3JkZXJfbGlzdHNbXSA9DQo+ID4gPj4g ICAgICAgICogSVB2NCBtdWx0aWNhc3Q6DQo+ID4gPj4gICAgICAgICogcHJvdG9jb2wgbG9ja3Mg YmVmb3JlIGludGVyZmFjZSBsb2NrcywgYWZ0ZXIgVURQIGxvY2tzLg0KPiA+ID4+ICAgICAgICAq Lw0KPiA+ID4+ICsgICAgIHsgImluX211bHRpX3N4IiwgJmxvY2tfY2xhc3Nfc3ggfSwNCj4gPiA+ PiAgICAgICB7ICJ1ZHBpbnAiLCAmbG9ja19jbGFzc19ydyB9LA0KPiA+ID4+IC0gICAgIHsgImlu X211bHRpX210eCIsICZsb2NrX2NsYXNzX210eF9zbGVlcCB9LA0KPiA+ID4+ICsgICAgIHsgImlu X211bHRpX2xpc3RfbXR4IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQo+ID4gPj4gICAgICAg eyAiaWdtcF9tdHgiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAgfSwNCj4gPiA+PiArICAgICB7ICJp Zm5ldF9ydyIsICZsb2NrX2NsYXNzX3J3IH0sDQo+ID4gPj4gICAgICAgeyAiaWZfYWRkcl9sb2Nr IiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPiA+PiAgICAgICB7IE5VTEwsIE5VTEwgfSwNCj4gPiA+ PiAgICAgICAvKg0KPiA+ID4+ICAgICAgICAqIElQdjYgbXVsdGljYXN0Og0KPiA+ID4+ICAgICAg ICAqIHByb3RvY29sIGxvY2tzIGJlZm9yZSBpbnRlcmZhY2UgbG9ja3MsIGFmdGVyIFVEUCBsb2Nr cy4NCj4gPiA+PiAgICAgICAgKi8NCj4gPiA+PiArICAgICB7ICJpbjZfbXVsdGlfc3giLCAmbG9j a19jbGFzc19zeCB9LA0KPiA+ID4+ICAgICAgIHsgInVkcGlucCIsICZsb2NrX2NsYXNzX3J3IH0s DQo+ID4gPj4gLSAgICAgeyAiaW42X211bHRpX210eCIsICZsb2NrX2NsYXNzX210eF9zbGVlcCB9 LA0KPiA+ID4+ICsgICAgIHsgImluNl9tdWx0aV9saXN0X210eCIsICZsb2NrX2NsYXNzX210eF9z bGVlcCB9LA0KPiA+ID4+ICAgICAgIHsgIm1sZF9tdHgiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAg fSwNCj4gPiA+PiArICAgICB7ICJpZm5ldF9ydyIsICZsb2NrX2NsYXNzX3J3IH0sDQo+ID4gPj4g ICAgICAgeyAiaWZfYWRkcl9sb2NrIiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPiA+PiAgICAgICB7 IE5VTEwsIE5VTEwgfSwNCj4gPiA+PiAgICAgICAvKg0KPiA+ID4+DQo+ID4gPj4gTW9kaWZpZWQ6 IGhlYWQvc3lzL25ldC9pZi5jDQo+ID4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4gPj4g LS0tIGhlYWQvc3lzL25ldC9pZi5jIFdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOCAgICAgICAgKHIz MzMxNzQpDQo+ID4gPj4gKysrIGhlYWQvc3lzL25ldC9pZi5jIFdlZCBNYXkgIDIgMTk6MzY6Mjkg MjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4gPj4gQEAgLTk4NSwxMSArOTg1LDEzIEBAIHN0YXRp YyB2b2lkDQo+ID4gPj4gIGlmX3B1cmdlbWFkZHJzKHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ID4+ ICB7DQo+ID4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICppZm1hOw0KPiA+ID4+IC0gICAg IHN0cnVjdCBpZm11bHRpYWRkciAqbmV4dDsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIElGX0FERFJf V0xPQ0soaWZwKTsNCj4gPiA+PiAtICAgICBUQUlMUV9GT1JFQUNIX1NBRkUoaWZtYSwgJmlmcC0+ aWZfbXVsdGlhZGRycywgaWZtYV9saW5rLCBuZXh0KQ0KPiA+ID4+ICsgICAgIHdoaWxlICghVEFJ TFFfRU1QVFkoJmlmcC0+aWZfbXVsdGlhZGRycykpIHsNCj4gPiA+PiArICAgICAgICAgICAgIGlm bWEgPSBUQUlMUV9GSVJTVCgmaWZwLT5pZl9tdWx0aWFkZHJzKTsNCj4gPiA+PiArICAgICAgICAg ICAgIFRBSUxRX1JFTU9WRSgmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1hLCBpZm1hX2xpbmspOw0K PiA+ID4+ICAgICAgICAgICAgICAgaWZfZGVsbXVsdGlfbG9ja2VkKGlmcCwgaWZtYSwgMSk7DQo+ ID4gPj4gKyAgICAgfQ0KPiA+ID4+ICAgICAgIElGX0FERFJfV1VOTE9DSyhpZnApOw0KPiA+ID4+ ICB9DQo+ID4gPj4NCj4gPiA+PiBAQCAtMzQyOSw2ICszNDMxLDEyIEBAIGlmX2FkZG11bHRpKHN0 cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLA0KPiA+ID4+ICAgICAgIHN0cnVj dCBzb2NrYWRkcl9kbCBzZGw7DQo+ID4gPj4gICAgICAgaW50IGVycm9yOw0KPiA+ID4+DQo+ID4g Pj4gKyNpZmRlZiBJTkVUDQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0tfQVNTRVJU KCk7DQo+ID4gPj4gKyNlbmRpZg0KPiA+ID4+ICsjaWZkZWYgSU5FVDYNCj4gPiA+PiArICAgICBJ TjZfTVVMVElfTElTVF9VTkxPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gKyNlbmRpZg0KPiA+ID4+ICAg ICAgIC8qDQo+ID4gPj4gICAgICAgICogSWYgdGhlIGFkZHJlc3MgaXMgYWxyZWFkeSBwcmVzZW50 LCByZXR1cm4gYSBuZXcgcmVmZXJlbmNlIHRvIGl0Ow0KPiA+ID4+ICAgICAgICAqIG90aGVyd2lz ZSwgYWxsb2NhdGUgc3RvcmFnZSBhbmQgc2V0IHVwIGEgbmV3IGFkZHJlc3MuDQo+ID4gPj4gQEAg LTM2MTAsNiArMzYxOCw5IEBAIGlmX2RlbG11bHRpX2lmbWEoc3RydWN0IGlmbXVsdGlhZGRyICpp Zm1hKQ0KPiA+ID4+ICAgICAgIHN0cnVjdCBpZm5ldCAqaWZwOw0KPiA+ID4+ICAgICAgIGludCBs YXN0cmVmOw0KPiA+ID4+DQo+ID4gPj4gKyNpZmRlZiBJTkVUDQo+ID4gPj4gKyAgICAgSU5fTVVM VElfTElTVF9VTkxPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gKyNlbmRpZg0KPiA+ID4+ICAgICAgIGlm cCA9IGlmbWEtPmlmbWFfaWZwOw0KPiA+ID4+ICAjaWZkZWYgRElBR05PU1RJQw0KPiA+ID4+ICAg ICAgIGlmIChpZnAgPT0gTlVMTCkgew0KPiA+ID4+IEBAIC0zNzExLDggKzM3MjIsNyBAQCBpZl9k ZWxtdWx0aV9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBpZm11bHRpYWQNCj4gPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgaWZfZnJlZW11bHRpKGxsX2lmbWEpOw0KPiA+ID4+ICAg ICAgICAgICAgICAgfQ0KPiA+ID4+ICAgICAgIH0NCj4gPiA+PiAtDQo+ID4gPj4gLSAgICAgaWYg KGlmcCAhPSBOVUxMKQ0KPiA+ID4+ICsgICAgIGlmIChpZnAgIT0gTlVMTCAmJiBkZXRhY2hpbmcg PT0gMCkNCj4gPiA+PiAgICAgICAgICAgICAgIFRBSUxRX1JFTU9WRSgmaWZwLT5pZl9tdWx0aWFk ZHJzLCBpZm1hLCBpZm1hX2xpbmspOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgaWZfZnJlZW11bHRp KGlmbWEpOw0KPiA+ID4+DQo+ID4gPj4gTW9kaWZpZWQ6IGhlYWQvc3lzL25ldGluZXQvaWdtcC5j DQo+ID4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4gPj4gLS0tIGhlYWQvc3lzL25ldGlu ZXQvaWdtcC5jICAgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4ICAgICAgICAocjMzMzE3NCkNCj4g PiA+PiArKysgaGVhZC9zeXMvbmV0aW5ldC9pZ21wLmMgICBXZWQgTWF5ICAyIDE5OjM2OjI5IDIw MTggICAgICAgIChyMzMzMTc1KQ0KPiA+ID4+IEBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIGlu dCAgICAgICAgaWdtcF92M19lbnF1ZXVlX2dyb3VwX3JlY29yZChzdHJ1Y3QgbWJ1ZnEgKg0KPiA+ ID4+ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbl9tdWx0aSAqLCBjb25zdCBpbnQsIGNvbnN0 IGludCwgY29uc3QgaW50KTsNCj4gPiA+PiAgc3RhdGljIGludCAgIGlnbXBfdjNfZW5xdWV1ZV9m aWx0ZXJfY2hhbmdlKHN0cnVjdCBtYnVmcSAqLA0KPiA+ID4+ICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBpbl9tdWx0aSAqKTsNCj4gPiA+PiAtc3RhdGljIHZvaWQgIGlnbXBfdjNfcHJvY2Vzc19n cm91cF90aW1lcnMoc3RydWN0IGlnbXBfaWZzb2Z0YyAqLA0KPiA+ID4+ICtzdGF0aWMgdm9pZCAg aWdtcF92M19wcm9jZXNzX2dyb3VwX3RpbWVycyhzdHJ1Y3QgaW5fbXVsdGlfaGVhZCAqLA0KPiA+ ID4+ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmcSAqLCBzdHJ1Y3QgbWJ1ZnEgKiwgc3Ry dWN0IGluX211bHRpICosDQo+ID4gPj4gICAgICAgICAgICAgICAgICAgY29uc3QgaW50KTsNCj4g PiA+PiAgc3RhdGljIGludCAgIGlnbXBfdjNfbWVyZ2Vfc3RhdGVfY2hhbmdlcyhzdHJ1Y3QgaW5f bXVsdGkgKiwNCj4gPiA+PiBAQCAtMTYyLDEyICsxNjIsMTIgQEAgc3RhdGljIGNvbnN0IHN0cnVj dCBuZXRpc3JfaGFuZGxlciBpZ21wX25oID0gew0KPiA+ID4+ICAgKiB0aGVtc2VsdmVzIGFyZSBu b3QgdmlydHVhbGl6ZWQuDQo+ID4gPj4gICAqDQo+ID4gPj4gICAqIExvY2tpbmc6DQo+ID4gPj4g LSAqICAqIFRoZSBwZXJtaXR0ZWQgbG9jayBvcmRlciBpczogSU5fTVVMVElfTE9DSywgSUdNUF9M T0NLLCBJRl9BRERSX0xPQ0suDQo+ID4gPj4gKyAqICAqIFRoZSBwZXJtaXR0ZWQgbG9jayBvcmRl ciBpczogSU5fTVVMVElfTElTVF9MT0NLLCBJR01QX0xPQ0ssIElGX0FERFJfTE9DSy4NCj4gPiA+ PiAgICogICAgQW55IG1heSBiZSB0YWtlbiBpbmRlcGVuZGVudGx5OyBpZiBhbnkgYXJlIGhlbGQg YXQgdGhlIHNhbWUNCj4gPiA+PiAgICogICAgdGltZSwgdGhlIGFib3ZlIGxvY2sgb3JkZXIgbXVz dCBiZSBmb2xsb3dlZC4NCj4gPiA+PiAgICogICogQWxsIG91dHB1dCBpcyBkZWxlZ2F0ZWQgdG8g dGhlIG5ldGlzci4NCj4gPiA+PiAgICogICAgTm93IHRoYXQgR2lhbnQgaGFzIGJlZW4gZWxpbWlu YXRlZCwgdGhlIG5ldGlzciBtYXkgYmUgaW5saW5lZC4NCj4gPiA+PiAtICogICogSU5fTVVMVElf TE9DSyBjb3ZlcnMgaW5fbXVsdGkuDQo+ID4gPj4gKyAqICAqIElOX01VTFRJX0xJU1RfTE9DSyBj b3ZlcnMgaW5fbXVsdGkuDQo+ID4gPj4gICAqICAqIElHTVBfTE9DSyBjb3ZlcnMgaWdtcF9pZnNv ZnRjIGFuZCBhbnkgZ2xvYmFsIHZhcmlhYmxlcyBpbiB0aGlzIGZpbGUsDQo+ID4gPj4gICAqICAg IGluY2x1ZGluZyB0aGUgb3V0cHV0IHF1ZXVlLg0KPiA+ID4+ICAgKiAgKiBJRl9BRERSX0xPQ0sg Y292ZXJzIGlmX211bHRpYWRkcnMsIHdoaWNoIGlzIHVzZWQgZm9yIGEgdmFyaWV0eSBvZg0KPiA+ ID4+IEBAIC00NDEsNyArNDQxLDcgQEAgc3lzY3RsX2lnbXBfaWZpbmZvKFNZU0NUTF9IQU5ETEVS X0FSR1MpDQo+ID4gPj4gICAgICAgaWYgKGVycm9yKQ0KPiA+ID4+ICAgICAgICAgICAgICAgcmV0 dXJuIChlcnJvcik7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4g Pj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4gPj4gICAgICAgSUdNUF9MT0NLKCk7 DQo+ID4gPj4NCj4gPiA+PiAgICAgICBpZiAobmFtZVswXSA8PSAwIHx8IG5hbWVbMF0gPiBWX2lm X2luZGV4KSB7DQo+ID4gPj4gQEAgLTQ3NSw3ICs0NzUsNyBAQCBzeXNjdGxfaWdtcF9pZmluZm8o U1lTQ1RMX0hBTkRMRVJfQVJHUykNCj4gPiA+Pg0KPiA+ID4+ICBvdXRfbG9ja2VkOg0KPiA+ID4+ ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4gPj4gLSAgICAgSU5fTVVMVElfVU5MT0NLKCk7DQo+ ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPiA+PiAgICAgICByZXR1cm4g KGVycm9yKTsNCj4gPiA+PiAgfQ0KPiA+ID4+DQo+ID4gPj4gQEAgLTU4Niw3ICs1ODYsNiBAQCBp Z2lfYWxsb2NfbG9ja2VkKC8qY29uc3QqLyBzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gPiA+PiAgICAg ICBpZ2ktPmlnaV9xaSA9IElHTVBfUUlfSU5JVDsNCj4gPiA+PiAgICAgICBpZ2ktPmlnaV9xcmkg PSBJR01QX1FSSV9JTklUOw0KPiA+ID4+ICAgICAgIGlnaS0+aWdpX3VyaSA9IElHTVBfVVJJX0lO SVQ7DQo+ID4gPj4gLSAgICAgU0xJU1RfSU5JVCgmaWdpLT5pZ2lfcmVsaW5taGVhZCk7DQo+ID4g Pj4gICAgICAgbWJ1ZnFfaW5pdCgmaWdpLT5pZ2lfZ3EsIElHTVBfTUFYX1JFU1BPTlNFX1BBQ0tF VFMpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgTElTVF9JTlNFUlRfSEVBRCgmVl9pZ2lfaGVhZCwg aWdpLCBpZ2lfbGluayk7DQo+ID4gPj4gQEAgLTYxMiwxMSArNjExLDEyIEBAIGlnbXBfaWZkZXRh Y2goc3RydWN0IGlmbmV0ICppZnApDQo+ID4gPj4gIHsNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaWdt cF9pZnNvZnRjICAgICAqaWdpOw0KPiA+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAgICAg ICppZm1hOw0KPiA+ID4+IC0gICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm0sICp0aW5t Ow0KPiA+ID4+IC0NCj4gPiA+PiArICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tOw0K PiA+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0aV9oZWFkIGlubV9mcmVlX3RtcDsNCj4gPiA+PiAg ICAgICBDVFIzKEtUUl9JR01QVjMsICIlczogY2FsbGVkIGZvciBpZnAgJXAoJXMpIiwgX19mdW5j X18sIGlmcCwNCj4gPiA+PiAgICAgICAgICAgaWZwLT5pZl94bmFtZSk7DQo+ID4gPj4NCj4gPiA+ PiArICAgICBTTElTVF9JTklUKCZpbm1fZnJlZV90bXApOw0KPiA+ID4+ICAgICAgIElHTVBfTE9D SygpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgaWdpID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZw LT5pZl9hZmRhdGFbQUZfSU5FVF0pLT5paV9pZ21wOw0KPiA+ID4+IEBAIC02MzEsMjQgKzYzMSwx NSBAQCBpZ21wX2lmZGV0YWNoKHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ID4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgKCIlczogaWZtYV9wcm90b3NwZWMgaXMgTlVMTCIsIF9fZnVuY19fKSk7 DQo+ID4gPj4gICNlbmRpZg0KPiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBpbm0gPSAoc3Ry dWN0IGluX211bHRpICopaWZtYS0+aWZtYV9wcm90b3NwZWM7DQo+ID4gPj4gLSAgICAgICAgICAg ICAgICAgICAgIGlmIChpbm0tPmlubV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSKSB7DQo+ ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xJU1RfSU5TRVJUX0hFQUQoJmln aS0+aWdpX3JlbGlubWhlYWQsDQo+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlubSwgaW5tX25yZWxlKTsNCj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ ID4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoaW5tLT5pbm1fc3RhdGUgPT0gSUdNUF9MRUFW SU5HX01FTUJFUikNCj4gPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm1fcmVs ZV9sb2NrZWQoJmlubV9mcmVlX3RtcCwgaW5tKTsNCj4gPiA+PiAgICAgICAgICAgICAgICAgICAg ICAgaW5tX2NsZWFyX3JlY29yZGVkKGlubSk7DQo+ID4gPj4gICAgICAgICAgICAgICB9DQo+ID4g Pj4gICAgICAgICAgICAgICBJRl9BRERSX1JVTkxPQ0soaWZwKTsNCj4gPiA+PiAtICAgICAgICAg ICAgIC8qDQo+ID4gPj4gLSAgICAgICAgICAgICAgKiBGcmVlIHRoZSBpbl9tdWx0aSByZWZlcmVu Y2UocykgZm9yIHRoaXMgSUdNUCBsaWZlY3ljbGUuDQo+ID4gPj4gLSAgICAgICAgICAgICAgKi8N Cj4gPiA+PiAtICAgICAgICAgICAgIFNMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZpZ2ktPmlnaV9y ZWxpbm1oZWFkLCBpbm1fbnJlbGUsDQo+ID4gPj4gLSAgICAgICAgICAgICAgICAgdGlubSkgew0K PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaWdpLT5pZ2lf cmVsaW5taGVhZCwgaW5tX25yZWxlKTsNCj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgaW5t X3JlbGVhc2VfbG9ja2VkKGlubSk7DQo+ID4gPj4gLSAgICAgICAgICAgICB9DQo+ID4gPj4gKyAg ICAgICAgICAgICBpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVkKCZpbm1fZnJlZV90bXApOw0KPiA+ ID4+ICAgICAgIH0NCj4gPiA+PiAtDQo+ID4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsNCj4gPiA+ PiArDQo+ID4gPj4gIH0NCj4gPiA+Pg0KPiA+ID4+ICAvKg0KPiA+ID4+IEBAIC02ODQsMTEgKzY3 NSw2IEBAIGlnaV9kZWxldGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ID4+ ICAgICAgICAgICAgICAgICAgICAgICBtYnVmcV9kcmFpbigmaWdpLT5pZ2lfZ3EpOw0KPiA+ID4+ DQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIExJU1RfUkVNT1ZFKGlnaSwgaWdpX2xpbmsp Ow0KPiA+ID4+IC0NCj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgS0FTU0VSVChTTElTVF9F TVBUWSgmaWdpLT5pZ2lfcmVsaW5taGVhZCksDQo+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAoIiVzOiB0aGVyZSBhcmUgZGFuZ2xpbmcgaW5fbXVsdGkgcmVmZXJlbmNlcyIsDQo+ID4g Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXykpOw0KPiA+ID4+IC0NCj4gPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgZnJlZShpZ2ksIE1fSUdNUCk7DQo+ID4gPj4gICAgICAg ICAgICAgICAgICAgICAgIHJldHVybjsNCj4gPiA+PiAgICAgICAgICAgICAgIH0NCj4gPiA+PiBA QCAtNzIyLDcgKzcwOCw3IEBAIGlnbXBfaW5wdXRfdjFfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAs IGNvbnN0IHN0cnVjdCBpcA0KPiA+ID4+ICAgICAgIH0NCj4gPiA+PiAgICAgICBJR01QU1RBVF9J TkMoaWdwc19yY3ZfZ2VuX3F1ZXJpZXMpOw0KPiA+ID4+DQo+ID4gPj4gLSAgICAgSU5fTVVMVElf TE9DSygpOw0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+ID4+ICAgICAg IElHTVBfTE9DSygpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgaWdpID0gKChzdHJ1Y3QgaW5faWZp bmZvICopaWZwLT5pZl9hZmRhdGFbQUZfSU5FVF0pLT5paV9pZ21wOw0KPiA+ID4+IEBAIC03Nzgs NyArNzY0LDcgQEAgaWdtcF9pbnB1dF92MV9xdWVyeShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qg c3RydWN0IGlwDQo+ID4gPj4NCj4gPiA+PiAgb3V0X2xvY2tlZDoNCj4gPiA+PiAgICAgICBJR01Q X1VOTE9DSygpOw0KPiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+ID4+ICsgICAg IElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4gPj4NCj4gPiA+PiAgICAgICByZXR1cm4gKDAp Ow0KPiA+ID4+ICB9DQo+ID4gPj4gQEAgLTgxNiw3ICs4MDIsNyBAQCBpZ21wX2lucHV0X3YyX3F1 ZXJ5KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaXANCj4gPiA+PiAgICAgICAgICAg ICAgIElHTVBTVEFUX0lOQyhpZ3BzX3Jjdl9ncm91cF9xdWVyaWVzKTsNCj4gPiA+PiAgICAgICB9 DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4gPj4gKyAgICAgSU5f TVVMVElfTElTVF9MT0NLKCk7DQo+ID4gPj4gICAgICAgSUdNUF9MT0NLKCk7DQo+ID4gPj4NCj4g PiA+PiAgICAgICBpZ2kgPSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9J TkVUXSktPmlpX2lnbXA7DQo+ID4gPj4gQEAgLTg3Miw3ICs4NTgsNyBAQCBpZ21wX2lucHV0X3Yy X3F1ZXJ5KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaXANCj4gPiA+Pg0KPiA+ID4+ ICBvdXRfbG9ja2VkOg0KPiA+ID4+ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4gPj4gLSAgICAg SU5fTVVMVElfVU5MT0NLKCk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsN Cj4gPiA+Pg0KPiA+ID4+ICAgICAgIHJldHVybiAoMCk7DQo+ID4gPj4gIH0NCj4gPiA+PiBAQCAt ODk5LDcgKzg4NSw3IEBAIGlnbXBfdjJfdXBkYXRlX2dyb3VwKHN0cnVjdCBpbl9tdWx0aSAqaW5t LCBjb25zdCBpbnQgdA0KPiA+ID4+ICAgICAgIENUUjQoS1RSX0lHTVBWMywgIjB4JTA4eDogJXMv JXMgdGltZXI9JWQiLCBfX2Z1bmNfXywNCj4gPiA+PiAgICAgICAgICAgbnRvaGwoaW5tLT5pbm1f YWRkci5zX2FkZHIpLCBpbm0tPmlubV9pZnAtPmlmX3huYW1lLCB0aW1lcik7DQo+ID4gPj4NCj4g PiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsgICAgIElOX01VTFRJ X0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIHN3aXRjaCAoaW5tLT5p bm1fc3RhdGUpIHsNCj4gPiA+PiAgICAgICBjYXNlIElHTVBfTk9UX01FTUJFUjoNCj4gPiA+PiBA QCAtMTAxMSw3ICs5OTcsNyBAQCBpZ21wX2lucHV0X3YzX3F1ZXJ5KHN0cnVjdCBpZm5ldCAqaWZw LCBjb25zdCBzdHJ1Y3QgaXANCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgSUdNUFNUQVRf SU5DKGlncHNfcmN2X2dzcl9xdWVyaWVzKTsNCj4gPiA+PiAgICAgICB9DQo+ID4gPj4NCj4gPiA+ PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NL KCk7DQo+ID4gPj4gICAgICAgSUdNUF9MT0NLKCk7DQo+ID4gPj4NCj4gPiA+PiAgICAgICBpZ2kg PSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSktPmlpX2lnbXA7 DQo+ID4gPj4gQEAgLTEwOTIsNyArMTA3OCw3IEBAIGlnbXBfaW5wdXRfdjNfcXVlcnkoc3RydWN0 IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiA+ID4+DQo+ID4gPj4gIG91dF9sb2NrZWQ6 DQo+ID4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsNCj4gPiA+PiAtICAgICBJTl9NVUxUSV9VTkxP Q0soKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+ID4+DQo+ID4g Pj4gICAgICAgcmV0dXJuICgwKTsNCj4gPiA+PiAgfQ0KPiA+ID4+IEBAIC0xMTA5LDcgKzEwOTUs NyBAQCBpZ21wX2lucHV0X3YzX2dyb3VwX3F1ZXJ5KHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBzdHJ1 Y3QNCj4gPiA+PiAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsOw0KPiA+ID4+ ICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBuc3JjOw0KPiA+ID4+DQo+ID4gPj4gLSAg ICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xP Q0tfQVNTRVJUKCk7DQo+ID4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+DQo+ ID4gPj4gICAgICAgcmV0dmFsID0gMDsNCj4gPiA+PiBAQCAtMTI0Niw3ICsxMjMyLDcgQEAgaWdt cF9pbnB1dF92MV9yZXBvcnQoc3RydWN0IGlmbmV0ICppZnAsIC8qY29uc3QqLyBzdHJ1DQo+ID4g Pj4gICAgICAgICogSWYgd2UgYXJlIGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAsIGFuZCBvdXIgbWVt YmVyc2hpcCBzaG91bGQgYmUNCj4gPiA+PiAgICAgICAgKiByZXBvcnRlZCwgc3RvcCBvdXIgZ3Jv dXAgdGltZXIgYW5kIHRyYW5zaXRpb24gdG8gdGhlICdsYXp5JyBzdGF0ZS4NCj4gPiA+PiAgICAg ICAgKi8NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4gPj4gKyAgICAgSU5fTVVM VElfTElTVF9MT0NLKCk7DQo+ID4gPj4gICAgICAgaW5tID0gaW5tX2xvb2t1cChpZnAsIGlnbXAt PmlnbXBfZ3JvdXApOw0KPiA+ID4+ICAgICAgIGlmIChpbm0gIT0gTlVMTCkgew0KPiA+ID4+ICAg ICAgICAgICAgICAgc3RydWN0IGlnbXBfaWZzb2Z0YyAqaWdpOw0KPiA+ID4+IEBAIC0xMzA1LDcg KzEyOTEsNyBAQCBpZ21wX2lucHV0X3YxX3JlcG9ydChzdHJ1Y3QgaWZuZXQgKmlmcCwgLypjb25z dCovIHN0cnUNCj4gPiA+PiAgICAgICB9DQo+ID4gPj4NCj4gPiA+PiAgb3V0X2xvY2tlZDoNCj4g PiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNU X1VOTE9DSygpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPiA+PiAgfQ0K PiA+ID4+IEBAIC0xMzczLDcgKzEzNTksNyBAQCBpZ21wX2lucHV0X3YyX3JlcG9ydChzdHJ1Y3Qg aWZuZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gPiA+PiAgICAgICAgKiByZXBvcnRlZCwgYW5k IG91ciBncm91cCB0aW1lciBpcyBwZW5kaW5nIG9yIGFib3V0IHRvIGJlIHJlc2V0LA0KPiA+ID4+ ICAgICAgICAqIHN0b3Agb3VyIGdyb3VwIHRpbWVyIGJ5IHRyYW5zaXRpb25pbmcgdG8gdGhlICds YXp5JyBzdGF0ZS4NCj4gPiA+PiAgICAgICAgKi8NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NL KCk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4gPj4gICAgICAgaW5t ID0gaW5tX2xvb2t1cChpZnAsIGlnbXAtPmlnbXBfZ3JvdXApOw0KPiA+ID4+ICAgICAgIGlmIChp bm0gIT0gTlVMTCkgew0KPiA+ID4+ICAgICAgICAgICAgICAgc3RydWN0IGlnbXBfaWZzb2Z0YyAq aWdpOw0KPiA+ID4+IEBAIC0xNDE4LDcgKzE0MDQsNyBAQCBpZ21wX2lucHV0X3YyX3JlcG9ydChz dHJ1Y3QgaWZuZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gPiA+PiAgICAgICB9DQo+ID4gPj4N Cj4gPiA+PiAgb3V0X2xvY2tlZDoNCj4gPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4g PiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAg cmV0dXJuICgwKTsNCj4gPiA+PiAgfQ0KPiA+ID4+IEBAIC0xNjQ3LDYgKzE2MzMsNyBAQCBpZ21w X2Zhc3R0aW1vX3ZuZXQodm9pZCkNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaWdtcF9pZnNvZnRjICAg ICAqaWdpOw0KPiA+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAgICAgICppZm1hOw0KPiA+ ID4+ICAgICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm07DQo+ID4gPj4gKyAgICAgc3Ry dWN0IGluX211bHRpX2hlYWQgaW5tX2ZyZWVfdG1wOw0KPiA+ID4+ICAgICAgIGludCAgICAgICAg ICAgICAgICAgICAgICBsb29wLCB1cmlfZmFzdGh6Ow0KPiA+ID4+DQo+ID4gPj4gICAgICAgbG9v cCA9IDA7DQo+ID4gPj4gQEAgLTE2NjIsNyArMTY0OSw4IEBAIGlnbXBfZmFzdHRpbW9fdm5ldCh2 b2lkKQ0KPiA+ID4+ICAgICAgICAgICAhVl9zdGF0ZV9jaGFuZ2VfdGltZXJzX3J1bm5pbmcpDQo+ ID4gPj4gICAgICAgICAgICAgICByZXR1cm47DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxU SV9MT0NLKCk7DQo+ID4gPj4gKyAgICAgU0xJU1RfSU5JVCgmaW5tX2ZyZWVfdG1wKTsNCj4gPiA+ PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPiA+PiAgICAgICBJR01QX0xPQ0soKTsN Cj4gPiA+Pg0KPiA+ID4+ICAgICAgIC8qDQo+ID4gPj4gQEAgLTE3MjAsNyArMTcwOCw3IEBAIGln bXBfZmFzdHRpbW9fdm5ldCh2b2lkKQ0KPiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZ2ktPmlnaV92ZXJzaW9uKTsNCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJR01QX1ZF UlNJT05fMzoNCj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZ21wX3YzX3By b2Nlc3NfZ3JvdXBfdGltZXJzKGlnaSwgJnFycSwNCj4gPiA+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKCZpbm1fZnJlZV90bXAsICZx cnEsDQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY3EsIGlubSwg dXJpX2Zhc3Roeik7DQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPiA+PiBAQCAtMTcyOCw4ICsxNzE2 LDYgQEAgaWdtcF9mYXN0dGltb192bmV0KHZvaWQpDQo+ID4gPj4gICAgICAgICAgICAgICBJRl9B RERSX1JVTkxPQ0soaWZwKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgICAgICAgICAgaWYgKGlnaS0+ aWdpX3ZlcnNpb24gPT0gSUdNUF9WRVJTSU9OXzMpIHsNCj4gPiA+PiAtICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGluX211bHRpICAgICAgICAgKnRpbm07DQo+ID4gPj4gLQ0KPiA+ID4+ICAg ICAgICAgICAgICAgICAgICAgICBpZ21wX2Rpc3BhdGNoX3F1ZXVlKCZxcnEsIDAsIGxvb3ApOw0K PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBpZ21wX2Rpc3BhdGNoX3F1ZXVlKCZzY3EsIDAs IGxvb3ApOw0KPiA+ID4+DQo+ID4gPj4gQEAgLTE3MzcsMTggKzE3MjMsMTMgQEAgaWdtcF9mYXN0 dGltb192bmV0KHZvaWQpDQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAqIEZyZWUgdGhl IGluX211bHRpIHJlZmVyZW5jZShzKSBmb3IgdGhpcw0KPiA+ID4+ICAgICAgICAgICAgICAgICAg ICAgICAgKiBJR01QIGxpZmVjeWNsZS4NCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICov DQo+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgIFNMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZp Z2ktPmlnaV9yZWxpbm1oZWFkLA0KPiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgaW5t X25yZWxlLCB0aW5tKSB7DQo+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0xJ U1RfUkVNT1ZFX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhlYWQsDQo+ID4gPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlubV9ucmVsZSk7DQo+ID4gPj4gLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW5tX3JlbGVhc2VfbG9ja2VkKGlubSk7DQo+ID4gPj4gLSAgICAgICAg ICAgICAgICAgICAgIH0NCj4gPiA+PiArICAgICAgICAgICAgICAgICAgICAgaW5tX3JlbGVhc2Vf bGlzdF9kZWZlcnJlZCgmaW5tX2ZyZWVfdG1wKTsNCj4gPiA+PiAgICAgICAgICAgICAgIH0NCj4g PiA+PiAgICAgICB9DQo+ID4gPj4NCj4gPiA+PiAgb3V0X2xvY2tlZDoNCj4gPiA+PiAgICAgICBJ R01QX1VOTE9DSygpOw0KPiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+ID4+ICsg ICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4gPj4gIH0NCj4gPiA+Pg0KPiA+ID4+ICAv Kg0KPiA+ID4+IEBAIC0xNzYwLDcgKzE3NDEsNyBAQCBpZ21wX3YxdjJfcHJvY2Vzc19ncm91cF90 aW1lcihzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgY28NCj4gPiA+PiAgew0KPiA+ID4+ICAgICAgIGlu dCByZXBvcnRfdGltZXJfZXhwaXJlZDsNCj4gPiA+Pg0KPiA+ID4+IC0gICAgIElOX01VTFRJX0xP Q0tfQVNTRVJUKCk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0K PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIGlm IChpbm0tPmlubV90aW1lciA9PSAwKSB7DQo+ID4gPj4gQEAgLTE4MDIsMTQgKzE3ODMsMTQgQEAg aWdtcF92MXYyX3Byb2Nlc3NfZ3JvdXBfdGltZXIoc3RydWN0IGluX211bHRpICppbm0sIGNvDQo+ ID4gPj4gICAqIE5vdGU6IFVubG9ja2VkIHJlYWQgZnJvbSBpZ2kuDQo+ID4gPj4gICAqLw0KPiA+ ID4+ICBzdGF0aWMgdm9pZA0KPiA+ID4+IC1pZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0 cnVjdCBpZ21wX2lmc29mdGMgKmlnaSwNCj4gPiA+PiAraWdtcF92M19wcm9jZXNzX2dyb3VwX3Rp bWVycyhzdHJ1Y3QgaW5fbXVsdGlfaGVhZCAqaW5taCwNCj4gPiA+PiAgICAgIHN0cnVjdCBtYnVm cSAqcXJxLCBzdHJ1Y3QgbWJ1ZnEgKnNjcSwNCj4gPiA+PiAgICAgIHN0cnVjdCBpbl9tdWx0aSAq aW5tLCBjb25zdCBpbnQgdXJpX2Zhc3RoeikNCj4gPiA+PiAgew0KPiA+ID4+ICAgICAgIGludCBx dWVyeV9yZXNwb25zZV90aW1lcl9leHBpcmVkOw0KPiA+ID4+ICAgICAgIGludCBzdGF0ZV9jaGFu Z2VfcmV0cmFuc21pdF90aW1lcl9leHBpcmVkOw0KPiA+ID4+DQo+ID4gPj4gLSAgICAgSU5fTVVM VElfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJU KCk7DQo+ID4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+DQo+ID4gPj4gICAg ICAgcXVlcnlfcmVzcG9uc2VfdGltZXJfZXhwaXJlZCA9IDA7DQo+ID4gPj4gQEAgLTE5MDcsOCAr MTg4OCw3IEBAIGlnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1lcnMoc3RydWN0IGlnbXBfaWZzb2Z0 YyAqaWdpLA0KPiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5tLT5pbm1fc3RhdGUg PT0gSUdNUF9MRUFWSU5HX01FTUJFUiAmJg0KPiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW5tLT5pbm1fc2NydiA9PSAwKSB7DQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5tLT5pbm1fc3RhdGUgPSBJR01QX05PVF9NRU1CRVI7DQo+ID4gPj4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU0xJU1RfSU5TRVJUX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhl YWQsDQo+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubSwgaW5tX25y ZWxlKTsNCj4gPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZV9sb2Nr ZWQoaW5taCwgaW5tKTsNCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ID4+ICAg ICAgICAgICAgICAgfQ0KPiA+ID4+ICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gPj4gQEAgLTE5 MjksNyArMTkwOSw3IEBAIHN0YXRpYyB2b2lkDQo+ID4gPj4gIGlnbXBfdjNfc3VwcHJlc3NfZ3Jv dXBfcmVjb3JkKHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0KPiA+ID4+ICB7DQo+ID4gPj4NCj4gPiA+ PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJ U1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIEtBU1NFUlQoaW5tLT5pbm1f aWdpLT5pZ2lfdmVyc2lvbiA9PSBJR01QX1ZFUlNJT05fMywNCj4gPiA+PiAgICAgICAgICAgICAg ICgiJXM6IG5vdCBJR01QdjMgbW9kZSBvbiBsaW5rIiwgX19mdW5jX18pKTsNCj4gPiA+PiBAQCAt MjAwMywxMyArMTk4MywxNSBAQCBpZ21wX3YzX2NhbmNlbF9saW5rX3RpbWVycyhzdHJ1Y3QgaWdt cF9pZnNvZnRjICppZ2kpDQo+ID4gPj4gIHsNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaWZtdWx0aWFk ZHIgICAgICAqaWZtYTsNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaWZuZXQgICAgICAgICAgICAqaWZw Ow0KPiA+ID4+IC0gICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm0sICp0aW5tOw0KPiA+ ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm07DQo+ID4gPj4gKyAgICAgc3Ry dWN0IGluX211bHRpX2hlYWQgaW5tX2ZyZWVfdG1wOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgQ1RS MyhLVFJfSUdNUFYzLCAiJXM6IGNhbmNlbCB2MyB0aW1lcnMgb24gaWZwICVwKCVzKSIsIF9fZnVu Y19fLA0KPiA+ID4+ICAgICAgICAgICBpZ2ktPmlnaV9pZnAsIGlnaS0+aWdpX2lmcC0+aWZfeG5h bWUpOw0KPiA+ID4+DQo+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPiA+ PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gICAgICAgSUdNUF9M T0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsgICAgIFNMSVNUX0lOSVQoJmlubV9mcmVlX3RtcCk7DQo+ ID4gPj4NCj4gPiA+PiAgICAgICAvKg0KPiA+ID4+ICAgICAgICAqIFN0b3AgdGhlIHYzIEdlbmVy YWwgUXVlcnkgUmVzcG9uc2Ugb24gdGhpcyBsaW5rIHN0b25lIGRlYWQuDQo+ID4gPj4gQEAgLTIw NTAsNyArMjAzMiw3IEBAIGlnbXBfdjNfY2FuY2VsX2xpbmtfdGltZXJzKHN0cnVjdCBpZ21wX2lm c29mdGMgKmlnaSkNCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICogbWVzc2FnZSBpcyBz ZW50IHVwc3RyZWFtIHRvIHRoZSBvbGQgcXVlcmllciAtLQ0KPiA+ID4+ICAgICAgICAgICAgICAg ICAgICAgICAgKiB0cmFuc2l0aW9uIHRvIE5PVCB3b3VsZCBsb3NlIHRoZSBsZWF2ZSBhbmQgcmFj ZS4NCj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ID4gPj4gLSAgICAgICAgICAg ICAgICAgICAgIFNMSVNUX0lOU0VSVF9IRUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFkLCBpbm0sIGlu bV9ucmVsZSk7DQo+ID4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGlubV9yZWxlX2xvY2tlZCgm aW5tX2ZyZWVfdG1wLCBpbm0pOw0KPiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxM VEhST1VHSCAqLw0KPiA+ID4+ICAgICAgICAgICAgICAgY2FzZSBJR01QX0dfUVVFUllfUEVORElO R19NRU1CRVI6DQo+ID4gPj4gICAgICAgICAgICAgICBjYXNlIElHTVBfU0dfUVVFUllfUEVORElO R19NRU1CRVI6DQo+ID4gPj4gQEAgLTIwNjksMTAgKzIwNTEsOCBAQCBpZ21wX3YzX2NhbmNlbF9s aW5rX3RpbWVycyhzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2kpDQo+ID4gPj4gICAgICAgICAgICAg ICBtYnVmcV9kcmFpbigmaW5tLT5pbm1fc2NxKTsNCj4gPiA+PiAgICAgICB9DQo+ID4gPj4gICAg ICAgSUZfQUREUl9SVU5MT0NLKGlmcCk7DQo+ID4gPj4gLSAgICAgU0xJU1RfRk9SRUFDSF9TQUZF KGlubSwgJmlnaS0+aWdpX3JlbGlubWhlYWQsIGlubV9ucmVsZSwgdGlubSkgew0KPiA+ID4+IC0g ICAgICAgICAgICAgU0xJU1RfUkVNT1ZFX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhlYWQsIGlubV9u cmVsZSk7DQo+ID4gPj4gLSAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4g PiA+PiAtICAgICB9DQo+ID4gPj4gKw0KPiA+ID4+ICsgICAgIGlubV9yZWxlYXNlX2xpc3RfZGVm ZXJyZWQoJmlubV9mcmVlX3RtcCk7DQo+ID4gPj4gIH0NCj4gPiA+Pg0KPiA+ID4+ICAvKg0KPiA+ ID4+IEBAIC0yMTk5LDcgKzIxNzksNyBAQCBpZ21wX3YxdjJfcXVldWVfcmVwb3J0KHN0cnVjdCBp bl9tdWx0aSAqaW5tLCBjb25zdCBpbnQNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaXAgICAgICAgICAg ICAgICAqaXA7DQo+ID4gPj4gICAgICAgc3RydWN0IG1idWYgICAgICAgICAgICAgKm07DQo+ID4g Pj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsgICAgIElO X01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiAgICAgICBJR01QX0xPQ0tfQVNTRVJU KCk7DQo+ID4gPj4NCj4gPiA+PiAgICAgICBpZnAgPSBpbm0tPmlubV9pZnA7DQo+ID4gPj4gQEAg LTIyNzYsMTAgKzIyNTYsOCBAQCBpZ21wX2NoYW5nZV9zdGF0ZShzdHJ1Y3QgaW5fbXVsdGkgKmlu bSkNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaWZuZXQgKmlmcDsNCj4gPiA+PiAgICAgICBpbnQgZXJy b3I7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ IC0NCj4gPiA+PiAgICAgICBlcnJvciA9IDA7DQo+ID4gPj4gLQ0KPiA+ID4+ICsgICAgIElOX01V TFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gICAgICAgLyoNCj4gPiA+PiAgICAgICAgKiBUcnkg dG8gZGV0ZWN0IGlmIHRoZSB1cHBlciBsYXllciBqdXN0IGFza2VkIHVzIHRvIGNoYW5nZSBzdGF0 ZQ0KPiA+ID4+ICAgICAgICAqIGZvciBhbiBpbnRlcmZhY2Ugd2hpY2ggaGFzIG5vdyBnb25lIGF3 YXkuDQo+ID4gPj4gQEAgLTIzNzksOSArMjM1NywxMCBAQCBpZ21wX2luaXRpYWxfam9pbihzdHJ1 Y3QgaW5fbXVsdGkgKmlubSwgc3RydWN0IGlnbXBfaWYNCj4gPiA+PiAgICAgICAgICAgICAgICAq IGdyb3VwIGFyb3VuZCBmb3IgdGhlIGZpbmFsIElOQ0xVREUge30gZW5xdWV1ZS4NCj4gPiA+PiAg ICAgICAgICAgICAgICAqLw0KPiA+ID4+ICAgICAgICAgICAgICAgaWYgKGlnaS0+aWdpX3ZlcnNp b24gPT0gSUdNUF9WRVJTSU9OXzMgJiYNCj4gPiA+PiAtICAgICAgICAgICAgICAgICBpbm0tPmlu bV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSKQ0KPiA+ID4+IC0gICAgICAgICAgICAgICAg ICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPiA+PiAtDQo+ID4gPj4gKyAgICAgICAg ICAgICAgICAgaW5tLT5pbm1fc3RhdGUgPT0gSUdNUF9MRUFWSU5HX01FTUJFUikgew0KPiA+ID4+ ICsgICAgICAgICAgICAgICAgICAgICBNUEFTUyhpbm0tPmlubV9yZWZjb3VudCA+IDEpOw0KPiA+ ID4+ICsgICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZV9sb2NrZWQoTlVMTCwgaW5tKTsNCj4g PiA+PiArICAgICAgICAgICAgIH0NCj4gPiA+PiAgICAgICAgICAgICAgIGlubS0+aW5tX3N0YXRl ID0gSUdNUF9SRVBPUlRJTkdfTUVNQkVSOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgICAgICAgICBz d2l0Y2ggKGlnaS0+aWdpX3ZlcnNpb24pIHsNCj4gPiA+PiBAQCAtMjQ3Myw3ICsyNDUyLDcgQEAg aWdtcF9oYW5kbGVfc3RhdGVfY2hhbmdlKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBzdHJ1Y3QNCj4g PiA+Pg0KPiA+ID4+ICAgICAgIGlmcCA9IGlubS0+aW5tX2lmcDsNCj4gPiA+Pg0KPiA+ID4+IC0g ICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9M T0NLX0FTU0VSVCgpOw0KPiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0K PiA+ID4+ICAgICAgIEtBU1NFUlQoaWdpICYmIGlnaS0+aWdpX2lmcCA9PSBpZnAsICgiJXM6IGlu Y29uc2lzdGVudCBpZnAiLCBfX2Z1bmNfXykpOw0KPiA+ID4+IEBAIC0yNTMxLDcgKzI1MTAsNyBA QCBpZ21wX2ZpbmFsX2xlYXZlKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBzdHJ1Y3QgaWdtcF9pZnMN Cj4gPiA+PiAgICAgICAgICAgX19mdW5jX18sIG50b2hsKGlubS0+aW5tX2FkZHIuc19hZGRyKSwg aW5tLT5pbm1faWZwLA0KPiA+ID4+ICAgICAgICAgICBpbm0tPmlubV9pZnAtPmlmX3huYW1lKTsN Cj4gPiA+Pg0KPiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gKyAg ICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ICAgICAgIElHTVBfTE9DS19B U1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIHN3aXRjaCAoaW5tLT5pbm1fc3RhdGUpIHsN Cj4gPiA+PiBAQCAtMjY1OCw3ICsyNjM3LDcgQEAgaWdtcF92M19lbnF1ZXVlX2dyb3VwX3JlY29y ZChzdHJ1Y3QgbWJ1ZnEgKm1xLCBzdHJ1Y3QNCj4gPiA+PiAgICAgICBpbl9hZGRyX3QgICAgICAg ICAgICAgICAgbmFkZHI7DQo+ID4gPj4gICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgIG1v ZGU7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAg IGVycm9yID0gMDsNCj4gPiA+PiAgICAgICBpZnAgPSBpbm0tPmlubV9pZnA7DQo+ID4gPj4gQEAg LTMwMTgsNyArMjk5Nyw3IEBAIGlnbXBfdjNfZW5xdWV1ZV9maWx0ZXJfY2hhbmdlKHN0cnVjdCBt YnVmcSAqbXEsIHN0cnVjdA0KPiA+ID4+ICAgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICBt b2RlLCBub3csIHRoZW47DQo+ID4gPj4gICAgICAgcmVjdHlwZV90ICAgICAgICAgICAgICAgIGNy dCwgZHJ0LCBucnQ7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgp Ow0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ ID4+ICAgICAgIGlmIChpbm0tPmlubV9uc3JjID09IDAgfHwNCj4gPiA+PiAgICAgICAgICAgKGlu bS0+aW5tX3N0WzBdLmlzc19hc20gPiAwICYmIGlubS0+aW5tX3N0WzFdLmlzc19hc20gPiAwKSkN Cj4gPiA+PiBAQCAtMzIyMSw3ICszMjAwLDcgQEAgaWdtcF92M19tZXJnZV9zdGF0ZV9jaGFuZ2Vz KHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBzdHJ1DQo+ID4gPj4gICAgICAgZG9tZXJnZSA9IDA7DQo+ ID4gPj4gICAgICAgcmVjc2xlbiA9IDA7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9M T0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsN Cj4gPiA+PiAgICAgICBJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4NCj4gPiA+PiAgICAgICAv Kg0KPiA+ID4+IEBAIC0zMzIwLDcgKzMyOTksNyBAQCBpZ21wX3YzX2Rpc3BhdGNoX2dlbmVyYWxf cXVlcnkoc3RydWN0IGlnbXBfaWZzb2Z0YyAqaWcNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaW5fbXVs dGkgICAgICAgICAqaW5tOw0KPiA+ID4+ICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICBy ZXR2YWwsIGxvb3A7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgp Ow0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiAgICAg ICBJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4NCj4gPiA+PiAgICAgICBLQVNTRVJUKGlnaS0+ aWdpX3ZlcnNpb24gPT0gSUdNUF9WRVJTSU9OXzMsDQo+ID4gPj4gQEAgLTM2MzIsNyArMzYxMSw2 IEBAIERCX1NIT1dfQ09NTUFORChpZ2lfbGlzdCwgZGJfc2hvd19pZ2lfbGlzdCkNCj4gPiA+PiAg ICAgICAgICAgICAgIGRiX3ByaW50ZigiICAgIHFpICV1XG4iLCBpZ2ktPmlnaV9xaSk7DQo+ID4g Pj4gICAgICAgICAgICAgICBkYl9wcmludGYoIiAgICBxcmkgJXVcbiIsIGlnaS0+aWdpX3FyaSk7 DQo+ID4gPj4gICAgICAgICAgICAgICBkYl9wcmludGYoIiAgICB1cmkgJXVcbiIsIGlnaS0+aWdp X3VyaSk7DQo+ID4gPj4gLSAgICAgICAgICAgICAvKiBTTElTVF9IRUFEKCxpbl9tdWx0aSkgICBp Z2lfcmVsaW5taGVhZCAqLw0KPiA+ID4+ICAgICAgICAgICAgICAgLyogc3RydWN0IG1idWZxICAg IGlnaV9ncTsgKi8NCj4gPiA+PiAgICAgICAgICAgICAgIGRiX3ByaW50ZigiXG4iKTsNCj4gPiA+ PiAgICAgICB9DQo+ID4gPj4NCj4gPiA+PiBNb2RpZmllZDogaGVhZC9zeXMvbmV0aW5ldC9pZ21w X3Zhci5oDQo+ID4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ID4gPj4gLS0tIGhlYWQvc3lz L25ldGluZXQvaWdtcF92YXIuaCAgICAgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAgICAg IChyMzMzMTc0KQ0KPiA+ID4+ICsrKyBoZWFkL3N5cy9uZXRpbmV0L2lnbXBfdmFyLmggICAgICAg V2VkIE1heSAgMiAxOTozNjoyOSAyMDE4ICAgICAgICAocjMzMzE3NSkNCj4gPiA+PiBAQCAtMjE0 LDcgKzIxNCw2IEBAIHN0cnVjdCBpZ21wX2lmc29mdGMgew0KPiA+ID4+ICAgICAgIHVpbnQzMl90 IGlnaV9xaTsgICAgICAgIC8qIElHTVB2MyBRdWVyeSBJbnRlcnZhbCAocykgKi8NCj4gPiA+PiAg ICAgICB1aW50MzJfdCBpZ2lfcXJpOyAgICAgICAvKiBJR01QdjMgUXVlcnkgUmVzcG9uc2UgSW50 ZXJ2YWwgKHMpICovDQo+ID4gPj4gICAgICAgdWludDMyX3QgaWdpX3VyaTsgICAgICAgLyogSUdN UHYzIFVuc29saWNpdGVkIFJlcG9ydCBJbnRlcnZhbCAocykgKi8NCj4gPiA+PiAtICAgICBTTElT VF9IRUFEKCxpbl9tdWx0aSkgICBpZ2lfcmVsaW5taGVhZDsgLyogcmVsZWFzZWQgZ3JvdXBzICov DQo+ID4gPj4gICAgICAgc3RydWN0IG1idWZxICAgIGlnaV9ncTsgICAgICAgICAvKiBnZW5lcmFs IHF1ZXJ5IHJlc3BvbnNlcyBxdWV1ZSAqLw0KPiA+ID4+ICB9Ow0KPiA+ID4+DQo+ID4gPj4NCj4g PiA+PiBNb2RpZmllZDogaGVhZC9zeXMvbmV0aW5ldC9pbi5jDQo+ID4gPj4gPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQo+ID4gPj4gLS0tIGhlYWQvc3lzL25ldGluZXQvaW4uYyAgICAgV2VkIE1heSAg MiAxNzo0MTowMCAyMDE4ICAgICAgICAocjMzMzE3NCkNCj4gPiA+PiArKysgaGVhZC9zeXMvbmV0 aW5ldC9pbi5jICAgICBXZWQgTWF5ICAyIDE5OjM2OjI5IDIwMTggICAgICAgIChyMzMzMTc1KQ0K PiA+ID4+IEBAIC02MzIsMTIgKzYzMiwxMCBAQCBpbl9kaWZhZGRyX2lvY3RsKHVfbG9uZyBjbWQs IGNhZGRyX3QgZGF0YSwgc3RydWN0IGlmbmUNCj4gPiA+PiAgICAgICAgICAgICAgIHN0cnVjdCBp bl9pZmluZm8gKmlpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgICAgICAgICBpaSA9ICgoc3RydWN0 IGluX2lmaW5mbyAqKWlmcC0+aWZfYWZkYXRhW0FGX0lORVRdKTsNCj4gPiA+PiAtICAgICAgICAg ICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPiA+PiAgICAgICAgICAgICAgIGlmIChpaS0+aWlfYWxs aG9zdHMpIHsNCj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgKHZvaWQpaW5fbGVhdmVncm91 cF9sb2NrZWQoaWktPmlpX2FsbGhvc3RzLCBOVUxMKTsNCj4gPiA+PiArICAgICAgICAgICAgICAg ICAgICAgKHZvaWQpaW5fbGVhdmVncm91cChpaS0+aWlfYWxsaG9zdHMsIE5VTEwpOw0KPiA+ID4+ ICAgICAgICAgICAgICAgICAgICAgICBpaS0+aWlfYWxsaG9zdHMgPSBOVUxMOw0KPiA+ID4+ICAg ICAgICAgICAgICAgfQ0KPiA+ID4+IC0gICAgICAgICAgICAgSU5fTVVMVElfVU5MT0NLKCk7DQo+ ID4gPj4gICAgICAgfQ0KPiA+ID4+DQo+ID4gPj4gICAgICAgSUZfQUREUl9XTE9DSyhpZnApOw0K PiA+ID4+IEBAIC05OTQsMTEgKzk5MiwxMiBAQCBpbl9icm9hZGNhc3Qoc3RydWN0IGluX2FkZHIg aW4sIHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ID4+ICB2b2lkDQo+ID4gPj4gIGluX2lmZGV0YWNo KHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ID4+ICB7DQo+ID4gPj4gLQ0KPiA+ID4+ICsgICAgIElO X01VTFRJX0xPQ0soKTsNCj4gPiA+PiAgICAgICBpbl9wY2JwdXJnZWlmMCgmVl9yaXBjYmluZm8s IGlmcCk7DQo+ID4gPj4gICAgICAgaW5fcGNicHVyZ2VpZjAoJlZfdWRiaW5mbywgaWZwKTsNCj4g PiA+PiAgICAgICBpbl9wY2JwdXJnZWlmMCgmVl91bGl0ZWNiaW5mbywgaWZwKTsNCj4gPiA+PiAg ICAgICBpbl9wdXJnZW1hZGRycyhpZnApOw0KPiA+ID4+ICsgICAgIElOX01VTFRJX1VOTE9DSygp Ow0KPiA+ID4+ICB9DQo+ID4gPj4NCj4gPiA+PiAgLyoNCj4gPiA+PiBAQCAtMTAxMSwxMiArMTAx MCwxMiBAQCBpbl9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gPiA+PiAgc3RhdGljIHZv aWQNCj4gPiA+PiAgaW5fcHVyZ2VtYWRkcnMoc3RydWN0IGlmbmV0ICppZnApDQo+ID4gPj4gIHsN Cj4gPiA+PiAtICAgICBMSVNUX0hFQUQoLGluX211bHRpKSBwdXJnZWlubXM7DQo+ID4gPj4gLSAg ICAgc3RydWN0IGluX211bHRpICAgICAgICAgKmlubSwgKnRpbm07DQo+ID4gPj4gKyAgICAgc3Ry dWN0IGluX211bHRpX2hlYWQgcHVyZ2Vpbm1zOw0KPiA+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0 aSAgICAgICAgICppbm07DQo+ID4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICAgICAgKmlm bWE7DQo+ID4gPj4NCj4gPiA+PiAtICAgICBMSVNUX0lOSVQoJnB1cmdlaW5tcyk7DQo+ID4gPj4g LSAgICAgSU5fTVVMVElfTE9DSygpOw0KPiA+ID4+ICsgICAgIFNMSVNUX0lOSVQoJnB1cmdlaW5t cyk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4gPj4NCj4gPiA+PiAg ICAgICAvKg0KPiA+ID4+ICAgICAgICAqIEV4dHJhY3QgbGlzdCBvZiBpbl9tdWx0aSBhc3NvY2lh dGVkIHdpdGggdGhlIGRldGFjaGluZyBpZnANCj4gPiA+PiBAQCAtMTAzNCwxNyArMTAzMywxMyBA QCBpbl9wdXJnZW1hZGRycyhzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gPiA+PiAgICAgICAgICAgICAg ICAgICAoIiVzOiBpZm1hX3Byb3Rvc3BlYyBpcyBOVUxMIiwgX19mdW5jX18pKTsNCj4gPiA+PiAg I2VuZGlmDQo+ID4gPj4gICAgICAgICAgICAgICBpbm0gPSAoc3RydWN0IGluX211bHRpICopaWZt YS0+aWZtYV9wcm90b3NwZWM7DQo+ID4gPj4gLSAgICAgICAgICAgICBMSVNUX0lOU0VSVF9IRUFE KCZwdXJnZWlubXMsIGlubSwgaW5tX2xpbmspOw0KPiA+ID4+ICsgICAgICAgICAgICAgaW5tX3Jl bGVfbG9ja2VkKCZwdXJnZWlubXMsIGlubSk7DQo+ID4gPj4gICAgICAgfQ0KPiA+ID4+ICAgICAg IElGX0FERFJfUlVOTE9DSyhpZnApOw0KPiA+ID4+DQo+ID4gPj4gLSAgICAgTElTVF9GT1JFQUNI X1NBRkUoaW5tLCAmcHVyZ2Vpbm1zLCBpbm1fbGluaywgdGlubSkgew0KPiA+ID4+IC0gICAgICAg ICAgICAgTElTVF9SRU1PVkUoaW5tLCBpbm1fbGluayk7DQo+ID4gPj4gLSAgICAgICAgICAgICBp bm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPiA+PiAtICAgICB9DQo+ID4gPj4gKyAgICAgaW5t X3JlbGVhc2VfbGlzdF9kZWZlcnJlZCgmcHVyZ2Vpbm1zKTsNCj4gPiA+PiAgICAgICBpZ21wX2lm ZGV0YWNoKGlmcCk7DQo+ID4gPj4gLQ0KPiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0K PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4gPj4gIH0NCj4gPiA+Pg0K PiA+ID4+ICBzdHJ1Y3QgaW5fbGxlbnRyeSB7DQo+ID4gPj4NCj4gPiA+PiBNb2RpZmllZDogaGVh ZC9zeXMvbmV0aW5ldC9pbl9tY2FzdC5jDQo+ID4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+ ID4gPj4gLS0tIGhlYWQvc3lzL25ldGluZXQvaW5fbWNhc3QuYyAgICAgICBXZWQgTWF5ICAyIDE3 OjQxOjAwIDIwMTggICAgICAgIChyMzMzMTc0KQ0KPiA+ID4+ICsrKyBoZWFkL3N5cy9uZXRpbmV0 L2luX21jYXN0LmMgICAgICAgV2VkIE1heSAgMiAxOTozNjoyOSAyMDE4ICAgICAgICAocjMzMzE3 NSkNCj4gPiA+PiBAQCAtNTEsNiArNTEsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7DQo+ID4g Pj4gICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQo+ID4gPj4gICNpbmNsdWRlIDxzeXMva3RyLmg+ DQo+ID4gPj4gICNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+DQo+ID4gPj4gKyNpbmNsdWRlIDxz eXMvZ3Rhc2txdWV1ZS5oPg0KPiA+ID4+ICAjaW5jbHVkZSA8c3lzL3RyZWUuaD4NCj4gPiA+Pg0K PiA+ID4+ICAjaW5jbHVkZSA8bmV0L2lmLmg+DQo+ID4gPj4gQEAgLTU5LDYgKzYwLDggQEAgX19G QlNESUQoIiRGcmVlQlNEJCIpOw0KPiA+ID4+ICAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQo+ID4g Pj4gICNpbmNsdWRlIDxuZXQvdm5ldC5oPg0KPiA+ID4+DQo+ID4gPj4gKyNpbmNsdWRlIDxuZXQv ZXRoZXJuZXQuaD4NCj4gPiA+PiArDQo+ID4gPj4gICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQo+ ID4gPj4gICNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+DQo+ID4gPj4gICNpbmNsdWRlIDxu ZXRpbmV0L2luX2ZpYi5oPg0KPiA+ID4+IEBAIC05MSwxOCArOTQsMjQgQEAgc3RhdGljIE1BTExP Q19ERUZJTkUoTV9JUE1TT1VSQ0UsICJpcF9tc291cmNlIiwNCj4gPiA+Pg0KPiA+ID4+ICAvKg0K PiA+ID4+ICAgKiBMb2NraW5nOg0KPiA+ID4+IC0gKiAtIExvY2sgb3JkZXIgaXM6IEdpYW50LCBJ TlBfV0xPQ0ssIElOX01VTFRJX0xPQ0ssIElHTVBfTE9DSywgSUZfQUREUl9MT0NLLg0KPiA+ID4+ ICsgKiAtIExvY2sgb3JkZXIgaXM6IEdpYW50LCBJTlBfV0xPQ0ssIElOX01VTFRJX0xJU1RfTE9D SywgSUdNUF9MT0NLLCBJRl9BRERSX0xPQ0suDQo+ID4gPj4gICAqIC0gVGhlIElGX0FERFJfTE9D SyBpcyBpbXBsaWNpdGx5IHRha2VuIGJ5IGlubV9sb29rdXAoKSBlYXJsaWVyLCBob3dldmVyDQo+ ID4gPj4gICAqICAgaXQgY2FuIGJlIHRha2VuIGJ5IGNvZGUgaW4gbmV0L2lmLmMgYWxzby4NCj4g PiA+PiAgICogLSBpcF9tb3B0aW9ucyBhbmQgaW5fbWZpbHRlciBhcmUgY292ZXJlZCBieSB0aGUg SU5QX1dMT0NLLg0KPiA+ID4+ICAgKg0KPiA+ID4+IC0gKiBzdHJ1Y3QgaW5fbXVsdGkgaXMgY292 ZXJlZCBieSBJTl9NVUxUSV9MT0NLLiBUaGVyZSBpc24ndCBzdHJpY3RseQ0KPiA+ID4+ICsgKiBz dHJ1Y3QgaW5fbXVsdGkgaXMgY292ZXJlZCBieSBJTl9NVUxUSV9MSVNUX0xPQ0suIFRoZXJlIGlz bid0IHN0cmljdGx5DQo+ID4gPj4gICAqIGFueSBuZWVkIGZvciBpbl9tdWx0aSBpdHNlbGYgdG8g YmUgdmlydHVhbGl6ZWQgLS0gaXQgaXMgYm91bmQgdG8gYW4gaWZwDQo+ID4gPj4gICAqIGFueXdh eSBubyBtYXR0ZXIgd2hhdCBoYXBwZW5zLg0KPiA+ID4+ICAgKi8NCj4gPiA+PiAtc3RydWN0IG10 eCBpbl9tdWx0aV9tdHg7DQo+ID4gPj4gLU1UWF9TWVNJTklUKGluX211bHRpX210eCwgJmluX211 bHRpX210eCwgImluX211bHRpX210eCIsIE1UWF9ERUYpOw0KPiA+ID4+ICtzdHJ1Y3QgbXR4IGlu X211bHRpX2xpc3RfbXR4Ow0KPiA+ID4+ICtNVFhfU1lTSU5JVChpbl9tdWx0aV9tdHgsICZpbl9t dWx0aV9saXN0X210eCwgImluX211bHRpX2xpc3RfbXR4IiwgTVRYX0RFRik7DQo+ID4gPj4NCj4g PiA+PiArc3RydWN0IG10eCBpbl9tdWx0aV9mcmVlX210eDsNCj4gPiA+PiArTVRYX1NZU0lOSVQo aW5fbXVsdGlfZnJlZV9tdHgsICZpbl9tdWx0aV9mcmVlX210eCwgImluX211bHRpX2ZyZWVfbXR4 IiwgTVRYX0RFRik7DQo+ID4gPj4gKw0KPiA+ID4+ICtzdHJ1Y3Qgc3ggaW5fbXVsdGlfc3g7DQo+ ID4gPj4gK1NYX1NZU0lOSVQoaW5fbXVsdGlfc3gsICZpbl9tdWx0aV9zeCwgImluX211bHRpX3N4 Iik7DQo+ID4gPj4gKw0KPiA+ID4+ICAvKg0KPiA+ID4+ICAgKiBGdW5jdGlvbnMgd2l0aCBub24t c3RhdGljIGxpbmthZ2UgZGVmaW5lZCBpbiB0aGlzIGZpbGUgc2hvdWxkIGJlDQo+ID4gPj4gICAq IGRlY2xhcmVkIGluIGluX3Zhci5oOg0KPiA+ID4+IEBAIC0xNTEsNiArMTYwLDcgQEAgc3RhdGlj IGludCAgICAgICAgaW5tX2lzX2lmcF9kZXRhY2hlZChjb25zdCBzdHJ1Y3QgaW5fbXVsdGkgKg0K PiA+ID4+ICBzdGF0aWMgaW50ICAgaW5tX21lcmdlKHN0cnVjdCBpbl9tdWx0aSAqLCAvKmNvbnN0 Ki8gc3RydWN0IGluX21maWx0ZXIgKik7DQo+ID4gPj4gIHN0YXRpYyB2b2lkICBpbm1fcHVyZ2Uo c3RydWN0IGluX211bHRpICopOw0KPiA+ID4+ICBzdGF0aWMgdm9pZCAgaW5tX3JlYXAoc3RydWN0 IGluX211bHRpICopOw0KPiA+ID4+ICtzdGF0aWMgdm9pZCBpbm1fcmVsZWFzZShzdHJ1Y3QgaW5f bXVsdGkgKik7DQo+ID4gPj4gIHN0YXRpYyBzdHJ1Y3QgaXBfbW9wdGlvbnMgKg0KPiA+ID4+ICAg ICAgICAgICAgICAgaW5wX2ZpbmRtb3B0aW9ucyhzdHJ1Y3QgaW5wY2IgKik7DQo+ID4gPj4gIHN0 YXRpYyB2b2lkICBpbnBfZnJlZW1vcHRpb25zX2ludGVybmFsKHN0cnVjdCBpcF9tb3B0aW9ucyAq KTsNCj4gPiA+PiBAQCAtMjE2LDYgKzIyNiw2NSBAQCBpbm1faXNfaWZwX2RldGFjaGVkKGNvbnN0 IHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0KPiA+ID4+ICB9DQo+ID4gPj4gICNlbmRpZg0KPiA+ID4+ DQo+ID4gPj4gK3N0YXRpYyBzdHJ1Y3QgZ3JvdXB0YXNrIGZyZWVfZ3Rhc2s7DQo+ID4gPj4gK3N0 YXRpYyBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBpbm1fZnJlZV9saXN0Ow0KPiA+ID4+ICtzdGF0aWMg dm9pZCBpbm1fcmVsZWFzZV90YXNrKHZvaWQgKmFyZyBfX3VudXNlZCk7DQo+ID4gPj4gK3N0YXRp YyB2b2lkIGlubV9pbml0KHZvaWQpDQo+ID4gPj4gK3sNCj4gPiA+PiArICAgICBTTElTVF9JTklU KCZpbm1fZnJlZV9saXN0KTsNCj4gPiA+PiArICAgICB0YXNrcWdyb3VwX2NvbmZpZ19ndGFza19p bml0KE5VTEwsICZmcmVlX2d0YXNrLCBpbm1fcmVsZWFzZV90YXNrLCAiaW5tDQo+ID4gPj4gcmVs ZWFzZSB0YXNrIik7ICt9DQo+ID4gPj4gKw0KPiA+ID4+ICtTWVNJTklUKGlubV9pbml0LCBTSV9T VUJfU01QICsgMSwgU0lfT1JERVJfRklSU1QsDQo+ID4gPj4gKyAgICAgaW5tX2luaXQsIE5VTEwp Ow0KPiA+ID4+ICsNCj4gPiA+PiArDQo+ID4gPj4gK3ZvaWQNCj4gPiA+PiAraW5tX3JlbGVhc2Vf bGlzdF9kZWZlcnJlZChzdHJ1Y3QgaW5fbXVsdGlfaGVhZCAqaW5taCkNCj4gPiA+PiArew0KPiA+ ID4+ICsNCj4gPiA+PiArICAgICBpZiAoU0xJU1RfRU1QVFkoaW5taCkpDQo+ID4gPj4gKyAgICAg ICAgICAgICByZXR1cm47DQo+ID4gPj4gKyAgICAgbXR4X2xvY2soJmluX211bHRpX2ZyZWVfbXR4 KTsNCj4gPiA+PiArICAgICBTTElTVF9DT05DQVQoJmlubV9mcmVlX2xpc3QsIGlubWgsIGluX211 bHRpLCBpbm1fbnJlbGUpOw0KPiA+ID4+ICsgICAgIG10eF91bmxvY2soJmluX211bHRpX2ZyZWVf bXR4KTsNCj4gPiA+PiArICAgICBHUk9VUFRBU0tfRU5RVUVVRSgmZnJlZV9ndGFzayk7DQo+ID4g Pj4gK30NCj4gPiA+PiArDQo+ID4gPj4gK3ZvaWQNCj4gPiA+PiAraW5tX3JlbGVhc2VfZGVmZXJy ZWQoc3RydWN0IGluX211bHRpICppbm0pDQo+ID4gPj4gK3sNCj4gPiA+PiArICAgICBzdHJ1Y3Qg aW5fbXVsdGlfaGVhZCB0bXA7DQo+ID4gPj4gKw0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1Rf TE9DS19BU1NFUlQoKTsNCj4gPiA+PiArICAgICBNUEFTUyhpbm0tPmlubV9yZWZjb3VudCA+IDAp Ow0KPiA+ID4+ICsgICAgIGlmICgtLWlubS0+aW5tX3JlZmNvdW50ID09IDApIHsNCj4gPiA+PiAr ICAgICAgICAgICAgIFNMSVNUX0lOSVQoJnRtcCk7DQo+ID4gPj4gKyAgICAgICAgICAgICBpbm0t PmlubV9pZm1hLT5pZm1hX3Byb3Rvc3BlYyA9IE5VTEw7DQo+ID4gPj4gKyAgICAgICAgICAgICBT TElTVF9JTlNFUlRfSEVBRCgmdG1wLCBpbm0sIGlubV9ucmVsZSk7DQo+ID4gPj4gKyAgICAgICAg ICAgICBpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVkKCZ0bXApOw0KPiA+ID4+ICsgICAgIH0NCj4g PiA+PiArfQ0KPiA+ID4+ICsNCj4gPiA+PiArc3RhdGljIHZvaWQNCj4gPiA+PiAraW5tX3JlbGVh c2VfdGFzayh2b2lkICphcmcgX191bnVzZWQpDQo+ID4gPj4gK3sNCj4gPiA+PiArICAgICBzdHJ1 Y3QgaW5fbXVsdGlfaGVhZCBpbm1fZnJlZV90bXA7DQo+ID4gPj4gKyAgICAgc3RydWN0IGluX211 bHRpICppbm0sICp0aW5tOw0KPiA+ID4+ICsNCj4gPiA+PiArICAgICBTTElTVF9JTklUKCZpbm1f ZnJlZV90bXApOw0KPiA+ID4+ICsgICAgIG10eF9sb2NrKCZpbl9tdWx0aV9mcmVlX210eCk7DQo+ ID4gPj4gKyAgICAgU0xJU1RfQ09OQ0FUKCZpbm1fZnJlZV90bXAsICZpbm1fZnJlZV9saXN0LCBp bl9tdWx0aSwgaW5tX25yZWxlKTsNCj4gPiA+PiArICAgICBtdHhfdW5sb2NrKCZpbl9tdWx0aV9m cmVlX210eCk7DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTE9DSygpOw0KPiA+ID4+ICsgICAgIFNM SVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZpbm1fZnJlZV90bXAsIGlubV9ucmVsZSwgdGlubSkgew0K PiA+ID4+ICsgICAgICAgICAgICAgU0xJU1RfUkVNT1ZFX0hFQUQoJmlubV9mcmVlX3RtcCwgaW5t X25yZWxlKTsNCj4gPiA+PiArICAgICAgICAgICAgIE1QQVNTKGlubSk7DQo+ID4gPj4gKyAgICAg ICAgICAgICBpbm1fcmVsZWFzZShpbm0pOw0KPiA+ID4+ICsgICAgIH0NCj4gPiA+PiArICAgICBJ Tl9NVUxUSV9VTkxPQ0soKTsNCj4gPiA+PiArfQ0KPiA+ID4+ICsNCj4gPiA+PiAgLyoNCj4gPiA+ PiAgICogSW5pdGlhbGl6ZSBhbiBpbl9tZmlsdGVyIHN0cnVjdHVyZSB0byBhIGtub3duIHN0YXRl IGF0IHQwLCB0MQ0KPiA+ID4+ICAgKiB3aXRoIGFuIGVtcHR5IHNvdXJjZSBmaWx0ZXIgbGlzdC4N Cj4gPiA+PiBAQCAtMjMyLDcgKzMwMSw3IEBAIGltZl9pbml0KHN0cnVjdCBpbl9tZmlsdGVyICpp bWYsIGNvbnN0IGludCBzdDAsIGNvbnN0DQo+ID4gPj4gIC8qDQo+ID4gPj4gICAqIEZ1bmN0aW9u IGZvciBsb29raW5nIHVwIGFuIGluX211bHRpIHJlY29yZCBmb3IgYW4gSVB2NCBtdWx0aWNhc3Qg YWRkcmVzcw0KPiA+ID4+ICAgKiBvbiBhIGdpdmVuIGludGVyZmFjZS4gaWZwIG11c3QgYmUgdmFs aWQuIElmIG5vIHJlY29yZCBmb3VuZCwgcmV0dXJuIE5VTEwuDQo+ID4gPj4gLSAqIFRoZSBJTl9N VUxUSV9MT0NLIGFuZCBJRl9BRERSX0xPQ0sgb24gaWZwIG11c3QgYmUgaGVsZC4NCj4gPiA+PiAr ICogVGhlIElOX01VTFRJX0xJU1RfTE9DSyBhbmQgSUZfQUREUl9MT0NLIG9uIGlmcCBtdXN0IGJl IGhlbGQuDQo+ID4gPj4gICAqLw0KPiA+ID4+ICBzdHJ1Y3QgaW5fbXVsdGkgKg0KPiA+ID4+ICBp bm1fbG9va3VwX2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIg aW5hKQ0KPiA+ID4+IEBAIC0yNDAsNyArMzA5LDcgQEAgaW5tX2xvb2t1cF9sb2NrZWQoc3RydWN0 IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hDQo+ID4gPj4gICAgICAgc3RydWN0IGlmbXVs dGlhZGRyICppZm1hOw0KPiA+ID4+ICAgICAgIHN0cnVjdCBpbl9tdWx0aSAqaW5tOw0KPiA+ID4+ DQo+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiArICAgICBJTl9N VUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gICAgICAgSUZfQUREUl9MT0NLX0FTU0VS VChpZnApOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgaW5tID0gTlVMTDsNCj4gPiA+PiBAQCAtMjY0 LDcgKzMzMyw3IEBAIGlubV9sb29rdXAoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBp bl9hZGRyIGluYQ0KPiA+ID4+ICB7DQo+ID4gPj4gICAgICAgc3RydWN0IGluX211bHRpICppbm07 DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsg ICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiAgICAgICBJRl9BRERSX1JM T0NLKGlmcCk7DQo+ID4gPj4gICAgICAgaW5tID0gaW5tX2xvb2t1cF9sb2NrZWQoaWZwLCBpbmEp Ow0KPiA+ID4+ICAgICAgIElGX0FERFJfUlVOTE9DSyhpZnApOw0KPiA+ID4+IEBAIC00NTEsNyAr NTIwLDcgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9h ZGRyICpnDQo+ID4gPj4gICAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ ID4+ICAgICAgIGlpID0gKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVU XTsNCj4gPiA+PiAtDQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4gPj4g ICAgICAgaW5tID0gaW5tX2xvb2t1cChpZnAsICpncm91cCk7DQo+ID4gPj4gICAgICAgaWYgKGlu bSAhPSBOVUxMKSB7DQo+ID4gPj4gICAgICAgICAgICAgICAvKg0KPiA+ID4+IEBAIC00NjAsMTEg KzUyOSwxMyBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlu X2FkZHIgKmcNCj4gPiA+PiAgICAgICAgICAgICAgICAqLw0KPiA+ID4+ICAgICAgICAgICAgICAg S0FTU0VSVChpbm0tPmlubV9yZWZjb3VudCA+PSAxLA0KPiA+ID4+ICAgICAgICAgICAgICAgICAg ICgiJXM6IGJhZCByZWZjb3VudCAlZCIsIF9fZnVuY19fLCBpbm0tPmlubV9yZWZjb3VudCkpOw0K PiA+ID4+IC0gICAgICAgICAgICAgKytpbm0tPmlubV9yZWZjb3VudDsNCj4gPiA+PiArICAgICAg ICAgICAgIGlubV9hY3F1aXJlX2xvY2tlZChpbm0pOw0KPiA+ID4+ICAgICAgICAgICAgICAgKnBp bm0gPSBpbm07DQo+ID4gPj4gLSAgICAgICAgICAgICByZXR1cm4gKDApOw0KPiA+ID4+ICAgICAg IH0NCj4gPiA+PiAtDQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPiA+ PiArICAgICBpZiAoaW5tICE9IE5VTEwpDQo+ID4gPj4gKyAgICAgICAgICAgICByZXR1cm4gKDAp Ow0KPiA+ID4+ICsNCj4gPiA+PiAgICAgICBtZW1zZXQoJmdzaW4sIDAsIHNpemVvZihnc2luKSk7 DQo+ID4gPj4gICAgICAgZ3Npbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCj4gPiA+PiAgICAgICBn c2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsNCj4gPiA+PiBAQCAtNDc5 LDYgKzU1MCw3IEBAIGluX2dldG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3Qg aW5fYWRkciAqZw0KPiA+ID4+ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJvcik7DQo+ID4gPj4N Cj4gPiA+PiAgICAgICAvKiBYWFggaWZtYV9wcm90b3NwZWMgbXVzdCBiZSBjb3ZlcmVkIGJ5IElG X0FERFJfTE9DSyAqLw0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+ID4+ ICAgICAgIElGX0FERFJfV0xPQ0soaWZwKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIC8qDQo+ID4g Pj4gQEAgLTUwNCwxMCArNTc2LDkgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNv bnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICBf X2Z1bmNfXywgaWZtYSwgaW5tLCBpbmV0X250b2FfcigqZ3JvdXAsIGFkZHJidWYpKTsNCj4gPiA+ PiAgICAgICAgICAgICAgIH0NCj4gPiA+PiAgI2VuZGlmDQo+ID4gPj4gLSAgICAgICAgICAgICAr K2lubS0+aW5tX3JlZmNvdW50Ow0KPiA+ID4+ICsgICAgICAgICAgICAgaW5tX2FjcXVpcmVfbG9j a2VkKGlubSk7DQo+ID4gPj4gICAgICAgICAgICAgICAqcGlubSA9IGlubTsNCj4gPiA+PiAtICAg ICAgICAgICAgIElGX0FERFJfV1VOTE9DSyhpZnApOw0KPiA+ID4+IC0gICAgICAgICAgICAgcmV0 dXJuICgwKTsNCj4gPiA+PiArICAgICAgICAgICAgIGdvdG8gb3V0X2xvY2tlZDsNCj4gPiA+PiAg ICAgICB9DQo+ID4gPj4NCj4gPiA+PiAgICAgICBJRl9BRERSX1dMT0NLX0FTU0VSVChpZnApOw0K PiA+ID4+IEBAIC01MjIsNiArNTkzLDcgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAs IGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4gPj4gICAgICAgaW5tID0gbWFsbG9jKHNpemVv ZigqaW5tKSwgTV9JUE1BRERSLCBNX05PV0FJVCB8IE1fWkVSTyk7DQo+ID4gPj4gICAgICAgaWYg KGlubSA9PSBOVUxMKSB7DQo+ID4gPj4gICAgICAgICAgICAgICBJRl9BRERSX1dVTkxPQ0soaWZw KTsNCj4gPiA+PiArICAgICAgICAgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4gPj4g ICAgICAgICAgICAgICBpZl9kZWxtdWx0aV9pZm1hKGlmbWEpOw0KPiA+ID4+ICAgICAgICAgICAg ICAgcmV0dXJuIChFTk9NRU0pOw0KPiA+ID4+ICAgICAgIH0NCj4gPiA+PiBAQCAtNTM5LDggKzYx MSw5IEBAIGluX2dldG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRk ciAqZw0KPiA+ID4+ICAgICAgIGlmbWEtPmlmbWFfcHJvdG9zcGVjID0gaW5tOw0KPiA+ID4+DQo+ ID4gPj4gICAgICAgKnBpbm0gPSBpbm07DQo+ID4gPj4gLQ0KPiA+ID4+ICsgb3V0X2xvY2tlZDoN Cj4gPiA+PiAgICAgICBJRl9BRERSX1dVTkxPQ0soaWZwKTsNCj4gPiA+PiArICAgICBJTl9NVUxU SV9MSVNUX1VOTE9DSygpOw0KPiA+ID4+ICAgICAgIHJldHVybiAoMCk7DQo+ID4gPj4gIH0NCj4g PiA+Pg0KPiA+ID4+IEBAIC01NTAsMzYgKzYyMywyOSBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZu ZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gPiA+PiAgICogSWYgdGhlIHJlZmNv dW50IGRyb3BzIHRvIDAsIGZyZWUgdGhlIGluX211bHRpIHJlY29yZCBhbmQNCj4gPiA+PiAgICog ZGVsZXRlIHRoZSB1bmRlcmx5aW5nIGxpbmstbGF5ZXIgbWVtYmVyc2hpcC4NCj4gPiA+PiAgICov DQo+ID4gPj4gLXZvaWQNCj4gPiA+PiAtaW5tX3JlbGVhc2VfbG9ja2VkKHN0cnVjdCBpbl9tdWx0 aSAqaW5tKQ0KPiA+ID4+ICtzdGF0aWMgdm9pZA0KPiA+ID4+ICtpbm1fcmVsZWFzZShzdHJ1Y3Qg aW5fbXVsdGkgKmlubSkNCj4gPiA+PiAgew0KPiA+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRk ciAqaWZtYTsNCj4gPiA+PiArICAgICBzdHJ1Y3QgaWZuZXQgKmlmcDsNCj4gPiA+Pg0KPiA+ID4+ IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4gLQ0KPiA+ID4+ICAgICAgIENU UjIoS1RSX0lHTVBWMywgIiVzOiByZWZjb3VudCBpcyAlZCIsIF9fZnVuY19fLCBpbm0tPmlubV9y ZWZjb3VudCk7DQo+ID4gPj4gLQ0KPiA+ID4+IC0gICAgIGlmICgtLWlubS0+aW5tX3JlZmNvdW50 ID4gMCkgew0KPiA+ID4+IC0gICAgICAgICAgICAgQ1RSMihLVFJfSUdNUFYzLCAiJXM6IHJlZmNv dW50IGlzIG5vdyAlZCIsIF9fZnVuY19fLA0KPiA+ID4+IC0gICAgICAgICAgICAgICAgIGlubS0+ aW5tX3JlZmNvdW50KTsNCj4gPiA+PiAtICAgICAgICAgICAgIHJldHVybjsNCj4gPiA+PiAtICAg ICB9DQo+ID4gPj4gLQ0KPiA+ID4+ICsgICAgIE1QQVNTKGlubS0+aW5tX3JlZmNvdW50ID09IDAp Ow0KPiA+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBmcmVlaW5nIGlubSAlcCIsIF9f ZnVuY19fLCBpbm0pOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgaWZtYSA9IGlubS0+aW5tX2lmbWE7 DQo+ID4gPj4gKyAgICAgaWZwID0gaW5tLT5pbm1faWZwOw0KPiA+ID4+DQo+ID4gPj4gICAgICAg LyogWFhYIHRoaXMgYWNjZXNzIGlzIG5vdCBjb3ZlcmVkIGJ5IElGX0FERFJfTE9DSyAqLw0KPiA+ ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBwdXJnaW5nIGlmbWEgJXAiLCBfX2Z1bmNf XywgaWZtYSk7DQo+ID4gPj4gLSAgICAgS0FTU0VSVChpZm1hLT5pZm1hX3Byb3Rvc3BlYyA9PSBp bm0sDQo+ID4gPj4gLSAgICAgICAgICgiJXM6IGlmbWFfcHJvdG9zcGVjICE9IGlubSIsIF9fZnVu Y19fKSk7DQo+ID4gPj4gLSAgICAgaWZtYS0+aWZtYV9wcm90b3NwZWMgPSBOVUxMOw0KPiA+ID4+ IC0NCj4gPiA+PiArICAgICBpZiAoaWZwKQ0KPiA+ID4+ICsgICAgICAgICAgICAgQ1VSVk5FVF9T RVQoaWZwLT5pZl92bmV0KTsNCj4gPiA+PiAgICAgICBpbm1fcHVyZ2UoaW5tKTsNCj4gPiA+PiAt DQo+ID4gPj4gICAgICAgZnJlZShpbm0sIE1fSVBNQUREUik7DQo+ID4gPj4NCj4gPiA+PiAgICAg ICBpZl9kZWxtdWx0aV9pZm1hKGlmbWEpOw0KPiA+ID4+ICsgICAgIGlmIChpZnApDQo+ID4gPj4g KyAgICAgICAgICAgICBDVVJWTkVUX1JFU1RPUkUoKTsNCj4gPiA+PiAgfQ0KPiA+ID4+DQo+ID4g Pj4gIC8qDQo+ID4gPj4gQEAgLTU5Miw3ICs2NTgsNyBAQCBpbm1fY2xlYXJfcmVjb3JkZWQoc3Ry dWN0IGluX211bHRpICppbm0pDQo+ID4gPj4gIHsNCj4gPiA+PiAgICAgICBzdHJ1Y3QgaXBfbXNv dXJjZSAgICAgICAqaW1zOw0KPiA+ID4+DQo+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NF UlQoKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4gPj4N Cj4gPiA+PiAgICAgICBSQl9GT1JFQUNIKGltcywgaXBfbXNvdXJjZV90cmVlLCAmaW5tLT5pbm1f c3Jjcykgew0KPiA+ID4+ICAgICAgICAgICAgICAgaWYgKGltcy0+aW1zX3N0cCkgew0KPiA+ID4+ IEBAIC02MzIsNyArNjk4LDcgQEAgaW5tX3JlY29yZF9zb3VyY2Uoc3RydWN0IGluX211bHRpICpp bm0sIGNvbnN0IGluX2FkZHJfDQo+ID4gPj4gICAgICAgc3RydWN0IGlwX21zb3VyY2UgICAgICAg IGZpbmQ7DQo+ID4gPj4gICAgICAgc3RydWN0IGlwX21zb3VyY2UgICAgICAgKmltcywgKm5pbXM7 DQo+ID4gPj4NCj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+ICsg ICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIGZp bmQuaW1zX2hhZGRyID0gbnRvaGwobmFkZHIpOw0KPiA+ID4+ICAgICAgIGltcyA9IFJCX0ZJTkQo aXBfbXNvdXJjZV90cmVlLCAmaW5tLT5pbm1fc3JjcywgJmZpbmQpOw0KPiA+ID4+IEBAIC05NTks NiArMTAyNSw3IEBAIGlubV9tZXJnZShzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgLypjb25zdCovIHN0 cnVjdCBpbl9tZg0KPiA+ID4+ICAgICAgIHNjaGFuZ2VkID0gMDsNCj4gPiA+PiAgICAgICBlcnJv ciA9IDA7DQo+ID4gPj4gICAgICAgbnNyYzEgPSBuc3JjMCA9IDA7DQo+ID4gPj4gKyAgICAgSU5f TVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgLyoNCj4gPiA+ PiAgICAgICAgKiBVcGRhdGUgdGhlIHNvdXJjZSBmaWx0ZXJzIGZpcnN0LCBhcyB0aGlzIG1heSBm YWlsLg0KPiA+ID4+IEBAIC0xMTY1LDYgKzEyMzIsNyBAQCBpbl9qb2luZ3JvdXBfbG9ja2VkKHN0 cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW4NCj4gPiA+PiAgICAgICBpbnQgICAgICAg ICAgICAgICAgICAgICAgZXJyb3I7DQo+ID4gPj4NCj4gPiA+PiAgICAgICBJTl9NVUxUSV9MT0NL X0FTU0VSVCgpOw0KPiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLX0FTU0VSVCgpOw0K PiA+ID4+DQo+ID4gPj4gICAgICAgQ1RSNChLVFJfSUdNUFYzLCAiJXM6IGpvaW4gMHglMDh4IG9u ICVwKCVzKSkiLCBfX2Z1bmNfXywNCj4gPiA+PiAgICAgICAgICAgbnRvaGwoZ2luYS0+c19hZGRy KSwgaWZwLCBpZnAtPmlmX3huYW1lKTsNCj4gPiA+PiBAQCAtMTE4Niw3ICsxMjU0LDcgQEAgaW5f am9pbmdyb3VwX2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluDQo+ID4g Pj4gICAgICAgICAgICAgICBDVFIxKEtUUl9JR01QVjMsICIlczogaW5fZ2V0bXVsdGkoKSBmYWls dXJlIiwgX19mdW5jX18pOw0KPiA+ID4+ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJvcik7DQo+ ID4gPj4gICAgICAgfQ0KPiA+ID4+IC0NCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0so KTsNCj4gPiA+PiAgICAgICBDVFIxKEtUUl9JR01QVjMsICIlczogbWVyZ2UgaW5tIHN0YXRlIiwg X19mdW5jX18pOw0KPiA+ID4+ICAgICAgIGVycm9yID0gaW5tX21lcmdlKGlubSwgaW1mKTsNCj4g PiA+PiAgICAgICBpZiAoZXJyb3IpIHsNCj4gPiA+PiBAQCAtMTIwMSwxMCArMTI2OSwxMiBAQCBp bl9qb2luZ3JvdXBfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW4NCj4g PiA+PiAgICAgICAgICAgICAgIGdvdG8gb3V0X2lubV9yZWxlYXNlOw0KPiA+ID4+ICAgICAgIH0N Cj4gPiA+Pg0KPiA+ID4+IC1vdXRfaW5tX3JlbGVhc2U6DQo+ID4gPj4gKyBvdXRfaW5tX3JlbGVh c2U6DQo+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPiA+PiAgICAgICBp ZiAoZXJyb3IpIHsNCj4gPiA+PiArDQo+ID4gPj4gICAgICAgICAgICAgICBDVFIyKEtUUl9JR01Q VjMsICIlczogZHJvcHBpbmcgcmVmIG9uICVwIiwgX19mdW5jX18sIGlubSk7DQo+ID4gPj4gLSAg ICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPiA+PiArICAgICAgICAgICAg IGlubV9yZWxlYXNlX2RlZmVycmVkKGlubSk7DQo+ID4gPj4gICAgICAgfSBlbHNlIHsNCj4gPiA+ PiAgICAgICAgICAgICAgICpwaW5tID0gaW5tOw0KPiA+ID4+ICAgICAgIH0NCj4gPiA+PiBAQCAt MTI0OSw2ICsxMzE5LDcgQEAgaW5fbGVhdmVncm91cF9sb2NrZWQoc3RydWN0IGluX211bHRpICpp bm0sIC8qY29uc3QqLyBzDQo+ID4gPj4gICAgICAgZXJyb3IgPSAwOw0KPiA+ID4+DQo+ID4gPj4g ICAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNU X1VOTE9DS19BU1NFUlQoKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIENUUjUoS1RSX0lHTVBWMywg IiVzOiBsZWF2ZSBpbm0gJXAsIDB4JTA4eC8lcywgaW1mICVwIiwgX19mdW5jX18sDQo+ID4gPj4g ICAgICAgICAgIGlubSwgbnRvaGwoaW5tLT5pbm1fYWRkci5zX2FkZHIpLA0KPiA+ID4+IEBAIC0x MjcyLDE4ICsxMzQzLDIwIEBAIGluX2xlYXZlZ3JvdXBfbG9ja2VkKHN0cnVjdCBpbl9tdWx0aSAq aW5tLCAvKmNvbnN0Ki8gcw0KPiA+ID4+ICAgICAgICAqIHRoZSB0cmFuc2FjdGlvbiwgaXQgTVVT VCBOT1QgZmFpbC4NCj4gPiA+PiAgICAgICAgKi8NCj4gPiA+PiAgICAgICBDVFIxKEtUUl9JR01Q VjMsICIlczogbWVyZ2UgaW5tIHN0YXRlIiwgX19mdW5jX18pOw0KPiA+ID4+ICsgICAgIElOX01V TFRJX0xJU1RfTE9DSygpOw0KPiA+ID4+ICAgICAgIGVycm9yID0gaW5tX21lcmdlKGlubSwgaW1m KTsNCj4gPiA+PiAgICAgICBLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGZhaWxlZCB0byBtZXJn ZSBpbm0gc3RhdGUiLCBfX2Z1bmNfXykpOw0KPiA+ID4+DQo+ID4gPj4gICAgICAgQ1RSMShLVFJf SUdNUFYzLCAiJXM6IGRvaW5nIGlnbXAgZG93bmNhbGwiLCBfX2Z1bmNfXyk7DQo+ID4gPj4gICAg ICAgQ1VSVk5FVF9TRVQoaW5tLT5pbm1faWZwLT5pZl92bmV0KTsNCj4gPiA+PiAgICAgICBlcnJv ciA9IGlnbXBfY2hhbmdlX3N0YXRlKGlubSk7DQo+ID4gPj4gKyAgICAgaW5tX3JlbGVhc2VfZGVm ZXJyZWQoaW5tKTsNCj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+ID4+ ICAgICAgIENVUlZORVRfUkVTVE9SRSgpOw0KPiA+ID4+ICAgICAgIGlmIChlcnJvcikNCj4gPiA+ PiAgICAgICAgICAgICAgIENUUjEoS1RSX0lHTVBWMywgIiVzOiBmYWlsZWQgaWdtcCBkb3duY2Fs bCIsIF9fZnVuY19fKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVz OiBkcm9wcGluZyByZWYgb24gJXAiLCBfX2Z1bmNfXywgaW5tKTsNCj4gPiA+PiAtICAgICBpbm1f cmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPiA+Pg0KPiA+ID4+ICAgICAgIHJldHVybiAoZXJyb3Ip Ow0KPiA+ID4+ICB9DQo+ID4gPj4gQEAgLTEzMTUsMTggKzEzODgsNiBAQCBpbl9hZGRtdWx0aShz dHJ1Y3QgaW5fYWRkciAqYXAsIHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ID4+ICB9DQo+ID4gPj4N Cj4gPiA+PiAgLyoNCj4gPiA+PiAtICogTGVhdmUgYW4gSVB2NCBtdWx0aWNhc3QgZ3JvdXAsIGFz c3VtZWQgdG8gYmUgaW4gZXhjbHVzaXZlICgqLEcpIG1vZGUuDQo+ID4gPj4gLSAqIFRoaXMgS1BJ IGlzIGZvciBsZWdhY3kga2VybmVsIGNvbnN1bWVycyBvbmx5Lg0KPiA+ID4+IC0gKi8NCj4gPiA+ Pg0KPiA+ID4+ICoqKiBESUZGIE9VVFBVVCBUUlVOQ0FURUQgQVQgMTAwMCBMSU5FUyAqKioNCj4g PiA+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+ ID4+IHN2bi1zcmMtaGVhZEBmcmVlYnNkLm9yZyBtYWlsaW5nIGxpc3QNCj4gPiA+PiBodHRwczov L2xpc3RzLmZyZWVic2Qub3JnL21haWxtYW4vbGlzdGluZm8vc3ZuLXNyYy1oZWFkDQo+ID4gPj4g VG8gdW5zdWJzY3JpYmUsIHNlbmQgYW55IG1haWwgdG8gInN2bi1zcmMtaGVhZC11bnN1YnNjcmli ZUBmcmVlYnNkLm9yZyIgICAgDQo+ID4gPg0KPiA+ID4NCj4gPiA+IEFmdGVyIChhcm91bmQhKSB0 aGlzIHVwZGF0ZSwgc29tZSBib3hlcyB3aXRoIGkzNTAgZHVhbCBwb3J0IE5JQ3MgaW1tZWRpYXRl bHkgY3Jhc2gNCj4gPiA+IHdpdGggRmF0YWwgdHJhcCAxMjogcGFnZSBmYXVsdCBhbmQgc29tZXRo aW5nIHdpdGgNCj4gPiA+DQo+ID4gPiBjdXJyZW50IHByb2Nlc3M6IChpc2Mtd29ya2VyMDAwNikN Cj4gPiA+DQo+ID4gPiAuLi4uDQo+ID4gPg0KPiA+ID4gVGhvc2UgYm94ZXMgZG8gbm90IGhhdmUg ZGVidWdnaW5nIGtlcm5lbC4gVGhlIHN5bXB0b21icyBhcmUgdGhlIHNhbWUuIFNpbmdsZSB1c2Vy DQo+ID4gPiBrZXJuZWwgd29ya3MsIGJ1dCB0aGUgbW9tZW50IEkgcGVyZm9ybSAvZXRjL25ldHN0 YXJ0IGFuZCBhbnkga2luZCBvZiBuZXQgdHJhZmZpYw0KPiA+ID4gZXN0YWJsaXNoZXMsIHRoaXMg Y3JhcCBiYWlscyBvdXQuDQo+ID4gPg0KPiA+ID4NCj4gPiA+IC0gLS0NCj4gPiA+IE8uIEhhcnRt YW5uDQo+ID4gPg0KPiA+ID4gSWNoIHdpZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBvZGVyIMOcYmVy bWl0dGx1bmcgbWVpbmVyIERhdGVuIGbDvHINCj4gPiA+IFdlcmJlendlY2tlIG9kZXIgZsO8ciBk aWUgTWFya3QtIG9kZXIgTWVpbnVuZ3Nmb3JzY2h1bmcgKMKnIDI4IEFicy4gNCBCRFNHKS4NCj4g PiA+IC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tDQo+ID4gPg0KPiA+ID4gaUxVRUFSTUtB QjBXSVFRWlZaTXpBdHdDMlQvODZUclM1MjhmeUZoWWxBVUNXdXRqdGdBS0NSRFM1MjhmeUZoWQ0K PiA+ID4gbEFrekFmOVBoYUZUd05oUUQyekY3eFNISjJ3ZnZMdG9VRWpabHpHc3VzQUNwMXBhN0pB ZnowUHl2K2xtK1hOSg0KPiA+ID4gdkxFbHJJZjFDbUR6dUE4eWJsWi94L3dPVlNKa0FmOUMrNTBE VkV0R3E1SC9iSFNETnd6bXFyajhZZ0I3WHBTcw0KPiA+ID4gUE1SWGMrSXdJYTFKZ2kyeU0rNlRD U05TczFONWJFVWhVOUJpOGVYeTZZMEZTa0FaZVYrcw0KPiA+ID4gPVMwYkMNCj4gPiA+IC0tLS0t RU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0KPiA+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18NCj4gPiA+IHN2bi1zcmMtaGVhZEBmcmVlYnNkLm9yZyBtYWls aW5nIGxpc3QNCj4gPiA+IGh0dHBzOi8vbGlzdHMuZnJlZWJzZC5vcmcvbWFpbG1hbi9saXN0aW5m by9zdm4tc3JjLWhlYWQNCj4gPiA+IFRvIHVuc3Vic2NyaWJlLCBzZW5kIGFueSBtYWlsIHRvICJz dm4tc3JjLWhlYWQtdW5zdWJzY3JpYmVAZnJlZWJzZC5vcmciICAgIA0KPiANCj4gDQo+IA0KPiAt IC0tIA0KPiBPLiBIYXJ0bWFubg0KPiANCj4gSWNoIHdpZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBv ZGVyIMOcYmVybWl0dGx1bmcgbWVpbmVyIERhdGVuIGbDvHINCj4gV2VyYmV6d2Vja2Ugb2RlciBm w7xyIGRpZSBNYXJrdC0gb2RlciBNZWludW5nc2ZvcnNjaHVuZyAowqcgMjggQWJzLiA0IEJEU0cp Lg0KPiAtLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUtLS0tLQ0KPiANCj4gaUxVRUFSTUtBQjBXSVFR WlZaTXpBdHdDMlQvODZUclM1MjhmeUZoWWxBVUNXdXR2OHdBS0NSRFM1MjhmeUZoWQ0KPiBsSWUx QWZ3T0NBaWdwWGF3WjdLQWpMTnBXalJUNERzcnpmcWNDNTdNb3ppVlF5SytYOXFvUUEydjBwbFZO cFAwDQo+IEZMcWg1ZGtSWGlpT0xyeXI5YXVJTFVLeUxDTnlBZndMN2NGZTFZUlg3Vm5zSzV3Ly84 WG0yNXRKNzRDWEM4UDANCj4gZ2FvU3F2RHFDS1dUajZpTitRL1Bqb05vaFdvSUs3NnRpWkFXUGpr YUhldUZieXBQYTJHKw0KPiA9RXBKYQ0KPiAtLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0NCj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gc3ZuLXNy Yy1oZWFkQGZyZWVic2Qub3JnIG1haWxpbmcgbGlzdA0KPiBodHRwczovL2xpc3RzLmZyZWVic2Qu b3JnL21haWxtYW4vbGlzdGluZm8vc3ZuLXNyYy1oZWFkDQo+IFRvIHVuc3Vic2NyaWJlLCBzZW5k IGFueSBtYWlsIHRvICJzdm4tc3JjLWhlYWQtdW5zdWJzY3JpYmVAZnJlZWJzZC5vcmciDQoNCg0K DQotIC0tIA0KTy4gSGFydG1hbm4NCg0KSWNoIHdpZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBvZGVy IMOcYmVybWl0dGx1bmcgbWVpbmVyIERhdGVuIGbDvHINCldlcmJlendlY2tlIG9kZXIgZsO8ciBk aWUgTWFya3QtIG9kZXIgTWVpbnVuZ3Nmb3JzY2h1bmcgKMKnIDI4IEFicy4gNCBCRFNHKS4NCi0t LS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tDQoNCmlMVUVBUk1LQUIwV0lRUVpWWk16QXR3QzJU Lzg2VHJTNTI4ZnlGaFlsQVVDV3UxeThnQUtDUkRTNTI4ZnlGaFkNCmxGRW9BZjRpVys0dFNBT2NH MEVRMS9ZMlBOcUxDWDRBbnBZVGxTbGFFQ3h0RmxEWi9YYk5PdzNUeVZCOVJiUUMNCnFHRTlVeDJ4 UUJENDhhMU5iMUlIVlZDOWppN2pBZ0NMT1h6S1VxbWNYa1BOdmpTZ1pXWitTZHlkNTVDaG9MZ1kN ClNreVk4RlNVM0dFRG0yOFdnYVhqUTRvSmgrNy9GZjY5TnN1RFpsdDdpQzI0S1pkUktIMDANCj00 YlkrDQotLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0NCg== From owner-svn-src-head@freebsd.org Sat May 5 12:00:56 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 303B0FABDBA; Sat, 5 May 2018 12:00:56 +0000 (UTC) (envelope-from danfe@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 DA1AC7197E; Sat, 5 May 2018 12:00:55 +0000 (UTC) (envelope-from danfe@freebsd.org) Received: by freefall.freebsd.org (Postfix, from userid 1033) id C7BDFB8A3; Sat, 5 May 2018 12:00:55 +0000 (UTC) Date: Sat, 5 May 2018 12:00:55 +0000 From: Alexey Dokuchaev To: Bruce Evans Cc: Conrad Meyer , svn-src-head@freebsd.org, svn-src-all@freebsd.org, Brooks Davis , src-committers Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys Message-ID: <20180505120055.GA81833@FreeBSD.org> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> <20180505090954.X1307@besplex.bde.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180505090954.X1307@besplex.bde.org> User-Agent: Mutt/1.9.2 (2017-12-15) X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 12:00:56 -0000 On Sat, May 05, 2018 at 10:38:29AM +1000, Bruce Evans wrote: > ... > Summary: this change wouldn't have passed my review. I have used similar > changes for 15-20 years but never made them production quality since there > are too many variations to consider and testing showed insignificant > improvements except for micro-benchmarks. Perhaps Foundation could sponsor your work to make them production quality Bruce. :-) Seriously though, I'm a bit worried to see these commits happening at the same time correctness of the implementation is still under discussion and disputes. Shall I expect that after my next -CURRENT update things would suddenly stop working? [1] ./danfe [1] https://bugzilla.redhat.com/show_bug.cgi?id=638477 From owner-svn-src-head@freebsd.org Sat May 5 15:42:59 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3FB8DFB1309; Sat, 5 May 2018 15:42:59 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id CF93580A2E; Sat, 5 May 2018 15:42:58 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id C42F61FA0F; Sat, 5 May 2018 15:42:58 +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 w45FgwRZ009695; Sat, 5 May 2018 15:42:58 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45Fgw5f009693; Sat, 5 May 2018 15:42:58 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201805051542.w45Fgw5f009693@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sat, 5 May 2018 15:42:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333271 - in head/sys/powerpc: aim powerpc X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: in head/sys/powerpc: aim powerpc X-SVN-Commit-Revision: 333271 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 15:42:59 -0000 Author: jhibbits Date: Sat May 5 15:42:58 2018 New Revision: 333271 URL: https://svnweb.freebsd.org/changeset/base/333271 Log: Add POWER9 to the POWER8 bootstrap case blocks POWER8 and POWER9 have similar configuration requirements for hypervisor setup, and in the cases here they're identical. Add the POWER9 constant to the POWER8 list so it's initialized correctly. Reviewed by: nwhitehorn Modified: head/sys/powerpc/aim/mp_cpudep.c head/sys/powerpc/powerpc/cpu.c Modified: head/sys/powerpc/aim/mp_cpudep.c ============================================================================== --- head/sys/powerpc/aim/mp_cpudep.c Sat May 5 08:16:19 2018 (r333270) +++ head/sys/powerpc/aim/mp_cpudep.c Sat May 5 15:42:58 2018 (r333271) @@ -85,6 +85,7 @@ cpudep_ap_early_bootstrap(void) break; case IBMPOWER8: case IBMPOWER8E: + case IBMPOWER9: #ifdef __powerpc64__ if (mfmsr() & PSL_HV) { isync(); @@ -397,6 +398,7 @@ cpudep_ap_setup() case IBMPOWER7PLUS: case IBMPOWER8: case IBMPOWER8E: + case IBMPOWER9: #ifdef __powerpc64__ if (mfmsr() & PSL_HV) { mtspr(SPR_LPCR, mfspr(SPR_LPCR) | LPCR_LPES | Modified: head/sys/powerpc/powerpc/cpu.c ============================================================================== --- head/sys/powerpc/powerpc/cpu.c Sat May 5 08:16:19 2018 (r333270) +++ head/sys/powerpc/powerpc/cpu.c Sat May 5 15:42:58 2018 (r333271) @@ -638,6 +638,7 @@ cpu_powerx_setup(int cpuid, uint16_t vers) switch (vers) { case IBMPOWER8: case IBMPOWER8E: + case IBMPOWER9: mtspr(SPR_LPCR, mfspr(SPR_LPCR) | LPCR_PECE_WAKESET); isync(); break; From owner-svn-src-head@freebsd.org Sat May 5 15:48:40 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id ABD8EFB1459; Sat, 5 May 2018 15:48:40 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 59DDF825C7; Sat, 5 May 2018 15:48:40 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 54BF01FA12; Sat, 5 May 2018 15:48:40 +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 w45Fme14009946; Sat, 5 May 2018 15:48:40 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45Fmet6009943; Sat, 5 May 2018 15:48:40 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201805051548.w45Fmet6009943@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sat, 5 May 2018 15:48:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333272 - in head/sys/powerpc: include powerpc X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: in head/sys/powerpc: include powerpc X-SVN-Commit-Revision: 333272 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 15:48:40 -0000 Author: jhibbits Date: Sat May 5 15:48:39 2018 New Revision: 333272 URL: https://svnweb.freebsd.org/changeset/base/333272 Log: Break out the cpu_features setup to its own function, to be run earlier The new POWER9 MMU configuration is slightly different from current setups. Rather than special-casing on POWER9, move the initialization of cpu_features and cpu_features2 to as early as possible, so that platform and MMU configuration can be based upon CPU features instead of specific CPUs if at all possible. Reviewed by: nwhitehorn Modified: head/sys/powerpc/include/md_var.h head/sys/powerpc/powerpc/cpu.c head/sys/powerpc/powerpc/machdep.c Modified: head/sys/powerpc/include/md_var.h ============================================================================== --- head/sys/powerpc/include/md_var.h Sat May 5 15:42:58 2018 (r333271) +++ head/sys/powerpc/include/md_var.h Sat May 5 15:48:39 2018 (r333272) @@ -63,6 +63,7 @@ void decr_init(void); void decr_ap_init(void); void decr_tc_init(void); +void cpu_feature_setup(void); void cpu_setup(u_int); struct trapframe; Modified: head/sys/powerpc/powerpc/cpu.c ============================================================================== --- head/sys/powerpc/powerpc/cpu.c Sat May 5 15:42:58 2018 (r333271) +++ head/sys/powerpc/powerpc/cpu.c Sat May 5 15:48:39 2018 (r333272) @@ -231,6 +231,8 @@ static int cpu_feature_bit(SYSCTL_HANDLER_ARGS); static char model[64]; SYSCTL_STRING(_hw, HW_MODEL, model, CTLFLAG_RD, model, 0, ""); +static const struct cputab *cput; + u_long cpu_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU; u_long cpu_features2 = 0; SYSCTL_OPAQUE(_hw, OID_AUTO, cpu_features, CTLFLAG_RD, @@ -245,14 +247,37 @@ SYSCTL_PROC(_hw, OID_AUTO, floatingpoint, CTLTYPE_INT SYSCTL_PROC(_hw, OID_AUTO, altivec, CTLTYPE_INT | CTLFLAG_RD, 0, PPC_FEATURE_HAS_ALTIVEC, cpu_feature_bit, "I", "CPU supports Altivec"); +/* + * Phase 1 (early) CPU setup. Setup the cpu_features/cpu_features2 variables, + * so they can be used during platform and MMU bringup. + */ void +cpu_feature_setup() +{ + u_int pvr; + uint16_t vers; + const struct cputab *cp; + + pvr = mfpvr(); + vers = pvr >> 16; + for (cp = models; cp->version != 0; cp++) { + if (cp->version == vers) + break; + } + + cput = cp; + cpu_features |= cp->features; + cpu_features2 |= cp->features2; +} + + +void cpu_setup(u_int cpuid) { - u_int pvr, maj, min; - uint16_t vers, rev, revfmt; uint64_t cps; - const struct cputab *cp; const char *name; + u_int maj, min, pvr; + uint16_t rev, revfmt, vers; pvr = mfpvr(); vers = pvr >> 16; @@ -274,13 +299,8 @@ cpu_setup(u_int cpuid) min = (pvr >> 0) & 0xf; } - for (cp = models; cp->version != 0; cp++) { - if (cp->version == vers) - break; - } - - revfmt = cp->revfmt; - name = cp->name; + revfmt = cput->revfmt; + name = cput->name; if (rev == MPC750 && pvr == 15) { name = "Motorola MPC755"; revfmt = REVFMT_HEX; @@ -305,8 +325,6 @@ cpu_setup(u_int cpuid) printf(", %jd.%02jd MHz", cps / 1000000, (cps / 10000) % 100); printf("\n"); - cpu_features |= cp->features; - cpu_features2 |= cp->features2; printf("cpu%d: Features %b\n", cpuid, (int)cpu_features, PPC_FEATURE_BITMASK); if (cpu_features2 != 0) @@ -316,8 +334,8 @@ cpu_setup(u_int cpuid) /* * Configure CPU */ - if (cp->cpu_setup != NULL) - cp->cpu_setup(cpuid, vers); + if (cput->cpu_setup != NULL) + cput->cpu_setup(cpuid, vers); } /* Get current clock frequency for the given cpu id. */ Modified: head/sys/powerpc/powerpc/machdep.c ============================================================================== --- head/sys/powerpc/powerpc/machdep.c Sat May 5 15:42:58 2018 (r333271) +++ head/sys/powerpc/powerpc/machdep.c Sat May 5 15:48:39 2018 (r333272) @@ -275,6 +275,8 @@ powerpc_init(vm_offset_t fdt, vm_offset_t toc, vm_offs bzero(__bss_start, _end - __bss_start); #endif + cpu_feature_setup(); + #ifdef AIM aim_early_init(fdt, toc, ofentry, mdp, mdp_cookie); #endif From owner-svn-src-head@freebsd.org Sat May 5 16:00:04 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3EBF4FB1B0D; Sat, 5 May 2018 16:00:04 +0000 (UTC) (envelope-from jhibbits@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id DCCD584C5D; Sat, 5 May 2018 16:00:03 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id D796C1FBAC; Sat, 5 May 2018 16:00:03 +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 w45G03Ek014908; Sat, 5 May 2018 16:00:03 GMT (envelope-from jhibbits@FreeBSD.org) Received: (from jhibbits@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45G03M5014901; Sat, 5 May 2018 16:00:03 GMT (envelope-from jhibbits@FreeBSD.org) Message-Id: <201805051600.w45G03M5014901@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: jhibbits set sender to jhibbits@FreeBSD.org using -f From: Justin Hibbits Date: Sat, 5 May 2018 16:00:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333273 - in head/sys/powerpc: aim include pseries X-SVN-Group: head X-SVN-Commit-Author: jhibbits X-SVN-Commit-Paths: in head/sys/powerpc: aim include pseries X-SVN-Commit-Revision: 333273 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 16:00:05 -0000 Author: jhibbits Date: Sat May 5 16:00:02 2018 New Revision: 333273 URL: https://svnweb.freebsd.org/changeset/base/333273 Log: Add support for powernv POWER9 MMU initialization The POWER9 MMU (PowerISA 3.0) is slightly different from current configurations, using a partition table even for hypervisor mode, and dropping the SDR1 register. Key off the newly early-enabled CPU features flags for the new architecture, and configure the MMU appropriately. The POWER9 MMU ignores the "PSIZ" field in the PTCR, and expects a 64kB table. As we are enabled for powernv (hypervisor mode, no VMs), only initialize partition table entry 0, and zero out the rest. The actual contents of the register are identical to SDR1 from previous architectures. Along with this, fix a bug in the page table allocation with very large memory. The table can be allocated on any 256k boundary. The bootstrap_alloc alignment argument is an int, and with large amounts of memory passing the size of the table as the alignment will overflow an integer. Hard-code the alignment at 256k as wider alignment is not necessary. Reviewed by: nwhitehorn Tested by: Breno Leitao Relnotes: Yes Modified: head/sys/powerpc/aim/mmu_oea64.c head/sys/powerpc/aim/mmu_oea64.h head/sys/powerpc/aim/moea64_native.c head/sys/powerpc/include/pte.h head/sys/powerpc/include/spr.h head/sys/powerpc/pseries/mmu_phyp.c Modified: head/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- head/sys/powerpc/aim/mmu_oea64.c Sat May 5 15:48:39 2018 (r333272) +++ head/sys/powerpc/aim/mmu_oea64.c Sat May 5 16:00:02 2018 (r333273) @@ -159,8 +159,8 @@ struct mtx moea64_slb_mutex; /* * PTEG data. */ -u_int moea64_pteg_count; -u_int moea64_pteg_mask; +u_long moea64_pteg_count; +u_long moea64_pteg_mask; /* * PVO data. Modified: head/sys/powerpc/aim/mmu_oea64.h ============================================================================== --- head/sys/powerpc/aim/mmu_oea64.h Sat May 5 15:48:39 2018 (r333272) +++ head/sys/powerpc/aim/mmu_oea64.h Sat May 5 16:00:02 2018 (r333273) @@ -81,8 +81,8 @@ extern u_int moea64_pte_overflow; extern int moea64_large_page_shift; extern uint64_t moea64_large_page_size; -extern u_int moea64_pteg_count; -extern u_int moea64_pteg_mask; +extern u_long moea64_pteg_count; +extern u_long moea64_pteg_mask; extern int n_slbs; #endif /* _POWERPC_AIM_MMU_OEA64_H */ Modified: head/sys/powerpc/aim/moea64_native.c ============================================================================== --- head/sys/powerpc/aim/moea64_native.c Sat May 5 15:48:39 2018 (r333272) +++ head/sys/powerpc/aim/moea64_native.c Sat May 5 16:00:02 2018 (r333273) @@ -115,6 +115,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -129,6 +130,9 @@ __FBSDID("$FreeBSD$"); #define VSID_HASH_MASK 0x0000007fffffffffULL +/* POWER9 only permits a 64k partition table size. */ +#define PART_SIZE 0x10000 + static __inline void TLBIE(uint64_t vpn) { #ifndef __powerpc64__ @@ -183,6 +187,7 @@ TLBIE(uint64_t vpn) { /* * PTEG data. */ +static volatile struct pate *moea64_part_table; static volatile struct lpte *moea64_pteg_table; static struct rwlock moea64_eviction_lock; @@ -400,9 +405,15 @@ moea64_cpu_bootstrap_native(mmu_t mmup, int ap) * Install page table */ - __asm __volatile ("ptesync; mtsdr1 %0; isync" - :: "r"(((uintptr_t)moea64_pteg_table & ~DMAP_BASE_ADDRESS) - | (uintptr_t)(flsl(moea64_pteg_mask >> 11)))); + if (cpu_features2 & PPC_FEATURE2_ARCH_3_00) { + mtspr(SPR_PTCR, + ((uintptr_t)moea64_part_table & ~DMAP_BASE_ADDRESS) | + flsl((PART_SIZE >> 12) - 1)); + } else { + __asm __volatile ("ptesync; mtsdr1 %0; isync" + :: "r"(((uintptr_t)moea64_pteg_table & ~DMAP_BASE_ADDRESS) + | (uintptr_t)(flsl(moea64_pteg_mask >> 11)))); + } tlbia(); } @@ -433,11 +444,28 @@ moea64_bootstrap_native(mmu_t mmup, vm_offset_t kernel * as a measure of last resort. We do this a couple times. */ - moea64_pteg_table = (struct lpte *)moea64_bootstrap_alloc(size, size); + if (cpu_features2 & PPC_FEATURE2_ARCH_3_00) { + moea64_part_table = + (struct pate *)moea64_bootstrap_alloc(PART_SIZE, PART_SIZE); + if (hw_direct_map) + moea64_part_table = + (struct pate *)PHYS_TO_DMAP((vm_offset_t)moea64_part_table); + } + /* + * PTEG table must be aligned on a 256k boundary, but can be placed + * anywhere with that alignment. + */ + moea64_pteg_table = (struct lpte *)moea64_bootstrap_alloc(size, 256*1024); if (hw_direct_map) moea64_pteg_table = (struct lpte *)PHYS_TO_DMAP((vm_offset_t)moea64_pteg_table); DISABLE_TRANS(msr); + if (cpu_features2 & PPC_FEATURE2_ARCH_3_00) { + bzero(__DEVOLATILE(void *, moea64_part_table), PART_SIZE); + moea64_part_table[0].pagetab = + ((uintptr_t)moea64_pteg_table & ~DMAP_BASE_ADDRESS) | + (uintptr_t)(flsl((moea64_pteg_count - 1) >> 11)); + } bzero(__DEVOLATILE(void *, moea64_pteg_table), moea64_pteg_count * sizeof(struct lpteg)); ENABLE_TRANS(msr); Modified: head/sys/powerpc/include/pte.h ============================================================================== --- head/sys/powerpc/include/pte.h Sat May 5 15:48:39 2018 (r333272) +++ head/sys/powerpc/include/pte.h Sat May 5 16:00:02 2018 (r333273) @@ -64,6 +64,12 @@ struct lpteg { struct lpte pt[8]; }; +/* Partition table entry */ +struct pate { + u_int64_t pagetab; + u_int64_t proctab; +}; + #endif /* LOCORE */ /* 32-bit PTE definitions */ Modified: head/sys/powerpc/include/spr.h ============================================================================== --- head/sys/powerpc/include/spr.h Sat May 5 15:48:39 2018 (r333272) +++ head/sys/powerpc/include/spr.h Sat May 5 16:00:02 2018 (r333273) @@ -243,6 +243,7 @@ #define LPCR_LPES 0x008 /* Bit 60 */ #define SPR_LPID 0x13f /* Logical Partitioning Control */ +#define SPR_PTCR 0x1d0 /* Partition Table Control Register */ #define SPR_IBAT0U 0x210 /* .68 Instruction BAT Reg 0 Upper */ #define SPR_IBAT0U 0x210 /* .6. Instruction BAT Reg 0 Upper */ #define SPR_IBAT0L 0x211 /* .6. Instruction BAT Reg 0 Lower */ Modified: head/sys/powerpc/pseries/mmu_phyp.c ============================================================================== --- head/sys/powerpc/pseries/mmu_phyp.c Sat May 5 15:48:39 2018 (r333272) +++ head/sys/powerpc/pseries/mmu_phyp.c Sat May 5 16:00:02 2018 (r333273) @@ -403,7 +403,7 @@ mphyp_pte_insert(mmu_t mmu, struct pvo_entry *pvo) return (0); } KASSERT(result == H_PTEG_FULL, ("Page insertion error: %ld " - "(ptegidx: %#zx/%#x, PTE %#lx/%#lx", result, pvo->pvo_pte.slot, + "(ptegidx: %#zx/%#lx, PTE %#lx/%#lx", result, pvo->pvo_pte.slot, moea64_pteg_count, pte.pte_hi, pte.pte_lo)); /* From owner-svn-src-head@freebsd.org Sat May 5 16:08:16 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6332AFB213F; Sat, 5 May 2018 16:08:16 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-qk0-x243.google.com (mail-qk0-x243.google.com [IPv6:2607:f8b0:400d:c09::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 F38CD86902; Sat, 5 May 2018 16:08:15 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-qk0-x243.google.com with SMTP id d74so18925252qkg.4; Sat, 05 May 2018 09:08:15 -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=23tVexABLoi4rZXuFdeInEykvLBzVi8tiFCvwT4bI34=; b=spqOq3UpTNZ0NSCCvFg25D8ny1x3Gyv5hEQewEQmcjmhBd4D4OcGdU3LsM01nHvHnY EuxBEM+Eksf18NgSzc7kj8b6nfvTtkBwB20aPF1pRzqDBQsTPeEfjtSWqE2m3GhnLL7w JaRGngJJbwncZbJR3U3i6G3QQvzEVvQLQRhq5oAMf3juvP7xdRx1qV6HUw/Z/cIbSO/3 eC+vsJDypo6MFdSNGZWUlGAF6+QiKEgfUIfpzzOetaoar9NhdPYV0u0iw9rgU4sKfCw+ Pwkvui9jM262P8UjK7ip6JxyG8ULLnabeqNYDoVfQzuZWS1dBUNU9mKOqhQRhMGO4b84 rbTw== 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=23tVexABLoi4rZXuFdeInEykvLBzVi8tiFCvwT4bI34=; b=NHHS99yCbQlVY1kDKYj0Ce+Et3omo5Gt1tKBz5EANGGqqVi0L+qQ56p6ZqCm1Tuj0F 8FP82Z9s3g6f2a+oFGjhfvPGFkNwf+yfmWYQe1Uw+2hramzdumtdgMspq/xt/0khOdhR 2FhYl0vsjGJjlOCbwRM+hF1oYbJ3+5Pm/B9ifSB4rQYU1wIkZ+IvGarTmsl9bgA/3TvU wUynewngKj/0whff8jDL40QgF+BwocbLZiEIWUCl9gV/xejIBLXVRzuaONZFGNz9IMpN ipky73lywqE65ds1bT3EnPghXoDNQQ78koD/3uKst+WYAL+Q/j1z1y4sXWsgRG3X0dHw h4GA== X-Gm-Message-State: ALQs6tBd6bouzcZehAdb+pq+rLFuVCoDfa4h9dxle3ADnb34oDPTF2MO IsXk5+5gpxJMYba4czlu9Eikjmg/pZbQpdTyNV2Bsg== X-Google-Smtp-Source: AB8JxZomAH58B2xKBWFSJ7mZ4VQkazX+/tPn3SDf/B/Wme+u0p+ryWvrbg0mqVi3OQiyc8q+LzrX8wE/vjjJNdaRldk= X-Received: by 10.55.104.81 with SMTP id d78mr24424591qkc.127.1525536494946; Sat, 05 May 2018 09:08:14 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.28.74 with HTTP; Sat, 5 May 2018 09:08:14 -0700 (PDT) In-Reply-To: <20180505090954.X1307@besplex.bde.org> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> <20180505090954.X1307@besplex.bde.org> From: Mateusz Guzik Date: Sat, 5 May 2018 18:08:14 +0200 Message-ID: Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys To: Bruce Evans Cc: Conrad Meyer , Brooks Davis , src-committers , svn-src-all@freebsd.org, svn-src-head@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 16:08:16 -0000 On Sat, May 5, 2018 at 2:38 AM, Bruce Evans wrote: I don't believe the claimed speeding of using the optimized bcopy() > in cpu_fetch_sycall_args() on amd64 (r333241). This changes the copy > size from a variable to 6*8 bytes. It is claimed to speed up getppid() > from 7.31M/sec to 10.65M/sec on Skylake. But here it and other changes > in the last week give a small pessimization for getpid() on Haswell > at 4.08GHz: last week, 100M getpid()'s took 8.27 seconds (12.09M/sec). > Now they take 8.30 seconds (12.05M/sec). (This is with very old > libraries, so there is no possibility of getpid() being done in > userland.) 0.03 seconds is 122.4M cycles. So the speed difference > is 1.224 cycles. Here the timing has a resolution of only 0.01 seconds, > so most digits in this 1.224 are noise, but the difference is apparently > a single cycle. I would have expected more like the "rep movs*" setup > overhead of 25 cycles. > > The mail below only deals with performance claims on amd64. I'll see about gcc 4.2.1 vs 32-bit archs later and other claims later. It is unclear to me whether you actually benchmarked syscall performance before and after the change nor how you measured a slowdown in getpid. This mail outlines what was tested and how. If you want, you can mail me off list and we can arrange so that you get root access to the test box and can measure things yourself, boot your own kernel and whatnot. My preferred way of measurement is with this suite: https://github.com/antonblanchard/will-it-scale Unfortunately it requires a little bit of patching to setup. Upside is cheap processing: there is a dedicated process/thread which collects results once a second, other than that the processes/threads running the test only do the test and bump the iteration counter. getppid looks like this: while (1) { getppid(); (*iterations)++; } If you are interested in trying it out yourself without getting access to the box in question I'm happy to provide a bundle which should be easily compilable. Perhaps you are using the tool which can be found here: tools/tools/syscall_timing It reports significantly lower numbers (even 20% less) because the test loop itself has just more overhead. For the first testing method results are as I wrote in the commit message, with one caveat that I disabled frequency scaling and they went down a little bit (i.e. NOT boosted freq, but having it disabled makes things tad bit slower; *boosted* numbers are significantly bigger but also not reliable). The syscall path has long standing pessimization of using a function pointer to get to the arguments. This fact was utilized to provide different implementations switchable at runtime (thanks to kgdb -w and the set command). The variants include: 1. cpu_fetch_syscall_args This is the routine as present in head, i.e. with inlined memcpy 2. cpu_fetch_syscall_args_bcopy State prior to my changes, i.e. a bcopy call with a variable size 3. cpu_fetch_syscall_args_oolmemcpy Forced to not be inlined memcpy with a constant size, the code itself is the same as for regular memcpy 4. cpu_fetch_syscall_args_oolmemcpy_es Forced to not be inlined memcpy with a constant size, the code itself was modified to utilize the 'Enhanced REP MOVSB/STOSB' bit present on Intel cpus made past 2011 or so. The code can be found here: https://people.freebsd.org/~mjg/copyhacks.diff (note: declarations where not added, so WERROR= or similar is needed to get this to compile) Variants were switched at runtime like this: # kgdb -w (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args_bcopy The frequency is fixed with: # sysctl dev.cpu.0.freq=2100 PTI was disabled (vm.pmap.pti=0 in loader.conf). Now, quick numbers from will it scale: (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args_bcopy min:7017152 max:7017152 total:7017152 min:7023115 max:7023115 total:7023115 min:7018879 max:7018879 total:7018879 (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args min:9914511 max:9914511 total:9914511 min:9915234 max:9915234 total:9915234 min:9914583 max:9914583 total:9914583 But perhaps you don't trust this tool and prefer the in-base one. Note higher overhead of the test infra, thus lower numbers. (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args_bcopy getppid 20 1.061986919 6251542 0.000000169 (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args_oolmemcpy getppid 79 1.062522431 6245666 0.000000170 (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args_oolmemcpy_es getppid 107 1.059988384 7538473 0.000000140 (kgdb) set elf64_freebsd_sysvec.sv_fetch_syscall_args=cpu_fetch_syscall_args getppid 130 1.059987532 8057928 0.000000131 As you can see the original code (doing bcopy) is way slower than the inlined variant. Not taking advantage of the EMRS bit can be now fixed at runtime thanks to recently landed ifunc support. bcopy code can be further depessimized: ENTRY(bcopy) PUSH_FRAME_POINTER xchgq %rsi,%rdi xchg is known to be slow, the preferred way is to swap registers "by hand". the fact that the func always has to do is is a bug on its own. Interestingly memmove *does not have* to do it, so this provides even more reasons to just remove this function in the first place. movq %rdi,%rax subq %rsi,%rax cmpq %rcx,%rax /* overlapping && src < dst? */ jb 1f Avoidable (for memcpy-compatible callers) branch, although statically predicted as not taken (memcpy friendly). shrq $3,%rcx /* copy by 64-bit words */ rep movsq movq %rdx,%rcx andq $7,%rcx /* any bytes left? */ rep movsb The old string copy. Note that reordering andq prior to rep movsb can help some microarchitectures. The movsq -> movsb combo induces significant stalls in the cpu frontend. If the target size is a multiple of 8 and is known at compilation time, we can get away with calling a variant which only deals with this case and thus avoid the extra penalty. Either way, the win *is here* and is definitely not in the range of 3%. -- Mateusz Guzik From owner-svn-src-head@freebsd.org Sat May 5 16:14:40 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1A6B1FB2465; Sat, 5 May 2018 16:14:40 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-qk0-x242.google.com (mail-qk0-x242.google.com [IPv6:2607:f8b0:400d:c09::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 A183168FBC; Sat, 5 May 2018 16:14:39 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: by mail-qk0-x242.google.com with SMTP id a202so18955555qkg.3; Sat, 05 May 2018 09:14:39 -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=ZHpw9VLX3+uMNAuqU4Bzl5HZUBhwx2C2Ij4CZV2Fsak=; b=bKKxpwEBVIIpyrw8L00yEsUZx/6qCiwYNP1P4T7ufKOurFCnVe97qeiAAyVsoRvn9T Gy+53iX6vQrSVd8LBX+xEVd38bRgninRbnmduvwIeZYhcJ34sQ/AxTE2UDMxcd14BIXJ mPZO+v8JdF3HgY9jFSHxgjNoQkMjQUwuDQkcB0iybNwzQD/lWZ+DLsLKY9Jg+RZd4Qtj vb0uKJdNtSWb6WLe5BwpbiBH6Qfx5oRdSzeyzw6WuJSmxRR2AMq5wJvekMpWWBuzYY7J 2aAc/Ly3HXLLu0O3RzH9x4Tfuz60xAjMg7bZ/okglXEEalNUDN6QZYG+SpiMa0w8EL6g +mUA== 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=ZHpw9VLX3+uMNAuqU4Bzl5HZUBhwx2C2Ij4CZV2Fsak=; b=baug3NpH60/MKNBasH/jWJDD1k16jtZgXxFV/FkOutGL+iYcakTqP9hijxQA5aDruI WqEpuLIu88YWcEt1wxjnxZfUMvyhjRmLj8dnjdw73untODybRj0d4ywon2LF+pNTmE59 EWgbCNmUVWOxocDxS2MIv3EQX14YMUsc/E/0PgClTVkwbnLO8U9SjZrtQcbPoCLllAjj UZKdK9GDsCUMXpbsHaowqlDMyKrcr1RqjhXlUJDEIMwsJDmUXDST3euO9Dz1BKzxhNlR +JsZx5UrFNZAtNxX9FMygS1PqSdZwT9DLJqlDBXmE6Ikd3e7ikeVpNZgXHfHU9ucTc+E xxTA== X-Gm-Message-State: ALQs6tC2Bj7Cbr+RXfHRhnGaMEFZOFSYn0qZilPKIQdW3xHd1hGnNCbR DTrHWhYZSxuvxG5fG5/wVJlDwQ/6RV/HWweExU0= X-Google-Smtp-Source: AB8JxZqAvAe2XnaDnKsA/6WQLtJKl+qL7jGbBny/RIqBm03w+W8eOJAyQ012k/v0Tk0wMPFLw7lF7e5VEkmt90jsgqQ= X-Received: by 10.55.147.66 with SMTP id v63mr27033272qkd.40.1525536878900; Sat, 05 May 2018 09:14:38 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.28.74 with HTTP; Sat, 5 May 2018 09:14:38 -0700 (PDT) In-Reply-To: <20180505120055.GA81833@FreeBSD.org> References: <201805040400.w4440moH025057@repo.freebsd.org> <20180504155301.GA56280@spindle.one-eyed-alien.net> <20180505090954.X1307@besplex.bde.org> <20180505120055.GA81833@FreeBSD.org> From: Mateusz Guzik Date: Sat, 5 May 2018 18:14:38 +0200 Message-ID: Subject: Re: svn commit: r333240 - in head/sys: powerpc/powerpc sys To: Alexey Dokuchaev Cc: Bruce Evans , Conrad Meyer , svn-src-head@freebsd.org, svn-src-all@freebsd.org, Brooks Davis , src-committers Content-Type: text/plain; charset="UTF-8" X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 16:14:40 -0000 On Sat, May 5, 2018 at 2:00 PM, Alexey Dokuchaev wrote: > On Sat, May 05, 2018 at 10:38:29AM +1000, Bruce Evans wrote: > > ... > > Summary: this change wouldn't have passed my review. I have used similar > > changes for 15-20 years but never made them production quality since > there > > are too many variations to consider and testing showed insignificant > > improvements except for micro-benchmarks. > > Perhaps Foundation could sponsor your work to make them production quality > Bruce. :-) > > Seriously though, I'm a bit worried to see these commits happening at the > same time correctness of the implementation is still under discussion and > disputes. Shall I expect that after my next -CURRENT update things would > suddenly stop working? [1] > > ./danfe > > [1] https://bugzilla.redhat.com/show_bug.cgi?id=638477 > > Nothing of the sort was done here. They had a memcpy function which internally behaved like memmove. They changed to behave like mere memcpy (i.e. assume non-overlapping buffers). This caused buggy code to run into trouble. bcopy has memmove semantics and this change keeps that. The only difference is that instead of always generating a call, the compiler is allowed to perform the copy in place in certain cases. This is precisely what happens almost everywhere and it was not happening in the kernel because of a giant hammer -fno-builtin flag (added to reduce changes the compiler will do stuff the kernel does not want to deal with). -- Mateusz Guzik From owner-svn-src-head@freebsd.org Sat May 5 18:21:51 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id B2172FB5F48 for ; Sat, 5 May 2018 18:21:50 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: from smtp.freebsd.org (unknown [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 515F385810; Sat, 5 May 2018 18:21:50 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: from mail-it0-f54.google.com (mail-it0-f54.google.com [209.85.214.54]) (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)) (Authenticated sender: mmacy) by smtp.freebsd.org (Postfix) with ESMTPSA id 23B8D27B09; Sat, 5 May 2018 18:21:50 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: by mail-it0-f54.google.com with SMTP id p3-v6so7051911itc.0; Sat, 05 May 2018 11:21:50 -0700 (PDT) X-Gm-Message-State: ALQs6tDYx4c321g7sWk17NSkPjvRLnKuSl6am9Qd6fNNjc0Z1MZNOvf7 D3NDoELdj3TIdML8X6aYNYvD6i9Gw9yy3Q96rX8= X-Google-Smtp-Source: AB8JxZpBk04cK9EeLND1nfqrKK2ukEiXQHFnGS0fp9tbLKK/BUUZAsCxucgclGRadK6dR2wIA8gcWJYn1sJ5z8MHAuw= X-Received: by 2002:a24:4455:: with SMTP id o82-v6mr32360001ita.4.1525544508501; Sat, 05 May 2018 11:21:48 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:b0c3:0:0:0:0:0 with HTTP; Sat, 5 May 2018 11:21:47 -0700 (PDT) In-Reply-To: <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> From: Matthew Macy Date: Sat, 5 May 2018 11:21:47 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys: TRAP 12 To: "O. Hartmann" , bde@freebsd.org Cc: Stephen Hurd , "O. Hartmann" , 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.25 Precedence: list List-Id: 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, 05 May 2018 18:21:51 -0000 pho@ and sbruno@ tested the patch before commit, I can't readily reproduce even though the detach path should be common enough. Please tell me if this helps: https://people.freebsd.org/~mmacy/inpcb.diff Thanks. On Sat, May 5, 2018 at 2:01 AM, O. Hartmann wrote= : > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > Am Thu, 3 May 2018 22:23:52 +0200 > "O. Hartmann" schrieb: > > > I'm not familiar with kernel debugging, so there are some struggles. > > After compiling a debugging kernel on > > Version String: FreeBSD 12.0-CURRENT #2 r333269: Sat May 5 08:10:32 CEST= 2018 > > Panic String: Lock tcp not exclusively locked @ /usr/src/sys/netinet/in_p= cb.c:1391 > > > And this is what I can provide you with: > > > Reading symbols from /usr/obj/usr/src/amd64.amd64/sys/WALHALL-DEBUG/kerne= l.full...done. > > Unread portion of the kernel message buffer: > panic: Lock tcp not exclusively locked @ /usr/src/sys/netinet/in_pcb.c:13= 91 > > cpuid =3D 4 > time =3D 1525510291 > KDB: stack backtrace: > db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00e48= 5e670 > vpanic() at vpanic+0x1a3/frame 0xfffffe00e485e6d0 > panic() at panic+0x43/frame 0xfffffe00e485e730 > _rw_wunlock_cookie() at _rw_wunlock_cookie+0x137/frame 0xfffffe00e485e760 > in_pcbfree() at in_pcbfree+0x51a/frame 0xfffffe00e485e7b0 > tcp_usr_detach() at tcp_usr_detach+0x15e/frame 0xfffffe00e485e7f0 > sofree() at sofree+0x2f4/frame 0xfffffe00e485e840 > soclose() at soclose+0x387/frame 0xfffffe00e485e8b0 > closef() at closef+0x1f5/frame 0xfffffe00e485e940 > closefp() at closefp+0xa0/frame 0xfffffe00e485e980 > amd64_syscall() at amd64_syscall+0x6d3/frame 0xfffffe00e485eab0 > fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe00e485ea= b0 > - --- syscall (6, FreeBSD ELF64, sys_close), rip =3D 0x80111adda, rsp =3D= 0x7fffdf3f7228, rbp =3D > 0x7fffdf3f7240 --- KDB: enter: panic > > __curthread () at ./machine/pcpu.h:231 > 231 __asm("movq %%gs:%1,%0" : "=3Dr" (td) > (kgdb) bt > (kgdb) bt > #0 __curthread () at ./machine/pcpu.h:231 > #1 doadump (textdump=3D0) at /usr/src/sys/kern/kern_shutdown.c:365 > #2 0xffffffff80597d5b in db_dump (dummy=3D, dummy2=3D, > dummy3=3D, dummy4=3D) at /usr/src/sys/ddb/db_co= mmand.c:574 > #3 0xffffffff80597ae6 in db_command (last_cmdp=3D, cmd_ta= ble=3D out>, dopager=3D) at /usr/src/sys/ddb/db_command.c:481 #4 > out>0xffffffff80597814 in db_command_loop () at /usr/src/sys/ddb/db_comma= nd.c:534 > #5 0xffffffff8059b04f in db_trap (type=3D, code=3D) > at /usr/src/sys/ddb/db_main.c:250 #6 0xffffffff80924463 in kdb_trap (typ= e=3D3, > code=3D-61456, tf=3D) at /usr/src/sys/kern/subr_kdb.c:697 = #7 > 0xffffffff80c80ab7 in trap (frame=3D0xfffffe00e485e5a0) > at /usr/src/sys/amd64/amd64/trap.c:550 #8 #9 kd= b_enter > (why=3D0xffffffff80dd7b54 "panic", msg=3D) at /usr/src/sys= /kern/subr_kdb.c:479 > #10 0xffffffff808db500 in vpanic (fmt=3D, ap=3D0xfffffe00e= 485e710) > at /usr/src/sys/kern/kern_shutdown.c:851 #11 0xffffffff808db593 in panic > (fmt=3D0xffffffff8125bbd8 "\251\312\332\200\377\377\377\377"= ) > at /usr/src/sys/kern/kern_shutdown.c:789 #12 0xffffffff808d65b7 in __rw_a= ssert > (c=3D0xfffffe00111ee650, what=3D4, file=3D0xffffffff80dc5157 "/usr/src/sy= s/netinet/in_pcb.c", > line=3D1391) at /usr/src/sys/kern/kern_rwlock.c:1426 #13 _rw_wunlock_cook= ie > (c=3D0xfffffe00111ee650, file=3D0xffffffff80dc5157 "/usr/src/sys/netinet/= in_pcb.c", > line=3D1391) at /usr/src/sys/kern/kern_rwlock.c:362 #14 0xffffffff80a68ca= a in in_pcbfree > (inp=3D0xfffff80066058b10) at /usr/src/sys/netinet/in_pcb.c:1391 #15 0xff= ffffff80b09a6e in > tcp_detach (so=3D, inp=3D) > at /usr/src/sys/netinet/tcp_usrreq.c:258 #16 tcp_usr_detach (so=3D) > at /usr/src/sys/netinet/tcp_usrreq.c:289 #17 0xffffffff8097c394 in sofree > (so=3D0xfffff8001988d358) at /usr/src/sys/kern/uipc_socket.c:1032 #18 0xf= fffffff8097d487 in > soclose (so=3D0xfffff8001988d358) at /usr/src/sys/kern/uipc_socket.c:1126= #19 > 0xffffffff80885ad5 in fo_close (fp=3D, td=3D) > at /usr/src/sys/sys/file.h:348 #20 _fdrop (fp=3D, td=3D) > at /usr/src/sys/kern/kern_descrip.c:2957 #21 closef (fp=3D0xfffff80004ef4= eb0, > td=3D0xfffff80019891560) at /usr/src/sys/kern/kern_descrip.c:2538 #22 0xf= fffffff80882920 in > closefp (fdp=3D0xfffff80019553450, fd=3D12, fp=3D0xfffff80004ef4eb0, td= =3D0xfffff80019891560, > holdleaders=3D0) at /usr/src/sys/kern/kern_descrip.c:1208 #23 0xffffffff8= 0c82033 in > syscallenter (td=3D0xfffff80019891560) > at /usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:135 #24 amd64_sysca= ll > (td=3D0xfffff80019891560, traced=3D0) at /usr/src/sys/amd64/amd64/trap.c:= 945 #25 handler called> #26 0x000000080111adda in ?? () Backtrace stopped: Cannot= access memory > at address 0x7fffdf3f7228 (kgdb) > > > > >> -----BEGIN PGP SIGNED MESSAGE----- >> Hash: SHA512 >> >> Am Thu, 3 May 2018 12:53:05 -0700 >> "K. Macy" schrieb: >> >> > Can you give any context on what they're doing? In addition - even on >> > a production kernel it's possible to compile in DDB to at least get a >> > backtrace. Your report only gives us enough information to know that >> >> Not at the moment. The immediate crash corrupted the /usr/src filesystem= so I can not >> recompile a kernel. Every attempt to /etc/netstart the network on the bu= ggy kernel ends >> up in a further destruction, so I stopped at this very moment and hopefu= lly I can >> copy /usr/src from a r33153 box (r333153 is for me the last working revi= sion) via USB >> flash drive and recompile the kernel. But I'll go for r333153 first sinc= e I need the >> server up tomorrow and I'll try on the other box which is also affected,= but also >> equipted with the i350 NIC on which the problem occurs very quickly. >> >> > there is _an_ issue. It's difficult to proceed on this alone. I do >> > have a report from the FreeBSD CI infrastructure that we're looking in >> > to now. With luck that is the same issue. >> > >> > -M >> > >> > On Thu, May 3, 2018 at 12:31 PM, O. Hartmann = wrote: >> > > -----BEGIN PGP SIGNED MESSAGE----- >> > > Hash: SHA512 >> > > >> > > Am Wed, 2 May 2018 19:36:29 +0000 (UTC) >> > > Stephen Hurd schrieb: >> > > >> > >> Author: shurd >> > >> Date: Wed May 2 19:36:29 2018 >> > >> New Revision: 333175 >> > >> URL: https://svnweb.freebsd.org/changeset/base/333175 >> > >> >> > >> Log: >> > >> Separate list manipulation locking from state change in multicast >> > >> >> > >> Multicast incorrectly calls in to drivers with a mutex held causi= ng drivers >> > >> to have to go through all manner of contortions to use a non slee= pable lock. >> > >> Serialize multicast updates instead. >> > >> >> > >> Submitted by: mmacy >> > >> Reviewed by: shurd, sbruno >> > >> Sponsored by: Limelight Networks >> > >> Differential Revision: https://reviews.freebsd.org/D14969 >> > >> >> > >> Modified: >> > >> head/sys/kern/subr_gtaskqueue.c >> > >> head/sys/kern/subr_witness.c >> > >> head/sys/net/if.c >> > >> head/sys/netinet/igmp.c >> > >> head/sys/netinet/igmp_var.h >> > >> head/sys/netinet/in.c >> > >> head/sys/netinet/in_mcast.c >> > >> head/sys/netinet/in_pcb.c >> > >> head/sys/netinet/in_var.h >> > >> head/sys/netinet/ip_carp.c >> > >> head/sys/netinet6/in6.c >> > >> head/sys/netinet6/in6_ifattach.c >> > >> head/sys/netinet6/in6_mcast.c >> > >> head/sys/netinet6/in6_pcb.c >> > >> head/sys/netinet6/in6_var.h >> > >> head/sys/netinet6/mld6.c >> > >> head/sys/netinet6/mld6_var.h >> > >> head/sys/sys/gtaskqueue.h >> > >> >> > >> Modified: head/sys/kern/subr_gtaskqueue.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/kern/subr_gtaskqueue.c Wed May 2 17:41:00 2018 = (r333174) >> > >> +++ head/sys/kern/subr_gtaskqueue.c Wed May 2 19:36:29 2018 = (r333175) >> > >> @@ -53,6 +53,7 @@ static void gtaskqueue_thread_enqueue(void *); >> > >> static void gtaskqueue_thread_loop(void *arg); >> > >> >> > >> TASKQGROUP_DEFINE(softirq, mp_ncpus, 1); >> > >> +TASKQGROUP_DEFINE(config, 1, 1); >> > >> >> > >> struct gtaskqueue_busy { >> > >> struct gtask *tb_running; >> > >> @@ -662,7 +663,7 @@ SYSINIT(tqg_record_smp_started, SI_SUB_SMP, SI_= ORDER_F >> > >> >> > >> void >> > >> taskqgroup_attach(struct taskqgroup *qgroup, struct grouptask *gta= sk, >> > >> - void *uniq, int irq, char *name) >> > >> + void *uniq, int irq, const char *name) >> > >> { >> > >> cpuset_t mask; >> > >> int qid, error; >> > >> @@ -976,4 +977,13 @@ void >> > >> taskqgroup_destroy(struct taskqgroup *qgroup) >> > >> { >> > >> >> > >> +} >> > >> + >> > >> +void >> > >> +taskqgroup_config_gtask_init(void *ctx, struct grouptask *gtask, g= task_fn_t *fn, >> > >> + const char *name) >> > >> +{ >> > >> + >> > >> + GROUPTASK_INIT(gtask, 0, fn, ctx); >> > >> + taskqgroup_attach(qgroup_config, gtask, gtask, -1, name); >> > >> } >> > >> >> > >> Modified: head/sys/kern/subr_witness.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/kern/subr_witness.c Wed May 2 17:41:00 2018 = (r333174) >> > >> +++ head/sys/kern/subr_witness.c Wed May 2 19:36:29 2018 = (r333175) >> > >> @@ -532,18 +532,22 @@ static struct witness_order_list_entry order_= lists[] =3D >> > >> * IPv4 multicast: >> > >> * protocol locks before interface locks, after UDP locks. >> > >> */ >> > >> + { "in_multi_sx", &lock_class_sx }, >> > >> { "udpinp", &lock_class_rw }, >> > >> - { "in_multi_mtx", &lock_class_mtx_sleep }, >> > >> + { "in_multi_list_mtx", &lock_class_mtx_sleep }, >> > >> { "igmp_mtx", &lock_class_mtx_sleep }, >> > >> + { "ifnet_rw", &lock_class_rw }, >> > >> { "if_addr_lock", &lock_class_rw }, >> > >> { NULL, NULL }, >> > >> /* >> > >> * IPv6 multicast: >> > >> * protocol locks before interface locks, after UDP locks. >> > >> */ >> > >> + { "in6_multi_sx", &lock_class_sx }, >> > >> { "udpinp", &lock_class_rw }, >> > >> - { "in6_multi_mtx", &lock_class_mtx_sleep }, >> > >> + { "in6_multi_list_mtx", &lock_class_mtx_sleep }, >> > >> { "mld_mtx", &lock_class_mtx_sleep }, >> > >> + { "ifnet_rw", &lock_class_rw }, >> > >> { "if_addr_lock", &lock_class_rw }, >> > >> { NULL, NULL }, >> > >> /* >> > >> >> > >> Modified: head/sys/net/if.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/net/if.c Wed May 2 17:41:00 2018 (r333174) >> > >> +++ head/sys/net/if.c Wed May 2 19:36:29 2018 (r333175) >> > >> @@ -985,11 +985,13 @@ static void >> > >> if_purgemaddrs(struct ifnet *ifp) >> > >> { >> > >> struct ifmultiaddr *ifma; >> > >> - struct ifmultiaddr *next; >> > >> >> > >> IF_ADDR_WLOCK(ifp); >> > >> - TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, next= ) >> > >> + while (!TAILQ_EMPTY(&ifp->if_multiaddrs)) { >> > >> + ifma =3D TAILQ_FIRST(&ifp->if_multiaddrs); >> > >> + TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link); >> > >> if_delmulti_locked(ifp, ifma, 1); >> > >> + } >> > >> IF_ADDR_WUNLOCK(ifp); >> > >> } >> > >> >> > >> @@ -3429,6 +3431,12 @@ if_addmulti(struct ifnet *ifp, struct sockad= dr *sa, >> > >> struct sockaddr_dl sdl; >> > >> int error; >> > >> >> > >> +#ifdef INET >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> > >> +#endif >> > >> +#ifdef INET6 >> > >> + IN6_MULTI_LIST_UNLOCK_ASSERT(); >> > >> +#endif >> > >> /* >> > >> * If the address is already present, return a new reference = to it; >> > >> * otherwise, allocate storage and set up a new address. >> > >> @@ -3610,6 +3618,9 @@ if_delmulti_ifma(struct ifmultiaddr *ifma) >> > >> struct ifnet *ifp; >> > >> int lastref; >> > >> >> > >> +#ifdef INET >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> > >> +#endif >> > >> ifp =3D ifma->ifma_ifp; >> > >> #ifdef DIAGNOSTIC >> > >> if (ifp =3D=3D NULL) { >> > >> @@ -3711,8 +3722,7 @@ if_delmulti_locked(struct ifnet *ifp, struct = ifmultiad >> > >> if_freemulti(ll_ifma); >> > >> } >> > >> } >> > >> - >> > >> - if (ifp !=3D NULL) >> > >> + if (ifp !=3D NULL && detaching =3D=3D 0) >> > >> TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link); >> > >> >> > >> if_freemulti(ifma); >> > >> >> > >> Modified: head/sys/netinet/igmp.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/netinet/igmp.c Wed May 2 17:41:00 2018 (r333= 174) >> > >> +++ head/sys/netinet/igmp.c Wed May 2 19:36:29 2018 (r333= 175) >> > >> @@ -136,7 +136,7 @@ static int igmp_v3_enqueue_group_record(= struct mbufq * >> > >> struct in_multi *, const int, const int, const in= t); >> > >> static int igmp_v3_enqueue_filter_change(struct mbufq *, >> > >> struct in_multi *); >> > >> -static void igmp_v3_process_group_timers(struct igmp_ifsoftc *, >> > >> +static void igmp_v3_process_group_timers(struct in_multi_head *, >> > >> struct mbufq *, struct mbufq *, struct in_multi *= , >> > >> const int); >> > >> static int igmp_v3_merge_state_changes(struct in_multi *, >> > >> @@ -162,12 +162,12 @@ static const struct netisr_handler igmp_nh = =3D { >> > >> * themselves are not virtualized. >> > >> * >> > >> * Locking: >> > >> - * * The permitted lock order is: IN_MULTI_LOCK, IGMP_LOCK, IF_AD= DR_LOCK. >> > >> + * * The permitted lock order is: IN_MULTI_LIST_LOCK, IGMP_LOCK, = IF_ADDR_LOCK. >> > >> * Any may be taken independently; if any are held at the same >> > >> * time, the above lock order must be followed. >> > >> * * All output is delegated to the netisr. >> > >> * Now that Giant has been eliminated, the netisr may be inline= d. >> > >> - * * IN_MULTI_LOCK covers in_multi. >> > >> + * * IN_MULTI_LIST_LOCK covers in_multi. >> > >> * * IGMP_LOCK covers igmp_ifsoftc and any global variables in th= is file, >> > >> * including the output queue. >> > >> * * IF_ADDR_LOCK covers if_multiaddrs, which is used for a varie= ty of >> > >> @@ -441,7 +441,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> > >> if (error) >> > >> return (error); >> > >> >> > >> - IN_MULTI_LOCK(); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> IGMP_LOCK(); >> > >> >> > >> if (name[0] <=3D 0 || name[0] > V_if_index) { >> > >> @@ -475,7 +475,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> > >> >> > >> out_locked: >> > >> IGMP_UNLOCK(); >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> return (error); >> > >> } >> > >> >> > >> @@ -586,7 +586,6 @@ igi_alloc_locked(/*const*/ struct ifnet *ifp) >> > >> igi->igi_qi =3D IGMP_QI_INIT; >> > >> igi->igi_qri =3D IGMP_QRI_INIT; >> > >> igi->igi_uri =3D IGMP_URI_INIT; >> > >> - SLIST_INIT(&igi->igi_relinmhead); >> > >> mbufq_init(&igi->igi_gq, IGMP_MAX_RESPONSE_PACKETS); >> > >> >> > >> LIST_INSERT_HEAD(&V_igi_head, igi, igi_link); >> > >> @@ -612,11 +611,12 @@ igmp_ifdetach(struct ifnet *ifp) >> > >> { >> > >> struct igmp_ifsoftc *igi; >> > >> struct ifmultiaddr *ifma; >> > >> - struct in_multi *inm, *tinm; >> > >> - >> > >> + struct in_multi *inm; >> > >> + struct in_multi_head inm_free_tmp; >> > >> CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)", __func__, ifp, >> > >> ifp->if_xname); >> > >> >> > >> + SLIST_INIT(&inm_free_tmp); >> > >> IGMP_LOCK(); >> > >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igm= p; >> > >> @@ -631,24 +631,15 @@ igmp_ifdetach(struct ifnet *ifp) >> > >> ("%s: ifma_protospec is NULL", __func__))= ; >> > >> #endif >> > >> inm =3D (struct in_multi *)ifma->ifma_protosp= ec; >> > >> - if (inm->inm_state =3D=3D IGMP_LEAVING_MEMBER= ) { >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinmhea= d, >> > >> - inm, inm_nrele); >> > >> - } >> > >> + if (inm->inm_state =3D=3D IGMP_LEAVING_MEMBER= ) >> > >> + inm_rele_locked(&inm_free_tmp, inm); >> > >> inm_clear_recorded(inm); >> > >> } >> > >> IF_ADDR_RUNLOCK(ifp); >> > >> - /* >> > >> - * Free the in_multi reference(s) for this IGMP lifec= ycle. >> > >> - */ >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nre= le, >> > >> - tinm) { >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_n= rele); >> > >> - inm_release_locked(inm); >> > >> - } >> > >> + inm_release_list_deferred(&inm_free_tmp); >> > >> } >> > >> - >> > >> IGMP_UNLOCK(); >> > >> + >> > >> } >> > >> >> > >> /* >> > >> @@ -684,11 +675,6 @@ igi_delete_locked(const struct ifnet *ifp) >> > >> mbufq_drain(&igi->igi_gq); >> > >> >> > >> LIST_REMOVE(igi, igi_link); >> > >> - >> > >> - KASSERT(SLIST_EMPTY(&igi->igi_relinmhead), >> > >> - ("%s: there are dangling in_multi referen= ces", >> > >> - __func__)); >> > >> - >> > >> free(igi, M_IGMP); >> > >> return; >> > >> } >> > >> @@ -722,7 +708,7 @@ igmp_input_v1_query(struct ifnet *ifp, const st= ruct ip >> > >> } >> > >> IGMPSTAT_INC(igps_rcv_gen_queries); >> > >> >> > >> - IN_MULTI_LOCK(); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> IGMP_LOCK(); >> > >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igm= p; >> > >> @@ -778,7 +764,7 @@ igmp_input_v1_query(struct ifnet *ifp, const st= ruct ip >> > >> >> > >> out_locked: >> > >> IGMP_UNLOCK(); >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> >> > >> return (0); >> > >> } >> > >> @@ -816,7 +802,7 @@ igmp_input_v2_query(struct ifnet *ifp, const st= ruct ip >> > >> IGMPSTAT_INC(igps_rcv_group_queries); >> > >> } >> > >> >> > >> - IN_MULTI_LOCK(); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> IGMP_LOCK(); >> > >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igm= p; >> > >> @@ -872,7 +858,7 @@ igmp_input_v2_query(struct ifnet *ifp, const st= ruct ip >> > >> >> > >> out_locked: >> > >> IGMP_UNLOCK(); >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> >> > >> return (0); >> > >> } >> > >> @@ -899,7 +885,7 @@ igmp_v2_update_group(struct in_multi *inm, cons= t int t >> > >> CTR4(KTR_IGMPV3, "0x%08x: %s/%s timer=3D%d", __func__, >> > >> ntohl(inm->inm_addr.s_addr), inm->inm_ifp->if_xname, time= r); >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> switch (inm->inm_state) { >> > >> case IGMP_NOT_MEMBER: >> > >> @@ -1011,7 +997,7 @@ igmp_input_v3_query(struct ifnet *ifp, const s= truct ip >> > >> IGMPSTAT_INC(igps_rcv_gsr_queries); >> > >> } >> > >> >> > >> - IN_MULTI_LOCK(); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> IGMP_LOCK(); >> > >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igm= p; >> > >> @@ -1092,7 +1078,7 @@ igmp_input_v3_query(struct ifnet *ifp, const = struct ip >> > >> >> > >> out_locked: >> > >> IGMP_UNLOCK(); >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> >> > >> return (0); >> > >> } >> > >> @@ -1109,7 +1095,7 @@ igmp_input_v3_group_query(struct in_multi *in= m, struct >> > >> int retval; >> > >> uint16_t nsrc; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> retval =3D 0; >> > >> @@ -1246,7 +1232,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*con= st*/ stru >> > >> * If we are a member of this group, and our membership shoul= d be >> > >> * reported, stop our group timer and transition to the 'lazy= ' state. >> > >> */ >> > >> - IN_MULTI_LOCK(); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> > >> if (inm !=3D NULL) { >> > >> struct igmp_ifsoftc *igi; >> > >> @@ -1305,7 +1291,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*con= st*/ stru >> > >> } >> > >> >> > >> out_locked: >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> >> > >> return (0); >> > >> } >> > >> @@ -1373,7 +1359,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*con= st*/ stru >> > >> * reported, and our group timer is pending or about to be re= set, >> > >> * stop our group timer by transitioning to the 'lazy' state. >> > >> */ >> > >> - IN_MULTI_LOCK(); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> > >> if (inm !=3D NULL) { >> > >> struct igmp_ifsoftc *igi; >> > >> @@ -1418,7 +1404,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*con= st*/ stru >> > >> } >> > >> >> > >> out_locked: >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> >> > >> return (0); >> > >> } >> > >> @@ -1647,6 +1633,7 @@ igmp_fasttimo_vnet(void) >> > >> struct igmp_ifsoftc *igi; >> > >> struct ifmultiaddr *ifma; >> > >> struct in_multi *inm; >> > >> + struct in_multi_head inm_free_tmp; >> > >> int loop, uri_fasthz; >> > >> >> > >> loop =3D 0; >> > >> @@ -1662,7 +1649,8 @@ igmp_fasttimo_vnet(void) >> > >> !V_state_change_timers_running) >> > >> return; >> > >> >> > >> - IN_MULTI_LOCK(); >> > >> + SLIST_INIT(&inm_free_tmp); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> IGMP_LOCK(); >> > >> >> > >> /* >> > >> @@ -1720,7 +1708,7 @@ igmp_fasttimo_vnet(void) >> > >> igi->igi_version); >> > >> break; >> > >> case IGMP_VERSION_3: >> > >> - igmp_v3_process_group_timers(igi, &qr= q, >> > >> + igmp_v3_process_group_timers(&inm_fre= e_tmp, &qrq, >> > >> &scq, inm, uri_fasthz); >> > >> break; >> > >> } >> > >> @@ -1728,8 +1716,6 @@ igmp_fasttimo_vnet(void) >> > >> IF_ADDR_RUNLOCK(ifp); >> > >> >> > >> if (igi->igi_version =3D=3D IGMP_VERSION_3) { >> > >> - struct in_multi *tinm; >> > >> - >> > >> igmp_dispatch_queue(&qrq, 0, loop); >> > >> igmp_dispatch_queue(&scq, 0, loop); >> > >> >> > >> @@ -1737,18 +1723,13 @@ igmp_fasttimo_vnet(void) >> > >> * Free the in_multi reference(s) for this >> > >> * IGMP lifecycle. >> > >> */ >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, >> > >> - inm_nrele, tinm) { >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhea= d, >> > >> - inm_nrele); >> > >> - inm_release_locked(inm); >> > >> - } >> > >> + inm_release_list_deferred(&inm_free_tmp); >> > >> } >> > >> } >> > >> >> > >> out_locked: >> > >> IGMP_UNLOCK(); >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> } >> > >> >> > >> /* >> > >> @@ -1760,7 +1741,7 @@ igmp_v1v2_process_group_timer(struct in_multi= *inm, co >> > >> { >> > >> int report_timer_expired; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> if (inm->inm_timer =3D=3D 0) { >> > >> @@ -1802,14 +1783,14 @@ igmp_v1v2_process_group_timer(struct in_mul= ti *inm, co >> > >> * Note: Unlocked read from igi. >> > >> */ >> > >> static void >> > >> -igmp_v3_process_group_timers(struct igmp_ifsoftc *igi, >> > >> +igmp_v3_process_group_timers(struct in_multi_head *inmh, >> > >> struct mbufq *qrq, struct mbufq *scq, >> > >> struct in_multi *inm, const int uri_fasthz) >> > >> { >> > >> int query_response_timer_expired; >> > >> int state_change_retransmit_timer_expired; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> query_response_timer_expired =3D 0; >> > >> @@ -1907,8 +1888,7 @@ igmp_v3_process_group_timers(struct igmp_ifso= ftc *igi, >> > >> if (inm->inm_state =3D=3D IGMP_LEAVING_MEMBER= && >> > >> inm->inm_scrv =3D=3D 0) { >> > >> inm->inm_state =3D IGMP_NOT_MEMBER; >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinmhea= d, >> > >> - inm, inm_nrele); >> > >> + inm_rele_locked(inmh, inm); >> > >> } >> > >> } >> > >> break; >> > >> @@ -1929,7 +1909,7 @@ static void >> > >> igmp_v3_suppress_group_record(struct in_multi *inm) >> > >> { >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> KASSERT(inm->inm_igi->igi_version =3D=3D IGMP_VERSION_3, >> > >> ("%s: not IGMPv3 mode on link", __func__)); >> > >> @@ -2003,13 +1983,15 @@ igmp_v3_cancel_link_timers(struct igmp_ifso= ftc *igi) >> > >> { >> > >> struct ifmultiaddr *ifma; >> > >> struct ifnet *ifp; >> > >> - struct in_multi *inm, *tinm; >> > >> + struct in_multi *inm; >> > >> + struct in_multi_head inm_free_tmp; >> > >> >> > >> CTR3(KTR_IGMPV3, "%s: cancel v3 timers on ifp %p(%s)", __func= __, >> > >> igi->igi_ifp, igi->igi_ifp->if_xname); >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> + SLIST_INIT(&inm_free_tmp); >> > >> >> > >> /* >> > >> * Stop the v3 General Query Response on this link stone dead= . >> > >> @@ -2050,7 +2032,7 @@ igmp_v3_cancel_link_timers(struct igmp_ifsoft= c *igi) >> > >> * message is sent upstream to the old querie= r -- >> > >> * transition to NOT would lose the leave and= race. >> > >> */ >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinmhead, inm, = inm_nrele); >> > >> + inm_rele_locked(&inm_free_tmp, inm); >> > >> /* FALLTHROUGH */ >> > >> case IGMP_G_QUERY_PENDING_MEMBER: >> > >> case IGMP_SG_QUERY_PENDING_MEMBER: >> > >> @@ -2069,10 +2051,8 @@ igmp_v3_cancel_link_timers(struct igmp_ifsof= tc *igi) >> > >> mbufq_drain(&inm->inm_scq); >> > >> } >> > >> IF_ADDR_RUNLOCK(ifp); >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele, tinm= ) { >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele); >> > >> - inm_release_locked(inm); >> > >> - } >> > >> + >> > >> + inm_release_list_deferred(&inm_free_tmp); >> > >> } >> > >> >> > >> /* >> > >> @@ -2199,7 +2179,7 @@ igmp_v1v2_queue_report(struct in_multi *inm, = const int >> > >> struct ip *ip; >> > >> struct mbuf *m; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> ifp =3D inm->inm_ifp; >> > >> @@ -2276,10 +2256,8 @@ igmp_change_state(struct in_multi *inm) >> > >> struct ifnet *ifp; >> > >> int error; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> - >> > >> error =3D 0; >> > >> - >> > >> + IN_MULTI_LOCK_ASSERT(); >> > >> /* >> > >> * Try to detect if the upper layer just asked us to change s= tate >> > >> * for an interface which has now gone away. >> > >> @@ -2379,9 +2357,10 @@ igmp_initial_join(struct in_multi *inm, stru= ct igmp_if >> > >> * group around for the final INCLUDE {} enqueue. >> > >> */ >> > >> if (igi->igi_version =3D=3D IGMP_VERSION_3 && >> > >> - inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) >> > >> - inm_release_locked(inm); >> > >> - >> > >> + inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) { >> > >> + MPASS(inm->inm_refcount > 1); >> > >> + inm_rele_locked(NULL, inm); >> > >> + } >> > >> inm->inm_state =3D IGMP_REPORTING_MEMBER; >> > >> >> > >> switch (igi->igi_version) { >> > >> @@ -2473,7 +2452,7 @@ igmp_handle_state_change(struct in_multi *inm= , struct >> > >> >> > >> ifp =3D inm->inm_ifp; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> KASSERT(igi && igi->igi_ifp =3D=3D ifp, ("%s: inconsistent if= p", __func__)); >> > >> @@ -2531,7 +2510,7 @@ igmp_final_leave(struct in_multi *inm, struct= igmp_ifs >> > >> __func__, ntohl(inm->inm_addr.s_addr), inm->inm_ifp, >> > >> inm->inm_ifp->if_xname); >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> switch (inm->inm_state) { >> > >> @@ -2658,7 +2637,7 @@ igmp_v3_enqueue_group_record(struct mbufq *mq= , struct >> > >> in_addr_t naddr; >> > >> uint8_t mode; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> error =3D 0; >> > >> ifp =3D inm->inm_ifp; >> > >> @@ -3018,7 +2997,7 @@ igmp_v3_enqueue_filter_change(struct mbufq *m= q, struct >> > >> uint8_t mode, now, then; >> > >> rectype_t crt, drt, nrt; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> if (inm->inm_nsrc =3D=3D 0 || >> > >> (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm > 0= )) >> > >> @@ -3221,7 +3200,7 @@ igmp_v3_merge_state_changes(struct in_multi *= inm, stru >> > >> domerge =3D 0; >> > >> recslen =3D 0; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> /* >> > >> @@ -3320,7 +3299,7 @@ igmp_v3_dispatch_general_query(struct igmp_if= softc *ig >> > >> struct in_multi *inm; >> > >> int retval, loop; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IGMP_LOCK_ASSERT(); >> > >> >> > >> KASSERT(igi->igi_version =3D=3D IGMP_VERSION_3, >> > >> @@ -3632,7 +3611,6 @@ DB_SHOW_COMMAND(igi_list, db_show_igi_list) >> > >> db_printf(" qi %u\n", igi->igi_qi); >> > >> db_printf(" qri %u\n", igi->igi_qri); >> > >> db_printf(" uri %u\n", igi->igi_uri); >> > >> - /* SLIST_HEAD(,in_multi) igi_relinmhead */ >> > >> /* struct mbufq igi_gq; */ >> > >> db_printf("\n"); >> > >> } >> > >> >> > >> Modified: head/sys/netinet/igmp_var.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/netinet/igmp_var.h Wed May 2 17:41:00 2018 = (r333174) >> > >> +++ head/sys/netinet/igmp_var.h Wed May 2 19:36:29 2018 = (r333175) >> > >> @@ -214,7 +214,6 @@ struct igmp_ifsoftc { >> > >> uint32_t igi_qi; /* IGMPv3 Query Interval (s) */ >> > >> uint32_t igi_qri; /* IGMPv3 Query Response Interval (s)= */ >> > >> uint32_t igi_uri; /* IGMPv3 Unsolicited Report Interval= (s) */ >> > >> - SLIST_HEAD(,in_multi) igi_relinmhead; /* released groups */ >> > >> struct mbufq igi_gq; /* general query responses qu= eue */ >> > >> }; >> > >> >> > >> >> > >> Modified: head/sys/netinet/in.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/netinet/in.c Wed May 2 17:41:00 2018 (r333= 174) >> > >> +++ head/sys/netinet/in.c Wed May 2 19:36:29 2018 (r333= 175) >> > >> @@ -632,12 +632,10 @@ in_difaddr_ioctl(u_long cmd, caddr_t data, st= ruct ifne >> > >> struct in_ifinfo *ii; >> > >> >> > >> ii =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET]); >> > >> - IN_MULTI_LOCK(); >> > >> if (ii->ii_allhosts) { >> > >> - (void)in_leavegroup_locked(ii->ii_allhosts, N= ULL); >> > >> + (void)in_leavegroup(ii->ii_allhosts, NULL); >> > >> ii->ii_allhosts =3D NULL; >> > >> } >> > >> - IN_MULTI_UNLOCK(); >> > >> } >> > >> >> > >> IF_ADDR_WLOCK(ifp); >> > >> @@ -994,11 +992,12 @@ in_broadcast(struct in_addr in, struct ifnet = *ifp) >> > >> void >> > >> in_ifdetach(struct ifnet *ifp) >> > >> { >> > >> - >> > >> + IN_MULTI_LOCK(); >> > >> in_pcbpurgeif0(&V_ripcbinfo, ifp); >> > >> in_pcbpurgeif0(&V_udbinfo, ifp); >> > >> in_pcbpurgeif0(&V_ulitecbinfo, ifp); >> > >> in_purgemaddrs(ifp); >> > >> + IN_MULTI_UNLOCK(); >> > >> } >> > >> >> > >> /* >> > >> @@ -1011,12 +1010,12 @@ in_ifdetach(struct ifnet *ifp) >> > >> static void >> > >> in_purgemaddrs(struct ifnet *ifp) >> > >> { >> > >> - LIST_HEAD(,in_multi) purgeinms; >> > >> - struct in_multi *inm, *tinm; >> > >> + struct in_multi_head purgeinms; >> > >> + struct in_multi *inm; >> > >> struct ifmultiaddr *ifma; >> > >> >> > >> - LIST_INIT(&purgeinms); >> > >> - IN_MULTI_LOCK(); >> > >> + SLIST_INIT(&purgeinms); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> >> > >> /* >> > >> * Extract list of in_multi associated with the detaching ifp >> > >> @@ -1034,17 +1033,13 @@ in_purgemaddrs(struct ifnet *ifp) >> > >> ("%s: ifma_protospec is NULL", __func__)); >> > >> #endif >> > >> inm =3D (struct in_multi *)ifma->ifma_protospec; >> > >> - LIST_INSERT_HEAD(&purgeinms, inm, inm_link); >> > >> + inm_rele_locked(&purgeinms, inm); >> > >> } >> > >> IF_ADDR_RUNLOCK(ifp); >> > >> >> > >> - LIST_FOREACH_SAFE(inm, &purgeinms, inm_link, tinm) { >> > >> - LIST_REMOVE(inm, inm_link); >> > >> - inm_release_locked(inm); >> > >> - } >> > >> + inm_release_list_deferred(&purgeinms); >> > >> igmp_ifdetach(ifp); >> > >> - >> > >> - IN_MULTI_UNLOCK(); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> } >> > >> >> > >> struct in_llentry { >> > >> >> > >> Modified: head/sys/netinet/in_mcast.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/netinet/in_mcast.c Wed May 2 17:41:00 2018 = (r333174) >> > >> +++ head/sys/netinet/in_mcast.c Wed May 2 19:36:29 2018 = (r333175) >> > >> @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); >> > >> #include >> > >> #include >> > >> #include >> > >> +#include >> > >> #include >> > >> >> > >> #include >> > >> @@ -59,6 +60,8 @@ __FBSDID("$FreeBSD$"); >> > >> #include >> > >> #include >> > >> >> > >> +#include >> > >> + >> > >> #include >> > >> #include >> > >> #include >> > >> @@ -91,18 +94,24 @@ static MALLOC_DEFINE(M_IPMSOURCE, "ip_msource", >> > >> >> > >> /* >> > >> * Locking: >> > >> - * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LOCK, IGMP_LOCK, IF= _ADDR_LOCK. >> > >> + * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LIST_LOCK, IGMP_LOC= K, IF_ADDR_LOCK. >> > >> * - The IF_ADDR_LOCK is implicitly taken by inm_lookup() earlier,= however >> > >> * it can be taken by code in net/if.c also. >> > >> * - ip_moptions and in_mfilter are covered by the INP_WLOCK. >> > >> * >> > >> - * struct in_multi is covered by IN_MULTI_LOCK. There isn't strict= ly >> > >> + * struct in_multi is covered by IN_MULTI_LIST_LOCK. There isn't s= trictly >> > >> * any need for in_multi itself to be virtualized -- it is bound t= o an ifp >> > >> * anyway no matter what happens. >> > >> */ >> > >> -struct mtx in_multi_mtx; >> > >> -MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DEF); >> > >> +struct mtx in_multi_list_mtx; >> > >> +MTX_SYSINIT(in_multi_mtx, &in_multi_list_mtx, "in_multi_list_mtx",= MTX_DEF); >> > >> >> > >> +struct mtx in_multi_free_mtx; >> > >> +MTX_SYSINIT(in_multi_free_mtx, &in_multi_free_mtx, "in_multi_free_= mtx", MTX_DEF); >> > >> + >> > >> +struct sx in_multi_sx; >> > >> +SX_SYSINIT(in_multi_sx, &in_multi_sx, "in_multi_sx"); >> > >> + >> > >> /* >> > >> * Functions with non-static linkage defined in this file should b= e >> > >> * declared in in_var.h: >> > >> @@ -151,6 +160,7 @@ static int inm_is_ifp_detached(const str= uct in_multi * >> > >> static int inm_merge(struct in_multi *, /*const*/ struct in_mfil= ter *); >> > >> static void inm_purge(struct in_multi *); >> > >> static void inm_reap(struct in_multi *); >> > >> +static void inm_release(struct in_multi *); >> > >> static struct ip_moptions * >> > >> inp_findmoptions(struct inpcb *); >> > >> static void inp_freemoptions_internal(struct ip_moptions *); >> > >> @@ -216,6 +226,65 @@ inm_is_ifp_detached(const struct in_multi *inm= ) >> > >> } >> > >> #endif >> > >> >> > >> +static struct grouptask free_gtask; >> > >> +static struct in_multi_head inm_free_list; >> > >> +static void inm_release_task(void *arg __unused); >> > >> +static void inm_init(void) >> > >> +{ >> > >> + SLIST_INIT(&inm_free_list); >> > >> + taskqgroup_config_gtask_init(NULL, &free_gtask, inm_release_t= ask, "inm >> > >> release task"); +} >> > >> + >> > >> +SYSINIT(inm_init, SI_SUB_SMP + 1, SI_ORDER_FIRST, >> > >> + inm_init, NULL); >> > >> + >> > >> + >> > >> +void >> > >> +inm_release_list_deferred(struct in_multi_head *inmh) >> > >> +{ >> > >> + >> > >> + if (SLIST_EMPTY(inmh)) >> > >> + return; >> > >> + mtx_lock(&in_multi_free_mtx); >> > >> + SLIST_CONCAT(&inm_free_list, inmh, in_multi, inm_nrele); >> > >> + mtx_unlock(&in_multi_free_mtx); >> > >> + GROUPTASK_ENQUEUE(&free_gtask); >> > >> +} >> > >> + >> > >> +void >> > >> +inm_release_deferred(struct in_multi *inm) >> > >> +{ >> > >> + struct in_multi_head tmp; >> > >> + >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> + MPASS(inm->inm_refcount > 0); >> > >> + if (--inm->inm_refcount =3D=3D 0) { >> > >> + SLIST_INIT(&tmp); >> > >> + inm->inm_ifma->ifma_protospec =3D NULL; >> > >> + SLIST_INSERT_HEAD(&tmp, inm, inm_nrele); >> > >> + inm_release_list_deferred(&tmp); >> > >> + } >> > >> +} >> > >> + >> > >> +static void >> > >> +inm_release_task(void *arg __unused) >> > >> +{ >> > >> + struct in_multi_head inm_free_tmp; >> > >> + struct in_multi *inm, *tinm; >> > >> + >> > >> + SLIST_INIT(&inm_free_tmp); >> > >> + mtx_lock(&in_multi_free_mtx); >> > >> + SLIST_CONCAT(&inm_free_tmp, &inm_free_list, in_multi, inm_nre= le); >> > >> + mtx_unlock(&in_multi_free_mtx); >> > >> + IN_MULTI_LOCK(); >> > >> + SLIST_FOREACH_SAFE(inm, &inm_free_tmp, inm_nrele, tinm) { >> > >> + SLIST_REMOVE_HEAD(&inm_free_tmp, inm_nrele); >> > >> + MPASS(inm); >> > >> + inm_release(inm); >> > >> + } >> > >> + IN_MULTI_UNLOCK(); >> > >> +} >> > >> + >> > >> /* >> > >> * Initialize an in_mfilter structure to a known state at t0, t1 >> > >> * with an empty source filter list. >> > >> @@ -232,7 +301,7 @@ imf_init(struct in_mfilter *imf, const int st0,= const >> > >> /* >> > >> * Function for looking up an in_multi record for an IPv4 multicas= t address >> > >> * on a given interface. ifp must be valid. If no record found, re= turn NULL. >> > >> - * The IN_MULTI_LOCK and IF_ADDR_LOCK on ifp must be held. >> > >> + * The IN_MULTI_LIST_LOCK and IF_ADDR_LOCK on ifp must be held. >> > >> */ >> > >> struct in_multi * >> > >> inm_lookup_locked(struct ifnet *ifp, const struct in_addr ina) >> > >> @@ -240,7 +309,7 @@ inm_lookup_locked(struct ifnet *ifp, const stru= ct in_a >> > >> struct ifmultiaddr *ifma; >> > >> struct in_multi *inm; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IF_ADDR_LOCK_ASSERT(ifp); >> > >> >> > >> inm =3D NULL; >> > >> @@ -264,7 +333,7 @@ inm_lookup(struct ifnet *ifp, const struct in_a= ddr ina >> > >> { >> > >> struct in_multi *inm; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> IF_ADDR_RLOCK(ifp); >> > >> inm =3D inm_lookup_locked(ifp, ina); >> > >> IF_ADDR_RUNLOCK(ifp); >> > >> @@ -451,7 +520,7 @@ in_getmulti(struct ifnet *ifp, const struct in_= addr *g >> > >> IN_MULTI_LOCK_ASSERT(); >> > >> >> > >> ii =3D (struct in_ifinfo *)ifp->if_afdata[AF_INET]; >> > >> - >> > >> + IN_MULTI_LIST_LOCK(); >> > >> inm =3D inm_lookup(ifp, *group); >> > >> if (inm !=3D NULL) { >> > >> /* >> > >> @@ -460,11 +529,13 @@ in_getmulti(struct ifnet *ifp, const struct i= n_addr *g >> > >> */ >> > >> KASSERT(inm->inm_refcount >=3D 1, >> > >> ("%s: bad refcount %d", __func__, inm->inm_refcou= nt)); >> > >> - ++inm->inm_refcount; >> > >> + inm_acquire_locked(inm); >> > >> *pinm =3D inm; >> > >> - return (0); >> > >> } >> > >> - >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> + if (inm !=3D NULL) >> > >> + return (0); >> > >> + >> > >> memset(&gsin, 0, sizeof(gsin)); >> > >> gsin.sin_family =3D AF_INET; >> > >> gsin.sin_len =3D sizeof(struct sockaddr_in); >> > >> @@ -479,6 +550,7 @@ in_getmulti(struct ifnet *ifp, const struct in_= addr *g >> > >> return (error); >> > >> >> > >> /* XXX ifma_protospec must be covered by IF_ADDR_LOCK */ >> > >> + IN_MULTI_LIST_LOCK(); >> > >> IF_ADDR_WLOCK(ifp); >> > >> >> > >> /* >> > >> @@ -504,10 +576,9 @@ in_getmulti(struct ifnet *ifp, const struct in= _addr *g >> > >> __func__, ifma, inm, inet_ntoa_r(*group, = addrbuf)); >> > >> } >> > >> #endif >> > >> - ++inm->inm_refcount; >> > >> + inm_acquire_locked(inm); >> > >> *pinm =3D inm; >> > >> - IF_ADDR_WUNLOCK(ifp); >> > >> - return (0); >> > >> + goto out_locked; >> > >> } >> > >> >> > >> IF_ADDR_WLOCK_ASSERT(ifp); >> > >> @@ -522,6 +593,7 @@ in_getmulti(struct ifnet *ifp, const struct in_= addr *g >> > >> inm =3D malloc(sizeof(*inm), M_IPMADDR, M_NOWAIT | M_ZERO); >> > >> if (inm =3D=3D NULL) { >> > >> IF_ADDR_WUNLOCK(ifp); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> if_delmulti_ifma(ifma); >> > >> return (ENOMEM); >> > >> } >> > >> @@ -539,8 +611,9 @@ in_getmulti(struct ifnet *ifp, const struct in_= addr *g >> > >> ifma->ifma_protospec =3D inm; >> > >> >> > >> *pinm =3D inm; >> > >> - >> > >> + out_locked: >> > >> IF_ADDR_WUNLOCK(ifp); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> return (0); >> > >> } >> > >> >> > >> @@ -550,36 +623,29 @@ in_getmulti(struct ifnet *ifp, const struct i= n_addr *g >> > >> * If the refcount drops to 0, free the in_multi record and >> > >> * delete the underlying link-layer membership. >> > >> */ >> > >> -void >> > >> -inm_release_locked(struct in_multi *inm) >> > >> +static void >> > >> +inm_release(struct in_multi *inm) >> > >> { >> > >> struct ifmultiaddr *ifma; >> > >> + struct ifnet *ifp; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> - >> > >> CTR2(KTR_IGMPV3, "%s: refcount is %d", __func__, inm->inm_ref= count); >> > >> - >> > >> - if (--inm->inm_refcount > 0) { >> > >> - CTR2(KTR_IGMPV3, "%s: refcount is now %d", __func__, >> > >> - inm->inm_refcount); >> > >> - return; >> > >> - } >> > >> - >> > >> + MPASS(inm->inm_refcount =3D=3D 0); >> > >> CTR2(KTR_IGMPV3, "%s: freeing inm %p", __func__, inm); >> > >> >> > >> ifma =3D inm->inm_ifma; >> > >> + ifp =3D inm->inm_ifp; >> > >> >> > >> /* XXX this access is not covered by IF_ADDR_LOCK */ >> > >> CTR2(KTR_IGMPV3, "%s: purging ifma %p", __func__, ifma); >> > >> - KASSERT(ifma->ifma_protospec =3D=3D inm, >> > >> - ("%s: ifma_protospec !=3D inm", __func__)); >> > >> - ifma->ifma_protospec =3D NULL; >> > >> - >> > >> + if (ifp) >> > >> + CURVNET_SET(ifp->if_vnet); >> > >> inm_purge(inm); >> > >> - >> > >> free(inm, M_IPMADDR); >> > >> >> > >> if_delmulti_ifma(ifma); >> > >> + if (ifp) >> > >> + CURVNET_RESTORE(); >> > >> } >> > >> >> > >> /* >> > >> @@ -592,7 +658,7 @@ inm_clear_recorded(struct in_multi *inm) >> > >> { >> > >> struct ip_msource *ims; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) { >> > >> if (ims->ims_stp) { >> > >> @@ -632,7 +698,7 @@ inm_record_source(struct in_multi *inm, const i= n_addr_ >> > >> struct ip_msource find; >> > >> struct ip_msource *ims, *nims; >> > >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> find.ims_haddr =3D ntohl(naddr); >> > >> ims =3D RB_FIND(ip_msource_tree, &inm->inm_srcs, &find); >> > >> @@ -959,6 +1025,7 @@ inm_merge(struct in_multi *inm, /*const*/ stru= ct in_mf >> > >> schanged =3D 0; >> > >> error =3D 0; >> > >> nsrc1 =3D nsrc0 =3D 0; >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> > >> >> > >> /* >> > >> * Update the source filters first, as this may fail. >> > >> @@ -1165,6 +1232,7 @@ in_joingroup_locked(struct ifnet *ifp, const = struct in >> > >> int error; >> > >> >> > >> IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> > >> >> > >> CTR4(KTR_IGMPV3, "%s: join 0x%08x on %p(%s))", __func__, >> > >> ntohl(gina->s_addr), ifp, ifp->if_xname); >> > >> @@ -1186,7 +1254,7 @@ in_joingroup_locked(struct ifnet *ifp, const = struct in >> > >> CTR1(KTR_IGMPV3, "%s: in_getmulti() failure", __func_= _); >> > >> return (error); >> > >> } >> > >> - >> > >> + IN_MULTI_LIST_LOCK(); >> > >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> > >> error =3D inm_merge(inm, imf); >> > >> if (error) { >> > >> @@ -1201,10 +1269,12 @@ in_joingroup_locked(struct ifnet *ifp, cons= t struct in >> > >> goto out_inm_release; >> > >> } >> > >> >> > >> -out_inm_release: >> > >> + out_inm_release: >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> if (error) { >> > >> + >> > >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, = inm); >> > >> - inm_release_locked(inm); >> > >> + inm_release_deferred(inm); >> > >> } else { >> > >> *pinm =3D inm; >> > >> } >> > >> @@ -1249,6 +1319,7 @@ in_leavegroup_locked(struct in_multi *inm, /*= const*/ s >> > >> error =3D 0; >> > >> >> > >> IN_MULTI_LOCK_ASSERT(); >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> > >> >> > >> CTR5(KTR_IGMPV3, "%s: leave inm %p, 0x%08x/%s, imf %p", __fun= c__, >> > >> inm, ntohl(inm->inm_addr.s_addr), >> > >> @@ -1272,18 +1343,20 @@ in_leavegroup_locked(struct in_multi *inm, = /*const*/ s >> > >> * the transaction, it MUST NOT fail. >> > >> */ >> > >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> > >> + IN_MULTI_LIST_LOCK(); >> > >> error =3D inm_merge(inm, imf); >> > >> KASSERT(error =3D=3D 0, ("%s: failed to merge inm state", __f= unc__)); >> > >> >> > >> CTR1(KTR_IGMPV3, "%s: doing igmp downcall", __func__); >> > >> CURVNET_SET(inm->inm_ifp->if_vnet); >> > >> error =3D igmp_change_state(inm); >> > >> + inm_release_deferred(inm); >> > >> + IN_MULTI_LIST_UNLOCK(); >> > >> CURVNET_RESTORE(); >> > >> if (error) >> > >> CTR1(KTR_IGMPV3, "%s: failed igmp downcall", __func__= ); >> > >> >> > >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); >> > >> - inm_release_locked(inm); >> > >> >> > >> return (error); >> > >> } >> > >> @@ -1315,18 +1388,6 @@ in_addmulti(struct in_addr *ap, struct ifnet= *ifp) >> > >> } >> > >> >> > >> /* >> > >> - * Leave an IPv4 multicast group, assumed to be in exclusive (*,G)= mode. >> > >> - * This KPI is for legacy kernel consumers only. >> > >> - */ >> > >> >> > >> *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** >> > >> _______________________________________________ >> > >> 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" >> > > >> > > >> > > After (around!) this update, some boxes with i350 dual port NICs imm= ediately crash >> > > with Fatal trap 12: page fault and something with >> > > >> > > current process: (isc-worker0006) >> > > >> > > .... >> > > >> > > Those boxes do not have debugging kernel. The symptombs are the same= . Single user >> > > kernel works, but the moment I perform /etc/netstart and any kind of= net traffic >> > > establishes, this crap bails out. >> > > >> > > >> > > - -- >> > > 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). >> > > -----BEGIN PGP SIGNATURE----- >> > > >> > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutjtgAKCRDS528fyFhY >> > > lAkzAf9PhaFTwNhQD2zF7xSHJ2wfvLtoUEjZlzGsusACp1pa7JAfz0Pyv+lm+XNJ >> > > vLElrIf1CmDzuA8yblZ/x/wOVSJkAf9C+50DVEtGq5H/bHSDNwzmqrj8YgB7XpSs >> > > PMRXc+IwIa1Jgi2yM+6TCSNSs1N5bEUhU9Bi8eXy6Y0FSkAZeV+s >> > > =3DS0bC >> > > -----END PGP SIGNATURE----- >> > > _______________________________________________ >> > > 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.o= rg" >> >> >> >> - -- >> O. Hartmann >> >> Ich widerspreche der Nutzung oder =C3=9Cbermittlung meiner Daten f=C3=BC= r >> Werbezwecke oder f=C3=BCr die Markt- oder Meinungsforschung (=C2=A7 28 A= bs. 4 BDSG). >> -----BEGIN PGP SIGNATURE----- >> >> iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutv8wAKCRDS528fyFhY >> lIe1AfwOCAigpXawZ7KAjLNpWjRT4DsrzfqcC57MoziVQyK+X9qoQA2v0plVNpP0 >> FLqh5dkRXiiOLryr9auILUKyLCNyAfwL7cFe1YRX7VnsK5w//8Xm25tJ74CXC8P0 >> gaoSqvDqCKWTj6iN+Q/PjoNohWoIK76tiZAWPjkaHeuFbypPa2G+ >> =3DEpJa >> -----END PGP SIGNATURE----- >> _______________________________________________ >> 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" > > > > - -- > 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 Ab= s. 4 BDSG). > -----BEGIN PGP SIGNATURE----- > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWu1y8gAKCRDS528fyFhY > lFEoAf4iW+4tSAOcG0EQ1/Y2PNqLCX4AnpYTlSlaECxtFlDZ/XbNOw3TyVB9RbQC > qGE9Ux2xQBD48a1Nb1IHVVC9ji7jAgCLOXzKUqmcXkPNvjSgZWZ+Sdyd55ChoLgY > SkyY8FSU3GEDm28WgaXjQ4oJh+7/Ff69NsuDZlt7iC24KZdRKH00 > =3D4bY+ > -----END PGP SIGNATURE----- From owner-svn-src-head@freebsd.org Sat May 5 18:39:55 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 972DDFB63C8; Sat, 5 May 2018 18:39:55 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4707068463; Sat, 5 May 2018 18:39:55 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4166A215DC; Sat, 5 May 2018 18:39:55 +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 w45IdtxN098933; Sat, 5 May 2018 18:39:55 GMT (envelope-from sbruno@FreeBSD.org) Received: (from sbruno@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45IdtoO098932; Sat, 5 May 2018 18:39:55 GMT (envelope-from sbruno@FreeBSD.org) Message-Id: <201805051839.w45IdtoO098932@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sbruno set sender to sbruno@FreeBSD.org using -f From: Sean Bruno Date: Sat, 5 May 2018 18:39:55 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333274 - head/share/mk X-SVN-Group: head X-SVN-Commit-Author: sbruno X-SVN-Commit-Paths: head/share/mk X-SVN-Commit-Revision: 333274 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 18:39:55 -0000 Author: sbruno Date: Sat May 5 18:39:54 2018 New Revision: 333274 URL: https://svnweb.freebsd.org/changeset/base/333274 Log: Remove accidentally committed debug statement that induced the following warning: make[3]: "/usr/src/share/mk/bsd.prog.mk" line 274: warning: duplicate script for target "_scriptsinstall" ignored make[3]: "/usr/src/share/mk/bsd.prog.mk" line 274: warning: using previous script for "_scriptsinstall" defined here Reviewed by: kevans Modified: head/share/mk/bsd.prog.mk Modified: head/share/mk/bsd.prog.mk ============================================================================== --- head/share/mk/bsd.prog.mk Sat May 5 16:00:02 2018 (r333273) +++ head/share/mk/bsd.prog.mk Sat May 5 18:39:54 2018 (r333274) @@ -271,7 +271,6 @@ SCRIPTSGRP_${script:T}?= ${SCRIPTSGRP} SCRIPTSMODE_${script:T}?= ${SCRIPTSMODE} STAGE_AS_${script:T}= ${SCRIPTSDIR_${script:T}}/${SCRIPTSNAME_${script:T}} _scriptsinstall: _SCRIPTSINS_${script:T} - echo ">SFD>F>DF YES" _SCRIPTSINS_${script:T}: ${script} ${INSTALL} ${TAG_ARGS} -o ${SCRIPTSOWN_${.ALLSRC:T}} \ -g ${SCRIPTSGRP_${.ALLSRC:T}} -m ${SCRIPTSMODE_${.ALLSRC:T}} \ From owner-svn-src-head@freebsd.org Sat May 5 20:08:04 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id A8A5BFB8C79; Sat, 5 May 2018 20:08:04 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 59F6A796AA; Sat, 5 May 2018 20:08: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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 534CC22448; Sat, 5 May 2018 20:08: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 w45K84e6044762; Sat, 5 May 2018 20:08:04 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45K83nx044756; Sat, 5 May 2018 20:08:03 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201805052008.w45K83nx044756@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sat, 5 May 2018 20:08:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333275 - head/sbin/nvmecontrol X-SVN-Group: head X-SVN-Commit-Author: mav X-SVN-Commit-Paths: head/sbin/nvmecontrol X-SVN-Commit-Revision: 333275 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 20:08:05 -0000 Author: mav Date: Sat May 5 20:08:03 2018 New Revision: 333275 URL: https://svnweb.freebsd.org/changeset/base/333275 Log: Add NVMe Namespace Management support to nvmecontrol(8). This allows create/delete/attach/detach namespaces on new NVMe controllers. This is only a first user-level part of the bigger change set. Kernel part required to detect and handle the configuration changes without reboot is completely independent and will be added separately. Submitted by: Matt Williams (original version) Differential Revision: https://reviews.freebsd.org/D11399 Added: head/sbin/nvmecontrol/ns.c (contents, props changed) Modified: head/sbin/nvmecontrol/Makefile head/sbin/nvmecontrol/devlist.c head/sbin/nvmecontrol/nvmecontrol.c head/sbin/nvmecontrol/nvmecontrol.h Modified: head/sbin/nvmecontrol/Makefile ============================================================================== --- head/sbin/nvmecontrol/Makefile Sat May 5 18:39:54 2018 (r333274) +++ head/sbin/nvmecontrol/Makefile Sat May 5 20:08:03 2018 (r333275) @@ -3,7 +3,7 @@ PACKAGE=runtime PROG= nvmecontrol SRCS= nvmecontrol.c devlist.c firmware.c format.c identify.c logpage.c \ - perftest.c reset.c nvme_util.c power.c util.c wdc.c + perftest.c reset.c ns.c nvme_util.c power.c util.c wdc.c MAN= nvmecontrol.8 .PATH: ${SRCTOP}/sys/dev/nvme Modified: head/sbin/nvmecontrol/devlist.c ============================================================================== --- head/sbin/nvmecontrol/devlist.c Sat May 5 18:39:54 2018 (r333274) +++ head/sbin/nvmecontrol/devlist.c Sat May 5 20:08:03 2018 (r333275) @@ -107,6 +107,8 @@ devlist(int argc, char *argv[]) sprintf(name, "%s%d%s%d", NVME_CTRLR_PREFIX, ctrlr, NVME_NS_PREFIX, i+1); read_namespace_data(fd, i+1, &nsdata); + if (nsdata.nsze == 0) + continue; printf(" %10s (%lldMB)\n", name, nsdata.nsze * Added: head/sbin/nvmecontrol/ns.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sbin/nvmecontrol/ns.c Sat May 5 20:08:03 2018 (r333275) @@ -0,0 +1,474 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2017 Netflix, Inc + * Copyright (C) 2018 Alexander Motin + * + * 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, + * without modification, immediately at the beginning of the file. + * 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 ``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 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 "nvmecontrol.h" + +/* handles NVME_OPC_NAMESPACE_MANAGEMENT and ATTACHMENT admin cmds */ + +#define NSCREATE_USAGE \ +" nvmecontrol ns create -s size [-c cap] [-f fmt] [-m mset] [-n nmic] [-p pi] [-l pil] nvmeN\n" + +#define NSDELETE_USAGE \ +" nvmecontrol ns delete -n nsid nvmeN\n" + +#define NSATTACH_USAGE \ +" nvmecontrol ns attach -n nsid [-c ctrlrid] nvmeN \n" + +#define NSDETACH_USAGE \ +" nvmecontrol ns detach -n nsid [-c ctrlrid] nvmeN\n" + +void nscreate(int argc, char *argv[]); +void nsdelete(int argc, char *argv[]); +void nsattach(int argc, char *argv[]); +void nsdetach(int argc, char *argv[]); + +static struct nvme_function ns_funcs[] = { + {"create", nscreate, NSCREATE_USAGE}, + {"delete", nsdelete, NSDELETE_USAGE}, + {"attach", nsattach, NSATTACH_USAGE}, + {"detach", nsdetach, NSDETACH_USAGE}, + {NULL, NULL, NULL}, +}; + +static void +nscreate_usage(void) +{ + fprintf(stderr, "usage:\n"); + fprintf(stderr, NSCREATE_USAGE); + exit(1); +} + +static void +nsdelete_usage(void) +{ + fprintf(stderr, "usage:\n"); + fprintf(stderr, NSDELETE_USAGE); + exit(1); +} + +static void +nsattach_usage(void) +{ + fprintf(stderr, "usage:\n"); + fprintf(stderr, NSATTACH_USAGE); + exit(1); +} + +static void +nsdetach_usage(void) +{ + fprintf(stderr, "usage:\n"); + fprintf(stderr, NSDETACH_USAGE); + exit(1); +} + +struct ns_result_str { + uint16_t res; + const char * str; +}; + +static struct ns_result_str ns_result[] = { + { 0x2, "Invalid Field"}, + { 0xa, "Invalid Format"}, + { 0xb, "Invalid Namespace or format"}, + { 0x15, "Namespace insufficent capacity"}, + { 0x16, "Namespace ID unavaliable"}, + { 0x18, "Namespace already attached"}, + { 0x19, "Namespace is private"}, + { 0x1a, "Namespace is not attached"}, + { 0x1b, "Thin provisioning not supported"}, + { 0x1c, "Controller list invalid"}, + { 0xFFFF, "Unknown"} +}; + +static const char * +get_res_str(uint16_t res) +{ + struct ns_result_str *t = ns_result; + + while (t->res != 0xFFFF) { + if (t->res == res) + return (t->str); + t++; + } + return t->str; +} + +/* + * NS MGMT Command specific status values: + * 0xa = Invalid Format + * 0x15 = Namespace Insuffience capacity + * 0x16 = Namespace ID unavailable (number namespaces exceeded) + * 0xb = Thin Provisioning Not supported + */ +void +nscreate(int argc, char *argv[]) +{ + struct nvme_pt_command pt; + struct nvme_controller_data cd; + struct nvme_namespace_data nsdata; + int64_t nsze = -1, cap = -1; + int ch, fd, result, lbaf = 0, mset = 0, nmic = -1, pi = 0, pil = 0; + + if (optind >= argc) + nscreate_usage(); + + while ((ch = getopt(argc, argv, "s:c:f:m:n:p:l:")) != -1) { + switch (ch) { + case 's': + nsze = strtol(optarg, (char **)NULL, 0); + break; + case 'c': + cap = strtol(optarg, (char **)NULL, 0); + break; + case 'f': + lbaf = strtol(optarg, (char **)NULL, 0); + break; + case 'm': + mset = strtol(optarg, NULL, 0); + break; + case 'n': + nmic = strtol(optarg, NULL, 0); + break; + case 'p': + pi = strtol(optarg, NULL, 0); + break; + case 'l': + pil = strtol(optarg, NULL, 0); + break; + default: + nscreate_usage(); + } + } + + if (optind >= argc) + nscreate_usage(); + + if (cap == -1) + cap = nsze; + if (nsze == -1 || cap == -1) + nscreate_usage(); + + open_dev(argv[optind], &fd, 1, 1); + read_controller_data(fd, &cd); + + /* Check that controller can execute this command. */ + if (((cd.oacs >> NVME_CTRLR_DATA_OACS_NSMGMT_SHIFT) & + NVME_CTRLR_DATA_OACS_NSMGMT_MASK) == 0) + errx(1, "controller does not support namespace management"); + + /* Allow namespaces sharing if Multi-Path I/O is supported. */ + if (nmic == -1) { + nmic = cd.mic ? (NVME_NS_DATA_NMIC_MAY_BE_SHARED_MASK << + NVME_NS_DATA_NMIC_MAY_BE_SHARED_SHIFT) : 0; + } + + memset(&nsdata, 0, sizeof(nsdata)); + nsdata.nsze = (uint64_t)nsze; + nsdata.ncap = (uint64_t)cap; + nsdata.flbas = ((lbaf & NVME_NS_DATA_FLBAS_FORMAT_MASK) + << NVME_NS_DATA_FLBAS_FORMAT_SHIFT) | + ((mset & NVME_NS_DATA_FLBAS_EXTENDED_MASK) + << NVME_NS_DATA_FLBAS_EXTENDED_SHIFT); + nsdata.dps = ((pi & NVME_NS_DATA_DPS_MD_START_MASK) + << NVME_NS_DATA_DPS_MD_START_SHIFT) | + ((pil & NVME_NS_DATA_DPS_PIT_MASK) + << NVME_NS_DATA_DPS_PIT_SHIFT); + nsdata.nmic = nmic; + nvme_namespace_data_swapbytes(&nsdata); + + memset(&pt, 0, sizeof(pt)); + pt.cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_NAMESPACE_MANAGEMENT); + + pt.cmd.cdw10 = 0; /* create */ + pt.buf = &nsdata; + pt.len = sizeof(struct nvme_namespace_data); + pt.is_read = 0; /* passthrough writes data to ctrlr */ + if ((result = ioctl(fd, NVME_PASSTHROUGH_CMD, &pt)) < 0) + errx(1, "ioctl request to %s failed: %d", argv[optind], result); + + if (nvme_completion_is_error(&pt.cpl)) { + errx(1, "namespace creation failed: %s", + get_res_str((pt.cpl.status >> NVME_STATUS_SC_SHIFT) & + NVME_STATUS_SC_MASK)); + } + printf("namespace %d created\n", pt.cpl.cdw0); + exit(0); +} + +void +nsdelete(int argc, char *argv[]) +{ + struct nvme_pt_command pt; + struct nvme_controller_data cd; + int ch, fd, result, nsid = -2; + char buf[2]; + + if (optind >= argc) + nsdelete_usage(); + + while ((ch = getopt(argc, argv, "n:")) != -1) { + switch ((char)ch) { + case 'n': + nsid = strtol(optarg, (char **)NULL, 0); + break; + default: + nsdelete_usage(); + } + } + + if (optind >= argc || nsid == -2) + nsdelete_usage(); + + open_dev(argv[optind], &fd, 1, 1); + read_controller_data(fd, &cd); + + /* Check that controller can execute this command. */ + if (((cd.oacs >> NVME_CTRLR_DATA_OACS_NSMGMT_SHIFT) & + NVME_CTRLR_DATA_OACS_NSMGMT_MASK) == 0) + errx(1, "controller does not support namespace management"); + + memset(&pt, 0, sizeof(pt)); + pt.cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_NAMESPACE_MANAGEMENT); + pt.cmd.cdw10 = 1; /* delete */ + pt.buf = buf; + pt.len = sizeof(buf); + pt.is_read = 1; + pt.cmd.nsid = (uint32_t)nsid; + + if ((result = ioctl(fd, NVME_PASSTHROUGH_CMD, &pt)) < 0) + errx(1, "ioctl request to %s failed: %d", argv[optind], result); + + if (nvme_completion_is_error(&pt.cpl)) { + errx(1, "namespace deletion failed: %s", + get_res_str((pt.cpl.status >> NVME_STATUS_SC_SHIFT) & + NVME_STATUS_SC_MASK)); + } + printf("namespace %d deleted\n", nsid); + exit(0); +} + +/* + * Attach and Detach use Dword 10, and a controller list (section 4.9) + * This struct is 4096 bytes in size. + * 0h = attach + * 1h = detach + * + * Result values for both attach/detach: + * + * Completion 18h = Already attached + * 19h = NS is private and already attached to a controller + * 1Ah = Not attached, request could not be completed + * 1Ch = Controller list invalid. + * + * 0x2 Invalid Field can occur if ctrlrid d.n.e in system. + */ +void +nsattach(int argc, char *argv[]) +{ + struct nvme_pt_command pt; + struct nvme_controller_data cd; + int ctrlrid = -2; + int fd, ch, result, nsid = -1; + uint16_t clist[2048]; + + if (optind >= argc) + nsattach_usage(); + + while ((ch = getopt(argc, argv, "n:c:")) != -1) { + switch (ch) { + case 'n': + nsid = strtol(optarg, (char **)NULL, 0); + break; + case 'c': + ctrlrid = strtol(optarg, (char **)NULL, 0); + break; + default: + nsattach_usage(); + } + } + + if (optind >= argc) + nsattach_usage(); + + if (nsid == -1 ) + nsattach_usage(); + + open_dev(argv[optind], &fd, 1, 1); + read_controller_data(fd, &cd); + + /* Check that controller can execute this command. */ + if (((cd.oacs >> NVME_CTRLR_DATA_OACS_NSMGMT_SHIFT) & + NVME_CTRLR_DATA_OACS_NSMGMT_MASK) == 0) + errx(1, "controller does not support namespace management"); + + if (ctrlrid == -1) { + /* Get full list of controllers to attach to. */ + memset(&pt, 0, sizeof(pt)); + pt.cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_IDENTIFY); + pt.cmd.cdw10 = htole32(0x13); + pt.buf = clist; + pt.len = sizeof(clist); + pt.is_read = 1; + if (ioctl(fd, NVME_PASSTHROUGH_CMD, &pt) < 0) + err(1, "identify request failed"); + if (nvme_completion_is_error(&pt.cpl)) + errx(1, "identify request returned error"); + } else { + /* By default attach to this controller. */ + if (ctrlrid == -2) + ctrlrid = cd.ctrlr_id; + memset(&clist, 0, sizeof(clist)); + clist[0] = htole16(1); + clist[1] = htole16(ctrlrid); + } + + memset(&pt, 0, sizeof(pt)); + pt.cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_NAMESPACE_ATTACHMENT); + pt.cmd.cdw10 = 0; /* attach */ + pt.cmd.nsid = (uint32_t)nsid; + pt.buf = &clist; + pt.len = sizeof(clist); + + if ((result = ioctl(fd, NVME_PASSTHROUGH_CMD, &pt)) < 0) + errx(1, "ioctl request to %s failed: %d", argv[optind], result); + + if (nvme_completion_is_error(&pt.cpl)) { + errx(1, "namespace attach failed: %s", + get_res_str((pt.cpl.status >> NVME_STATUS_SC_SHIFT) & + NVME_STATUS_SC_MASK)); + } + printf("namespace %d attached\n", nsid); + exit(0); +} + +void +nsdetach(int argc, char *argv[]) +{ + struct nvme_pt_command pt; + struct nvme_controller_data cd; + int ctrlrid = -2; + int fd, ch, result, nsid = -1; + uint16_t clist[2048]; + + if (optind >= argc) + nsdetach_usage(); + + while ((ch = getopt(argc, argv, "n:c:")) != -1) { + switch (ch) { + case 'n': + nsid = strtol(optarg, (char **)NULL, 0); + break; + case 'c': + ctrlrid = strtol(optarg, (char **)NULL, 0); + break; + default: + nsdetach_usage(); + } + } + + if (optind >= argc) + nsdetach_usage(); + + if (nsid == -1) + nsdetach_usage(); + + open_dev(argv[optind], &fd, 1, 1); + read_controller_data(fd, &cd); + + /* Check that controller can execute this command. */ + if (((cd.oacs >> NVME_CTRLR_DATA_OACS_NSMGMT_SHIFT) & + NVME_CTRLR_DATA_OACS_NSMGMT_MASK) == 0) + errx(1, "controller does not support namespace management"); + + if (ctrlrid == -1) { + /* Get list of controllers this namespace attached to. */ + memset(&pt, 0, sizeof(pt)); + pt.cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_IDENTIFY); + pt.cmd.nsid = htole32(nsid); + pt.cmd.cdw10 = htole32(0x12); + pt.buf = clist; + pt.len = sizeof(clist); + pt.is_read = 1; + if (ioctl(fd, NVME_PASSTHROUGH_CMD, &pt) < 0) + err(1, "identify request failed"); + if (nvme_completion_is_error(&pt.cpl)) + errx(1, "identify request returned error"); + if (clist[0] == 0) { + ctrlrid = cd.ctrlr_id; + memset(&clist, 0, sizeof(clist)); + clist[0] = htole16(1); + clist[1] = htole16(ctrlrid); + } + } else { + /* By default detach from this controller. */ + if (ctrlrid == -2) + ctrlrid = cd.ctrlr_id; + memset(&clist, 0, sizeof(clist)); + clist[0] = htole16(1); + clist[1] = htole16(ctrlrid); + } + + memset(&pt, 0, sizeof(pt)); + pt.cmd.opc_fuse = NVME_CMD_SET_OPC(NVME_OPC_NAMESPACE_ATTACHMENT); + pt.cmd.cdw10 = 1; /* detach */ + pt.cmd.nsid = (uint32_t)nsid; + pt.buf = &clist; + pt.len = sizeof(clist); + + if ((result = ioctl(fd, NVME_PASSTHROUGH_CMD, &pt)) < 0) + errx(1, "ioctl request to %s failed: %d", argv[optind], result); + + if (nvme_completion_is_error(&pt.cpl)) { + errx(1, "namespace detach failed: %s", + get_res_str((pt.cpl.status >> NVME_STATUS_SC_SHIFT) & + NVME_STATUS_SC_MASK)); + } + printf("namespace %d detached\n", nsid); + exit(0); +} + +void +ns(int argc, char *argv[]) +{ + + dispatch(argc, argv, ns_funcs); +} Modified: head/sbin/nvmecontrol/nvmecontrol.c ============================================================================== --- head/sbin/nvmecontrol/nvmecontrol.c Sat May 5 18:39:54 2018 (r333274) +++ head/sbin/nvmecontrol/nvmecontrol.c Sat May 5 20:08:03 2018 (r333275) @@ -58,6 +58,7 @@ static struct nvme_function funcs[] = { {"format", format, FORMAT_USAGE}, {"power", power, POWER_USAGE}, {"wdc", wdc, WDC_USAGE}, + {"ns", ns, NS_USAGE}, {NULL, NULL, NULL}, }; Modified: head/sbin/nvmecontrol/nvmecontrol.h ============================================================================== --- head/sbin/nvmecontrol/nvmecontrol.h Sat May 5 18:39:54 2018 (r333274) +++ head/sbin/nvmecontrol/nvmecontrol.h Sat May 5 20:08:03 2018 (r333275) @@ -74,6 +74,9 @@ struct nvme_function { #define WDC_USAGE \ " nvmecontrol wdc (cap-diag|drive-log|get-crash-dump|purge|purge-montior)\n" +#define NS_USAGE \ +" nvmecontrol ns (create|delete|attach|detach)\n" + void devlist(int argc, char *argv[]); void identify(int argc, char *argv[]); void perftest(int argc, char *argv[]); @@ -83,6 +86,7 @@ void firmware(int argc, char *argv[]); void format(int argc, char *argv[]); void power(int argc, char *argv[]); void wdc(int argc, char *argv[]); +void ns(int argc, char *argv[]); int open_dev(const char *str, int *fd, int show_error, int exit_on_error); void parse_ns_str(const char *ns_str, char *ctrlr_str, uint32_t *nsid); From owner-svn-src-head@freebsd.org Sat May 5 20:16:10 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9DA8BFB90B5; Sat, 5 May 2018 20:16:09 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 47C9F7AFA7; Sat, 5 May 2018 20:16:09 +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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 425F2225DC; Sat, 5 May 2018 20:16:09 +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 w45KG9Uq049713; Sat, 5 May 2018 20:16:09 GMT (envelope-from np@FreeBSD.org) Received: (from np@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45KG9Wr049709; Sat, 5 May 2018 20:16:09 GMT (envelope-from np@FreeBSD.org) Message-Id: <201805052016.w45KG9Wr049709@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: np set sender to np@FreeBSD.org using -f From: Navdeep Parhar Date: Sat, 5 May 2018 20:16:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333276 - in head/sys: conf dev/cxgbe dev/cxgbe/common dev/cxgbe/firmware modules/cxgbe/t4_firmware modules/cxgbe/t5_firmware modules/cxgbe/t6_firmware X-SVN-Group: head X-SVN-Commit-Author: np X-SVN-Commit-Paths: in head/sys: conf dev/cxgbe dev/cxgbe/common dev/cxgbe/firmware modules/cxgbe/t4_firmware modules/cxgbe/t5_firmware modules/cxgbe/t6_firmware X-SVN-Commit-Revision: 333276 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 20:16:10 -0000 Author: np Date: Sat May 5 20:16:08 2018 New Revision: 333276 URL: https://svnweb.freebsd.org/changeset/base/333276 Log: cxgbe(4): Update all firmwares to 1.19.1.0. These firmwares and the following list of changes are from the public ChelsioUwire-3.7.1.0 release. T6 Firmware ================================================================================ Version : 1.19.1.0 Date : 04/23/2018 ================================================================================ Fixes ----- BASE: - Fixed traffic stall when rate-limit is modified while running traffic. - Fixes a firmware crash in FW_ETH_TX_EO_WR handling. - Fixes host DCB support when FW_PORT_CMD is used. ETH: - Exit Auto-Negotiation if we don't receive base page from peer within 10s. This fixes some cases where in we keep on restarting auto negotiation without ever exiting, resulting in link failure. - Fixes an issue where VF packets counter were not increasing if VF packets coalesced WR is used by driver. OFLD: - Kernel and user mode NVMEoF performance enhancements. FOiSCSI: - Fixes fw crash when trying to connect to non-existence IPv6 iSNS target. ================================================================================ Version : 1.18.9.0 Date : 03/27/2018 ================================================================================ Fixes ----- BASE: - For Ethernet frames less than 64B, pad them with zero bytes as per IEEE spec (RFC 894). - Added a new parameter iqtype to FW_IQ_CMD to identify the ingress NIC or offload queues. This fixes an issue where driver was receiving interrupt with no new messages in queue. - FW_PARAMS_CMD processes all the valaid paramaters and returns value 0UL for any unknown parameter. OFLD: - Fixes connection failure during SRQ reuse. - Fixes incorrect cqe in case of WRITE with immediate operation. FOiSCSI: - Fixes a fw crash when wrong node-id is passed to FW_FOISCSI_CTRL_WR. FOFCoE: - Fixes a fw hang while creating NPIV. Enhancements ------------ ETH: - A new WR FW_ETH_TX_PKTS_VM_WR added to support VM packet coalescing. ================================================================================ Version : 1.18.4.0 Date : 02/28/2018 ================================================================================ Fixes ----- BASE: - Fixed Rate limiting not working for 101Mbps<=rate limit<=163Mbps range. - Fixed starting more than 32 VMs on PF4 causing firmware hang. ETH: - Fixed link failure due to FEC mismatch with optics. - Fixed link failure with link toggle stress tests. - Only BaseR FEC is supported for 50G. - Fixed a bug in next page handling which sometimes causes link down. - Fixed port down due to failre to read eeprom contents of some modules. - Fixed a bug causing adapter to fail with spider configuration. FOiSCSI: - Fixed a bug causing login failure when connecting to multiple targets. Enhancements ------------ BASE: - Added a new firmware API to retrieve the maximum temperaturethreshold for the chip (FW_PARAM_DEV_DIAG_MAXTMPTHRESH). ETH: - Added support for user to contol pause negotiation during auto negotiation. FOiSCSI: - Added a new facility to redirect few fw events to offload rx queue (based on driver's configration) - Driver can ignore providing ipv6 prefix len during ipv6 address configuration. ================================================================================ Version : 1.17.14.0 Date : 12/27/2017 ================================================================================ FIXES ----- BASE: - Fixed an FLR failure during simulteneous power up of VM. - Fixed an issue in vlan acl which was limiting vlan range to 1024. ETH: - Enabled RS-FEC for 25G active copper cable and 25GBASE-SR. - When auto negotiation is enabled, final pause settings are resolved based on local and peer pause settings. - Handle NACK for an I2C access. OFLD - Fixed rdma connection cleanup in SO adpater. - Fixed rdma connections during read invalidate. - Fixed the crash when invalid BW rate is passed to fw. - Fixed the traffic hang when BW allocation is changed from switch during traffic. FOFCoE: - Fixed an issue where initiator remains logged-in even after LLDP is disabled on switch. ENHANCEMENTS ------------ BASE: - Added support for 248 VFs. - Added fw driver periodic calibration for MC. ETH: - Added XLAUI port type support. - Added raw mac entry deletion support (FW_VI_MAC_ID_BASED_FREE). OFLD: - Inline IPSec support added (flag F_FW_ULPTX_WR_DATA indicates the inline IPSec WR). - New work request FW_RI_RDMA_WRITE_CMPL_WR (write with completion) added to T5 Firmware ================================================================================ Version : 1.19.1.0 Date : 04/23/2018 ================================================================================ Fixes ----- BASE: - Fixes a firmware crash in FW_ETH_TX_EO_WR handling. - Fixes host DCB support when FW_PORT_CMD is used. ETH: - Fixes an issue where VF packets counter were not increasing if VF packets coalesced WR is used by driver. OFLD: - Fixes an issue where fw hangs if max traffic rate passed is 0. FOiSCSI: - Fixes fw crash when trying to connect to non-existence IPv6 iSNS target. ================================================================================ Version : 1.18.9.0 Date : 03/27/2018 ================================================================================ Fixes ----- BASE: - For Ethernet frames less than 64B, pad them with zero bytes as per IEEE spec (RFC 894). - Added a new parameter iqtype to FW_IQ_CMD to identify the ingress NIC or offload queues. This fixes an issue where driver was receiving interrupt with no new messages in queue. ETH: - Pad the Ethernet packets of size less than 64B with zeros. This fixes the incorrect checksum generation of packets less then 64B. FOiSCSI: - Fixes a fw crash when wrong node-id is passed to FW_FOISCSI_CTRL_WR. FOFCoE: - Fixes a fw hang while creating NPIV. Enhancements ------------ ETH: - A new WR FW_ETH_TX_PKTS_VM_WR added to support VM packet coalescing. ================================================================================ Version : 1.18.4.0 Date : 02/28/2018 ================================================================================ Fixes ----- BASE: - Fixed starting more than 32 VMs on PF4 causing firmware hang. FOiSCSI: - Fixed a bug causing login failure when connecting to multiple targets. Enhancements ------------ BASE: - Added a new firmware API to retrieve the maximum temperaturethreshold for the chip (FW_PARAM_DEV_DIAG_MAXTMPTHRESH). ETH: - Added support for user to contol pause negotiation during auto negotiation. FOiSCSI: - Added a new facility to redirect few fw events to offload rx queue (based on driver's configration) - Driver can ignore providing ipv6 prefix len during ipv6 address configuration. ================================================================================ Version : 1.17.14.0 Date : 12/27/2017 ================================================================================ FIXES ----- BASE: - Fixed an issue in vlan acl which was limiting vlan range to 1024. ETH: - Corrected lane inversion logic. - Fixed improper LED behavior in T580 cards. - When auto negotiation is enabled, final pause settings are resolved based on local and peer pause settings. - Handle NACK for an I2C access. OFLD - Fixed rdma connections during read invalidate. FOiSCSI: - Fixed a connections hang when link is toggled frequently. FOFCoE: - Fixed an issue where initiator remains logged-in even after LLDP is disabled on switch. ENHANCEMENTS ------------ BASE: - Added support for 124 VFs. ETH: - Added XLAUI port type support. - Added raw mac entry deletion support (FW_VI_MAC_ID_BASED_FREE). OFLD: - New work request FW_RI_RDMA_WRITE_CMPL_WR (write with completion) added to optimize NVMEoF write. T4 Firmware ================================================================================ Version : 1.19.1.0 Date : 04/23/2018 ================================================================================ Fixes ----- BASE: - Fixes a firmware crash in FW_ETH_TX_EO_WR handling. - Fixes host DCB support when FW_PORT_CMD is used. FOiSCSI: - Fixes fw crash when trying to connect to non-existence IPv6 iSNS target. ================================================================================ Version : 1.18.9.0 Date : 03/27/2018 ================================================================================ Fixes ----- BASE: - Added a new paramter iqtype to FW_IQ_CMD to identify the ingress NIC or offload queues. This fixes an issue where driver was receiving interrupt with no new messages in queue. FOFCoE: - Fixes a fw hang while creating NPIV. Enhancements ------------ ETH: - A new WR FW_ETH_TX_PKTS_VM_WR added to support VM packet coalescing. ================================================================================ Version : 1.18.4.0 Date : 02/28/2018 ================================================================================ Enhancements ------------ BASE: - Added a new firmware API to retrieve the maximum temperaturethreshold for the chip (FW_PARAM_DEV_DIAG_MAXTMPTHRESH). ================================================================================ Version : 1.17.14.0 Date : 12/27/2017 ================================================================================ FIXES ----- BASE: - Fixed an issue in vlan acl which was limiting vlan range to 1024. MFC after: 3 days Sponsored by: Chelsio Communications Added: head/sys/dev/cxgbe/firmware/t4fw-1.19.1.0.bin.uu (contents, props changed) head/sys/dev/cxgbe/firmware/t5fw-1.19.1.0.bin.uu (contents, props changed) head/sys/dev/cxgbe/firmware/t6fw-1.19.1.0.bin.uu (contents, props changed) Deleted: head/sys/dev/cxgbe/firmware/t4fw-1.16.63.0.bin.uu head/sys/dev/cxgbe/firmware/t5fw-1.16.63.0.bin.uu head/sys/dev/cxgbe/firmware/t6fw-1.16.63.0.bin.uu Modified: head/sys/conf/files head/sys/dev/cxgbe/common/t4_hw.c head/sys/dev/cxgbe/firmware/t4fw_interface.h head/sys/dev/cxgbe/firmware/t6fw_cfg_uwire.txt head/sys/dev/cxgbe/t4_main.c head/sys/modules/cxgbe/t4_firmware/Makefile head/sys/modules/cxgbe/t5_firmware/Makefile head/sys/modules/cxgbe/t6_firmware/Makefile Modified: head/sys/conf/files ============================================================================== --- head/sys/conf/files Sat May 5 20:08:03 2018 (r333275) +++ head/sys/conf/files Sat May 5 20:16:08 2018 (r333276) @@ -1461,7 +1461,7 @@ t4fw.fwo optional cxgbe \ no-implicit-rule \ clean "t4fw.fwo" t4fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t4fw-1.16.63.0.bin.uu" \ + dependency "$S/dev/cxgbe/firmware/t4fw-1.19.1.0.bin.uu" \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "t4fw.fw" @@ -1495,7 +1495,7 @@ t5fw.fwo optional cxgbe \ no-implicit-rule \ clean "t5fw.fwo" t5fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t5fw-1.16.63.0.bin.uu" \ + dependency "$S/dev/cxgbe/firmware/t5fw-1.19.1.0.bin.uu" \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "t5fw.fw" @@ -1529,7 +1529,7 @@ t6fw.fwo optional cxgbe \ no-implicit-rule \ clean "t6fw.fwo" t6fw.fw optional cxgbe \ - dependency "$S/dev/cxgbe/firmware/t6fw-1.16.63.0.bin.uu" \ + dependency "$S/dev/cxgbe/firmware/t6fw-1.19.1.0.bin.uu" \ compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "t6fw.fw" Modified: head/sys/dev/cxgbe/common/t4_hw.c ============================================================================== --- head/sys/dev/cxgbe/common/t4_hw.c Sat May 5 20:08:03 2018 (r333275) +++ head/sys/dev/cxgbe/common/t4_hw.c Sat May 5 20:16:08 2018 (r333276) @@ -3722,8 +3722,6 @@ int t4_link_l1cfg(struct adapter *adap, unsigned int m fec = FW_PORT_CAP_FEC_RS; else if (lc->requested_fec & FEC_BASER_RS) fec = FW_PORT_CAP_FEC_BASER_RS; - else if (lc->requested_fec & FEC_RESERVED) - fec = FW_PORT_CAP_FEC_RESERVED; if (!(lc->supported & FW_PORT_CAP_ANEG) || lc->requested_aneg == AUTONEG_DISABLE) { @@ -7720,8 +7718,6 @@ static void handle_port_info(struct port_info *pi, con fec |= FEC_RS; if (lc->advertising & FW_PORT_CAP_FEC_BASER_RS) fec |= FEC_BASER_RS; - if (lc->advertising & FW_PORT_CAP_FEC_RESERVED) - fec |= FEC_RESERVED; lc->fec = fec; } Added: head/sys/dev/cxgbe/firmware/t4fw-1.19.1.0.bin.uu ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/dev/cxgbe/firmware/t4fw-1.19.1.0.bin.uu Sat May 5 20:16:08 2018 (r333276) @@ -0,0 +1,9747 @@ +/*- + * Copyright (c) 2018 Chelsio Communications, 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 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 THE 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. + */ +begin-base64 644 t4fw +AAAEOgETAQAAAQkEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAABB0ELAQ0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAENoZWxzaW8gRlcgUlVOTUVNIERFQlVHPTAgKEJ1aWx0IFR1ZSBBcHIgMTAgMDU6 +MDY6MzIgUERUIDIwMTggb24gdm5jNC5hc2ljZGVzaWduZXJzLmNvbTovaG9tZS9maXJtd2FyZS9j +dnMvZnctcmVsZWFzZSksIFZlcnNpb24gVDR4eCAwMS4xMy4wMS4wMAAAAAAAAAAAAAAAAPpruZRg +AMgA4QB78AAQAADhADC4eP///x/84UCAAAAB4QB7cAAAEAAf//0o4QGUcCAAAADhAZwE4QB5AAAC +AEDhAHmAAAYAQAACAAoABgAK4QB5BAAMAACAAAEC4QB7POEAe0ThAHvk4gAAAAABAADhAHuQIAAA +AAAAgADhAHsAAABAAeEAe5wAAEAAREREQuAAAADjAARzREREQOMACAAgAAJcAAAAAB//jhAAAAAA +H/+OFAAAAAAf/44YAAAAAB//jhwf/8AAAAAAAAAAAADAABL/zRP/zZMgEv/NE//NhCAEMwGTIBH/ +zBL/zJIQEf/MEv/MkhAR/8wB9DER/8siCv+SEADkMQAFMQECABL/yALnMQIWABH/x4EQAQFfwCEC +EQHJERH/xBL/xJIQEf/EEv/EkhBgAA8R/78S/8OSEBH/vxL/wpIQgRAR/8HAIJIREv/AkhLAIJIT +Ev+/khCCEALyUGUv9xH/vccvkhAR/7ySEBL/vBP/vJMgwDKTIRP/u5MigiIS/7oT/7qTICMiIRT/ +uQQzAck4E/+4gzADgxQIMxEU/7akM5MhE/+qkyJgAAjCMJMhE/+nkyIS/7GQIJAhkCKQI5AkkCWQ +JpAnkCiQKZAqkCuQLJAtkC6QLyAmECAmEYIiEv+kwDAtNzAtNzQtNzgtNzwjPQFyM+0AAgAS/6HA +MC83AC83EC83IC83MCM9AXIz7QACABL/l8AwKDcwKDc0KDc4KDc8Iz0BcjPtEv+VwDAnNwAnNxAn +NyAnNzAjPQFyM+0S/5AV/5AW/5HAMNcgBWYBYAAZAAAAAAAAAAQ2BQACANMP0w8FMwxuOxQHRxQH +BEN2MeYENgUFMwxvO+0AAgAS/4MV/4EjCgACJwIHBEMEPgUFMwwHRxRvO/ADAgAS/33JLoMghCGF +IrwidDsOhlC0VZYwtDN0M/Rj/+YAZT/iZV/fEv9xwDIDLgUDAgAS/2jAMCg3QCg3RCg3SCg3TCM9 +AXIz7QACABL/ay0nAMARAUkxAEgxAQIAwAAU/2gE0jEV/2eUUBT/ZwTTMRX/ZpRQFP9mBNQxFf9m +lFAU/2UE1TEV/2WUUBD/ZQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAA +H/wAAOMACfgf/AAAH/wAAOMACfgf/AAAH/wAAOMACfgf/4AAH/+FsOMACfgf/4WwH/+FsOMAD6gf +/4WwH/+FsOMAD6gf/4WwH/+HQOMAD6gf/4dAH/+OBOMAETgf/44QH/+yMOMAGAgf/7IwH/+yMOMA +PCgf/8AAH//+FeMAPCggAAAAIAABauMAekAgAAF4IAABfOMAe6wgAAF8IAABheMAe7AgAAGYIAAB +nOMAe7wgAAGcIAABpeMAe8AgAAG4IAABvOMAe8wgAAG8IAABxeMAe9AgAAHYIAAB2OMAe9wgAAHc +IAAB4uMAe9wgAAH4IAAB+OMAe+QgAAH8IAAB/OMAe+QgAAIYIAACGOMAe+QgAAIcIAACHOMAe+Qg +AAI4IAACOOMAe+QgAAI8IAACPOMAe+QgAAJYIAACWOMAe+QgAAJcIAACYuMAe+QgAAJ4IAACeOMA +e+wgAAJ8IAACguMAe+wgAAKYIAIPE+MAe/QgAwAAIAMXYOMCiHAgAxdgIAMXYOMCn9AgAxdgIAcH +5OMCn9AgBwfwIAcLYOMGkGAgCAAAIAgS8OMGk9AgCBLwIAksXuMGpsAgCSxgIAktLOMHwDAgCwAA +IAsAAOMHwPwgCwAAIAsAAOMHwPwgCwAAIAt3GOMHwPwAAAAAAAAAAAAAAAAgABQWIAAUCCAAF/Ig +ABQIIAAXbSAAFAggABS6IAAXBSAAFoogABQIIAAWOSAAFfIgABWFIAAT9SAAFS8gABQIIAAUCCAA +FAggABTaAAAAAP///////w/8///w////APz///////8P/P//8P///wD8IADIliAAyh4gAMpOIADK +FCAAyb8gAMm1IADJhCAAyXogAMlwIADJHyAAykwgAMkVIADI5SAAyk4gAMjbIADIyQEQGAEABAAA +AAAAIAAAAEAAAgIFBQgICwsODhERFBQXFxoaHR0gICMjJiYpKSwsLy8yMjU1ODg7OwAAAAAAAAAg +BRoMIAHEHCAAPbAgAZAYIAG++CABuWggAXYAIARFiB//6dQgALEoIADLAB//3LAgAHaQIABoqAAA +AAAAAAAAIAGR0CAAnRwgAJZgAAAAAB//1TQf/8U8H//CWB//wDAgAFuIIABO5CAATBAgALy4H//j +iCAG3ZAAAAAAAAAAACAAUpggAF7EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIADFKCABqRggANVY +IADUfB//8LAf/8/YH//LkCAAk9ggBZpQIAFBOCABKaggAQ44IAEFkCAA+rQgAO0sIADYSCAFHgAg +AyggIAE2nCADVFggAfUEIAB2UAAAAAAgANW8IAYQHCAAyAggAZu0IAACmCAAtngAAAAAAAAAAB// +89AgANV0IAMq0AAAAAAAAAAAIAOsuCAAKjQgA6sAIAAotAAAAAAgADToIAAzHCAAMWQAAAAAIAA9 +VCABOmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgBBF4IAUZrAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA6yCADtYAgADeYAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAACAAPbAgAK6kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsA +AAAgAxS0CAAAACADFMAIAAAAIAMUzAoAAAAgAxTYDAAAACADFOQSAAAAIAMU9A0AAAAgAxUIDgAA +ACADFRgTAAAAIAMVKAoAAAAgAxU8DgAAACADFUgYAAAAIAMVWA0AAAAgAxV0DgAAACADFYQQAAAA +IAMVlBIAAAAgAxWoDgAAACADFbwQAAAAIAMVzBEAAAAgAxXgCgAAACADFfQLAAAAIAMWAA0AAAAg +AxYMFAAAACADFhwKAAAAIAMWNA8AAAAgAxZABgAAACADFlAGAAAAIAMWWAYAAAAgAxZgBgAAACAD +FmgGAAAAIAMWcAkAAAAgAxZ4BgAAACADFoQEAAAAIAMWjAYAAAAgAxaUCwAAACADFpwLAAAAIAMW +qAQAAAAgAxaMBAAAACADFrQJAAAAIAMWvAkAAAAgAxbIAAAAAAAAAAANAAAAIAMW1AoAAAAgAxbk +BgAAACADFvACAAAAIAMW+AMAAAAgAxCMAQAAACADFvwAAAAAAAAAANdqpHjox7dWJCBw28G9zu71 +fA+vR4fGKqgwRhP9RpUBaYCY2ItE96///1uxiVzXvmuQESL9mHGTpnlDjkm0CCH2HiViwECzQCZe +WlHptseq1i8QXQJEFFPYoeaB59P7yCHhzebDNwfW9NUNh0VaFO2p4+kF/O+j+GdvAtmNKkyK//o5 +Qodx9oFtnWEi/eU4DKS+6kRL3s+p9rtLYL6/vHAom37G6qEn+tTvMIUEiB0F2dTQOebbmeUfonz4 +xKxWZfQpIkRDKv+Xq5Qjp/yToDllW1nDjwzMkv/v9H2FhF3Rb6h+T/4s5uCjAUMUTggRofdTfoK9 +OvI1KtfSu+uG05EHDBEWBwwRFgcMERYHDBEWBQkOFAUJDhQFCQ4UBQkOFAQLEBcECxAXBAsQFwQL +EBcGCg8VBgoPFQYKDxUGCg8VH//AAAAEACAgBwtgIAcQ0B/83gAf/6gEIAcLsB//qSQf/6ygA4AA +AIEAAAAA//gAAQAAAAAQAACBBAEAgQQAAAEEAAABBAEAgAAAAAAF//8GAAAABAEACB//gMAqAAAA +H//PNAIAAACAEAAAQUAAAEFAAQCDAAAB//+//7////8f/5RYBAAACCADDqiBgAAADAAAAB//jqD/ +/wAA//8A/wABAAAAAP//H/+vkB//pFwP///////QdB//Yhwf/ODoIAcJPP//vwwf/2KcH/+p3B// +mmQf/OIAAAAIyOD//gDhAZIAH/+UxAD///8f/5kMH/+qAARBAAilAAAAwAAAAMAEAAAwAAAAH/+q +kAAAHdAAAP+AIAcH8CALR0DhAC4AH/+qhB//pjwf/6swH/+moB//qoDgAACg4QAwuOAAAAAAAIAA +4QBgEAAAQADhAhAA4QIwAOECUADhAnAA4QAQCB/84UDhAHtwH/+x8B//segf/OAIH/+x7B//sggf +/7IAH/+yBB//siAf/7IYH/+yHB//qAQf/6+QIAcLsB/83gAf/6kkH/+ooB//qcAf/5kcH/+vDB// +pcQgCwBgH/+rXAAA/4AAAB6wH/+OoB//q2gf/6tkH/+ryB//rJAqAAAAIAsEYCALBJAEAAAIBQAA +AIP/AACBAAAAABAAACALBNAgCwQwIAAJ+CADDbgf/4TwH/+AwB//rKBnRSMB782riZi63P4QMlR2 +H/+AAAAAPyggAxCMz////yALBfAQAAAAP////wIAAABAAAAAGgAAAB/84HQgoAAAH/+nuCAAHeAg +AB98gAAAAAAAgAD//v//AAAQAABAAAAgADn8IAAjCCAAAAAgACNwIAsIwP//f///+///D/aAACAL +CPAgCwkgAAEAAAAEAAAf/6goIAtTYCALCbAgADToIAA2OCAAMxwgCwtQIAsKECALCqAgADFkIAsK +8FMAAAAA////UgAAAFEAAAAgAf5YH/+p2CAAOWAgBA1gH/+p0CALC3Af/5kUH/+ppCALDZAUAAAA +gAAAAnxQAACAAAAQgAAABoAAsAAAAAoAAP80kv//8A+AALEA4QGaAAACAAAgCw0gH/+WiAAAfkAg +Cw1gH/+p1AD/wAABAAAAKAAAAOAAAAAmAAAAAAD//x//j3AGAAAABYAAAB//pYgrAAAAIABWACAL +VkAf/6dUA4AAAAf///8EAQAINQAAAAMAAAAAP///gEAAAAgP//8f////QUAAAEFAAQAABf//AQQB +AAEEAAAAAMAAH/+puD0AAAAf/5UABwAAAIEEAQCBBAAAH/+pkAAAOpjDAAAAAAAP/wBDAAAf/6cY +AAAIAAQAAAAgC1agH/+xZB//r7Af/5RYAAYAAOEAegAf/5TAH/+pxB//qgAf/5kkH/+ZECALVtAA +AweAIAtXQAgAAAAf/5bwACAAAAAACQAAADAC//z4f8AAAACj/7sAo/+6AA0AAADgAwAAg/+2AA// +//8P//gA/wAAACALV4AgCw7QIAsPACALWBAADwAAAAoAAP//AA8D/8AAg//AACALWJAgC1kAH/+q +SB//sCD/YPAAH/+wAB//jiAEgAAIH/+AUABEAAABgMIAAACBAB//jmAf/4Bg/x///wDAAADwAAAA +gYAAAP9///8f/6Rc/7//////AAAAgAAAAACG3R//mlwf/OIAH/+PYO4AAAAAAAnMH/ziDA8AAAAg +Cw9AAAAIzB//q1Qf/5pkIAsRMCADCDDg//4AIAtM0B//muAf/5T8H/+AcCAHCZAAADAAAAAnEB// +3CAgC2OQIAtjYB//qrQf/5T0AAD//h//mQTerb7vNAAAAD8AAAAAAIkGAJkAAB//rygQAAcCAcCA +AB//rwSZAAAAH/+v5ACIAAiCgAABH/+veP//8AADFQAAAxEAAAAPA/8gAQHsIAEF2CkAAAAAAIkU +IAEKrCADC3QAAEAAIAMOoAwAAAAgARWwH/+wQAAAIaAgAwuEH/+qGB//rkgf/6nc/wD/APDw8PCq +qqqqzMzMzB//pcgAA///AAAn/yADC8ggC2PgIAEmCAAPQkAgA1t4H/+qeAAJAAAAAEgAggAAACAB +Omgf/6osOwAACA4AAADQAAAAH/+AsAAAIooAAAhQAAAfQB//qeQgCyKwIAsi0CALIvD/3///AAkA +CB//r3QwAAAAfwAAAB//qBQgCyYQAAAP/iALJUAgCyWgIAsl4AAA4AD///f/IAsmoCADYqwAAIP/ +IAcPmBWgAAAgBxCQH/+vOAAACAYAAIjMH/+WoAAEA/8KAAAAIAcMKCAHDcggBwxwH/+ZoIP/twCD +/7YgIAsm0OEAAAAzAAAAH/+vQB//sDQD/+AAf///AAA/9pAAACKYA//wACALSiAgC0ngIAtKQB// +sUAf/688AA///x//qeAgC2ZAH/+ZRCAAerggBwkYIAAFiB//pKAf/5YcH/+UjB//qRQgCydQwAQA +AB//p9Af/6fEH/+n3B//rfAf/61kIAPm4CALJ5AgAw9QH/+l3CAAe5jgAQAAH/+aYCALZwAgCyfQ +IADBkB//mlggAL6QH/+QqCALZoAgC2bQH/+WwCALKeAf/480H/+Q7CALPkAgCz5wSAAAACAB0Bgf +/6dkIAHSHB//lUgf/6Y8H/+lJB//pOwAABhQAAAWTB//qDQgBwukH/+lfB//lMThAC4AH/+oQOEA +XgDhAg4A//+//+EADgDhAY4A//++/x//pgwgAddgIAHjdOAFAAAD/wAAH/+lRCADDqgf/L//PAAA +AB//gLiDAAAAH/+lLA88AAAgC0mggoAAACACBVQgAggIH/+qxCACC8AAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAACBgAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAgYAAAAAAAAD/////////////////////H//8AB///AAf//vIH//7 +yB//+8gf//vIH//1SB//+Hgf//bQH//20B//9tAgBt+AAAAAAAAAAAAAAAAAAAAAACAG4sggBuLI +AAAAAAAAAAAAAAAAAAAAACAG34AgBt+AH//5dB//+XQf//l0H//5dB//+XQf//l0AAAAACAB2HgA +AAAAAAAAAAAAAAAAAAAAAgEAAAAAAAAAAAAAAAAAAAEDEREICBAJAwEAAAAAAAAEAAAAAAAAAIGA +AAAAAAAQBQAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAgQAAAAAAABgFAAAAgAAAAAAAAAAAAAAAAAAA +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 +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 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAACAKABHxaxPxa9MPA+YxAQIAFvFpF/Fqd2sGkGC0Zndj+FQPEFXRwg8UAGP/+QAA +AGwQCCggBZQVJCAH9mCkFaAZRQD5AA2NYUQBAIgiGvFdF/Fc7fFdHAsOAAAMSRGnmSuSnsDp/2AM ++6AMpQApkp0KSworssMLmQHpFgQkjJmAAInY9yAM+JIAnQAvcq5k8UEf8U4qcq0v8n/vqwEEw/0A +AP9ACX5iAJ0AmNj/QAmGYgCdAIoVKSAUqpkJCUcpJBT1IAu10gCdABvxQS8iFi0hKYkUGPFAr92Y +kPpDyBWgDiUA7pYCLu/CgAD9IGYV4AxlAO3xOR1WAoAADKoCjBSakesAFQTIQQAA+IJoHeBKBQCd +xurGByZIgQAA6+MFDNAEgAAKAmEKAmEKAmEKAmHApOpqNgHAQQAAbakFCACGCQJhKCEpH/El+EUE +FeAMFQD5ACAVoA0FAPogiBXviAEACYgu+kPIFa+IAQD4RSQdoAYFAPYgBhWgHuUA5hYCLEVCgADo +FgEl2YEAAFiJ8P6AABc3xQEA98AAR3ANlQDt5p0oBAqAAPmABMFSAJ0AwCDRDwAAAAAA6iQACdgE +gADsEgUq6ASAAFiLu9Kg0Q8AAAAAwLAMnzTv1ggt9sYAAPpAaB2gG8UA/AACHaANFQBYkixj/8EA +AOokAArYBIAAWI1o0qDRDwD/+bQNoAkFAOokAAJYYQAA/AACHaANlQBYkiBj/5HAoFnMEh3w54nY ++T/yuJAMpQBj/6TaIFgLfGP+hYonjRXAwOqsIC7YBIAAWIVT0qDRD2wQBi4iECQWAeUhGirQBIAA +JiAH9kEoFeAfxQDqFgAqx8KAAP8CUg3hZgEABwlC8SBwDeKFAQBkge3U8CkgBfxASBWgG4UA/p4A +DbAaRQD7IA9tIgCdAOXwxB4L1gAA5/DDG08CgAD0wAwKEgCdAKWZLZKe96ARw1IAnQApkp0Hagoq +osMKmQHulAAEjiGAAIwpiyoMBz4Muwz3YAkD4gCdACogTi0gTLGo+6ANxCALFQAoJE4qMAEpIhjz +QA3OkgCdACsgBy0hJPhgJBWgDFUA/UAEBTC7EQDgqhEN2oKAAAuqAhvwqQqIAiohBywhCQvdAvsG +AAx6qgEA6/CkHVMCgAAKzAIqISKY4IggnOOd5AuqApri/QAAFDAKZQAKiAKY4S0iEJ3lLCA4G/CZ ++AAiHaBNFQD5wSYVoMwZAAzYOR3wlJToDL05+aYADrALBQCb5xjwiZ3m7fCKFOAFAAAsJhib65nq +6AAVB0jBAAAJAIrt5g4hyEEAAO/mDyd5AQAACSCGDwJjCQCGDwJhDG4Rpe7q5p0jgKmAAIgpLyA4 +p4iYKfPgB/eSAJ0AiRAJCUf5IAbhUgCdAMAg0Q8AnhLqJAAL2ASAAFiOSI4S/00QDeAfxQDsEgEp +UASAAO0SACnYBIAAWIse0qDRDx7wYYro90AGGJIAnQAMaRGlmSuSnvdgBmtSAJ0AKZKdB2sKK7LD +C5kBZJC7sKyc6O6UAAzzhgAAYAAoAPPf8HBSAJ0ACVQM9J0AFa/4FgAAAAAAAOsSAClQBIAAWIzA +0qDRDwDqJAADWGEAAPwAIh2gDWUAWJF6Y/9ujSLA5A7dAvxARhXv/ZIAAAAA+EOoFaTZAQAA0QQA +vBoMiAL4Q6YVr/jaAIonjRHAwOqsIC7YBIAAWISq0qDRD9ogWIq1Y/79AAD/91ANoAkFAMCgWctY +HvAsiuj5X/mYkB/FAP/9OA2gCQUAwJDAugurNPvBBhXv/P4AAAAAbBAOlRsoIhAuIgknITUpIAcj +Fg0qMgL+YIgV4A0VAPxgaB2ntQEA4yEaJdv5AAAL2zn6IYYV4ZkBAOf/Ngm3woAA/sJSDeOqAQAO +DkLxwHAN4tMBAGTUGyYgBcHo+f4ADzAXRQD2wCHdYgCdAIciix304XwN4A6FACuwAZ8R82Ae5xIA +nQCZEJkZmhMY7/7t7/4SKA0AAOUWCiyvAoAA6FUIDN+CgACtu+sWCCJwBQAAiRmeF40a9SAGqhIA +nQArUp6GGP1gCiPiAJ0AL1KdJmLDBv8BZPPxGe/tiZj3IAmgkgCdACqCrmShURrv6SOCrSqifx3v +5go7AesWBCTb/QAA+mAJ3iIAnQCb2PpgHSYiAJ0AhymGKgwDPgdmDPLACaPiAJ0AKRoA8yIyDeD6 +9QArIBacEvtgCeUiAJ0AixGGwyogOPfg5hWgBgUA9+EmFaBHBQD74QYV4KoZAAp2ORfv1pYVLSIX +Fu/TnfotIhud+4nECnY5lhb5YA/K4gCdAIscnh7sFgIljVmAAGABHBnvv4mYapEuixoqUp6PGHuj +Sy1SnS/yww/dAZ0UhhTr77cU0/0AAO9kAAMB6YAAmrhl/xNgAwKeHvwgRhWgCgUAWcrZGe+uiZgY +76qMEu4SDiSO2wAA//9cDaAPBQDAoPoghhWv/uYAHe+lwLoLmzT7oQYV7/72AAAAAAD/+xQNoA8F +AACeHp8f/CBGFaAKBQBZysUZ75qMEo8fiZiOHhjvlfk/9XiSAJ0AYAJ2wKCaFIsUFu+SwNoNnTTt +Zggt9i4AAGACXZ4enx+cEuokAAnYBIAAWI1ojBKPH+4SDiV1uYAAYAIVKiAHnh6fH/ogAAUwDAUA +WI1AZKNuKiAHKyAW/GBoHaGqAQBYjRGMEo8f/iHIFa/6agAAAAAAAIsSiBOMEYYVjhas3QhmAvfG +AA8/iAUAKCQ7DJYMlrQtJhvtIhApUASAAFiL5o4ejBIY72kqVp2KKSkgOKOq6iYJJPmWgAAmITWP +xCshGikiEOb/Ng3vwoAAf9sKCgpCyKQLDUJk0FP+ICYV4B2FAPn+AA7wChUA+iGGFaAGNQD2IWYV +r/YGAIonnx+LHeqsICpgBIAAWIhqjx+aEi0iG/lAiBXv/XYA2iBYidEY70qMEo4e+kEoFa/+PgBx +nqgKvwz//QAV7/6KAIsTihUtIhAZ708LqgIb708KaAKGHBrvRgmIAunvRRsKfgAAIxYQJRYRJiAH +hcAjIQf2QSQV4GYRAOtVAQsygoAA9qYACrozAQDmISIpmwKAAAN3AgpVAiMhJAlmApXwhSCX85by +/eCmFeOYAQDo9gYsygKAAAk5AuMSECJT+QAA6fYEKq4CgADl5QIGQIEAAOX2ASfIwQAA5RIRIhQ1 +AABtqQUIAIYJAmEmIBSkZgYGRyYkFPTAB3XSAJ0AiRcpVp0oIhexiOgmFyGAqYAAiykqIDiju5sp +80AHn5IAnQCMHGXAz8Ag0Q8tIE5k3CEOeAL4QEYVoACGAAAAAAAA8x/fAFIAnQAOPwz//QAV7+9W +AAAAAAAA6xINKVAEgADtEgsqYASAAFiJt9Kg0Q8A6xILKVAEgABYi27SoNEPAPpAaB2gG8UA/AAi +HaANFQBYkChj/8GLEPpAaB2gDBUA7RIKJdhhAABYkCJj/6kAACYgO2RgYeokAA5YBIAA/CAoFa+J +BQDpJDsscASAAFiLW/og5hWgCwUAKyYb+kdmHe/8LgAAAAAA6xIEKVAEgABYCXNj/weKJ+tEAApo +BIAA+0QAFaAMBQBYg0nSoNEPANogWIlVY/8IIxYQh8AjIAcmISL64AQD8DMRAOMhBynagoAAC3cC +CncCiycqIQn4xgALejMBAOmxFSmbAoAAA6oCIyEkl/CHIJrzmPbt9gUl2IEAAPfgRhWvzQUA/WAE +BfNoAQDrnQgLMgKAAAYzAuP2BCu+AoAAB+cC5/YBJmCBAADjEhAm6QEAAO3LQn5ABIAALEz+DMYR +pobm0zp3yMEAAPSf8akSAJ0AbckFCACGCQJhY/4kixD6QGgdoAwVAPtiQBXgDQUAWI/WY/55AAD5 +jwAMf/76AAjcDAxNFG3ZBQgghgkCY+/JCAXBAQAA7UwMBMjBAAD1n+8BEgCdACrM/m2pBQhAhgkC +ZWP9zAAAbBAGKCAFwZQPAgD5ABeNZ6UBACoWA/VADxESAJ0AiiLm7oQdFiYAACwgc402KiId+4AE +ANAMFQDnIAcuWAqAAPtABAVwCIUA+40ADTAOBQD5QGgd4A81APuNAAywC1UA+W0AD/F3AQDpjjkL +3wKAAKa7Ge5wLLKer+4f7m//gBR7ogCdACuynQl8CizCwwy7AeQWAiWSMYAAJSBzLRYB/EOoFaAE +FQDgUQQCwAUAAPyAAQJf9fUA9JcACnSIAQAoJHMV7l8EzAHsJh0tyASAAOTuXhUDSYAA7hYALdAE +gAD6QAgV4AwVAFgkdY4QH+5SLSEJLCAHKCEiKSEk+9y6BeDMEQDkiAIOYoKAAAyZAowRC5kCmaCJ +IJii/UBmFeALJQDspgUszgKAAAuZApmh5QAVBUhhAAAJAIoprCAqIAcb7k0KKkAKqhALqgKakC0i +APphABWgGIUA9SBGFaADNQDolgMu7gKAAOPdAgSYQQAA7ZYBJMihAAAKQIgDCIoKIIgDBIoKAIgD +AIoFAIkJAIoMexEGuwgutp2J+PcgB8CSAJ0ALGKuZMFtHO4kK2KtLMJ/DLsB47QABYsxgACwne32 +CCWHQYAALiAUs+4ODkcuJBT1wArN0gCdAI8T+eAG6VIAnQDAQMw5KCAUbosEiSJkkUPSQNEPAAAA +ACsgTooisLsLC0frJE4lcBiAAMm08V/wZ1IAnQAsIEwPAgD9f+/yogCdAI0nx+MOrgHuJgIm0MEA +AFiOi+buEBUBEYAAKKAABogKiIzsoActWASAAPpAaB2gDUUAC4AAZa/hiSdknboqmRTKpoqZZK2w +KKAABogKiIzsoActWASAAPpAaB2gDTUAC4AAZa/hY/2PAAD//1gNoAoFAMCgWckSH+3mifj5P/fw +kgCdAMAwKiAUiROzqiokFPU/+VkSAJ0AiieNEiwKAOqsIC7YBIAAWIJQ9UBoHa/8TgAAAACLImSw +o+QSAid1sYAA6iQACdgEgADtVAAKYASAAFiIi9Kg0Q8A6iQACtgEgABYikLSoNEPAP/19A2gCwUA +//poDaALBQDAygycNOz2CC30/gAAY/972iBYCFtj/qKKJ/IAIh3gCwUA+0QAFaAMFQBYhZwZ7cuZ +oC4iAPoDgh3gDBUA+duQBaANFQDopgIvdgKAAOPuAg14BIAA7vYBKVAEgABYjuXSQNEPK3wY6iQA +D2gEgAD8IAYV4AwVAFiO344Q/9tOBe/9AgBsEAQoIBTTD++LHWoYBIAAiif6YGgd4AwFAOqsICno +BIAAWIIS0qDRD4sic75LFO2ZikhqoUgb7ZUssq7Kxx3tliyyrS3Sfw3LAX3AG7Cunkh9wCEvIBTv +JBQv2tQAANogWAgmY/+owLDAigioNOhGCC3/FgAAiSLJkMAg0Q8AwKBZyK+KSGuhrGP/6fpAaB2g +G8UA/AAiHaANFQBYjrTAINEPAGwQCCwiDy8gByghNCcyB/5DRBWn1QEA+b/AFeALFQDpuTkJsASA +AOsiCSpQBIAA+CCGFeAEFQDodzYPT8KAAPciUg3h/wEACwlC8SBwDeKOAQBkgnLBtOx7Hw6UfAAA +LCBP0w/pIE0mYAUAAAwMRywkT/0gFROiAJ0ALCAF+4ATbWIAnQCNIvogBhWv+zUA/WAOSOIAnQAo +IhmOMvnAFQUiAJ0AiTgY7VQc7VDkkitv34KAAJoQmBGsu+jtSxVIDQAAmRPrFgIvpwKAAKhE9eAN +EhIAnQCLEypCnvtAG0viAJ0AihIpQp0qosMKmQHulAAEkrGAAIwpiyoMBT7TDwy7DPVgCdviAJ0A +LRoA9aHyDeD49QArIBb5YBmlIgCdACwhIhntRighByohJCshCfxA8BXqiAEA6aoCDEMCgAAIuwIZ +7T8Y7TANLUDpzAIO6oKAAAjdAp3giSCc4prk+8BmFeAKVQDr7TcczgKAAAqZApnhiC+Y5SwgOPfB +BhXgDQUA/cDmFeAKJQD92l4F4EklAPjAiBWgzBkADJo5mOkM2zmNZZ3qHe0p/MDIFaAJBQDs5gsj +h+GAAAqcEA3MApzsjBGJaJfvme6IaSjmEI1qLeYR7AAVB0khAAAJAIqIZ/jgC+OiAJ0AH+0OCr0C +D90CnebAxfyTphWhCQUA9SHyDeD49QArIBb5YBPFIgCdACwiGYopKyBPKSA45aoIBmAFAADsJhkl +2/0AACskT5op8yAPx5IAnQCLFGWx9sAg0Q+fFZ8WnhfqJAAK2ASAAFiKx44X7xIFJXWRgACMFGXP +24on2zDsEgAlUMEAAFiF3MAg0Q8a7N+KqPdAEMCSAJ0AjBMrQp79YBF7ogCdAIsSKUKdK7LDHezW +C5kB5JIbZWP9AACc2O6UAAzyZgAAYACWKCA58R/4DhIAnQD/++QNoAkVAAAAAADzn+xIUgCdAAnn +DPb9gBXv9foAiTdkndPwANgNoAoVAAAAAAAAAMGze8kULCA6mhD+IMYV4A31AP2AEL1iAJ0A6iQA +CtgEgABYiS7SoNEPAMGtjDcrIQmNOI4y668RDd0CgAAPuwLkuwIJUASAAFiJFMAg0Q8AAAD//1gN +oBqFAOokAAfYYQAA/CBoFeAMFQBYjdxj/v0AAAq4ApjmwNX8k6YV4QwFAHXLDSsgFikK//lgDjVi +AJ0AihRkoV2LaoxnimmrewfMDJxn92DSDeAOBQCxqoxlm2qLZppprOqre3e7AbGqjimbZpplLSA4 +pe6eKfOgCjeSAJ0AiScomRTKgYuZyb0Z7JgosACfFZ8WCYgKiIwssAf6QGgdoA01AAuAAI8ViyLH +o/tf8kjiAJ0AKCE0h2cuIRqKL4sp6Hc2D2fCgAB3ywoLCULIlA4LQmSwtcHU+v4ADrAMFQD8IIYV +r/KaANogWIb0Y/4DiifqrDArWASAAFiM1tKg0Q8AAAD/8ogNoAkFAJ8VKiAHnxaeF/ogAAUwDAUA +WIoijhfvEgUtZbYAAOokAAfYSQAA/AAiHaANBQBYjZNj/dcqIAf8oGgdoaoBAFiJ7WP9ep8V/iDG +FeAKBQBZx38a7FOKqI8V+V/uoJIAnQD/98QNoAkFAMCQHOxNwLoLqzT7gQYV7/d+AAAAAAAA81/6 +MFIAnQAJ5wz2/YAV7/zuAIonnxXvFgYp2ASAAOwSACVQwQAAWIU61qD+IKgV7/oWAJ8V7xYGKVAE +gABYhrz+IKgV7/q2AAAAwVP6QGgdoAsFAPwAAh2gDTUAWH9FKyAFjxaKEPV/2lViAJ0AY/0ZKiAH +nxWfFvygaB2hqgEAWIm8/iCoFe/4ogBsEA6ILycgBS4hNCkgB5Uc8iFmFeAGFQDygGgd50UBAO0S +CyJ7+QAAD285nx0vIRqM1JwT7dABLqgEgAD/gQAOMZkBAO4iCS+3woAA/MJSDaCtMQAODkLxwHAN +4m8BAGRkacH0CM+N/uAlzWIAnQCOIg8CAPXGzA3gD4UALBYB86AhlxIAnQCZEJkZmhLm7AARwA0A +AJga6Ov9HP+CgACm/+8WCCznAoAAqMzsFg4h6AUAAIYZnReKHvTABiISAJ0Aixoqop6GGC8SDvtA +CWviAJ0AJmLDL/KdBv8BZPRqGevtiZj3IAjgkgCdACqCruTr6hUJsYAALoKtJEJ/F+vlBOsB6xYE +JLP9AAD1wAj2IgCdAJZ49cAg3iIAnQCKKYkqDAQ+CpkM9SAIu6IAnQArGgD1YfINoPz1ACsgFv1g +CQUiAJ0AjhEqIDj8CAIdoAcFAPfg5hXhCQUA9qCIFaCqGQDqlzkL2ASAAArLOZsVlxb3wBISogCd +AIsdZLHZYAEBGevEiZhqkTKKHosajBgqop4swsN7o0aLHiuynQy7AZsUjhTq67wUs/0AAO/kAAcB +yYAAlqhl/yVgA438IeYV4AoFAFnG3hnrs4mYGOuw7RIPJI7bAAD//2wNoA8FAMCg+iCGFa/+9gAc +66rAugubNPuBBhXv/wYAAAAA//twDaAPBQCdH/4iBhXgCgUAWcbMGeugLxIQiZiNHxjrnPk/9lCS +AJ0AYAMKwKCaFIsUHuuZwMoMnDTs5ggt9xYAAGAC8Z0fLxYQ6iQAClgEgABYiXAvEhDtEg8ldrGA +AGACfgAqIAedHy8WEPogAAUwDAUAWIlHLxIQ7RIPLXZWAABgBAwAnR/8ICgVr4kFAOkkOyK4QQAA +5wMeB7CBAAAGAmGOV5z4hlSJVq7ODGYMllR86wftFg8kyAUAAJ5XhhaOFZlWBu4CFuuIjBHtIg8p +UASAAObuAgrYBIAAWIfnjR8Y62uJHvszphWhBwUAdHsNKyAWKgr/+2AELSIAnQCKKSsgOKSq6iYJ +KAQKgADzYAQ/kgCdAC8hNIxULiEaiS/vzDYPX8KAAHy7CgoKQsikDgZCZGB0/CAmFaAfRQD5ngAP +8AsVAPohphXgCjUA+iGGFa/1jgAAAAAAnR+KJy8WEIsb6qwgKeAEgABYhGLvEhAtKASAAPwh6BXv +/C4AAAAqIAf8gGgdoaoBAFiI1xjrQPwh6BXv/aoA2iBYhcIY6zyNH/pBKBWv/b4AcZ6HCuwM/Z2A +Fa/+BgAc6z4Y60KLEo4V+gAiHaAJBQALqTgH7gIa6zf31ooF4AYFAAmGOQbuAoYdG+s56fwgIsBB +AADn7gILC54AACYgB4VQBiZA61UBCzKCgAAGVQIKVQIqIQcrISInIQn2QegVqqoBAOy7Ag1TAoAA +CncCKiEklfCFIJfzm/L34KYVo74BAO72Bi3aAoAAC6oC6vYEKq4CgADl1QIB0/0AAOX2ASGMNQAA +bakFCACGCQJhiB4nEgf3E6YV4QYFAPTB8g2g+fUAKyAW+WAKpWIAnQAqIBSjqgoKRyokFPVACH3S +AJ0AyE+MKSsgOKTMnCnzYAknkgCdAI0dZdEAwCDRDyYgTmRryw/oAvhARhWgAIoAAAAAAAAA8x/c +kFIAnQAO/Az9nYAVr+4eAIQcBARHaEIVhhOIVMCRBpY5CGYo9qCGFaACBQDRD4onixvqrCAp4ASA +AFiD+osTjKTA0QvbOQy7KPtAhhXgAgUA0Q8AAOsSDClQBIAAWIdQ0qDRDwD6QGgdoBvFAPwAIh2g +DRUAWIwKY/+UixD6QGgdoAwVAO0SCiXYYQAAWIwEY/98AAAmIDsPAgAPAgBkYHj8ICgVr4oFACok +OwgghgkCY+z2CCrYBIAA7SIPKVAEgABYhzn6IOYVoAsFAPpHZh3v+xoA6xIEKVAEgABYBVNj/uaK +J+s0AAnoBIAA+0QAFaAMBQBYfynSoNEPANogWIU1Y/7XAAAqIAf8gGgdoaoBAFiIQWP+ngAAIxYS +JyEHg1AlIAf2QSQVqncBAOszAQu7AoAA+kDoFeBVEQDnZgIKqoKAAAUzAgozAiohIocvJbEVDKoC +LCEkk/CDIJryl/WW8+72BimeAoAA86YACfPeAQDj9gEu6gKAAO3MAgXYgQAA/eCGFa/MBQAMuwGr +XeMSEibpAQAA7YtBfGAEgACwOAyGEabGdtM69H/vSJIAnQBtiQUMQIYJAmVj/dgAAIsQ+kBoHaAM +FQD7YkAV4A0FAFiLs2P+NwAAAAAA9Q8ADn/+/gAM3QwNSBRtiQUMYIYJAmfv3ggFyQEAAOg8DAdA +gQAA9Z/seJIAnQCwz235BQmAhggCaWP9fAAAAGwQBiggBSMgByQKA/0PQERRMwEAKCAiZIBvAioC +WHzm/UzAgNANFQAsICEY6l0PAgDsMxEGfVaAAKgzKTKeDwIAbpNFKzKdZLA/+kAIFaD+5QAOzgH9 +xgAO8A8FAPxEJh3gCQUA+CAGFeAMBQD4ICYV4A6VAPggRhXgDQUAWIMs9HOmFaACBQDRD8Ag0Q8A +AGwQCiogBfhA8BXgDBUA+GBoHae1AQDoFgAl2/kAAOvLOQoYBIAA6xYFLCAEgAD9QcAEUZkBAMHD +/UAf5SIAnQCNIu/qNB6b5gAA6+oxEbARAADmFgQs94KAAK/u7hYDLNcCgACrquoWByzABIAAhxf1 +AAQiEgCdAIoUJ3KehhOPF/rgB1uiAJ0AJmLDL/KdBv8B7xYGJ5nRgAAlIRuKQocphioFpTb1TwAO +cQsFAHyzAdWgmBoHZgz0wAXj4gCdACoaAPVCMg3g/PUAKyAWmBr9YAX1IgCdAIpC+qAOUqIAnQAb +6iWHQwt3AYsV6BYKJYkJgABgALgAGuoIiqjoFgolDN+AAIsXjBSGEyuyno8XJmLDfLNDL/KdHOn/ +Bv8B5PA5ZVv9AACbyO8WBi/7bgAAYAKbAAAAAPghZhXgCgUAWcUgGun1iqiJG+gSCiUO3wAA//9M +DaAPBQDA8Bzp78C6C6s0+4EGFe//BgAAAAAA//x4DaAPBQCZG+okAArYBIAAWIfEiRvoEgoleamA +AGACLyogB5kb+iAABTAMBQBYh52JG+gSCi15hgAAYAMQAPDgBEBSAJ0ALSEajCmXGPghRhWi7QEA +6RYLLwPOAACXGPghRhWi7AEA6RYLJwM5gACYGukWCy7/woAAdftVDtUM+dPEBaC36QDmQgMt3IKA +AAt5ApkYCGYB9oBmFaAA3gCKJ5kbixDqrCAp4ASAAFiC1okb+CFIFaALJQDrpAItIASAAOqiAiOG +AoAAjCmXGJgamRuOGI8W5a0MClgEgADlzAgJUASAAO1GAiroBIAA7CYJKeAEgABYgvKIGokbjxf7 +86YVoQ4FAHXrCCsgFiYK/3a5CsCh+iCmFa/3jgAAKiAH/KBoHaGqAQBYhzSJG/ghSBWv/4YAjykY +6bWJFqX/nymMQ4tAjRXnxAAEyIEAAPwOAAU36wEA7hYBLojOAAAnIAcHB0EIdwoncqHurRANU8KA +AO2qAgJAQQAA6ncBAdP9AADnxwIBjD0AAG2pBQgAhgkCYYtAwICYEhnpoRrpny8hGoYWHumcJCEH +GOmZ/CAoFaHXMQD/oABGukQBAO3QgConAoAA7MwPJnBBAAD4hgAKNMwdAORmACZgBQAADDwMFOl1 +DV0M6CIAL/oCgACfZpdnnmOdZQykOQmJAulmBCxGAoAA5GYCIdAFAAAIqAKYYSYgFONmCA0gBIAA +5iQUKAQKgADzYAQCkgCdAIgX9ROmFaEHBQD04fIN4Pn1ACsgFvlgBNViAJ0AiBLSgNEPihVkoJ7A +INEPAAAAAADqJAAE2GEAAPwgiBXgDBUAWIqEY//biif8ISYVp9tBAOqsICgECoAA9aAEYdIAnQCM +FisKAezMICnoBIAAWH24mhL6gAgV7/vaAACLFuxNEQlQBIAA/WAARfAMFQBYe4z0gGAVr/2uAGW8 +BPlf4AjSAJ0ALyAg8f/ft5IAnQBj/3UAKiAH/KBoHaGqAQBYhsOIEtKA0Q+KJ9ww6xIAJVCBAABY +gkHAsvtARh3gAgUA0Q8AAAAAAAAA6zQADjgEgAD8YGgd4AwFAFh9ldtA7DQACugEgADqFgIr8ASA +AO8SBilQBIAAWIJf+oAIFe/7IgDqJAAE2EkAAPwAIh2gDQUAWIpIY/7rAABsEAiSFJMVGekeiED4 +IEYVr8sFAOsqAQJwIQAA+iBmFaeIQQDkgcBiUBEAAI8TLSEFqYwswACv3wTMC+/8QC5YBIAA/4AN +iuIAnQD6ICYVoGgBAP4AIh3gDQUABv04C98L690KB9ghAACCFZ4Q+QAARXAMJQDyQQAV4A8FAPJA +gBWgAg4AjRQOVQz/4CAVoAMFAO/kAARABQAA8Q5gDeB+AQCGEyKgAC3RBQQiC+bWCAlYBIAA4hYG +IzEBAAD2QAZ6ogCdAAgGQPIAIh2gDQUABi04C9IL690KAVghAAD3IBAVoAIVAAcjOIcVB2YLF+jz +pzcncKAGMgoGMwvsfAgBmCEAAI7QCwCJBe42LiYAAwCLItIA6qwBJMgFAAD0X/sj4gCdAAUpDA4q +DPugBhWgBxUA9WAoFeAGBQAJdjgIaAgisgAF5QgltgF+WwIiLAHitgAmfRKAABbo2osSHujZ5rYB +B5AFAAAGIgKGFe67AQxuAoAADbsCkmD6gAYV4SwdANEPixD8ICgV7/1SAAAA/E8ADf/8xgCFFRno +qwXFC/gAChXgAgUAsSLlgx4JD+gAAB3ow4YSGujD7W0BB9gFAAANuwKNFepmAQxOAoAACWYC69YA +JhAFAAD2gAYVoSIdANEPAAAAAOoWAS1oBIAA+8BoHe/51gD9jwAN//k+AGwQDPhASBWgCgUA6yAH +KcgEgADygGgd58UBAP2fwBWgBBUA7Ew5DLgEgAD8ISYVobsBAPMbXA3gDAUAmhacFZkTmxSbGx3o +oS4gFhXofBjonugWCC3/goAApf8V6HcY6HjvFgotpwKAAPSAAEJw//UAf+ETAioCWDKIGOhxHeiT +6hYIJSoRgABgABcAAGZjy/jAHyiQ+vUAKSAW+yAZTSIAnQCJiPcgBhCSAJ0AK1KuHOhlZLDRLMJ/ +K1KtDLsBZLDHsJmZiBzogmSzSyzAgCzMN/4haBWkzB0ArDzrFgImYB0AAPXABYISAJ0ALkKe/cAI +K6IAnQCMGitCnSzCwwy7AesWACWZUYAAKnEMiXeZEf1ADpxiAJ0ALHAQ63IDJglBgAD5n/so0gCd +AC5yA2Tg0I8WZfGuhhGPGI0U7hIAKVAEgADm/zYL2ASAAO8WASngBIAAWDA6GOg6Hehc568ubTAE +gABgAvIAAMCgWcNfGOg0iYgd6FX5P/mIkgCdAP/9CA2gCwUAwLDAqgqZNPkBBhXv/M4AAGqRJCtC +nnyzQYwaK0KdLMLDDLsB5LA1ZPP9AAD/AQYVr/0qAAAAAAD8IaYVoAoFAFnDSBjoHYmIHeg/7BIN +JI8TAAD//IwNoAsFAMCwwPoPnzT/AQYV7/xSAAAAAAAAAP/8GA2gCwUAAAAAihjAsZsW+V/5KuIA +nQDA4J4W+V/4yuIAnQDrdAAJUASAAO0SCSngBIAAWDB2/gAiHeAHFQDnFgktOASAAP9AZhXv+7oA +ZLBJjxX+ACIdoAwFAA/sOGTAiogRhhjqJAAL2ASAAO0SBCngBIAA6GY2CPAEgADmFgEg+BEAAFgx +Bujn7x0wBIAA/dAgBe/3/gAAAACLGA8CAPlhVg3gDAUAeaMCLAoB+AAiHeAOBQAMnjjsFgUnfKGA +AOt0AAlQBIAA7RIJKeAEgABYMaX3QGgd4AsVAPohJhXgChUA+uBmFa/9pgCLEBXn8yohB4lwHOfv +/8+uBeqqAQD/QAAVOJkBAOyqAgTAPQAA/CEoFaSIHQDqtgAkQAkAAAg4DI4gmbPoXzkBs/0AAO+2 +Ai92AoAA7m4CBahBAADutgEuDvYAACgSA+iMICGUVQAA6jz+KsgEgABtqQUIAIYJAmErPP4MuxGr +W5sQKCAULCAEo4j1gAihEgCdAAgJRykkFPUgCjZSAJ0AiHIoJhwpcgHoFgctqASAAPMgCjBSAJ0A +8TX4DeAHBQCnZiZGnSogFisK/3uhCusSASlQBIAAWDUQjBllwOPAINEP6xIBKVAEgABYNQsuIBYY +55r9z3gF4P/1AP/f5RxiAJ0AY/yHiBllj9IqcBDbcPxgaB2gCRUA+1/gFaANBQDqnTgJUASAAFgv +LMAg0Q8AAAD6QGgdoBvFAPwAIh2gDRUAWIi8Y/+9AAAd56gt0IDrEgQm6N0AAPpAaB2k3R0A/GAA +RvAMFQDt3Acl2GEAAFiIsWP/jy4gFi8K///f+vRiAJ0A6xIBKVAEgABYNOPAINEPixAMbBGsu/og +BhXv+5IAKCQUjXDxv/i6kgCdAPpAaB2gDAUAWHm69sBgFa/8EgCKJ+s0AAnoBIAA+0QAFaAMBQBY +e9fSoNEPAAAAAAAAAOsSAilQBIAAWAH1+iAIFe/6vgAAAAAAAOokAAxgBIAAWANuiBeJcZoc56QA +DV8CgADrVQgE9U2AAOtUAAlQBIAA/QBoHeAMBQBYAzP3QABD//o6AIon/KBoHaALJQDqrCAp6ASA +AFgvHitwEPl/8TDSAJ0AKXAVCQhFZI4YK3EJHOdhKnEML3ARjicMqgyr/w+ICf3CpBWvzQUA7uwg +JHiJAADt7gEEQEkAAAr4Oah9rs7u7EAm6IEAAO7bWn7QBIAADuowG+dRLaEB/UAEFaH5MQAL/wor +Ihfv8qEuZAKAAAzdAgvuDA/uLK7dqF79wCQd792BAP3ABB3v9nIAixT6QGgdoAwVAPtiQBXgDQUA +WIhQY/4NAAD9rwANP/6aAGwQBCMgACQK7XQxBiIhA7wi0Q+EIYYg8kBoFaAIJQD3ZAACsJRxAPkP +AAxzNgEA9GAAQfNmgQDl5y4cAQqAAABmGvZgAQG9RAEA5SIBAag5AADlIgwBmGkAAAQkLAQzKKMi +0Q9sEAiKIicgB4kwlRX4QtAVoXcBAPFdTA3omQEA+CAmFeD89QB8gR0FC0f7f8AV4AkVAOubOQlQ +BIAAWDSJ81MwDeD89QAa5uuIqBbm6PcADZiSAJ0ALmKuGeboZOHbKZJ/JWKtCVUBZFHRKIz/KKYI +6VQAAo2BgAAb5wMlsIDt5twSqN0AAPggBhXkVR0A5UUIC88CgADmmQgCqA0AAPTgCJISAJ0AKJKe +9QATO+IAnQAlkp0NeAoogsMIVQFkUYgpIBb9IyYNoOvVACowEPtAElRiAJ0AKzELvLvaIFg0NSgg +FCwgBKSI9YAMQReYAQApJBT1IA4uUgCdAIoVHubajREoIQcc5r8Z5tb/oeAV6ogBAP8AABQ0/x0A +6YgCB/gFAAAPTwyYUIsgD+w5/KBmFeeqAQDsVgIt3gKAAOtLAgLIQQAA61YBIcBBAAD5QAlxUgCd +AOhBDWJT/QAAbakFCACGCQJhwICYFOkgBCJb/QAADLsRq1v1IAkJEgCdAIgyKCYc6TIBJdhBAACb +EygWAvMgCbhQBQUAZpFQpUyIFAx9Eabd7NadLBAEgADRDwAAAAAA9wAOkJIAnQAMeRGmmS6SnvXA +DvviAJ0AJZKdDXsKK7LDC1UBZFHNsI2dqGVe3WAAYwAAAAAAAADqJAAJ2ASAAO0SBSpgBIAAWIE5 +0qDRDwDAoFnBphrmeoio+R/yGJD89QD/+VgNoAUFAAAAAAAAAPpAaB2gG8UA/AAiHaANFQBYh6Zj +/7HAUMDqDog0+UEGFa/4rgAd5o4t0IAt3Df64wAV5N0dAO1NCAlQBIAA/aBgFeAMFQBYh5lj/3sA +AAAA+EKGHa/6DgAAAACKJ/0gaB2gCxUA6qwgKmgEgABYes76IIYVr/tKAIsw82AIopIAnQDiEgQr +5wKAAKbMJMad0Q8AAAAAAAAA6xIAKVAEgABYAOVj/jAAAOokAAxgBIAAWAJgiTGLE4gS7KwRDSgE +gADsuwgE9Z2AANog/QBoHeAMBQBYAieIFKWlpUwMfRGm3ezWnSwQBIAA0Q8AAAAAAP/2lA2gBQUA +jTWMNB7mW/pg6BXgCSUA/HAAB7CtcQD7LwAMu4whAPsgBADTzAEA6MwID/gKgAD/gAEGfd0BAO67 +AQZwOQAA7rsMBmBpAAANvSwNzCj9YABFv/W6AAAAAOokAAPYSQAA/AAiHaANBQBYh1Jj/mHAoFnB +RBrmGYioHeYX+R/xCJD89QD/+PANoAUFAMBQwLoLizT7QQYV7/i2ALBLDLsR61sICVAEgAD7YgAV +4AwFAFh4XLNM4hIEK+8CgACm3SzWndEPAGwQBIk3F+YqKzAW+cxCBaMqBQAKKigLtgnoqAgLNwKA +AKhm52cICQEKgAD0+GgVoAwVAODNGgMzUwAA7nLEIzIBAADmQRZ0wCEAAIsymOCek5aSDbsCKHbE +mzLRDx/mFa+vKfLBALEE7fLFLnAKgAAOmQL5+CYV7/71AA7dAw2ZAR7mDeVyxClvAoAArt2Z0I8y +mFDmhgApAQqAAOWGAS4gCoAABP8CKHbEnzLRDwAAbBAKGeYCCSkKKJJ/4hYIKVAEgAD7AAQA0AYV +AOYWCisoCoAA+CCGFeBVTQDi5fkRY7kAABvl6/nLkgWjLQUA7aooDT8CgAApkn+cFRzl8qh36HK5 +JMv9AAD9QABCM5kBAJkZ5EKhJmIRAACsrJwXq6r6IMYVoGMFAPiABAIwAGoAihrAsP3/4h2gYwUA +7FUDBQMJgACbGi1yuAReAQ7dAZ0QAQCHAzZgaD7VihiLF40V+CDIFa//9QDjOQkB8oEAAO4WCSzP +AoAA6YgIDwEKgADiiAgEYwsAAOiCoStICoAAD5kD6UQBBmIBAAALgABj/6SKGYsUsaoKCkMqtn/R +D2wQBBvlxSoiAA8CACuyfx7lw/tPAA1zLwUAD68oDv4IKeLDKOLC/ct8Be/79QALmQPpiwENZwKA +AP2AAEZ/9PUA/YAIFaADFQD5DuAd4A0FABnltBjlo/kAAEZ/LAEA7PwIBf1EgADLKQjqMCnCwy/i +xAmIDOj7E36BCoAAL+LCADgaBIgDCP8BL+bC/aAgFeG7HQDksCxmYMEAAH+3FGP/xAAACeow+Zhm +Fe//hgAAAAAAAP2gIBXhux0A5b/cZmDBAABYNOLAINEPAGwQBCYhCfhCkBXv+AUAJyAV6JgBCzYC +gADomQwLuQKAAAdmAvhChh3gBwUAJzQA+GBmHaAEFQAEZgKWMRXlVSRWrdEPAAAAAGwQBBblhBXl +XtMPpiIFNQIlJoAkIoBnQAttCAUoIoBngAJj//PRDwBsEAQT5XsiNopj//wAAAAAbBAEKCAFJSAH +ijX1/6IdoAMlAP0BIBHRVQEAwCDRDwCIKRnlcJor+wAHrCIAnQAJWQkpnQIqkQgpkQT7IARLogCd +AIoicK5/2iBYd6SLIg8CAAO6AWSvwoonBLsB6yYCJVDBAABYhbfj5TwVARGAACigAAOICoiM7KAH +LVgEgAD6QGgdoA1FAAuAAGWv4YknZJ+HKpkUyqaKmWSvfSigAAOICoiM7KAHLVgEgAD6QGgdoA01 +AAuAAGWv4WP/XAAA//9YDaAKBQDaIFh3lysgIuq7DAlQBIAAWHjh2lD6ACId4AwFAFh6mosiA7oB +83/7JmIAnQAsIAcEvQGdIvV/+NChzAEA68wfKVAEgAD8AAId4AwVAFiGN8Ag0Q8AAAAA6yAiKVAE +gABYeM0qIAXB436hDGioKYsi82AEBX/8ZgAvIDrAj3j56vpAaB2gCwUA/AACHaANJQBYeARj/9cA +APpAaB2gCwUA/AACHaANJQBYd31j/78AAGwQCogrHeUMLiAhizf8YMgVoP/lAA/uAS4kIQ3MAQy7 +DOuJCHjIBIAAwCDRDwMAhgkCYZsVKCAFJSAHx034IQYV4AMlAP0cAEHRVQEAiimbK/tAB9xiAJ0A +G+UEC1sJK70CLLEIK7EE/WAEY6IAnQCMIg8CAHDOf9ogWHc6iyIPAgADugFkr6CKJwS7AesmAiVQ +wQAAWIVN4+TSFQERgAAooAADiAqIjOygBy1YBIAA+kBoHaANRQALgABlr+GJJ2SfZSqZFMqmiplk +r1sooAADiAqIjOygBy1YBIAA+kBoHaANNQALgABlr+Fj/zoAAP//WA2gCgUA2iBYdy0rICLquwwJ +UASAAFh4d9pQ+gAiHeAMBQBYejCLIgO6AfN/+yZiAJ0ALCAHBL0BnSL1f/fAocwBAOvMHylQBIAA +/AACHeAMFQBYhc3AINEPAAAAAOsgIilQBIAAWHhjKiAFweN+oQxoqCmLIvNgBAV//GYALyA6wI94 ++er6QGgdoAsFAPwAAh2gDSUAWHeaY//XAAD6QGgdoAsFAPwAAh2gDSUAWHcTY/+/AABsEAQc5LEr +MgQpMBb9YAQFtZkdAPUgCACSAJ0A6uSsFIiBgAD/yVYFr/3lAOTkgxSktQAALKF+aZUdfLMKKswE ++2AIo6IAnQArIAawuwsLR+skBiWCwYAAwCDRDwAsoX7sswx2eBEAAP9gB+PiAJ0AKCAGsIgICEfo +JAYsfuYAAIkniyIqmRQNuwGbIouZZKC2KLAABIgKiIzaIP1g8BWgDTUAC4AAwCDRDwAAiyKKJw27 +AesmAiVQwQAAWITayawooAAEiAqIjOygBy1YBIAA+kBoHaANRQALgABlr+GJJ9MPZJ9yKpkUZKBk +iplkr2cooAAEiAqIjOygBy1YBIAA+kBoHaANNQALgABlr+Fj/0YAAAAAAAAA6iQACdgEgADsRAAK +6ASAAFh4IcAg0Q8A6iQACdgEgADsRAAK6ASAAFv/RcAg0Q8A//0UDaALBQD//mQNoAoFAIg3IuJ/ +CYgR+EAAQT/7kgCINyLifwmIEfhAAEE/+/IAbBAEGuQ+KKLfZIALCeowK6LgC5kMZ5AB0Q9YekXR +DwBsEAQd5E4nIAcc5CT+QQQV4OcRAA7cOZwwiCD7yCoF4AolAPpgRhXgGQUA6TYDLEYCgAAKiQL4 +YCYV4XcBAOYgeSu8AoAA9+YAD3ANBQD8BAIdoAs1AOnkOhMCOYAAnTWcMwuKAhbkN5oxGuQ3Bu4C +JiEJnjSaNgRmAiIgB505lTv4xgALcSIBAOY2CikUAoAAAv8CCf8C7zYILZAEgADRDywhCCshCZ01 +lTcHzAIEuwIJuwIJzAKcNOs2Bi0QBIAA0Q8AbBAEGOQKHuQcLCAHHePzGeQe+kEEFeD8EQD/zQAO +8cwBAO02AC5kAoAADLsCCbsC44CAKbAEgAAd4938QAgVoA4FAJ5l7WYCIbjdAAD6wIYV5HcdAOp8 +/y5mAoAA7HwCDVcCgADsZgElU+EAAJpjAgSJmWaTZwYgi+UhCSRD9wAA9MFmFaQzHQDlZgorkASA +AOgABQMowQAAbTkCBQJh0Q8AAABsEAYd4/kLKxGtsyoyfxnj9xfj2IigwED44ABE8AYVAOm5CAQB +qYAALDJ4LzJ7+YAFnGIAnQBl8RgsNnwrMnkrNnvdQA3kFgECAJSgDeQWwMn8QAX8IgCdAC8ye8HA +7ePkF4OxgAAiMnwqIQSOIPPh/g2mugEAJDZ89G9mFaAAHgAuNnztrwEFw/0AAAj/Au8lBCWMYQAA +IjJ8sMzvMnshAQGAAMnIY/+/AADaIFh6XWWgxCohBP9BIAwWmgEAyJnRDwDaIFh6UNEPANogWHoS +0Q8AAAAAAAD6QGgdoAsFAFh64dEPLiz46tKILwEKgAD8wAEF3/z1AAy7AwuqASrWiFnEAiQ2fCQ2 +e/pv6BWv/NIAAAAV43kvUFhk8GpZuf9Yecooct/TD8iBWHmfKVBYZJ8lWHmZyK4V468sUmuwzOxW +ayYCyYAAWHkhY/8KAAAAABzjqf5viBWgClUA/G9IFeALRQDtFgAha+UAAFnBFfpv6BWv+yIALjJ7 +4jZ8L3oOAAAiNnvRDx/jnS/yrnH2i/arBh2v/iIAAAAAAFm5xvqtZhWv/pIAbBAEFOOVGeOP6ONw +GV7CgACktCNCf6mI6LgIAYIhgAAqMgB4qQIqQnsc44crMQQqRn8MugHqNQQp0ASAAFh6D86pKTEE +/yEADBbZAQDI19EP2jBYegPRD9owWHnF0Q8A+kBoHaALBQBYepXRDyNGf9EPAABsEATwYPAN7/n1 +AIgiCTkDCYgBKCYCiicPAgAPAgAqrDBYg7nj4z4VARGAACigAAOICoiM7KAHLVgEgAD6QGgdoA1F +AAuAAGWv4Ykn0w/LkiqZFMqlipnJrCigAAOICoiM7KAHLVgEgAD6QGgdoA01AAuAAGWv4dEPAAAA +//9cDaAKBQDRDwAAbBAIHeMzG+NXFuNV9cYgBaAYxQDjLOgl04EAAPhADcwnMwEADDURpFXoUp4p +ZsKAAKbEKUB/+QAQU+IAnQAoUp1kgf+bEeoLHg1IBIAAmRAKIIYLAmULAmMNAIcJAmEJAmHtxwgJ +AQqAAP/GfgXgDhUA4+MIH3AKgACeE6/P/iCGFe//9QD/1wAPcAZFAP4gRhWgAMIAAAAAAIqZyawo +oAADiAqIjOygBy1YBIAA+kBoHaANNQALgABlr+EpQiBkkO8tQHwsQH0e4ykN2wkHuwru3ggF2GMA +AIqyLuCAZKE4/cf+DaAIFQAvCgANjzgP/wkH/wov/Rgv/Jwv8hssCgEM3APx4SAN58wBAAzLCQe7 +CuxEfCXYYwAAwND8j6Yd4AwFAI2w71KeJvP/AAAu4P//4AR7ogCdAC9Snfbf4BWg+PUA8efADedm +AQB4YXTqEgQmQAUAAOhEfSbj4QAAWHmSiRPSoOsSAiSAaYAAKqICC6oBKiYCiicqrDBYg0DJrCig +AAOICoiM7KAHLVgEgAD6QGgdoA1FAAuAAGWv4YknZJ8XKpkUZa7v//u4DaAKBQCMEYsQDICGDGCG +CwJpCwJn0Q+PEY0QLkR/D8CGD6CGDQJtDQJr0Q+bEeoHHg1ABIAAmBAKAIYLAmMLAmEN4IcIAm/o +7AAJ0ASAAFm5J2Svr+3isxmvAoAA5FUICWbCgAD3gABCP/kyAMCx+7cADfAMBQD8j6Ydp7sBACtE +fAu7CfdgAQXwDAUA+2MAJe/7mgAAAAtghgtAhgoCZwoCZdEPAABsEAQY4n0CA0cMMxGoMysyhBni +iyiwAIqxCYgKCiGMAgo+iIwDAj78QGgdoA0lAAuAACI2hNEPAGwQBBTibwIDRwwzEaQzJDKEikEm +QAAoQAj6mGgdoKklAAIFPgMCPnmBJRjidwhoCoiM6lQAClgEgAD8QGgdoA0lAAuAACI2hNEPAAAA +AAAA6yQAClAEgABYeVnzQGgdr/8uAABsEARZvKYS4lUT4nUMAgApIoIJGo4DqAqIhAuAAGP/6wAA +AABsEAQT4oQjMX6iMtEPAAAAEuKTA+gwBO4wBbEwkyCUIZUiEuKPE+JShCAEMwKTIBLijcA6hCAE +MwKTIBLii8AwKDdAKDdEKDdIKDdMIz0BcjPtEuKGwDCTIMcvE+KFAyMDEuKEhCAENAGUIBLig4Qg +BDQBlCAS4oGEIAQ0AZQgEuKAhCAENAGUIMcvwDEDIwMS4n2EIAQ0AZQgY//8AAAAEuJ6gyADExQP +MxGTIBLid8AwIyYAV//WEOJ2kQCSAZMClAMR4nSCEAHqMKIRAfAxwEAE5BYAAgAR4nCCECMaAAMi +ApIQEeJtwCGSEATkMYQDgwKCAYEAANIwASMAAAAAEOJokQCSAZMClAMR4maCEAHqMKIRAfExwEAE +5BYAAgAR4l6CECMqAAMiApIQEeJewCGSEATkMYQDgwKCAYEAANMwATMAAAAAEOJZkQCSAZMClAMR +4leCEAHqMKIRAfIxwEAE5BYAAgAR4kyCECNKAAMiApIQEeJPwCGSEATkMYQDgwKCAYEAANQwAUMA +AAAAAFyUAV2UAl6UA1+UAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAABckAFdkAJekANfkABTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAnJQAHZABnZQCnpQDn5QECJQFCZQGCpQHC5QAQwAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJyQAZ2QAp6QBx2QA5+QBHiQBXmQBnqQB3uQAFMAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADclAAdkAHdlALelAPflAQElAUFlAYGlAcH +lAgIlAkJlAoKlAsLlABDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3JAB3ZAC3pALHZAD35AEtJAF +tZAGtpAHt5AIuJAJuZAKupALu5AAUwAAAB///UAA0jEQ//4KAAAAAAAf//2IANMxEP/+CgAAAAAA +H//90ADUMRD//goAAAAAAAD0MAoAAAAAAPQwCgAAAAAA9DAKAAAAAGwQCCcgB4giFuEr+8JOBeF3 +AQDlgPFr1wKAABjhJC6AgOaqCAdw3QAA/VPIFaTuHQCuTu3hHxdwCQAA/4AIS6AJpQAqop0LfAos +wsMMqgHqFgIlB/mAAIjY9wAI8JIAnQAvYq7s4RUXhcGAACpirSzCf+yrAQRz/QAA/UAFJiIAnQCe +2P1ABS4iAJ0ALyAUpP8PD0cvJBT14AeuUgCdAPggSBXnhQEA+QAHcVIAnQDoPBAiDD0AALBKbakF +CACGCQJhwFCIEo0y7SYcIkv9AADrMgEszwKAAKmImBPzYApAUAoFAOoWAC2LSgAAixDrSwgL5wKA +AObMCAXb/QAA68adKpAEgADRD+okAAnYBIAA7EQACugEgABYe0HSoNEPAMCwCYw07NYILfseAACN +ImXf1fpAaB2gG8UA/AAiHaANFQBYgbJj/7///AwNoAoFAAAAjiJl77AtgIAt3Df64wAV5N0dAO1N +CAlQBIAA/aBAFeAMFQBYgaVj/4zAoFm7lx3gzIjY+R/2wJAJpQBj/5zaIFv7AWP/BgCOJ54RiOn7 +wqQV78kFAOXpFCdggQAACckB6b0IClcCgADqVQwEQEEAAJjpCFUy5eUUJukBAAD9AAg64gCdAGir +PairK7zw+6AE0+IAnQDvEgIiDHUAALBObekFCACGDwJhK8IBC6sI5ckEJdvBAAD9YAbMYgCdAOvG +AS3ABIAAZFCp9QBoHe/6lgAAAAAAAOokAA7gBIAA7BYELFgEgABb/FaLMYgTjRTqFgAtZwKAAOyI +CAX0/YAA2iD7AGgd4AwFAFv8HY0Q7a0ICpAEgADtTQgL9wKAAObuCAbr/QAALead0Q8I3Qz6IEgV +5P0dANMPbfkFCCCGCwJjKxIC708MBMEBAADtuwgHjEEAAC78/23pBQhAhgsCZS/JBA2oDKiYKIww +6MYBL/rWAAAqnECawfuABhWgCAUA+YCEHa/9FgALiAz5wSYVr/vaACicQPmAJhWv/LIAbBAEHeBy +GuBzHOBxLdK4KqF/LMKPo93qOgwO7kKAAP2AAEZwCwUAK8QEK8QFWRXQ+kBoHaALBQBb/MrRDwAA +AGwQBBjgZSmCfyowBy2RAi6RBP0gpBWgDwUA65IAJokRgADu7P8mk/0AAOKVAi93AoAA7rsIDmcC +gAD9bwANsADGACuRBS2RBLG7/7/gFa+7AQDrlQUvdwKAAP1gBrxiAJ0AjJDuzAgN3wKAAAvLDAsA +hw/fYOsABwbzJ4AAHuBHKZEFK+J/CZkRqdnt4n0lhhGAAIzRi9CbwIvQnLGf0J/RK+J/sLsr5n/1 +oAYcH7kBAIzZ+aMAFa/JBQD5AAQEfxIFAKLSKyY6/6IEHeVJBQDp1REkIQEAAOTWBy0vAoAA5NYG +KlgEgAD1gATkIgCdACXVEOhYCAR4GwAA7IxAJ/oBAAD94ARjogCdAMky6UQABQCBgABtqQUDAIYJ +AmErIkKrWP8ABYxiAJ0A6CZCJpPhAADRDy+VBf/8mA2gCwUAwKX9wC4FoDslAFm9YMAg0Q8t4oCM +0YvQm8CL0Jyxn9Cf0SvigrC7+9BGFe/8+gAAwMD7D+gVoA0VAFhznMAg0Q8AAAAAAAAA79YJJpPh +AADRDwDLMPpgaB3gbEUA7Kw2CnAEgABtyQULIIYOAmP4YABF8F5FAH6hDS+srNMPbfkFC0CGBAJl +KY376SZCJpPhAADRDwAAAADkJkImk+EAANEPAABsEASCIwICQdEPAABsEASFI4MgFN/r+ECEFaFV +AQDq3+karsKAAORUCAGAuYAA+wAEBDaYOQAJiAIoJQQiQn/RDx3f4BPf4R/f4SZCfishBC5Cf5Jg +liGj//1gBAX2yzkADLsCr1/vJgAnKAUAACVGfyJGfuslBCqQBIAA0Q8AAGwQBIogZaBQHd/S6iID +KfbCgACu3f2v6BXgDBUA/IBABjGqAQAGqgINyCwI3SgnJQXtzAwEWAUAAP1tAAw/+8UA66oBDE5C +gAAJWQIDqgKaIwmIAiglBNEPjyMb374PD0EL/hGr6y2yfxnfuCyyfnLZGdnA8yPeDaAMBQDAwCy2 +fyy2fvpACBWgAEYA2MDzDEYNoAwFAHLRHI0hmtCOICmyfZ3hnCDsJgEky/0AAPlvphXv/VoAGd+k +GN+kqYio6HihIOq2fy+BLgAAza0qsn1qohgtsnv9b+YV4ABKAAAAAAAAAOy2fyf/KYAA+kAIFa/+ +pgAc35WIIayZqen5DwAM8AwFAAnIOPlvxhWv/ioAbBAE9b8iBeAGFQD0QGgdoAI1APaAQAMwAB4A +ALAiKFJ/6GP3cquBAADRDwBsEAT0Q6gVoyMBAPJaAAk4Ux0ABCIKhCaCIQVEKApEEaQi0Q9sEASI +JxvfffUCghXvxwUA4oIJKTAEgADpgRUkIIEAAOdEAQKpAQAA5YUUIRMBAADihgkiIQEAAPRBUg2g +CkUAApIIIoYJCwCH7d9tGSgEgABtqgIFAmGdIIxgwNTjJgIuZgKAAA3MApwh0Q9sEAouIgIqIhgP +AgDx3YwN5zUBABzfYS4iAP1ACBXgOwUA/0CwFeAKVQBZvJwqIhIkIAf6PgAEMAc1APUADFiRRAEA +CshR9QAMcJIAnQAc31P+TTAVoAsVAPh/wBXhakEA/MBoHeAKVQDpuTkPRwKAAPjGAAswOwUA6RYA +K3gEgABZvIYc3zHq3zMaSASAAPSAB2oSAJ0ADEsRqrstsp73oAvp0gCdACuynQxNCi3Sww27AekW +CCWKSYAALCEHHd84DAxK7984HmcCgAANzAKcsBzfNf5ACBWjPQUA/WDmFeAJBQCZuOm2BitXAoAA +mrn9YKYVoBqFAJqzGd8s7+4CD0YCgACetCm2AgeIAii2ASgSCBnfEO/fJhxHAoAACYgIJ4adLiIS +KiIQD+4C7iYSKVgEgABY5Lb0YARREgCdAIonDwIADwIAjaz7RgAVoAsFAOreDAbrIQAADts5WH8G +/b4qBaA7BQDtJAANGASAAP5gaB2gClUAWbxI0jDRDwAe3vSN6OQWCCgECoAA96AEuJIAnQAMmxGq +uy+ynvfgBUnSAJ0AK7KdDJ8KL/LDD7sB5LCXZsP9AACY6OkWCC335gAAYAA5wCDRDykaAAmqAvpC +RhWv+b4AKyoAC6oC+kJGFa/5sgAAAPoAoh2gOwUA7N7yGWgEgABZvChgABQAAOokAAJYYQAA/AAC +HaANNQBYf6ZoMkLAINEPAAAAAAAA//o8DaALBQDAoFm5lB7eyBreyY3oHN7EiRj5v/q4kgCdAP/9 +1A2gCwUAwLDAygzcNP3BBhWv/ZoAH97OnxSOINog/b2sBeAMFQDtFgYvdgKAAOzuAgDYQQAA7hYF +KugEgABYfqDAINEPAAAAbBAYkhCOIBXey4kjiyGKIioWIisWJPgkZhXgBBUA9CDmFaAIBQD4IKYV +oAxFAPwhRhWgDTUAnRn0IMYV4A8lAJ8Y9b16BeAPpQD+IgYV4A21APwiJhXgDMUA/CJGFaAIhQD4 +IcYVoASVAPQh5hWgCXUA+CGmFeALVQD6IWYV4AplAPohhhWgC9UA+iJmFeAK5QAqFhT1vVIFoAn1 +APgiphXgCEUAmBSGFisSJIkVJ2F+LBIiImF/B5koL1CAqSn4nYgVo5kBAAOZCu6SAC9QBIAAJmI+ +LRIjqO4LYACOFywSJC0SIgfuKC9Qga4u+J2oFaPuAQAD7gqO4CoWFuoSIy1YBIAAqO4LYACOGCwS +Fi0SJAfuKC9Qgq4u+J3IFaPuAQAD7gqO4CoWF+oSIi1YBIAACO4IC2AAjhksEhctEhYH7igvUIOu +Lvid6BWj7gEAA+4KjuAqFhjqEiQtWASAAKjuC2AAjhosEhgtEhcH7igvUISuLvieCBWj7gEAA+4K +juAqFhnqEhYtWASAAKjuC2AAjhssEhktEhgH7igvUIWuLvieKBWj7gEAA+4KjuAqFhrqEhctWASA +AAjuCAtgAI4cLBIaLRIZB+4oL1CGri74nkgVo+4BAAPuCo7gKhYb6hIYLVgEgACo7gtgAI4dLBIb +LRIaB+4oL1CHri74nmgVo+4BAAPuCo7gKhYc6hIZLVgEgACo7gtgAI4eLBIcLRIbB+4oL1CIri74 +nogVo+4BAAPuCi7iACoWHeoSGi1YBIAAqO4LYACOHywSHS0SHAfuKC9Qia4u+J6oFaPuAQAD7gou +4gAqFh7qEhstWASAAKjuC2AALhIQLBIeLRIdB+4oL1CKri74nsgVo+4BAAPuCi7iACoWH+oSHC1Y +BIAACO4IC2AALhIRLBIfLRIeB+4oL1CLri74nugVo+4BAAPuCi7iACoWIOoSHS1YBIAACO4IC2AA +LhISLBIgLRIfB+4oL1CMri74nwgVo+4BAAPuCo7gKhYh6hIeLVgEgACo7gtgACwSIS4SEy0SIC9Q +jQfuKChC+a4u+iBmFaPuAQAD7gqO4OoSHy1YBIAAmxGo7gtgAIwRLhIULRIhL1COB+4oKEL6ri76 +IEYVo+4BAAPuCo7g6hIgLVgEgAArFiOo7gtgAC4SFSwSI40TB+4oL1CPri74n2gVo+4BAAPuCo7g +6hIhLTgEgAAnFiLo7ggL2ASAAAtgAI4RKhYkKRISLRIVjxUrEhMsEhToEhEn+EEAAO8WBSXYQQAA +6xYTJmBBAADsFhQkQEEAAOgWESboQQAA7RYVJMhBAAApFhKNH4kciBuMHosd7xIQJEBBAADoFgsm +YEEAAOwWDiXYQQAA6xYNJ/hBAADvFhAkyEEAAOkWDCboQQAAnR+JFo0ZjxrrEgciIQEAAOwSCCbo +QQAA7RYJJ/hBAADvFgoiqEEAAO8SBCZgQQAA7BYIJdhBAADrFgckyCEAAOkWBif7/QAA7xYEL+Im +AACJEI8TixKOkIiTjJKNkauIp8yq3a/unpCdkZySmJPRDwBsEAQpIhX4oAAE8Dh1AOmMDAEgQQAA +8yAART+LBQDrpBAlUEUAAPkABdNiAJ0AKwoAWbVPLCIVKyIU7c0RCUAEgAD8QkYV7oA9AP1rAA2w +CTUA+kJmFeAKJQBtqgyOhA4Oju6GBCRAEQAADwIA0w/TD22aIemCBCRAQQAAioGLgoyDCQmOCgqO +CwuODAyOmYCagZuCnIPrRAAJUASAAFv+toogiCKJIY8jCAiOCQmODw+OCgqOmiCfIykmAegmAilA +BIAAGd19AgCGAwJh+AAKFeAJtQBtmgIIAIrRDwAAAAAAAAD9gQAVoAsFAFm1IPhAaB2gCUUA0w9t +miHpggQkQEEAAIqBi4KMgwkJjgoKjgsLjgwMjpmAmoGbgpyD6iQAClgEgABb/pTaQP/7/A2gPIUA +AGwQBikiFfhCiBWgRgUA0w/4gABFdZkBAAlmDHSrAbGIKiYVBioM6CYUJVFBAAD2gAezogCdAOs0 +AAtgBIAAWbT0+EBoHaAJRQDTD9MPbZoh6YIEJEBBAACKgYuCjIMJCY4KCo4LC44MDI6ZgJqBm4Kc +gyUsEOokAArYBIAAW/5xBkcM9uAFjtIAnQDmNAgK0ASAAPbgaB2gAwUA5BYAKkAEgAD4yGgdoAlF +AAoCZwhAhgoCZQgghgoCYwgAhuoMAAlABIAAbZoh6YIEJEBBAACKgYuCjIMJCY4KCo4LC44MDI6Z +gJqBm4Kcg+okAArYBIAAW/5U6lQAAZgFAADmbMAiIQEAAO9tmmpABIAAixAKPBELywjsfAwK0ASA +AFm0vNEPAAAAAAAA6zQACmAEgABZtLfRDwAAAPZgAEYwAwUA/CAGFa//JgBsEAQY3REZ3Q8a3Q0T +3RCTI5gimSH6QAYVoAsFACsmFSsmFNEPAAAAbBAG3iDk4hAqYASAAOdCByvQBIAA+7n8BeAYNQDj +QhUpkASAAOdyDiL76QAAePsnGNz+CPgKiICaE5wS7hYBLAAigAAAkxAqsp3sVAAJWASAAFm2jWSl +x/KCphXgAgUA0Q8AAAAAK+ISC5tS7hYBJf9BgAAa3OfjFgApWASAAOqivyrgBIAAWbaAZKV6Gtzg +2yDqosEq4ASAAFm2eyN9BeSmz2GaAQAAGtza2yDqosMq4ASAAFm2dPdH4A3jhgUAGtzU2yDqosUq +4ASAAFm2bmSmxBrcz9sg6qLHKuAEgABZtmn7QEKIEgCdACsw5cFY9WAr4GIAnQBptyElNOWLEPqC +phXgAgUA0Q+TECqylexUAAlYBIAAWbZcZKcCixD6gqYV4AIFANEPAJMQKrKj7FQACVgEgABZtlRl +rxr6IGgdoAu1AFjhMPoAIh3gAwUA6rM4BQDhgADqEgIrWASAAFm0wMipHNyxjREMrDYs1hdlMyWN +EPyCphXgAgUA0Q8uQG5k7tKTECqyuexUAAlYBIAAWbY9Za6/+iBoHaAbZQBY4Rn6ACId4AIFAOqy +OAUAqYAA6hICK1gEgABZtKosfQMqxShlItGNEPyCphXgAgUA0Q8AAJMQKrKr7FQACVgEgABZtilk +orca3IrbINMP6qKXKuAEgABZtiRlrlr6IGgdoAtVAFjhAPoAIh3gAgUA6rI4BSfpgADqEgIrWASA +AFm0kCxAb/GAJz7SAJ0AZKTfihP6AKId4AzVAFjg3dKg0Q+TECqysexUAAlYBIAAWbYOZa7H+iBo +HaAbJQBY4OpkojUrQG5kt2/qEgIrWASAAFm0fCxCFgrMNixGFosQ+oKmFeACBQDRD5MQKrKv7FQA +CVgEgABZtfxkojMa3F3bIOqiqSrgBIAAWbX3Za5t+iBoHaAL5QBY4NRkodvqEgIrWASAAFm0Zyt9 +Aiq1FIsQ+oKmFeACBQDRD5MQKrKh7FQACVgEgABZtehkoioa3EjbIOqirSrgBIAAWbXjZKOHGtxE +2yDTD+qimyrgBIAAWbXeZa4H+iBoHaALdQBY4LpkoXUrQG5ktuMa3DmLEuqi5ytgBIAAWbXUZaZG +K0BvwMgMuwIrRG+LEPqCphXgAgUA0Q8AAJMQKrK37FQACVgEgABZtclkoe8a3CrbINMP6qKZKuAE +gABZtcRlrZ/6IGgdoAtlAFjgoGShDStAbmS2ahrcH4sS6qLnK2AEgABZtbpkpnkrQG8sCv0MuwEr +RG+LEPqCphXgAgUA0Q8AkxAqsp/sVAAJWASAAFm1r2ShtxrcENsg0w/qopMq4ASAAFm1qmSi2hrc +Ctsg6qKzKuAEgABZtaVkrF8a3AbbIOqiuyrgBIAAWbWgZaxMGtwBixLqotUrYASAAFm1m2WkUosR +K7ISC5lSyJlokgf5IA9h0gCdAIwRK8YS8oKmFeACBQDRD5MQKrKP7FQACVgEgABZtY5koXoa2+7b +IOqikSrgBIAAWbWJZay0+iBoHaALJQBY4GXKohrb5osS6qLnK2AEgABZtYFlrJSKE/oAQh3gDNUA +WOBH0qDRD8Ag0Q8AAAD6IGgdoAv1AFjgV2Sv6uoSAitYBIAAWbPr6xIAI+ALAAAqxRX6gqYV4AIF +ANEPAAD6IGgdoBsVAFjgS2Svui1AbmTVBilAb/E/4ZeSAJ0A8T/hV9IAnQDqEgIrWASAAFmz2S5C +FwruNi5GF4sQ+oKmFeACBQDRDwD6IGgdoAulAFjgOWSvci9AbtMPZPR26hICK1gEgABZs8soQTT7 +AA8CogCdAIoT+gFCHeAM1QBY4BjSoNEPAAAA+iBoHaAbVQBY4ClkrzLqEgEqWASAAOwSAitoBIAA +WN+IixD6gqYV4AIFANEPAAAA+iBoHaALlQBY4B1krwIpQG5klBka252LEuqi5ytgBIAAWbU3ZaJc +K0BvjRD8gqYV4AwVAAy7AvqN5h3gAgUA0Q8AAAAAAAAA+iBoHaALFQBY4Atkrroa24yLEtMP6qLn +K2AEgABZtSZlqymKE/oAIh3gDNUAWN/s0qDRDwAAAADqEgIrWASAAFmzlPVAFfKSAJ0Axy/RDwD6 +IGgdoAuFAFjf9/oAIh3gAgUA6rI4BQFJgAAsQG4PAgBkw4Ma23vrEgIrYASAAFm1DmWibi1Ab8Do +Dt0CLURvZS41jxD+gqYV4AIFANEPAOoSASpYBIAAWN/tZa+cKzDlY/pzAAAAAPogaB2gGwUAWN/d +ZK4CKEBu0w9kgvXqEgIrWASAAFmzbylCGIsQK0YVCpk2+IMGFeACBQDRDwAA+iBoHaALNQBY389k +rcoa21CLEtMP6qLNK2AEgABZtOrj21UdBy4AAIsRK7ISC8lRyJlokgf5P/kR0gCdAI4RjBADvQEt +5hL8gqYVoAIFANEPZS2EjxD+gqYV4AIFANEP6hICK1gEgABZs04qRTSCEPKCphWgAgUA0Q8lfQT0 +sAAV4AsFAPqgaB2gjAUAWbLf6hICKtgEgABY3+srMOXAxAy7Avp8Jh2nuwEA+nymHe/l/gAtMOX6 +IEgVoA4lAA7dAu005StYBIAAWbM2KzDl+nyGHa/lbgAAihJZpkkvMOJ/qRSKElmmRtyg6hICI9gT +AABZtLVkobfAov22PgWgOwUAWbhIxy/RDxrbEYsS6qLPK2AEgABZtKxlrj6LESuyEgvJUWiRCmiS +B/k/8WnSAJ0AHtsSA70BDt0CjhGMEC3mEvyCphWgAgUA0Q+KE/oBIh3gDNUAWN9m0qDRDwAAAPog +aB2gC0UAWN93ZKxqGtr4ixLTD+qizStgBIAAWbSS49sAHQVmAACLESuyEgvpUciZaJIH+T/uEdIA +nQCOEYwQA70BLeYS/IKmFaACBQDRDxra54sS6qLXK2AEgABZtIJlrZaLESuyEguZUmiRCmiSB/k/ +7CnSAJ0AH9rqghHvvwID6BcAAO8mEibqAQAALNDlwOEOzAIs1OXygqYV4AIFANEPihP6AQId4AzV +AFjfONKg0Q8jfQUjPIArMOXAwQy7AgsLR/p8ph3v4BIAAAAa2siLEuqizytgBIAAWbRiZa0XixEr +shIL6VFokQpokgf5P+gx0gCdAB3aywO8AQ3MAo0RLNYSixD6gqYV4AIFANEPAAAAAAD24ABDMAsF +APrAaB2gjAUAWbJgwVDqEgIrWASAAFjfbCsw5QW7Avp8Jh2nuwEA+nymHe/eEgAAACsw5cDIDLsC +CwtH+nymHe/dvgCKE/oA4h3gDNUAWN8I0qDRD4oT+gICHeAMxQBY3wTSoNEPihP6AUId4AzFAFjf +ANKg0Q+KE/oBIh3gDMUAWN770qDRDwCKE/oBAh3gDMUAWN730qDRD4oT+gJCHeAMxQBY3vPSoNEP +AIoT+gIiHeAMxQBY3u7SoNEPihP6AMId4AzFAFje6tKg0Q+KE/oA4h3gDMUAWN7m0qDRD4oT+gDC +HeAM1QBY3uHSoNEPAGwQCCMgB9og8iAAAfALhQDtFAAJ4ASAAFh72O3agBUGyYAAjCANzAKcoBva +fYon6BIAKc8CgAALmQjolgAlAJGAAC6iDC+sMP/ABOViAJ0A8UXADeADBQAjpRT7RAAV78wFAAy7 +AeiiDCXZAQAAm6nrpgglSMEAAHmJXxzaQv200gXv/vUAnqCTJ+rTenVYIQAALcJ9Gdpkm9GZoyjC +fSimAi/Cf+vGfSf4BQAAL8Z/IyQEIyQFkyIjJCAjJCEjJCIjJCOTKZMqkyuTLCMlGvJDZB3gAgUA +0Q8AANogWPNV+kDoFa/+XgDaIFjzUtogWPNGiidj/1gAjiJk4FMFD0do8mjAINEPAC7CgOvmASZo +CwAAnaMpwoCZoijCguvGgCRABQAAKMaCIyQEIyQFkyIjJCAjJCEjJCIjJCOTKZMqkyuTLCMlGvJD +ZB3gAgUA0Q8rIAfaIPogAAXwDAUA+2MAFeANBQBYetdj/5Af2hCfFI4g2iD9tFoF4AwVAO0WBi92 +AoAA7O4CANhBAADuFgUq6ASAAFh54cAg0Q9sEASIImWAnyYgBxfZ8QYGQeoyBStHAoAAp4grgp4k +rB/5s9AF5EQdAHSzfyiCnQlrCiuywwuIAe2EAAQDwYAAHNnzDACHbUkCCAJhiDQe2fOe0CkiABzZ +9OrWAybYQQAA7NYCLM4CgADpSQIB4IEAAOnWASlQBIAAC4AADGgR9wAARHf1AQDkhp0nlHUAAIon ++gFCHeAMBQD7RAAVoA2lAFht4NKg0Q/AINEP//4gDaAIBQDqJAAKaASAAPrDABXgDAUAWHqYwCDR +DwBsEASHJyp5FB/ZzvjipBXvzQUA6HIIJVAHAADscgslUoEAAOqTd3PYgQAADbsBq5nowXR0yQEA +AC6NAep1FCdSgQAA6pNxfDAEgAB5oX2aeO8ABQs4BIAABwJhBwJhBwJhBwJhBwJhBwJhBwJhBwJh +BwJhBwJhF9mzl2CFIJNllGTzs6IFoAelAOJmAiquAoAAB1UC5WYBKxAEgADRD8Ag0Q8AAAAAAAD3 +gGgdoAgFAPjhZhWv/nIACJoMCroMKq0BKqzg+uEGFa/+IgAsvED84QYVr/32AABsEATHjwhYAwg4 +AghIA6ho6CIIC4EKgAACIhiiMtEPAGwQBAQ4AwhYA6ho6CIIC4EKgAACIhiiMtEPAABsEAQEOAMI +WAEISAOoaOgiCAuBCoAAAiIYojLRDwAAAGwQBAVIAwg4AQhYA6ho6CIIC4EKgAACIhiiMtEPAAAA +bBAEE9mdAyIC0Q8AbBAOIyIQKDAFKQqSeYkbKSIS/yKgAxCGBQDl2ZUU4DaAAHCXCiowbmihGcAg +0Q8A69mRFL3YgAALmwH6QkYV4AIFANEPIyIYHtmMjTqMIiQKAf+mAA6wvVEA7TYKJgbRgAACKgJY +8oEY2YUvMhEI/wIvNhGJImSQyRjZWpgUjiDaIO/ZfxDYQQAA7xYGL3YCgAD1xgAPMAwVAP4gphWg +DSUAWHkswCDRDwCOPoQ3G9lv5EIOJ3AFAADr6wIA4MEAAP5hxhWv/fUA/CGmFeibHQDpxAIpUASA +APuAZh3omR0A+YAmHeiZHQDpxAAg2IEAAFjw8SgiEg8CAAWIAuaIAgnQBIAA6CYSIlgLAABY/Fv8 +JAAVoA01AP4AAh2gDwUA6dlZHVgEgADpFgApUASAAFm3PMAg0Q8A2iBY25hlrzNj/ucrIAfaIPog +AAXwDAUA+2MAFeANBQBYeehj/xoAAGwQBCUxDdMP0w8MVRHqJAAK2ASAAFg78+ukAAUCOYAAGNkY +KjENCACH6LQABQBpgABtqQIIAmEqMQ1tqQUEAIYLAmHaIPygaB2gCwUAWDuqKSISKvp/CpkB+EJG +FeACBQDRD8cv0Q8AbBAIIyIYGdkuKDIRCYgC6DYRKVAEgABY8mskIAfaIPQgAAIwC4UA7RQACmAE +gABYem/spAAFChGAABnZFIgg6YgCCdAEgAD5gAYVoBulAFm3mB3ZD4w+6hIAKl8CgACtu+q2ACYA +eYAA6zIQKVAEgAALwACKJ+SgDmV4wQAAjqz/wActYgCdAPFGYA3gBAUAJKUU+0QAFe/MBQAMuwHo +ogwl2QEAAJup66YIJUjBAAD5AAVFYgCdABzYz/2x7AXv/vUAnqDkJgclWCEAAPugBiOiAJ0ALcJ9 +Gdjwm9GZoyjCfZiiL8J/68Z9J/gFAAAvxn+ULpQvJCYQJCYRJCYSJCYTJCYUJCYVJCYWJCYXJCYY +JCYZJCYaJCYcJCYdJCYeJCYfJCQEJCQFlCIkJCAkJCEkJCIkJCOUKZQqlCuULCQlGiQlG/pgaB2g +CwUA/AACHaANJQBY9Z3AINEP2iBY8dH6QOgVr/1OANogWPHO2iBY8cGKJ2P/DxjYyy8yEY4iCP8C +7zYRJwGZgAAFCUdokkPAINEPKMKA64YBJngLAACfoy7CgJ6iLcKC68aAJugFAAD9kEYV7/zyACsg +B9og+iAABfAMBQD7YwAV4A0FAFh5WWP/tR/YkZ8UjiDaIP2xcgXgDBUA7RYGL3YCgADs7gIA2EEA +AO4WBSroBIAAWHhjwCDRDwAAAGwQBhnYhJkQiCD8gGgd4AwVAOMWAixGAoAA7IgCCVAEgADoFgEo +2ASAAFh4VtEPAGwQDCsiGCuyByuyDioiECiwIi2wISywIC6wHCOwHe+wHi5mAoAA7cwCD3YCgAAD +7gItsADjsB8vdgKAAA/uAu+wIy5mAoAA6MwCD3YCgADj7gIOZgKAAA/MAv+PAAw13QEA/QRAIFAz +9QAvohJ+8QgP6AxmgAIuphIuohN84QgOyQxmkAIsphP9rMAGUCo1APugDKwgLEUA/aAOBCAuZQD/ +oA9sID8lAP+gEWxiAJ0Ac9EQwKL9sOwFoDsFAFm1i8cv0Q8osBgpsBnqsBosRgKAAAmIAumwGyxG +AoAACogCCIgRCYgCsYj4QsYVoAIFANEPIyIQZDBxKbAQKrARLbAa7LASLM4CgAAKmQLqsBMszgKA +AAyZAuywGSzOAoAACpkC6rAYJIUpAAAIqhEMqgLssBstVgKAAA2qAgiqEQyqArGq6iYWJISlAAAp +IhLr2FEUwCiAAAubASsmEiwwBS0Klf2ACxRiAJ0AwCDRDwAALLAULbAV7rAWLmYCgAANzALtsBcu +ZgKAAA7MAgjMEQ3MAv2WoABQhQUALSIShDfkQg4m4x6AAPwkgBXo7B0A/6BGHa//9QDvFggpUASA +AP2gZh2ozh0A/aAmHajMHQDs1AAlyCEAAOkGAADAYQAA6IMeANhBAABY77QoIhLliAICWAsAAOgm +EilQBIAAWPsf/CIAFaANNQD+AAIdoA8FAOnYHR1YBIAA6RYAKVAEgABZtgBj/zUAAAAqsBgssBnt +sBotVgKAAAyqAuywGy1WAoAADaoCCKoRDKoCsarqJhYpUASAAFjf6MAg0Q8ssBgtsBnusBouZgKA +AA3MAu2wGy5mAoAADswCCMwRDcwCsczsJhYpUASAAFjfecAg0Q8AAC2wGC6wGe+wGi7uAoAADt0C +7rAbLu4CgAAP3QII3REO3QKx3e0mFilQBIAAWN+fwCDRDwAAAAD6YGgdoAtlAFj7FcAg0Q8AAC6w +GC+wGeiwGi92AoAAD+4C77AbL3YCgAAI7gII7hEP7gKx7u4mFilQBIAAWN8WwCDRD2wQCCggBCQi +GPevsAWgGYUAeYEDwCDRD4pK/17ADNCL5QAvQHh78essIAUY19ju19gWfxGAACUiEikiEysxCwhV +ASUmEo05q5l96DcuIhEpJhPyoAXeUgCdAGTg5orsfKexiOv7wGgdoAsFAPwAAh2gDSUAC4AAwJDp +JhEskASAANEPAP2viAWgCiUA/kAIFaA7BQBZtNIpIhApkAUqCpX7P/uEIgCdAIpK81/7NNIAnQAj +IhiNOowiwEH3pgAOsL1RAO02CiYEiYAA2iBY8KQf16guMhEP7gIuNhGIImSAgh3XfZ0UiSDaIOzX +ohDYQQAA7BYGLM4CgAD1JgAMsA0lAPggphXgDBUAWHdPwCDRDxzXoY3g/8CwFaAKVQD0IAYV4DsF +AFm0ri4iEsCQ+EImFe+/9QAP7gHuJhIskASAANEPANogW/7rZa9KwJDpJhEskASAANEP2iBY2c1l +r3tj/rAAKyAH2iD6IAAF8AwFAPtjABXgDQUAWHgdY/9hAGwQCiggBCoiGCkKGOmBCH04BIAAwCDR +D4uq/37ADNCN5QAsoHh9westIAUe13zv13wW/xGAACsiEpoYDrsCKyYS82Amo1IAnQCOLIg2JTAg ++mFEFa/0xQD/AAsNJWUBAAoKTiqs2/VABAUwhLUA9YAUVCIAnQAPuwL7wABEsDwVAPhBhhXgJCUA ++kJGFeAqFQD6wkYNoC9VAH9hCnxhB/TAKw0iAJ0ALjAwKDAxKSBo6jAyL3YCgAAI7gLoMDMvdgKA +AAruAujuEQTIGQAA6O4CDIIKgAD0RkQVoZ6dAPUgI1dQDAUA/TAAFDWuAQAIqgIZ10ydGZsWiZMb +10rlFgcqbkKAAASZLOiy3iSDcYAAlxUlsvsrsvWqiOVSFCxGQoAA+WAARbAPFQBtmUwpUQSHUP8g +ABS1ih0A6XcIDEeCgAAIdwwnff/25+gV5JoBAACRBAD4Guh3AQyCCoAA/YAgFaF3nQDqSggDgHGA +AIi6cokEib5+kXur2/2uVgWgCiUA/EAIFeA7BQBZtDUqIAUrIhibFZoZHNcljxWIGYkgjvDv8Hgr +aASAAPggBhXgCiUA+CAmFaA7BQBZtCkoIhAogAUpCpX5H/JUYgCdAIkYiZrzP/H00gCdAPpAaB2g +CwUA/AACHaANJQBYA3fAINEPAAAA7xIIJfz5gAAv8HgtsAX6QiYV4Iq1APvgGkUgmKUA+aAaBCCZ +tQD5oBnEYgCdACoKlvugGWwiAJ0ALAqZ/aAglSIAnQDC0fzACARgDoUAwvX+wAe0YgCdACgwQSww +QC0wPCkwPe8wPi5mAoAA6MwCDu4CgAAJ3QIoMD/pMEIu7gKAAA/dAu8wQy5mAoAA6cwCDu4CgADo +3QIOZgKAAA/MAg3IDOoiECQEi4AAL6ISffEID9gMZoACLaYSLaITfNEIDckMZpACLKYTjLwOzAL9 +YYYVoCpVAPrABHQiAJ0Aw9H8wAn0YgCdAMLh/sAQFCIAnQDC8v7AHURiAJ0AKBAQZI0dYAMVAAAA ++ABiHePL4QD9P+t2IgCdACkwJCwwJegwJizOAoAADJkC7DAnLM4CgAAImQIImRHsmQIFQBEAAPkN +AA1/9P4AAAAALTAjwPEN/TkttEEssEH8IgYdoCpVAPrf96UiAJ0AKDAh8R/7f9IAnQAoMEEsMEAt +MDwpMD3vMD4uZgKAAOjMAg7uAoAACd0CKDA/6TBCLu4CgAAP3QLvMEMuZgKAAOnMAg7uAoAA6N0C +DmYCgAAPzAINyQzqIhAkhIuAAC+iEn3xCA/YDGaAAi2mEi2iE3zRCA3JDGaQAiymEy0wOC8wOYy8 +6DA6Lu4CgAAP3QLvMDsu7gKAAAjdAurWjh7uAoAAD90C7swCBugFAAAtJhacvPthZhWv+3oALjAk +LzAlLDAh6DAmL3YCgAAP7gLvMCcvdgKAAAjuAgjuEQ/uAvGAFUYSAJ0ALzBMKDBN6TBOL/4CgAAI +/wLoME8v/gKAAAn/Agj/Eej/Ag8THgAAKiIQ6qIYJ5LxgAD/QBKz4gCdAC+2Ei0wSCgwSekwSi7u +AoAACN0C6DBLLu4CgAAJ3QLu1mYe7gKAAAjdAi22FCgwNiwwNCowNfxm8BXgCQUA6bYVLmYCgAAK +zALpthMuZgKAAAjMAu62Cy5mAoAADcwC/WGmFa/4QgAvMDgoMDnpMDov/gKAAAj/AugwOy/+AoAA +Cf8CCP8RCP8C7tZMF/gFAAAvJhb/YWYVr/duACoiEdMPZKFFiqcroR4oCpD5YAfqogCdAC0KYP96 +ABWgCiUA/ayABaA7BQBZs0Zj/HIAAP/uhA2v+vUAAAAc1jrpEgYu8ASAAP1gCBXgClUA+CAGFeA7 +BQBZszstIhL6QggVoE4FAA7dAi0mEi4wQSswQCwwPC8wPe0wPi3eAoAA7rsCDmYCgAAPzAIuMD/v +MEIuZgKAAA3MAu0wQy3eAoAA77sCDmYCgADuzAIN3gKAAA27Agy9DPe/0gASAJ0ALaISfNEIDc8M +ZvACLKYSLKIT+5/RNGIAnQAMuAxmihv7QmYV4AIFANEPAAD6IQgV4AkFACkmESqyByk8IPtByBWg +DDUAbcoFCQCGCgJhwCDRD4mu0w/5JgAV4AxlACo8IG3JBQoghgkCY8Ag0Q8c1f/oEgcveASAAP9g +CBWgCiUA+CAGFaA7BQBZsv9j+1WKGCwxC4qnv8z7Q8QV68whAAzNESncMPl/9ZPiAJ0Aia7lz6pk +yMEAAGP5gAAsMDgtMDnuMDouZgKAAA3MAu0wOy5mAoAADswCCMwRDcwC6tXkFmAFAAAsJhb7YWYV +r/0qACoiECqiGMOw+iAGFafcHQD9q7gFoAolAFmy32P61S8wTCgwTSoiEOkwTi/+AoAACP8C6DBP +L/4CgAAJ/wLqohgv/gKAAPnmAA+//vYAAABsEASJJyuZFOqSCSWASYAAyKFY91bRDwBsEASIIiMg +B/EAoA3hMwEAwCDRDwAAiScomRT3IcgVp6UBAOSSCSQJ6YAAFdVvF9Vr+UAJ0VIAnQD0YAY6EgCd +AAw5EaWZK5KeBzwKLMLD92AJilIAnQArkp0MuwFksNYpIED1IAgokIolAPUgBGkSAJ0A9aAEKpAK +BQDdQP6BBBXgDBUA+kBoHafqAQBYdgsk+pcm+mjuIhIpnwKAAPRgAEHwD0UA7zadIRkhAADzx0YN +4AUFACoiEqarLLInJLR9LrImnsAtsiac0SW2JuW2JyVTgQAAWbPCKSISwIHzLwAM8A8FAAmPOGT/ +yeQkBSlQBIAAWbO6wCDRDwD6wFAVr/3uABzVOIrIaqF/DDkRpZkrkp4HPQrt0sMoBAqAAPdgBBpS +AJ0AK5KdDbsBZLB3sK6eyGW/KIhA6zwYKVAEgAD/qu4F54jBAPhIBh2gDBUA/oAGFeANRQBYdfnA +INEPAAAAAP/7DA2gBAUAY/8LKSBACJkQ+IAGFe/7AgAAAAAAAAAA//tUDaALBQDAoFmv4BzVFIrI ++V/7kJIAnQD//kgNoAsFAMCwwNoNrTT9gQYV7/4OAAAAAGwQBogiLCAH8QCADeHMAQDAINEPiSct +mRQFDkfmkgkmhKGAAPnABmlSAJ0ALyBBFNUA69T8HhgEgADx7GwN4AVFAPYAAh3gDQUA7MoRBiW5 +AACkqiiingvOCi7iw/UACVviAJ0AKqKdDqoB26DsFgAlBoGAAC8gQWXw8gcOR+9hCCtoBIAA+kBo +HaAMFQBYdZ0MORGkmfUzphXvmHUA6CQFKVAEgABZs2DAINEPAAAAAAAAAP/9sA2gBgUAH9Tcjvj3 +wAZ4kgCdAAw6EaSqKKKe9QAHQ+IAnQAqop0LOAoogsMIqgHkoNZnS/0AAPnhBhXv/eoAKiBACKoQ ++sAGFa/8tgAAj54t8AQn8AUe1Rjl8AYu7gKAAAfdAu/wBy7uAoAABd0CCN0RD90CDt0BJdxn9I4A +CvCHlQD0oIAV7/w2AI1gixDs1QoZUASAAPtjABXn3cEA7SRAKugEgAD8wAYVoAwVAFh1iMAg0Q8A +ACzcSOvcZylwBIAA/sBoHeS7HQBZslr7QGgd7/vOAP/7bA2gCgUAnRH8IAYVoAoFAFmvbh/UoowQ +jviNERvUnvnf+MCSAJ0A//rIDaAKBQDAoMCKCOg0+eEGFa/6jgBsEASIIiMgB/EAgA3hMwEAwCDR +D4knKJkU5pIJJAcZgAD1qSAFp5UBAPkgBtlSAJ0A5dSJEaWZAAAMORGkmSqSnvdABtpSAJ0AK5Kd +BTwKLMLDDLsBZLB9LSBB8aucDeAKBQDdYP7BBBXn6gEA+kBoHaAMFQBYdTAMOBH1AABEMA9FAP8T +phXvnnUA7iQFKVAEgABZsvLAINEPABfUcYp490AEIJIAnQAMORGkmSuSngU8CuzCwygECoAA92AE +ClIAnQArkp0MuwHksHVla/0AAJ14Zb+Bj2DrPBgpUASAAP+pZAWn/8EA/kgGHeAMFQD+wAYVoA1F +AFh1MMAg0Q8A//x0DaAGBQAoIEAIiBD4wAYVr/x+AAAA+hEiHa/9HgD//MQNoAsFAMCgWa8Yinj5 +X/uokgCdAP/+YA2gCwUAAMCwwJoJqTT44QYV7/4iAABsEASKKiiiGCiABSkKc3mBJoknK5kU7JIJ +JYCxgADbIP4AQh2gjeUAWHPhwCDRDwD//6gNoAwFAIivG9SI6yYLIXiBAAD/AAYV4AwFAOgmCSVI +4QAA+EEGFeANJQD/QeYV756FAO4kBSlYBIAAWHHswCDRD2wQBIgiyIfAINEPAAAAAACJNyQgByqZ +FPWoRAXhRAEA7ZIJJQVBgADq1BsaTwKAAKWZK5KeCkwK7MLDKAQKgAD3YASCUgCdACuSnQy7AWSw +gvpAaB2gDFUA/mEEFeCO5QBYdMT4YQgV4A8FAOgyCSp3AoAA9cAAR3ANRQDt5p0kgIGAAJ87mYCK +OJihnzifOYs8JDBF/2VgB9+ctQAsNAWNLi4sOP+/+vUiAJ0A+J/6sNIAnQD6QggVoAs1AFj3WcAg +0Q/aMFmydGP/0//9YA2gDQUA60wYKVAEgAD8ACIdoA1FAFh0xMAg0Q8AbBAEKTAT8SEgDeD1hQD1 +IAZ4kgCdAMAg0Q8AAIQniDAqMBGETuI8GCQtfIAA+gACHeBMBQDqRAQiKA8AAOgwEiKosQAA6EQF +KtAEgABZq6UkTQP0jYAVoAsFAPqAaB2hDAUAWaug2lDsMBEpWASAAFj2+9pA7DASIdlhAABY9vjA +INEPAAAAAPwcAh2gCwUA6kQCIjALAADoMBIjMzEAAOhEAytQBIAAWauOJE0D9JWAFaALBQD6gGgd +oIwFAFmridpg7DARKVgEgABY9uWlO+wwEipQBIAAWPbhwCDRDwAAhCeETsCw6jARIkgXAAD7LEYd +oOwFAOgwEiI4EwAA6JRjK9AEgABZq3cmTQX23AAVoAsFAPrAaB2gjAUAWatx2nDsMBEh2GEAAFj2 +zaU77DASK1AEgABY9srqJAAKWASAAFj4XsAg0Q8AAABsEAQX05sW0+sncsMmYomkdwl3EadmhG3y +QGAlqIMdAPCCgA3nxMEALCRSi20LC18rJFOKbQqKFCokVIltKSRVKCRWIyRX0Q8AAAAA8krmHeiD +HQD4SsYdoEUFAPRKRh3gDwUA/kpmHeAuhQD+SoYdr/2FAC0kVdEPAAAAbBAGiCLxAXAN5zUBANog +WOypiSLLlWgyTsAg0Q8AAADqIhApWASAAFjWQWgyaYonjKz7RgAVoAsFAOrNDAZjIQAADcs5WHNy +0qDRDwArIAfaIPogAAXwDAUA+2MAFeANBQBYdDhpMrAf03GfEI4g2iD9p2QF4AwVAO0WAi92AoAA +7O4CCNgEgADuFgEq6ASAAFhzQsAg0Q/AINEPbBAGIyIYGtOHiTqIIsBB+yYADLC5UQDpNgokASGA +ANogWOx9HNOBKzIRDLsCKzYRjSJk0EYFDkdo4lzAINEP2iBY1cH/XowN5/UBAGjyeBzTc4onKzIR +iKzsuwIFUMEAAPpiJhXgCwUA6okMBEMhAAAJizlYcz/SoNEPACsgB9og+iAABfAMBQD7YwAV4A0F +AFh0BWP/nQAe0z6eEI0g2iDs02IY2ASAAOwWAi7uAoAA9aYADrAMFQDtFgEq6ASAAFhzD8Ag0Q/A +INEPbBA2iTUlMgD3pugFoAQFAPem5gXgCIUA+QiyDeJVCQDbMPomABWhXAUAWarX+iYAFeAYZQDo +tBEqUASAAFj2R5YQ/CYAFaANJQD7QGgd4A4FAPpAaB2gDxUAWbEqwCDRDykwEGiRUvUgBikSAJ0A +aJQDwCDRD4g2JHKLDwIACYgRCEQIJBZgJEIKJEIJ61QAClAEgABY+TfpEmAtfCYAACmQBSoKlXqZ +yPosCBWgCyUAWPZVwCDRDwAAKjITWPkz5KQACtgEgABY+Splr1HaMFj4n2Svm4uni74sso782QAH +MA11AP+gBw4iAJ0A/ABiHejsuQD/oAaOIgCdABjS4/1gQCWgDgUALsQRKIK/K3KL+KAARDANJQDm +FgAsRkKAAPlgAEWwDwUAWbD2wCDRDxTTK4c2JEKLCXcRp0QkFmCESodIhEnrVAAKUASAAFj5CWWu +yyoSYIqniq4pooDHuAuZASmmgIswCxtCD7sRC5kCKaaAKDIAEtLT/wIAB9ADFQArEmArsAUsCpJ8 +sUOMcmTApNpwWOvtjXJk0KqSGI5w2nDv0wwQ2IEAAO8WCi92AoAA88YAD3AMFQD+ISYVoA0lAFhy +nMAg0Q9Y93DAINEPAGR+nCRyGBrS4IlKiHL7JgAMsLlRAOlGCiQDwYAA2nBY69Yc0torQhEMuwIr +RhGNcmTQapIUjnDacO/S1RDYQQAA7xYGL3YCgADzxgAPcAwVAP4gphWgDSUAWHKCwCDRDwAAAAAA +AOpyECvYBIAAWNVhwCDRDwArcAfacPogAAXwDAUA+2MAFeANBQBYc19j/znacFjVBWWvlGP+AwAA +K3AH2nD6IAAF8AwFAPtjABXgDQUAWHNVY/95AGwQBIguIyw4c4EtKSISep8yiy6Is+okAApgBIAA +67zgKugEgAALgACMIu0gBS4AXgAAyNOOLnPp18Ag0Q8AAAAAAAAA/EAIFeAKVQD9pYQFoDsFAFmv +usAg0Q8AbBAYJRYZlB4rIAcjFh6HNegyBCn4BIAA/+HkFeADFQDyIgYV4bsBAPojBhXgyFEALBYa +/CPIFaDYWQD8I6YV4L95ACsWFSrAAP+DsBWj9vUA/YekFeB3+QD8ImYV7DgdAP4gBh2ge3UA7MIf +JFRCgAAPCEn4IeYVoAAeAACWHxnSnygSGfwiJhWgDwUA+S/kFeAEBQD7QBG8Z4gBAC8WFAk5DPgi +5hWvmQEAKRYW9QBIMRIAnQCKIvtAVGCSAJ0A8OcQDeAOBQDuFhIjgFGAAAM6AlkBfsBQ8oVADeAG +BQAtEh4t0IMNXUIvEh0rEhr+AGIdoAwlAO/sOQvQBIAAWQFdpqbwgQAN4Ar1ACkSHimSKihsMAmG +OXagbPQhphWkth0A4xYMJdgFAAD6I2YV4AGaAAAALBIT0w8PAgD7gEYYEgCdAC0SHg8CAI3V8b/7 +u1IAnQDrEhMp0ASAAPwiKBWgDhUA7hYSKOgEgABZAYn7QE3gUgCdAP4AYh3gBQUACvU6ZFGhw2CU +HfIhhhXkhh0AKBYbKRIYE9IBHtH97NH+HKAEgAD1IAniEgCdAOsSGyy3AoAAo2YqYp77QFJL4gCd +ACZinQ6YCiiCwwhmAQZrAu/CCC2wBIAA+2BOYBIAnQArFgX34E7QkgCdACkyrhrSRPsgTEgSAJ0A +LjKtLaJf7esBB9P9AAD9wEuuYgCdAJrI/cBL1mIAnQCNHiwgFK3MDAxHLCQU9YBNZlIAnQAuEh3I +6ykSFsCD+QBOqOIAnQBkUPIqEhoPAgDIoWRQY+tkAAlQBIAA/ABiHaAdhQBZAXruEg8teASAAOYS +DCK52YAAHNIkLRIV+aO4BeAKBQCa8przmvSa9elpAg9EAoAA6fYALuiCgADo3QIK9sKAAP+mAA6w +G8UA/eAmFeAKVQBZrwwrEhf5YEkpUgCdAMAg7BIbKm8CgACj3SzWndEPLhIeLuCD/kUABzAEFQD+ +IoYVr/b6AI/I9+BKIJIAnQDpEhsqNwKAAKNmKGKe+QBKe+IAnQArYp0OTQot0sMNuwHWsPtgSggS +AJ0AsP6eyPrAaB3v+r4AAPybTA3gNgUA//bUDaANBQAvEhJk8HbrEgUpUASAAPwAYh2gHYUAWQE/ +GdHtFtHrjhwoEAAmYp8J7gIZ0cAIHxTmhgsP+wKAAOn/AgR8nIAALBIR7RITI1v/AAAosj8rsX2e +oJ+hnaKco5uk+UCmFaAAbgAsEhEtEhMrYQWIY56gn6GbopijnaScpSasGC0SFYwfAt0Q7RYILmQC +gADsFgkrsD4AAC4SHRjRh/4hiBXgCgUA6hYGL3GCgACeFwj/Av4hRhXgDyUAnxvrZAAJUASAAPwA +Yh2gHYUAWQESix0vEh6JFuYSHiWRQYAAJmCD7/IFJJF5gACIHQZOQOSCGG9zAoAAKBIeKICCCAZA +CmYQjBcG7QL9hgAOcN+hAPOoABawj5EA/YYADnDfiQDjiBAO6IKAAPmmAA6wj5kABIgQCMwCKBIe +ixoNzAKIhPtABhXj/fUAnaKcpRzRo/1AZhWpiAEAmKQY0Z+YoS4SC+mcASUwYQAA6RYGJ3P9AADu +FgsvekYAAC8SFPXgLPiSAJ0A9eAtsRIAnQD14C5xkgCdAPXgLzISAJ0A9eAv8pIAnQD14DCzEgCd +APXgMXOSAJ0Ajh3TD2TgTy8SHi/yKmTwRutkAAlQBIAA/ABiHaAdhQBZANAoEh4b0YGMGvkFSBWj +/fUAnaL9QAYVrAkFAJmj+0AmFemYsQDppgQsRYKAAOimBSUwYQAA62QACVAEgAD8AGIdoB2FAFkA +vh3RcY8YjBn2IUgVoAkFAJkRmRKZE5kUmaT5QKYV7/v1AJuim6OWoO/MAgr2woAADswC7hIeJTBh +AADtzAIA2CEAAOymASDoQQAA6hwEIOAxAABY/tj5QGgd4AgVAOqJOQ0oBIAA6RYhJSM5gAAkFiL6 +ACId4AoFAAm6OOUWIyVjmYAAE9FRjRmEHBjRIR/RUOUSHSongoAA+IYACjYMBQD4IQgVoAoVAOWl +OQrwwoAABfw5+cYADzAJNQD9xgAO8AglAAWYOSgWIA7OAi4WHP2GAA5wBQUA/CPmFaAEfgAAAAAA +AAD/92wNoAYFAMDg//fIDaAGBQCIHfwjyBXkDAUA9mAABzK2KQDxCwAN4AYFAC3SKu3GOQ3bgoAA +LBAA/2AABHDfyQDr3RAOYgKAAOzuAgxFAoAA+cYADzDPwQD1kAAWMI95AP2GAA5w36kA/0CmFaDv +sQDg7hEO68KAAP+mAA6w74EA7IgRD3ZCgAD/BgAMMe9pAATuEf8GAAww77kA7YgCD3JCgAAOvgIM +iAKNGp2gHNDfnKEI7gL+xgAPMAglAAjuAp6kGNEKmKIe0Qn/QGYVr/YuAAAAAAD6AAId4AYFAP/9 +TA2gDgUAAAAAAAAAmaGUoJ6inqOepJ6lnaadp52onakvEiDlXAElMKEAAP6gEZxiAJ0A62QACVAE +gAD8AIIdoC2FAFkAO+RQUWrOwoAA9KAKYJIAnQArEh/H7/smAAzwDQUA45kCC/0uAACNEywSHo4S +jxGLzCzCEJmhm6n1QAYVoAgFAJiimKafo56knaecpYwU/UEGFa/+JgAtEh0sEhwb0NwMmQLrmQIG +hBmAAPDiQA3v/vUAmaGUoJ6inqOepP9AphWgDQUAnaadp52o/UEmFe/9NgAvEh4iFiUr8hYm8Tgi +8Tos8hXo8TkrNAKAAAYiAibxOy3yG+7yGixEAoAACGYCKPIXL/IZn6Keo52knKabp5iolqWZoZSg +kqnyJKgVr/v2AAAAAAAAAADw4kAN7/v1AJmhlKCbopujm6T7QKYV4AgFAJimmKeYqPlBJhWv+zoA +LBIejRIvwTsmwTkowTguwTrrwhgrNAKAAOb/AgxEAoAACO4CJsIUiMwswhCbpJinlqiZoZ2ilKCc +o5+lnqmMFP1AxhWv+hoAKxId7BIcJYNRgAAb0JrH7/0mAAywDQUA65kCA4DxgACZoZSgnqKeo56k +nqWdpp2nnaj9QSYV7/kyAC4SHiIWJS3iEiziEyviGIjthu4v4hSC7y7iEZ6inaOcpJulmKaWp5+p +maGUoJKo8iSoFa/4VgArEh/H3/smAAzwDAUA45kCA4DxgACZoZSgnaKdo52knaWcppynnKj9QSYV +r/eaAJmhlKCOE/4gKBXgCAUAmKKYo5ikmKaYp5ion6X/QSYVr/cKACoSHhnQbIqlE9AGJRIj5BIi +JUwwgADj0AITg+GAABzQZoscDLsC+z9GFe/ifgAlEhDA0vetAAr/4wIAAMCl/aC+BaAbxQDuPhEJ +6ASAAFmtRmP25foiyBWgDgUAnhGeEp4TnhRY/cQkFiLlFiMlX2GAAPoiyBWgCwUAWP23JBYi9CRm +Fe/vWgAvEhH7/7nQkgCdAGP2tRrQI4gcCogC+T9GFa/gngAAwKBZcfzIpxvQRCuwgGSxLCoSFlj9 +r+kSIS1cHgAA+iLIFaALFQBY/aL4JCgV7+3CANxg6hIMKVgEgAD8I8gV4A4VAFj+VPdAaB2v6fIA +AADcYOoSDClYBIAA/CPIFeAONQBY/kz3QGgdr+l2AAAAANxg6hIMKVgEgAD8I8gV4A51AFj+RPdA +aB2v6PYAAAAA3GDqEgwpWASAAPwjyBXgDrUAWP4890BoHa/odgAAAADcYOoSDClYBIAA/CPIFeAO +xQBY/jT3QGgdr+f2AAAAANxg6hIMKVgEgAD8I8gV4A7VAFj+LPdAaB2v53YAAAAA3GDqEgwpWASA +APwjyBXgDvUAWP4k90BoHa/m9gDrEhMp0ASAAOwSESjoBIAAWP7yY/YxAAArEh6MHu0SGSlQBIAA +WGns0qDRDwAAAAD7n/AFoUsVAFmXQSwaAAysAvuf5gWhSxUAWZdBY/6zAMCwwNoN/TSdyPt/tHCS +AJ0A+kBoHaAbxQD8AAIdoA0VAFhwVGP/oAAAACsSGPpAaB2gDAUA7RIbJdhhAABYcE1j/4TAoFmq +PxzPdI/I+f+w4JIAnQBj/7jaIFvpqWP2T4onjR7AwOqsIC7YBIAAWGOA0qDrEhsqZwKAAKPMK8ad +0Q8AAAAAAAD/1wwNoAYFAAAAAN2Q/Z+WBaAKRQD6AwId4A5FAFmsr//YZA2gBUUAwKBZqiQcz1iP +yB7PVfn/tXiSAJ0A/9tYDaAGBQAAAAD/2vQNoAsFAMDaDf00/YEGFe/a+gAAAABsEAQUz7eCICRC +fxPPtgQiDAMiAtEPAABsEA4kIhTbIOwUAApQBIAAWQ3H1aD1QAgUIgCdABjPTugABQDIQQAACQJh +CQJhCQJhCQJhH8+oHs+oHc+ljCCdFv4hRhWgCEUA7xYELmYCgAAIyAKYFS9QBy0RAPufQAWh/wEA +48wCD/wCgAAP3QIO3QKdGCkgPfwh5hWgCyUAmx0KmQLpFgwoBAqAAPRgBVGSAJ0AiUcomRTkgJNk +8IEAAIuZjOD/+AId4CSFAO/vAQWCOYAAbQgue8E8KLAALbAHdIEzKuEF76kIDu8CgADtuwgEyQEA +AOm7FX3oBIAA69QABoCpgABj/8oAAAAAAAD7bwAOv/+uAPuPAAxwCQUACJs4ZbBE6xwQKtAEgAD8 +AIIdoA0lAFgeeNEPGs9xKUEp+z/3xSIAnQBj/+wAAAAA//28DaALBQAAACocSvpHwBXgDGUAWaa2 +Y/9IwnaKuAqNV3fRYirhBa+m5rp6dekBAADr1AAGgZGAAHvBKiiwANMP0w90gSAtsAcPAgAM3RHt +uwgDSQEAAOm7JH3oBIAA69QADv62AAD7jwAM8AgFAAmLOGS/X2P/owAAAAAAAAD7bwAOv/9yAC0g +PQoIQ3jZkymwL2iTjYogCKoRCjoCmrvRDwAAAAAA+68ADr/+GgBsEAYoIAUsIAfBlA8CAPkAEHVh +zAEAKSICZZHDLTABFs7H687DHjgEgAD/oUAG0A+lAC4gTmXiV+7OwB5PAoAA9YAK8hIAnQCmmSiS +npwQC8sK9wARlNIAnQArssMqkp0LqwHrFgEljkmAAIro90AOuJIAnQAoYq7tzrIUC/mAACxirS3S +f+3LAQVD/QAA/YALXmIAnQCY6P2AC2ZiAJ0AKSAUpJkJCUcpJBT1IA110gCdAB7OthvOrIwg+CAo +FeAKBQAqtjbuzAIObgKAACy2PP2eGAWgDkUADt0C7bY1LOgEgADsDx4OUASAAA0CZwxAhg0CZQwg +hg0CYwwAhu0MAAThAQAACuCGHs7/DAJvCsCGDAJtCqCGDAJrCoCGDAJpKiAHKDABLCEJLSEk+CAA +BDCqEQDqqhAMRAKAAAqIAioxAQjdAg7dAhjO8C4hIi2WII0gLJYjKpYkCO4CLpYi/aAAFrAOJQAO +3QItliHsMgMl0HsAAOyWJSTIBwAA6gAVBMphAAAJAIoMfBGmzP+TphXntQEA+WAGiVIAnQDAINEP +iuj3QAfAkgCdAAx5EaaZLZKeC3sKK7LD96AIRNIAnQAtkp0L2wFksPywrZ3o6xYBLfTGAAD8IAYV +oAFWAADqJAAJ2ASAAOxEAAroBIAAWGit0qDRDwAAAADAsA+pNOnmCC305gAA+kBoHaAbxQD8ACId +oA0VAFhvHmP/wQAA6iQACtgEgABYalrSoNEPAIsQ+kBoHaAMFQD7YwAV4A2lAFhvFGP/l8CgWakG +Hs46iuj5X/D4kA+lAGP/qtogW+hw//k0DaAPpQAAiifrRAAKaASAAPtEABWgDAUAWGJE0qDRDwAA +AAD/91wNoAsFAMC4C5sC+kBGFe/9HgAAAAD8IAYVoAoFAFmo7h7OI4rojBAbzh/5X/eYkA+lAP/8 +OA2gCwUAAMCwD600/cEGFe/8AgAAbBAGKCAFJiAH5zQACtgEgAD4AoId4AU1APkAD51hZgEACwhH +aIIUiiIXzg8YzgzkZAAFA8mAAMAg0Q8AKyIdZbHhiCeDiPsCpBXvzAUA6YILJHCBAAAM7AHsuwgK +fwKAAOwWACXZAQAA8yAN/GIAnQAtiRSj+q/dLYUU+2AN66IAnQDJdclD2TBtSQUHAIYJAmGK4A8C +AA8CAK+q+0AQrGIAnQD7wAYVr/3+AOxqEQMk8QAAB6oIK6KeDwIA92AK2dIAnQAqop0IaworssML +qgFloE/rbBgpUASAAPwAIh2gDTUAWG62wCDRDwAbzd6JuPcgDKCSAJ0ADEoRB6oILKKe94ANAdIA +nQAqop0ITAoswsMMqgHkoY5k6/0AAC22CGSvrxnN+5mgiCD/nIgF4AsVAOumAixGAoAABYgCmKGI +My/yf/+bzAWoiB0AqP+fo+4AFQVIQQAA/5uyBeAIBQCxiOmDHgwP6AAAn6YZzjT5QQYV4BgFAJin +jiAI7hEF7gKeqQxNEafdJdadjiIsIAaJJwvuAuvOKxZgBQAA7CQGJMiBAACIkf0gghXvzAUADJwB +7iYCJENBAADolgEm6MEAAO2VBCZhAQAAfIsiKpEFHc21qKiYkZ2AjCDrhgIuZgKAAAXMAv0AJhWg +AgUA0Q8dza2dgIwgG84T64YCLmYCgAAFzAL9ACYVoAIFANEP2iBYaavSoNEPAAAA//rEDaAKBQBY +ACdj/hcAAPMgaB3gDgUA/wFmFa/3vgDjugwDgbmAAApLFOy8ECvABIAA7Ew2CcgEgADTD23JBQgA +hgkCYYkQqnjrTQwEyQEAAG3ZBQgghgkCY4sQCvwMrLsrvED7wAYV7/aKAMCgWahBG811ibgYzXL5 +P/L4kgCdAP/5/A2gCgUAwKDA2g2dNP1hBhXv+cIAjxAv/ED/wAYV7/WmAAAAbBAGEs1oF83f9Zri +BaATlQD4UMgVoKYlACoign+nICsign+3GCoihCygCCWgB3bBN4hEwKALgAAFMwxlP9rRDy0ihCki +hyoih/lgAAT7qoEAepkwCuowK0JFw8IMuyirqvqcBhWv/uoALqELLuz4Dg5D7uz8Iuv9AAD/ogAK +v/7OAAAAAAwCAC8ign//xSXQB25bv9xw+gCiHaALBQD+oAAXMP8FAFmqkSVc8cpbKApxmBHAoVmg +P/ogKBXgCfUACVk2mRAJuwz6ICYV4AoFAFmELIoQClUMZV/XwKFZoDX6DiId4AoFAFmEJmP/ZQAA +bBAGKCAFLyAHwZT5ABTNYf8BAPQgJhWnhQEAmBL1AA+5EgCdAIkiFs0j680fH6AEgADtzR8ckZYA +APXgD0IQB7UA7xYAL9cCgACmqiyingv7Ciuyw/eAFbviAJ0ALKKdC8sB57QABZKJgACO2PfAEviS +AJ0ALGKu6s2IFhApgAAvYq0rovPr/AEHQ/0AAPvgD45iAJ0AmNj74A+mYgCdACsgFCkwB6uZCQlH +KSQU9SARtdIAnQAfzXmfcIkg/ACCHeAFFQDldgIszgKAAA2ZAplxiDYZzXOMrv+aKAWiiB0ACYgB +qMz84GYVoCsFAO4AFQPIQQAACQCKm3cZzQTpdgYh4MEAAOwHHgPAgQAACAJj7uMFA+DBAAAMAmEv +dhCIIOV2EixGAoAADYgCKHYRjDOKrAyMFKyq6nYTI/mBAADuABUD0UEAAAoAiil2Fut2FyHQQQAA *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-head@freebsd.org Sat May 5 20:32:08 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1766CFB98BD for ; Sat, 5 May 2018 20:32:08 +0000 (UTC) (envelope-from o.hartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.17.22]) (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 5F4BC7E011; Sat, 5 May 2018 20:32:06 +0000 (UTC) (envelope-from o.hartmann@walstatt.org) Received: from thor.intern.walstatt.dynvpn.de ([77.180.123.97]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0Lp7d2-1ejHKM07hE-00es51; Sat, 05 May 2018 22:31:58 +0200 Date: Sat, 5 May 2018 22:31:24 +0200 From: "O. Hartmann" To: Matthew Macy Cc: bde@freebsd.org, svn-src-head@freebsd.org, Stephen Hurd , "O. Hartmann" Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys: TRAP 12 Message-ID: <20180505223151.580b6522@thor.intern.walstatt.dynvpn.de> In-Reply-To: References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> Organization: WALSTATT User-Agent: OutScare 3.1415926 X-Operating-System: ImNotAnOperatingSystem 3.141592527 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:olFoHfoZDvfDOFjrVRdEjAungMZxeKRmH25y3mMqla0zAvsC4Wu lO9ENTG5Bqz3PtDexCCvIG6BVPxUDlA40ybJlGMF/dIbCGud7vKXTd9yNzLN29Ysc+mdPwn POFNhQcTow9MwL+guy4hS717XAY1WrTY3QSukJuNRkMUiuWYmnhKp98F4Ze/OSgH97s5VOc GxvzqISYZ4TvK8O6rFVsg== X-UI-Out-Filterresults: notjunk:1;V01:K0:LId7pr8kBSk=:7VBbxBIky7pCeolG1unDfP eF/ps0XMMRTo225rf6SI6a77tcy6fJoQEHmtG+etOkL6StxsU1SIU8XTDS0OI0waCQxn0/ot6 gnY2jcg+CNe1GxnL+LPafKoKyan3v8+5NAYLUgbKISOYx9CCRya3dk09RK0Mo59tELUUmCK+u IOsVI11oazlgArJOugoMOhzLOj6MmVJeRyennqEP80EnotXI/GLcVerpqAvfdJNfxUoXJmfdV c55o0VkyrHtIUHLUXYemPgXF1cuPFKL4YDpNSs9bczfZM2oqAUxza70FE2LASmPi92qwbylpl EJcGN5QLNxDFdF1za9XLkyygTue0QBmgqv8PbSBqxRk+lb+bSX2cRA9EoNIK4Zg5HOh2PskxX 5c50R5QJ8PtiGwLqUj4Ie+Ir2EkRQUHV8HrkiKV9wbNKvaOs3EGaDGRc6Pu/fh8Da9aCZIs4J l85+95yFvJS49B6Ii0ccaus+7sKeLWuMIZNgTkQ1ndHee+85siOP4cpCLjih7n/dQ9xc2Udeb bFG0EswUrxsRGmFg7BtPe2cFtsviBuEqtZX5aDeOwr9QgKhFEoM6wSoCRGc1w/6OVP6eJaaOj XWaTCcXUdv7vQWQBDy8b57jc2DkCAI4+hAqUDjSYDTDRZJDAyMUYua/giVR9h9haPQYES6Ssu +D6vLqPu4Ksz8XReERMaSc1qeGn0Y1Rq1eLqhbbALtP2i08MO8OKaOg5BoLkDPkSfsnmb4wt4 UpkMMv1OM1Po3Ns1GVTiK0V2mn/Ud7PN56KXya3P9dKhHG0Jpgrmxa6KdyLbaeZQMIes1epg4 beDY/iP X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 20:32:08 -0000 LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBNTEyDQoNCkFtIFNh dCwgNSBNYXkgMjAxOCAxMToyMTo0NyAtMDcwMA0KTWF0dGhldyBNYWN5IDxtbWFjeUBmcmVlYnNk Lm9yZz4gc2NocmllYjoNCg0KPiBwaG9AIGFuZCBzYnJ1bm9AIHRlc3RlZCB0aGUgcGF0Y2ggYmVm b3JlIGNvbW1pdCwgSSBjYW4ndCByZWFkaWx5DQo+IHJlcHJvZHVjZSBldmVuIHRob3VnaCB0aGUg ZGV0YWNoIHBhdGggc2hvdWxkIGJlIGNvbW1vbiBlbm91Z2guIFBsZWFzZQ0KPiB0ZWxsIG1lIGlm IHRoaXMgaGVscHM6DQo+IA0KPiBodHRwczovL3Blb3BsZS5mcmVlYnNkLm9yZy9+bW1hY3kvaW5w Y2IuZGlmZg0KPiANCj4gDQo+IFRoYW5rcy4NCj4gDQoNCg0KVGhlIHByaXZpZGVkIHBhdGNoIHNl ZW1pbmdseSB3b3JrIHNvIGZhciAoRnJlZUJTRCAxMi4wLUNVUlJFTlQgIzQgcjMzMzI3NE06IFNh dCBNYXkgIDUNCjIyOjE5OjA0IENFU1QgMjAxOCBhbWQ2NCkuIEkganVzdCByZWNvbXBpbGUgd29y bGQgYW5kIGtlcm5lbCBvZiByZXZpc2lvbiAzMzMyNzYgYW5kIHRyeQ0KdG8gcHVzaCB0aGUgYm94 IHdpdGggbmUgdHJhZmZpYyAoTkZTIG1vc3RseSkuDQoNCk1heSBJIGFzayBvbiB3aGF0IGhhcmR3 YXJlIHRoZSBtZW50aW9uZWQgdGVzdHMgb2YgeW91cnMgaGFzIGJlZW4gcGVyZm9ybWVkPyBJIGNh biB0ZWxsLA0KdGhhdCBBTEwoISkgYm94ZXMgZXF1aXB0ZWQgd2l0aCBJbnRlbCdzIGkzNTAgTklD cyBhcmUgc3VmZmVyaW5nIHRoZSB2ZXJ5IHNhbWUgcHJvYmxlbS4gSQ0KZGlkbid0IGRhcmUgdG8g bW92ZSBvbiBvbiB0aGUgb3RoZXIgc3lzdGVtcyB3aXRoIGkyMTAsIGkyMTcgb3IgaTIxOSwgYnV0 IHdpdGggdGhlIHBhdGNoDQpwcm92aWRlZCB3b3JraW5nIHNvIGZhciwgSSdsbCB0ZXN0Lg0KDQpU aGFua3MuDQoNCj4gDQo+IE9uIFNhdCwgTWF5IDUsIDIwMTggYXQgMjowMSBBTSwgTy4gSGFydG1h bm4gPG8uaGFydG1hbm5Ad2Fsc3RhdHQub3JnPiB3cm90ZToNCj4gPiAtLS0tLUJFR0lOIFBHUCBT SUdORUQgTUVTU0FHRS0tLS0tDQo+ID4gSGFzaDogU0hBNTEyDQo+ID4NCj4gPiBBbSBUaHUsIDMg TWF5IDIwMTggMjI6MjM6NTIgKzAyMDANCj4gPiAiTy4gSGFydG1hbm4iIDxvaGFydG1hbm5Ad2Fs c3RhdHQub3JnPiBzY2hyaWViOg0KPiA+DQo+ID4NCj4gPiBJJ20gbm90IGZhbWlsaWFyIHdpdGgg a2VybmVsIGRlYnVnZ2luZywgc28gdGhlcmUgYXJlIHNvbWUgc3RydWdnbGVzLg0KPiA+DQo+ID4g QWZ0ZXIgY29tcGlsaW5nIGEgZGVidWdnaW5nIGtlcm5lbCBvbg0KPiA+DQo+ID4gVmVyc2lvbiBT dHJpbmc6IEZyZWVCU0QgMTIuMC1DVVJSRU5UICMyIHIzMzMyNjk6IFNhdCBNYXkgIDUgMDg6MTA6 MzIgQ0VTVCAyMDE4DQo+ID4NCj4gPiBQYW5pYyBTdHJpbmc6IExvY2sgdGNwIG5vdCBleGNsdXNp dmVseSBsb2NrZWQgQCAvdXNyL3NyYy9zeXMvbmV0aW5ldC9pbl9wY2IuYzoxMzkxDQo+ID4NCj4g Pg0KPiA+IEFuZCB0aGlzIGlzIHdoYXQgSSBjYW4gcHJvdmlkZSB5b3Ugd2l0aDoNCj4gPg0KPiA+ DQo+ID4gUmVhZGluZyBzeW1ib2xzDQo+ID4gZnJvbSAvdXNyL29iai91c3Ivc3JjL2FtZDY0LmFt ZDY0L3N5cy9XQUxIQUxMLURFQlVHL2tlcm5lbC5mdWxsLi4uZG9uZS4NCj4gPg0KPiA+IFVucmVh ZCBwb3J0aW9uIG9mIHRoZSBrZXJuZWwgbWVzc2FnZSBidWZmZXI6DQo+ID4gcGFuaWM6IExvY2sg dGNwIG5vdCBleGNsdXNpdmVseSBsb2NrZWQgQCAvdXNyL3NyYy9zeXMvbmV0aW5ldC9pbl9wY2Iu YzoxMzkxDQo+ID4NCj4gPiBjcHVpZCA9IDQNCj4gPiB0aW1lID0gMTUyNTUxMDI5MQ0KPiA+IEtE Qjogc3RhY2sgYmFja3RyYWNlOg0KPiA+IGRiX3RyYWNlX3NlbGZfd3JhcHBlcigpIGF0IGRiX3Ry YWNlX3NlbGZfd3JhcHBlcisweDJiL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTY3MA0KPiA+IHZwYW5p YygpIGF0IHZwYW5pYysweDFhMy9mcmFtZSAweGZmZmZmZTAwZTQ4NWU2ZDANCj4gPiBwYW5pYygp IGF0IHBhbmljKzB4NDMvZnJhbWUgMHhmZmZmZmUwMGU0ODVlNzMwDQo+ID4gX3J3X3d1bmxvY2tf Y29va2llKCkgYXQgX3J3X3d1bmxvY2tfY29va2llKzB4MTM3L2ZyYW1lIDB4ZmZmZmZlMDBlNDg1 ZTc2MA0KPiA+IGluX3BjYmZyZWUoKSBhdCBpbl9wY2JmcmVlKzB4NTFhL2ZyYW1lIDB4ZmZmZmZl MDBlNDg1ZTdiMA0KPiA+IHRjcF91c3JfZGV0YWNoKCkgYXQgdGNwX3Vzcl9kZXRhY2grMHgxNWUv ZnJhbWUgMHhmZmZmZmUwMGU0ODVlN2YwDQo+ID4gc29mcmVlKCkgYXQgc29mcmVlKzB4MmY0L2Zy YW1lIDB4ZmZmZmZlMDBlNDg1ZTg0MA0KPiA+IHNvY2xvc2UoKSBhdCBzb2Nsb3NlKzB4Mzg3L2Zy YW1lIDB4ZmZmZmZlMDBlNDg1ZThiMA0KPiA+IGNsb3NlZigpIGF0IGNsb3NlZisweDFmNS9mcmFt ZSAweGZmZmZmZTAwZTQ4NWU5NDANCj4gPiBjbG9zZWZwKCkgYXQgY2xvc2VmcCsweGEwL2ZyYW1l IDB4ZmZmZmZlMDBlNDg1ZTk4MA0KPiA+IGFtZDY0X3N5c2NhbGwoKSBhdCBhbWQ2NF9zeXNjYWxs KzB4NmQzL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZWFiMA0KPiA+IGZhc3Rfc3lzY2FsbF9jb21tb24o KSBhdCBmYXN0X3N5c2NhbGxfY29tbW9uKzB4MTAxL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZWFiMA0K PiA+IC0gLS0tIHN5c2NhbGwgKDYsIEZyZWVCU0QgRUxGNjQsIHN5c19jbG9zZSksIHJpcCA9IDB4 ODAxMTFhZGRhLCByc3AgPSAweDdmZmZkZjNmNzIyOCwNCj4gPiByYnAgPSAweDdmZmZkZjNmNzI0 MCAtLS0gS0RCOiBlbnRlcjogcGFuaWMNCj4gPg0KPiA+IF9fY3VydGhyZWFkICgpIGF0IC4vbWFj aGluZS9wY3B1Lmg6MjMxDQo+ID4gMjMxICAgICAgICAgICAgIF9fYXNtKCJtb3ZxICUlZ3M6JTEs JTAiIDogIj1yIiAodGQpDQo+ID4gKGtnZGIpIGJ0DQo+ID4gKGtnZGIpIGJ0DQo+ID4gIzAgIF9f Y3VydGhyZWFkICgpIGF0IC4vbWFjaGluZS9wY3B1Lmg6MjMxDQo+ID4gIzEgIGRvYWR1bXAgKHRl eHRkdW1wPTApIGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fc2h1dGRvd24uYzozNjUNCj4gPiAj MiAgMHhmZmZmZmZmZjgwNTk3ZDViIGluIGRiX2R1bXAgKGR1bW15PTxvcHRpbWl6ZWQgb3V0Piwg ZHVtbXkyPTx1bmF2YWlsYWJsZT4sDQo+ID4gZHVtbXkzPTx1bmF2YWlsYWJsZT4sIGR1bW15ND08 dW5hdmFpbGFibGU+KSBhdCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo1NzQNCj4gPiAj MyAgMHhmZmZmZmZmZjgwNTk3YWU2IGluIGRiX2NvbW1hbmQgKGxhc3RfY21kcD08b3B0aW1pemVk IG91dD4sDQo+ID4gY21kX3RhYmxlPTxvcHRpbWl6ZWQgIA0KPiA+IG91dD4sIGRvcGFnZXI9PG9w dGltaXplZCBvdXQ+KSBhdCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo0ODEgIzQNCj4g PiBvdXQ+MHhmZmZmZmZmZjgwNTk3ODE0IGluIGRiX2NvbW1hbmRfbG9vcCAoKSBhdCAvdXNyL3Ny Yy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo1MzQgIA0KPiA+ICM1ICAweGZmZmZmZmZmODA1OWIwNGYg aW4gZGJfdHJhcCAodHlwZT08b3B0aW1pemVkIG91dD4sIGNvZGU9PG9wdGltaXplZCBvdXQ+KQ0K PiA+IGF0IC91c3Ivc3JjL3N5cy9kZGIvZGJfbWFpbi5jOjI1MCAjNiAgMHhmZmZmZmZmZjgwOTI0 NDYzIGluIGtkYl90cmFwICh0eXBlPTMsDQo+ID4gY29kZT0tNjE0NTYsIHRmPTxvcHRpbWl6ZWQg b3V0PikgYXQgL3Vzci9zcmMvc3lzL2tlcm4vc3Vicl9rZGIuYzo2OTcgIzcNCj4gPiAweGZmZmZm ZmZmODBjODBhYjcgaW4gdHJhcCAoZnJhbWU9MHhmZmZmZmUwMGU0ODVlNWEwKQ0KPiA+IGF0IC91 c3Ivc3JjL3N5cy9hbWQ2NC9hbWQ2NC90cmFwLmM6NTUwICM4ICA8c2lnbmFsIGhhbmRsZXIgY2Fs bGVkPiAjOSAga2RiX2VudGVyDQo+ID4gKHdoeT0weGZmZmZmZmZmODBkZDdiNTQgInBhbmljIiwg bXNnPTxvcHRpbWl6ZWQgb3V0PikNCj4gPiBhdCAvdXNyL3NyYy9zeXMva2Vybi9zdWJyX2tkYi5j OjQ3OSAjMTAgMHhmZmZmZmZmZjgwOGRiNTAwIGluIHZwYW5pYyAoZm10PTxvcHRpbWl6ZWQNCj4g PiBvdXQ+LCBhcD0weGZmZmZmZTAwZTQ4NWU3MTApIGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5f c2h1dGRvd24uYzo4NTEgIzExDQo+ID4gb3V0PjB4ZmZmZmZmZmY4MDhkYjU5MyBpbiBwYW5pYw0K PiA+IChmbXQ9MHhmZmZmZmZmZjgxMjViYmQ4IDxjbnB1dHNfbXR4PiAiXDI1MVwzMTJcMzMyXDIw MFwzNzdcMzc3XDM3N1wzNzciKQ0KPiA+IGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fc2h1dGRv d24uYzo3ODkgIzEyIDB4ZmZmZmZmZmY4MDhkNjViNyBpbiBfX3J3X2Fzc2VydA0KPiA+IChjPTB4 ZmZmZmZlMDAxMTFlZTY1MCwgd2hhdD00LCBmaWxlPTB4ZmZmZmZmZmY4MGRjNTE1Nw0KPiA+ICIv dXNyL3NyYy9zeXMvbmV0aW5ldC9pbl9wY2IuYyIsIGxpbmU9MTM5MSkgYXQgL3Vzci9zcmMvc3lz L2tlcm4va2Vybl9yd2xvY2suYzoxNDI2DQo+ID4gIzEzIF9yd193dW5sb2NrX2Nvb2tpZSAoYz0w eGZmZmZmZTAwMTExZWU2NTAsIGZpbGU9MHhmZmZmZmZmZjgwZGM1MTU3DQo+ID4gIi91c3Ivc3Jj L3N5cy9uZXRpbmV0L2luX3BjYi5jIiwgbGluZT0xMzkxKSBhdCAvdXNyL3NyYy9zeXMva2Vybi9r ZXJuX3J3bG9jay5jOjM2Mg0KPiA+ICMxNCAweGZmZmZmZmZmODBhNjhjYWEgaW4gaW5fcGNiZnJl ZSAoaW5wPTB4ZmZmZmY4MDA2NjA1OGIxMCkNCj4gPiBhdCAvdXNyL3NyYy9zeXMvbmV0aW5ldC9p bl9wY2IuYzoxMzkxICMxNSAweGZmZmZmZmZmODBiMDlhNmUgaW4gdGNwX2RldGFjaA0KPiA+IChz bz08b3B0aW1pemVkIG91dD4sIGlucD08b3B0aW1pemVkIG91dD4pIGF0IC91c3Ivc3JjL3N5cy9u ZXRpbmV0L3RjcF91c3JyZXEuYzoyNTgNCj4gPiAjMTYgdGNwX3Vzcl9kZXRhY2ggKHNvPTxvcHRp bWl6ZWQgb3V0PikgYXQgL3Vzci9zcmMvc3lzL25ldGluZXQvdGNwX3VzcnJlcS5jOjI4OSAjMTcN Cj4gPiAweGZmZmZmZmZmODA5N2MzOTQgaW4gc29mcmVlIChzbz0weGZmZmZmODAwMTk4OGQzNTgp DQo+ID4gYXQgL3Vzci9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYzoxMDMyICMxOCAweGZmZmZm ZmZmODA5N2Q0ODcgaW4gc29jbG9zZQ0KPiA+IChzbz0weGZmZmZmODAwMTk4OGQzNTgpIGF0IC91 c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmM6MTEyNiAjMTkNCj4gPiAweGZmZmZmZmZmODA4 ODVhZDUgaW4gZm9fY2xvc2UgKGZwPTxvcHRpbWl6ZWQgb3V0PiwgdGQ9PG9wdGltaXplZCBvdXQ+ KQ0KPiA+IGF0IC91c3Ivc3JjL3N5cy9zeXMvZmlsZS5oOjM0OCAjMjAgX2Zkcm9wIChmcD08b3B0 aW1pemVkIG91dD4sIHRkPTxvcHRpbWl6ZWQgb3V0PikNCj4gPiBhdCAvdXNyL3NyYy9zeXMva2Vy bi9rZXJuX2Rlc2NyaXAuYzoyOTU3ICMyMSBjbG9zZWYgKGZwPTB4ZmZmZmY4MDAwNGVmNGViMCwN Cj4gPiB0ZD0weGZmZmZmODAwMTk4OTE1NjApIGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fZGVz Y3JpcC5jOjI1MzggIzIyDQo+ID4gMHhmZmZmZmZmZjgwODgyOTIwIGluIGNsb3NlZnAgKGZkcD0w eGZmZmZmODAwMTk1NTM0NTAsIGZkPTEyLCBmcD0weGZmZmZmODAwMDRlZjRlYjAsDQo+ID4gdGQ9 MHhmZmZmZjgwMDE5ODkxNTYwLCBob2xkbGVhZGVycz0wKSBhdCAvdXNyL3NyYy9zeXMva2Vybi9r ZXJuX2Rlc2NyaXAuYzoxMjA4ICMyMw0KPiA+IDB4ZmZmZmZmZmY4MGM4MjAzMyBpbiBzeXNjYWxs ZW50ZXIgKHRkPTB4ZmZmZmY4MDAxOTg5MTU2MCkNCj4gPiBhdCAvdXNyL3NyYy9zeXMvYW1kNjQv YW1kNjQvLi4vLi4va2Vybi9zdWJyX3N5c2NhbGwuYzoxMzUgIzI0IGFtZDY0X3N5c2NhbGwNCj4g PiAodGQ9MHhmZmZmZjgwMDE5ODkxNTYwLCB0cmFjZWQ9MCkgYXQgL3Vzci9zcmMvc3lzL2FtZDY0 L2FtZDY0L3RyYXAuYzo5NDUgIzI1IDxzaWduYWwNCj4gPiBoYW5kbGVyIGNhbGxlZD4gIzI2IDB4 MDAwMDAwMDgwMTExYWRkYSBpbiA/PyAoKSBCYWNrdHJhY2Ugc3RvcHBlZDogQ2Fubm90IGFjY2Vz cw0KPiA+IG1lbW9yeSBhdCBhZGRyZXNzIDB4N2ZmZmRmM2Y3MjI4IChrZ2RiKQ0KPiA+DQo+ID4N Cj4gPg0KPiA+ICANCj4gPj4gLS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KPiA+ PiBIYXNoOiBTSEE1MTINCj4gPj4NCj4gPj4gQW0gVGh1LCAzIE1heSAyMDE4IDEyOjUzOjA1IC0w NzAwDQo+ID4+ICJLLiBNYWN5IiA8a21hY3lAZnJlZWJzZC5vcmc+IHNjaHJpZWI6DQo+ID4+ICAN Cj4gPj4gPiBDYW4geW91IGdpdmUgYW55IGNvbnRleHQgb24gd2hhdCB0aGV5J3JlIGRvaW5nPyBJ biBhZGRpdGlvbiAtIGV2ZW4gb24NCj4gPj4gPiBhIHByb2R1Y3Rpb24ga2VybmVsIGl0J3MgcG9z c2libGUgdG8gY29tcGlsZSBpbiBEREIgdG8gYXQgbGVhc3QgZ2V0IGENCj4gPj4gPiBiYWNrdHJh Y2UuIFlvdXIgcmVwb3J0IG9ubHkgZ2l2ZXMgdXMgZW5vdWdoIGluZm9ybWF0aW9uIHRvIGtub3cg dGhhdCAgDQo+ID4+DQo+ID4+IE5vdCBhdCB0aGUgbW9tZW50LiBUaGUgaW1tZWRpYXRlIGNyYXNo IGNvcnJ1cHRlZCB0aGUgL3Vzci9zcmMgZmlsZXN5c3RlbSBzbyBJIGNhbiBub3QNCj4gPj4gcmVj b21waWxlIGEga2VybmVsLiBFdmVyeSBhdHRlbXB0IHRvIC9ldGMvbmV0c3RhcnQgdGhlIG5ldHdv cmsgb24gdGhlIGJ1Z2d5IGtlcm5lbA0KPiA+PiBlbmRzIHVwIGluIGEgZnVydGhlciBkZXN0cnVj dGlvbiwgc28gSSBzdG9wcGVkIGF0IHRoaXMgdmVyeSBtb21lbnQgYW5kIGhvcGVmdWxseSBJDQo+ ID4+IGNhbiBjb3B5IC91c3Ivc3JjIGZyb20gYSByMzMxNTMgYm94IChyMzMzMTUzIGlzIGZvciBt ZSB0aGUgbGFzdCB3b3JraW5nIHJldmlzaW9uKQ0KPiA+PiB2aWEgVVNCIGZsYXNoIGRyaXZlIGFu ZCByZWNvbXBpbGUgdGhlIGtlcm5lbC4gQnV0IEknbGwgZ28gZm9yIHIzMzMxNTMgZmlyc3Qgc2lu Y2UgSQ0KPiA+PiBuZWVkIHRoZSBzZXJ2ZXIgdXAgdG9tb3Jyb3cgYW5kIEknbGwgdHJ5IG9uIHRo ZSBvdGhlciBib3ggd2hpY2ggaXMgYWxzbyBhZmZlY3RlZCwNCj4gPj4gYnV0IGFsc28gZXF1aXB0 ZWQgd2l0aCB0aGUgaTM1MCBOSUMgb24gd2hpY2ggdGhlIHByb2JsZW0gb2NjdXJzIHZlcnkgcXVp Y2tseS4NCj4gPj4gIA0KPiA+PiA+IHRoZXJlIGlzIF9hbl8gaXNzdWUuIEl0J3MgZGlmZmljdWx0 IHRvIHByb2NlZWQgb24gdGhpcyBhbG9uZS4gSSBkbw0KPiA+PiA+IGhhdmUgYSByZXBvcnQgZnJv bSB0aGUgRnJlZUJTRCBDSSBpbmZyYXN0cnVjdHVyZSB0aGF0IHdlJ3JlIGxvb2tpbmcgaW4NCj4g Pj4gPiB0byBub3cuICBXaXRoIGx1Y2sgdGhhdCBpcyB0aGUgc2FtZSBpc3N1ZS4NCj4gPj4gPg0K PiA+PiA+IC1NDQo+ID4+ID4NCj4gPj4gPiBPbiBUaHUsIE1heSAzLCAyMDE4IGF0IDEyOjMxIFBN LCBPLiBIYXJ0bWFubiA8b2hhcnRtYW5uQHdhbHN0YXR0Lm9yZz4gd3JvdGU6ICANCj4gPj4gPiA+ IC0tLS0tQkVHSU4gUEdQIFNJR05FRCBNRVNTQUdFLS0tLS0NCj4gPj4gPiA+IEhhc2g6IFNIQTUx Mg0KPiA+PiA+ID4NCj4gPj4gPiA+IEFtIFdlZCwgMiBNYXkgMjAxOCAxOTozNjoyOSArMDAwMCAo VVRDKQ0KPiA+PiA+ID4gU3RlcGhlbiBIdXJkIDxzaHVyZEBGcmVlQlNELm9yZz4gc2NocmllYjoN Cj4gPj4gPiA+ICANCj4gPj4gPiA+PiBBdXRob3I6IHNodXJkDQo+ID4+ID4gPj4gRGF0ZTogV2Vk IE1heSAgMiAxOTozNjoyOSAyMDE4DQo+ID4+ID4gPj4gTmV3IFJldmlzaW9uOiAzMzMxNzUNCj4g Pj4gPiA+PiBVUkw6IGh0dHBzOi8vc3Zud2ViLmZyZWVic2Qub3JnL2NoYW5nZXNldC9iYXNlLzMz MzE3NQ0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gTG9nOg0KPiA+PiA+ID4+ICAgU2VwYXJhdGUgbGlz dCBtYW5pcHVsYXRpb24gbG9ja2luZyBmcm9tIHN0YXRlIGNoYW5nZSBpbiBtdWx0aWNhc3QNCj4g Pj4gPiA+Pg0KPiA+PiA+ID4+ICAgTXVsdGljYXN0IGluY29ycmVjdGx5IGNhbGxzIGluIHRvIGRy aXZlcnMgd2l0aCBhIG11dGV4IGhlbGQgY2F1c2luZyBkcml2ZXJzDQo+ID4+ID4gPj4gICB0byBo YXZlIHRvIGdvIHRocm91Z2ggYWxsIG1hbm5lciBvZiBjb250b3J0aW9ucyB0byB1c2UgYSBub24g c2xlZXBhYmxlIGxvY2suDQo+ID4+ID4gPj4gICBTZXJpYWxpemUgbXVsdGljYXN0IHVwZGF0ZXMg aW5zdGVhZC4NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgU3VibWl0dGVkIGJ5OiAgICAgICBtbWFj eSA8bW1hY3lAbWF0dG1hY3kuaW8+DQo+ID4+ID4gPj4gICBSZXZpZXdlZCBieTogICAgICAgIHNo dXJkLCBzYnJ1bm8NCj4gPj4gPiA+PiAgIFNwb25zb3JlZCBieTogICAgICAgTGltZWxpZ2h0IE5l dHdvcmtzDQo+ID4+ID4gPj4gICBEaWZmZXJlbnRpYWwgUmV2aXNpb246ICAgICAgaHR0cHM6Ly9y ZXZpZXdzLmZyZWVic2Qub3JnL0QxNDk2OQ0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gTW9kaWZpZWQ6 DQo+ID4+ID4gPj4gICBoZWFkL3N5cy9rZXJuL3N1YnJfZ3Rhc2txdWV1ZS5jDQo+ID4+ID4gPj4g ICBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jDQo+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXQv aWYuYw0KPiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldC9pZ21wLmMNCj4gPj4gPiA+PiAgIGhl YWQvc3lzL25ldGluZXQvaWdtcF92YXIuaA0KPiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldC9p bi5jDQo+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMNCj4gPj4gPiA+PiAg IGhlYWQvc3lzL25ldGluZXQvaW5fcGNiLmMNCj4gPj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQv aW5fdmFyLmgNCj4gPj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQvaXBfY2FycC5jDQo+ID4+ID4g Pj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjYuYw0KPiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5l dDYvaW42X2lmYXR0YWNoLmMNCj4gPj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQ2L2luNl9tY2Fz dC5jDQo+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjZfcGNiLmMNCj4gPj4gPiA+PiAg IGhlYWQvc3lzL25ldGluZXQ2L2luNl92YXIuaA0KPiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5l dDYvbWxkNi5jDQo+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9tbGQ2X3Zhci5oDQo+ID4+ ID4gPj4gICBoZWFkL3N5cy9zeXMvZ3Rhc2txdWV1ZS5oDQo+ID4+ID4gPj4NCj4gPj4gPiA+PiBN b2RpZmllZDogaGVhZC9zeXMva2Vybi9zdWJyX2d0YXNrcXVldWUuYw0KPiA+PiA+ID4+ID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KPiA+PiA+ID4+IC0tLSBoZWFkL3N5cy9rZXJuL3N1YnJfZ3Rhc2tx dWV1ZS5jICAgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4ICAgICAgICAocjMzMzE3NCkNCj4gPj4g PiA+PiArKysgaGVhZC9zeXMva2Vybi9zdWJyX2d0YXNrcXVldWUuYyAgIFdlZCBNYXkgIDIgMTk6 MzY6MjkgMjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4+ID4gPj4gQEAgLTUzLDYgKzUzLDcgQEAg c3RhdGljIHZvaWQgZ3Rhc2txdWV1ZV90aHJlYWRfZW5xdWV1ZSh2b2lkICopOw0KPiA+PiA+ID4+ ICBzdGF0aWMgdm9pZCAgZ3Rhc2txdWV1ZV90aHJlYWRfbG9vcCh2b2lkICphcmcpOw0KPiA+PiA+ ID4+DQo+ID4+ID4gPj4gIFRBU0tRR1JPVVBfREVGSU5FKHNvZnRpcnEsIG1wX25jcHVzLCAxKTsN Cj4gPj4gPiA+PiArVEFTS1FHUk9VUF9ERUZJTkUoY29uZmlnLCAxLCAxKTsNCj4gPj4gPiA+Pg0K PiA+PiA+ID4+ICBzdHJ1Y3QgZ3Rhc2txdWV1ZV9idXN5IHsNCj4gPj4gPiA+PiAgICAgICBzdHJ1 Y3QgZ3Rhc2sgICAgKnRiX3J1bm5pbmc7DQo+ID4+ID4gPj4gQEAgLTY2Miw3ICs2NjMsNyBAQCBT WVNJTklUKHRxZ19yZWNvcmRfc21wX3N0YXJ0ZWQsIFNJX1NVQl9TTVAsIFNJX09SREVSX0YNCj4g Pj4gPiA+Pg0KPiA+PiA+ID4+ICB2b2lkDQo+ID4+ID4gPj4gIHRhc2txZ3JvdXBfYXR0YWNoKHN0 cnVjdCB0YXNrcWdyb3VwICpxZ3JvdXAsIHN0cnVjdCBncm91cHRhc2sgKmd0YXNrLA0KPiA+PiA+ ID4+IC0gICAgdm9pZCAqdW5pcSwgaW50IGlycSwgY2hhciAqbmFtZSkNCj4gPj4gPiA+PiArICAg IHZvaWQgKnVuaXEsIGludCBpcnEsIGNvbnN0IGNoYXIgKm5hbWUpDQo+ID4+ID4gPj4gIHsNCj4g Pj4gPiA+PiAgICAgICBjcHVzZXRfdCBtYXNrOw0KPiA+PiA+ID4+ICAgICAgIGludCBxaWQsIGVy cm9yOw0KPiA+PiA+ID4+IEBAIC05NzYsNCArOTc3LDEzIEBAIHZvaWQNCj4gPj4gPiA+PiAgdGFz a3Fncm91cF9kZXN0cm95KHN0cnVjdCB0YXNrcWdyb3VwICpxZ3JvdXApDQo+ID4+ID4gPj4gIHsN Cj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICt9DQo+ID4+ID4gPj4gKw0KPiA+PiA+ID4+ICt2b2lkDQo+ ID4+ID4gPj4gK3Rhc2txZ3JvdXBfY29uZmlnX2d0YXNrX2luaXQodm9pZCAqY3R4LCBzdHJ1Y3Qg Z3JvdXB0YXNrICpndGFzaywgZ3Rhc2tfZm5fdA0KPiA+PiA+ID4+ICpmbiwNCj4gPj4gPiA+PiAr ICAgICBjb25zdCBjaGFyICpuYW1lKQ0KPiA+PiA+ID4+ICt7DQo+ID4+ID4gPj4gKw0KPiA+PiA+ ID4+ICsgICAgIEdST1VQVEFTS19JTklUKGd0YXNrLCAwLCBmbiwgY3R4KTsNCj4gPj4gPiA+PiAr ICAgICB0YXNrcWdyb3VwX2F0dGFjaChxZ3JvdXBfY29uZmlnLCBndGFzaywgZ3Rhc2ssIC0xLCBu YW1lKTsNCj4gPj4gPiA+PiAgfQ0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gTW9kaWZpZWQ6IGhlYWQv c3lzL2tlcm4vc3Vicl93aXRuZXNzLmMNCj4gPj4gPiA+PiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Cj4gPj4gPiA+PiAtLS0gaGVhZC9zeXMva2Vybi9zdWJyX3dpdG5lc3MuYyAgICAgIFdlZCBNYXkg IDIgMTc6NDE6MDAgMjAxOCAgICAgICAgKHIzMzMxNzQpDQo+ID4+ID4gPj4gKysrIGhlYWQvc3lz L2tlcm4vc3Vicl93aXRuZXNzLmMgICAgICBXZWQgTWF5ICAyIDE5OjM2OjI5IDIwMTggICAgICAg IChyMzMzMTc1KQ0KPiA+PiA+ID4+IEBAIC01MzIsMTggKzUzMiwyMiBAQCBzdGF0aWMgc3RydWN0 IHdpdG5lc3Nfb3JkZXJfbGlzdF9lbnRyeSBvcmRlcl9saXN0c1tdID0NCj4gPj4gPiA+PiAgICAg ICAgKiBJUHY0IG11bHRpY2FzdDoNCj4gPj4gPiA+PiAgICAgICAgKiBwcm90b2NvbCBsb2NrcyBi ZWZvcmUgaW50ZXJmYWNlIGxvY2tzLCBhZnRlciBVRFAgbG9ja3MuDQo+ID4+ID4gPj4gICAgICAg ICovDQo+ID4+ID4gPj4gKyAgICAgeyAiaW5fbXVsdGlfc3giLCAmbG9ja19jbGFzc19zeCB9LA0K PiA+PiA+ID4+ICAgICAgIHsgInVkcGlucCIsICZsb2NrX2NsYXNzX3J3IH0sDQo+ID4+ID4gPj4g LSAgICAgeyAiaW5fbXVsdGlfbXR4IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQo+ID4+ID4g Pj4gKyAgICAgeyAiaW5fbXVsdGlfbGlzdF9tdHgiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAgfSwN Cj4gPj4gPiA+PiAgICAgICB7ICJpZ21wX210eCIsICZsb2NrX2NsYXNzX210eF9zbGVlcCB9LA0K PiA+PiA+ID4+ICsgICAgIHsgImlmbmV0X3J3IiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPj4gPiA+ PiAgICAgICB7ICJpZl9hZGRyX2xvY2siLCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiA+ID4+ICAg ICAgIHsgTlVMTCwgTlVMTCB9LA0KPiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ID4gPj4gICAgICAg ICogSVB2NiBtdWx0aWNhc3Q6DQo+ID4+ID4gPj4gICAgICAgICogcHJvdG9jb2wgbG9ja3MgYmVm b3JlIGludGVyZmFjZSBsb2NrcywgYWZ0ZXIgVURQIGxvY2tzLg0KPiA+PiA+ID4+ICAgICAgICAq Lw0KPiA+PiA+ID4+ICsgICAgIHsgImluNl9tdWx0aV9zeCIsICZsb2NrX2NsYXNzX3N4IH0sDQo+ ID4+ID4gPj4gICAgICAgeyAidWRwaW5wIiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPj4gPiA+PiAt ICAgICB7ICJpbjZfbXVsdGlfbXR4IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQo+ID4+ID4g Pj4gKyAgICAgeyAiaW42X211bHRpX2xpc3RfbXR4IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0s DQo+ID4+ID4gPj4gICAgICAgeyAibWxkX210eCIsICZsb2NrX2NsYXNzX210eF9zbGVlcCB9LA0K PiA+PiA+ID4+ICsgICAgIHsgImlmbmV0X3J3IiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPj4gPiA+ PiAgICAgICB7ICJpZl9hZGRyX2xvY2siLCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiA+ID4+ICAg ICAgIHsgTlVMTCwgTlVMTCB9LA0KPiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ID4gPj4NCj4gPj4g PiA+PiBNb2RpZmllZDogaGVhZC9zeXMvbmV0L2lmLmMNCj4gPj4gPiA+PiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0NCj4gPj4gPiA+PiAtLS0gaGVhZC9zeXMvbmV0L2lmLmMgV2VkIE1heSAgMiAxNzo0 MTowMCAyMDE4ICAgICAgICAocjMzMzE3NCkNCj4gPj4gPiA+PiArKysgaGVhZC9zeXMvbmV0L2lm LmMgV2VkIE1heSAgMiAxOTozNjoyOSAyMDE4ICAgICAgICAocjMzMzE3NSkNCj4gPj4gPiA+PiBA QCAtOTg1LDExICs5ODUsMTMgQEAgc3RhdGljIHZvaWQNCj4gPj4gPiA+PiAgaWZfcHVyZ2VtYWRk cnMoc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ID4gPj4gIHsNCj4gPj4gPiA+PiAgICAgICBzdHJ1 Y3QgaWZtdWx0aWFkZHIgKmlmbWE7DQo+ID4+ID4gPj4gLSAgICAgc3RydWN0IGlmbXVsdGlhZGRy ICpuZXh0Ow0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgSUZfQUREUl9XTE9DSyhpZnApOw0K PiA+PiA+ID4+IC0gICAgIFRBSUxRX0ZPUkVBQ0hfU0FGRShpZm1hLCAmaWZwLT5pZl9tdWx0aWFk ZHJzLCBpZm1hX2xpbmssIG5leHQpDQo+ID4+ID4gPj4gKyAgICAgd2hpbGUgKCFUQUlMUV9FTVBU WSgmaWZwLT5pZl9tdWx0aWFkZHJzKSkgew0KPiA+PiA+ID4+ICsgICAgICAgICAgICAgaWZtYSA9 IFRBSUxRX0ZJUlNUKCZpZnAtPmlmX211bHRpYWRkcnMpOw0KPiA+PiA+ID4+ICsgICAgICAgICAg ICAgVEFJTFFfUkVNT1ZFKCZpZnAtPmlmX211bHRpYWRkcnMsIGlmbWEsIGlmbWFfbGluayk7DQo+ ID4+ID4gPj4gICAgICAgICAgICAgICBpZl9kZWxtdWx0aV9sb2NrZWQoaWZwLCBpZm1hLCAxKTsN Cj4gPj4gPiA+PiArICAgICB9DQo+ID4+ID4gPj4gICAgICAgSUZfQUREUl9XVU5MT0NLKGlmcCk7 DQo+ID4+ID4gPj4gIH0NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IEBAIC0zNDI5LDYgKzM0MzEsMTIg QEAgaWZfYWRkbXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBzb2NrYWRkciAqc2EsDQo+ ID4+ID4gPj4gICAgICAgc3RydWN0IHNvY2thZGRyX2RsIHNkbDsNCj4gPj4gPiA+PiAgICAgICBp bnQgZXJyb3I7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiArI2lmZGVmIElORVQNCj4gPj4gPiA+PiAr ICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArI2VuZGlmDQo+ ID4+ID4gPj4gKyNpZmRlZiBJTkVUNg0KPiA+PiA+ID4+ICsgICAgIElONl9NVUxUSV9MSVNUX1VO TE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArI2VuZGlmDQo+ID4+ID4gPj4gICAgICAgLyoNCj4g Pj4gPiA+PiAgICAgICAgKiBJZiB0aGUgYWRkcmVzcyBpcyBhbHJlYWR5IHByZXNlbnQsIHJldHVy biBhIG5ldyByZWZlcmVuY2UgdG8gaXQ7DQo+ID4+ID4gPj4gICAgICAgICogb3RoZXJ3aXNlLCBh bGxvY2F0ZSBzdG9yYWdlIGFuZCBzZXQgdXAgYSBuZXcgYWRkcmVzcy4NCj4gPj4gPiA+PiBAQCAt MzYxMCw2ICszNjE4LDkgQEAgaWZfZGVsbXVsdGlfaWZtYShzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlm bWEpDQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGlmbmV0ICppZnA7DQo+ID4+ID4gPj4gICAgICAg aW50IGxhc3RyZWY7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiArI2lmZGVmIElORVQNCj4gPj4gPiA+ PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArI2VuZGlm DQo+ID4+ID4gPj4gICAgICAgaWZwID0gaWZtYS0+aWZtYV9pZnA7DQo+ID4+ID4gPj4gICNpZmRl ZiBESUFHTk9TVElDDQo+ID4+ID4gPj4gICAgICAgaWYgKGlmcCA9PSBOVUxMKSB7DQo+ID4+ID4g Pj4gQEAgLTM3MTEsOCArMzcyMiw3IEBAIGlmX2RlbG11bHRpX2xvY2tlZChzdHJ1Y3QgaWZuZXQg KmlmcCwgc3RydWN0IGlmbXVsdGlhZA0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBp Zl9mcmVlbXVsdGkobGxfaWZtYSk7DQo+ID4+ID4gPj4gICAgICAgICAgICAgICB9DQo+ID4+ID4g Pj4gICAgICAgfQ0KPiA+PiA+ID4+IC0NCj4gPj4gPiA+PiAtICAgICBpZiAoaWZwICE9IE5VTEwp DQo+ID4+ID4gPj4gKyAgICAgaWYgKGlmcCAhPSBOVUxMICYmIGRldGFjaGluZyA9PSAwKQ0KPiA+ PiA+ID4+ICAgICAgICAgICAgICAgVEFJTFFfUkVNT1ZFKCZpZnAtPmlmX211bHRpYWRkcnMsIGlm bWEsIGlmbWFfbGluayk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBpZl9mcmVlbXVsdGko aWZtYSk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiBNb2RpZmllZDogaGVhZC9zeXMvbmV0aW5ldC9p Z21wLmMNCj4gPj4gPiA+PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4gPiA+PiAtLS0gaGVh ZC9zeXMvbmV0aW5ldC9pZ21wLmMgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAgICAgIChy MzMzMTc0KQ0KPiA+PiA+ID4+ICsrKyBoZWFkL3N5cy9uZXRpbmV0L2lnbXAuYyAgIFdlZCBNYXkg IDIgMTk6MzY6MjkgMjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4+ID4gPj4gQEAgLTEzNiw3ICsx MzYsNyBAQCBzdGF0aWMgaW50ICAgICAgICBpZ21wX3YzX2VucXVldWVfZ3JvdXBfcmVjb3JkKHN0 cnVjdCBtYnVmcQ0KPiA+PiA+ID4+ICogc3RydWN0IGluX211bHRpICosIGNvbnN0IGludCwgY29u c3QgaW50LCBjb25zdCBpbnQpOw0KPiA+PiA+ID4+ICBzdGF0aWMgaW50ICAgaWdtcF92M19lbnF1 ZXVlX2ZpbHRlcl9jaGFuZ2Uoc3RydWN0IG1idWZxICosDQo+ID4+ID4gPj4gICAgICAgICAgICAg ICAgICAgc3RydWN0IGluX211bHRpICopOw0KPiA+PiA+ID4+IC1zdGF0aWMgdm9pZCAgaWdtcF92 M19wcm9jZXNzX2dyb3VwX3RpbWVycyhzdHJ1Y3QgaWdtcF9pZnNvZnRjICosDQo+ID4+ID4gPj4g K3N0YXRpYyB2b2lkICBpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0cnVjdCBpbl9tdWx0 aV9oZWFkICosDQo+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWZxICosIHN0 cnVjdCBtYnVmcSAqLCBzdHJ1Y3QgaW5fbXVsdGkgKiwNCj4gPj4gPiA+PiAgICAgICAgICAgICAg ICAgICBjb25zdCBpbnQpOw0KPiA+PiA+ID4+ICBzdGF0aWMgaW50ICAgaWdtcF92M19tZXJnZV9z dGF0ZV9jaGFuZ2VzKHN0cnVjdCBpbl9tdWx0aSAqLA0KPiA+PiA+ID4+IEBAIC0xNjIsMTIgKzE2 MiwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldGlzcl9oYW5kbGVyIGlnbXBfbmggPSB7DQo+ ID4+ID4gPj4gICAqIHRoZW1zZWx2ZXMgYXJlIG5vdCB2aXJ0dWFsaXplZC4NCj4gPj4gPiA+PiAg ICoNCj4gPj4gPiA+PiAgICogTG9ja2luZzoNCj4gPj4gPiA+PiAtICogICogVGhlIHBlcm1pdHRl ZCBsb2NrIG9yZGVyIGlzOiBJTl9NVUxUSV9MT0NLLCBJR01QX0xPQ0ssIElGX0FERFJfTE9DSy4N Cj4gPj4gPiA+PiArICogICogVGhlIHBlcm1pdHRlZCBsb2NrIG9yZGVyIGlzOiBJTl9NVUxUSV9M SVNUX0xPQ0ssIElHTVBfTE9DSywgSUZfQUREUl9MT0NLLg0KPiA+PiA+ID4+ICAgKiAgICBBbnkg bWF5IGJlIHRha2VuIGluZGVwZW5kZW50bHk7IGlmIGFueSBhcmUgaGVsZCBhdCB0aGUgc2FtZQ0K PiA+PiA+ID4+ICAgKiAgICB0aW1lLCB0aGUgYWJvdmUgbG9jayBvcmRlciBtdXN0IGJlIGZvbGxv d2VkLg0KPiA+PiA+ID4+ICAgKiAgKiBBbGwgb3V0cHV0IGlzIGRlbGVnYXRlZCB0byB0aGUgbmV0 aXNyLg0KPiA+PiA+ID4+ICAgKiAgICBOb3cgdGhhdCBHaWFudCBoYXMgYmVlbiBlbGltaW5hdGVk LCB0aGUgbmV0aXNyIG1heSBiZSBpbmxpbmVkLg0KPiA+PiA+ID4+IC0gKiAgKiBJTl9NVUxUSV9M T0NLIGNvdmVycyBpbl9tdWx0aS4NCj4gPj4gPiA+PiArICogICogSU5fTVVMVElfTElTVF9MT0NL IGNvdmVycyBpbl9tdWx0aS4NCj4gPj4gPiA+PiAgICogICogSUdNUF9MT0NLIGNvdmVycyBpZ21w X2lmc29mdGMgYW5kIGFueSBnbG9iYWwgdmFyaWFibGVzIGluIHRoaXMgZmlsZSwNCj4gPj4gPiA+ PiAgICogICAgaW5jbHVkaW5nIHRoZSBvdXRwdXQgcXVldWUuDQo+ID4+ID4gPj4gICAqICAqIElG X0FERFJfTE9DSyBjb3ZlcnMgaWZfbXVsdGlhZGRycywgd2hpY2ggaXMgdXNlZCBmb3IgYSB2YXJp ZXR5IG9mDQo+ID4+ID4gPj4gQEAgLTQ0MSw3ICs0NDEsNyBAQCBzeXNjdGxfaWdtcF9pZmluZm8o U1lTQ1RMX0hBTkRMRVJfQVJHUykNCj4gPj4gPiA+PiAgICAgICBpZiAoZXJyb3IpDQo+ID4+ID4g Pj4gICAgICAgICAgICAgICByZXR1cm4gKGVycm9yKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0g ICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0so KTsNCj4gPj4gPiA+PiAgICAgICBJR01QX0xPQ0soKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAg ICAgIGlmIChuYW1lWzBdIDw9IDAgfHwgbmFtZVswXSA+IFZfaWZfaW5kZXgpIHsNCj4gPj4gPiA+ PiBAQCAtNDc1LDcgKzQ3NSw3IEBAIHN5c2N0bF9pZ21wX2lmaW5mbyhTWVNDVExfSEFORExFUl9B UkdTKQ0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gIG91dF9sb2NrZWQ6DQo+ID4+ID4gPj4gICAgICAg SUdNUF9VTkxPQ0soKTsNCj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4g PiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+PiA+ID4+ICAgICAgIHJldHVy biAoZXJyb3IpOw0KPiA+PiA+ID4+ICB9DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiBAQCAtNTg2LDcg KzU4Niw2IEBAIGlnaV9hbGxvY19sb2NrZWQoLypjb25zdCovIHN0cnVjdCBpZm5ldCAqaWZwKQ0K PiA+PiA+ID4+ICAgICAgIGlnaS0+aWdpX3FpID0gSUdNUF9RSV9JTklUOw0KPiA+PiA+ID4+ICAg ICAgIGlnaS0+aWdpX3FyaSA9IElHTVBfUVJJX0lOSVQ7DQo+ID4+ID4gPj4gICAgICAgaWdpLT5p Z2lfdXJpID0gSUdNUF9VUklfSU5JVDsNCj4gPj4gPiA+PiAtICAgICBTTElTVF9JTklUKCZpZ2kt PmlnaV9yZWxpbm1oZWFkKTsNCj4gPj4gPiA+PiAgICAgICBtYnVmcV9pbml0KCZpZ2ktPmlnaV9n cSwgSUdNUF9NQVhfUkVTUE9OU0VfUEFDS0VUUyk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAg ICBMSVNUX0lOU0VSVF9IRUFEKCZWX2lnaV9oZWFkLCBpZ2ksIGlnaV9saW5rKTsNCj4gPj4gPiA+ PiBAQCAtNjEyLDExICs2MTEsMTIgQEAgaWdtcF9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkN Cj4gPj4gPiA+PiAgew0KPiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZ21wX2lmc29mdGMgICAgICpp Z2k7DQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICAgICAgKmlmbWE7DQo+ID4+ ID4gPj4gLSAgICAgc3RydWN0IGluX211bHRpICAgICAgICAgKmlubSwgKnRpbm07DQo+ID4+ID4g Pj4gLQ0KPiA+PiA+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm07DQo+ID4+ ID4gPj4gKyAgICAgc3RydWN0IGluX211bHRpX2hlYWQgaW5tX2ZyZWVfdG1wOw0KPiA+PiA+ID4+ ICAgICAgIENUUjMoS1RSX0lHTVBWMywgIiVzOiBjYWxsZWQgZm9yIGlmcCAlcCglcykiLCBfX2Z1 bmNfXywgaWZwLA0KPiA+PiA+ID4+ICAgICAgICAgICBpZnAtPmlmX3huYW1lKTsNCj4gPj4gPiA+ Pg0KPiA+PiA+ID4+ICsgICAgIFNMSVNUX0lOSVQoJmlubV9mcmVlX3RtcCk7DQo+ID4+ID4gPj4g ICAgICAgSUdNUF9MT0NLKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBpZ2kgPSAoKHN0 cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSktPmlpX2lnbXA7DQo+ID4+ ID4gPj4gQEAgLTYzMSwyNCArNjMxLDE1IEBAIGlnbXBfaWZkZXRhY2goc3RydWN0IGlmbmV0ICpp ZnApDQo+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAoIiVzOiBpZm1hX3Byb3Rv c3BlYyBpcyBOVUxMIiwgX19mdW5jX18pKTsNCj4gPj4gPiA+PiAgI2VuZGlmDQo+ID4+ID4gPj4g ICAgICAgICAgICAgICAgICAgICAgIGlubSA9IChzdHJ1Y3QgaW5fbXVsdGkgKilpZm1hLT5pZm1h X3Byb3Rvc3BlYzsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgaWYgKGlubS0+aW5t X3N0YXRlID09IElHTVBfTEVBVklOR19NRU1CRVIpIHsNCj4gPj4gPiA+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTTElTVF9JTlNFUlRfSEVBRCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwN Cj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5tLCBpbm1fbnJl bGUpOw0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICB9DQo+ID4+ID4gPj4gKyAgICAg ICAgICAgICAgICAgICAgIGlmIChpbm0tPmlubV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVS KQ0KPiA+PiA+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubV9yZWxlX2xvY2tl ZCgmaW5tX2ZyZWVfdG1wLCBpbm0pOw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBp bm1fY2xlYXJfcmVjb3JkZWQoaW5tKTsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIH0NCj4gPj4g PiA+PiAgICAgICAgICAgICAgIElGX0FERFJfUlVOTE9DSyhpZnApOw0KPiA+PiA+ID4+IC0gICAg ICAgICAgICAgLyoNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAqIEZyZWUgdGhlIGluX211bHRp IHJlZmVyZW5jZShzKSBmb3IgdGhpcyBJR01QIGxpZmVjeWNsZS4NCj4gPj4gPiA+PiAtICAgICAg ICAgICAgICAqLw0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgU0xJU1RfRk9SRUFDSF9TQUZFKGlu bSwgJmlnaS0+aWdpX3JlbGlubWhlYWQsIGlubV9ucmVsZSwNCj4gPj4gPiA+PiAtICAgICAgICAg ICAgICAgICB0aW5tKSB7DQo+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgIFNMSVNUX1JF TU9WRV9IRUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFkLCBpbm1fbnJlbGUpOw0KPiA+PiA+ID4+IC0g ICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4gPiA+PiAt ICAgICAgICAgICAgIH0NCj4gPj4gPiA+PiArICAgICAgICAgICAgIGlubV9yZWxlYXNlX2xpc3Rf ZGVmZXJyZWQoJmlubV9mcmVlX3RtcCk7DQo+ID4+ID4gPj4gICAgICAgfQ0KPiA+PiA+ID4+IC0N Cj4gPj4gPiA+PiAgICAgICBJR01QX1VOTE9DSygpOw0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiAg fQ0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gIC8qDQo+ID4+ID4gPj4gQEAgLTY4NCwxMSArNjc1LDYg QEAgaWdpX2RlbGV0ZV9sb2NrZWQoY29uc3Qgc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ID4gPj4g ICAgICAgICAgICAgICAgICAgICAgIG1idWZxX2RyYWluKCZpZ2ktPmlnaV9ncSk7DQo+ID4+ID4g Pj4NCj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgTElTVF9SRU1PVkUoaWdpLCBpZ2lf bGluayk7DQo+ID4+ID4gPj4gLQ0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBLQVNT RVJUKFNMSVNUX0VNUFRZKCZpZ2ktPmlnaV9yZWxpbm1oZWFkKSwNCj4gPj4gPiA+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgICgiJXM6IHRoZXJlIGFyZSBkYW5nbGluZyBpbl9tdWx0aSByZWZl cmVuY2VzIiwNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fKSk7 DQo+ID4+ID4gPj4gLQ0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGlnaSwg TV9JR01QKTsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiA+PiA+ ID4+ICAgICAgICAgICAgICAgfQ0KPiA+PiA+ID4+IEBAIC03MjIsNyArNzA4LDcgQEAgaWdtcF9p bnB1dF92MV9xdWVyeShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlwDQo+ID4+ID4g Pj4gICAgICAgfQ0KPiA+PiA+ID4+ICAgICAgIElHTVBTVEFUX0lOQyhpZ3BzX3Jjdl9nZW5fcXVl cmllcyk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4+ ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ID4gPj4gICAgICAgSUdNUF9M T0NLKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBpZ2kgPSAoKHN0cnVjdCBpbl9pZmlu Zm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSktPmlpX2lnbXA7DQo+ID4+ID4gPj4gQEAgLTc3 OCw3ICs3NjQsNyBAQCBpZ21wX2lucHV0X3YxX3F1ZXJ5KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25z dCBzdHJ1Y3QgaXANCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICBvdXRfbG9ja2VkOg0KPiA+PiA+ID4+ ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfVU5MT0NLKCk7 DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPiA+Pg0KPiA+ PiA+ID4+ICAgICAgIHJldHVybiAoMCk7DQo+ID4+ID4gPj4gIH0NCj4gPj4gPiA+PiBAQCAtODE2 LDcgKzgwMiw3IEBAIGlnbXBfaW5wdXRfdjJfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0 IHN0cnVjdCBpcA0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgSUdNUFNUQVRfSU5DKGlncHNfcmN2 X2dyb3VwX3F1ZXJpZXMpOw0KPiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ IC0gICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xP Q0soKTsNCj4gPj4gPiA+PiAgICAgICBJR01QX0xPQ0soKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ ICAgICAgIGlnaSA9ICgoc3RydWN0IGluX2lmaW5mbyAqKWlmcC0+aWZfYWZkYXRhW0FGX0lORVRd KS0+aWlfaWdtcDsNCj4gPj4gPiA+PiBAQCAtODcyLDcgKzg1OCw3IEBAIGlnbXBfaW5wdXRfdjJf cXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiA+PiA+ID4+DQo+ID4+ ID4gPj4gIG91dF9sb2NrZWQ6DQo+ID4+ID4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsNCj4gPj4g PiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9M SVNUX1VOTE9DSygpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4g Pj4gPiA+PiAgfQ0KPiA+PiA+ID4+IEBAIC04OTksNyArODg1LDcgQEAgaWdtcF92Ml91cGRhdGVf Z3JvdXAoc3RydWN0IGluX211bHRpICppbm0sIGNvbnN0IGludCB0DQo+ID4+ID4gPj4gICAgICAg Q1RSNChLVFJfSUdNUFYzLCAiMHglMDh4OiAlcy8lcyB0aW1lcj0lZCIsIF9fZnVuY19fLA0KPiA+ PiA+ID4+ICAgICAgICAgICBudG9obChpbm0tPmlubV9hZGRyLnNfYWRkciksIGlubS0+aW5tX2lm cC0+aWZfeG5hbWUsIHRpbWVyKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJ X0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VS VCgpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgc3dpdGNoIChpbm0tPmlubV9zdGF0ZSkg ew0KPiA+PiA+ID4+ICAgICAgIGNhc2UgSUdNUF9OT1RfTUVNQkVSOg0KPiA+PiA+ID4+IEBAIC0x MDExLDcgKzk5Nyw3IEBAIGlnbXBfaW5wdXRfdjNfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNv bnN0IHN0cnVjdCBpcA0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBJR01QU1RBVF9J TkMoaWdwc19yY3ZfZ3NyX3F1ZXJpZXMpOw0KPiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPiA+Pg0K PiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxU SV9MSVNUX0xPQ0soKTsNCj4gPj4gPiA+PiAgICAgICBJR01QX0xPQ0soKTsNCj4gPj4gPiA+Pg0K PiA+PiA+ID4+ICAgICAgIGlnaSA9ICgoc3RydWN0IGluX2lmaW5mbyAqKWlmcC0+aWZfYWZkYXRh W0FGX0lORVRdKS0+aWlfaWdtcDsNCj4gPj4gPiA+PiBAQCAtMTA5Miw3ICsxMDc4LDcgQEAgaWdt cF9pbnB1dF92M19xdWVyeShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlwDQo+ID4+ ID4gPj4NCj4gPj4gPiA+PiAgb3V0X2xvY2tlZDoNCj4gPj4gPiA+PiAgICAgICBJR01QX1VOTE9D SygpOw0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiA+ID4+ICsgICAg IElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICByZXR1 cm4gKDApOw0KPiA+PiA+ID4+ICB9DQo+ID4+ID4gPj4gQEAgLTExMDksNyArMTA5NSw3IEBAIGln bXBfaW5wdXRfdjNfZ3JvdXBfcXVlcnkoc3RydWN0IGluX211bHRpICppbm0sIHN0cnVjdA0KPiA+ PiA+ID4+ICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICByZXR2YWw7DQo+ID4+ID4gPj4g ICAgICAgdWludDE2X3QgICAgICAgICAgICAgICAgIG5zcmM7DQo+ID4+ID4gPj4NCj4gPj4gPiA+ PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+ICsgICAgIElOX01VTFRJ X0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiAgICAgICBJR01QX0xPQ0tfQVNTRVJUKCk7 DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICByZXR2YWwgPSAwOw0KPiA+PiA+ID4+IEBAIC0x MjQ2LDcgKzEyMzIsNyBAQCBpZ21wX2lucHV0X3YxX3JlcG9ydChzdHJ1Y3QgaWZuZXQgKmlmcCwg Lypjb25zdCovIHN0cnUNCj4gPj4gPiA+PiAgICAgICAgKiBJZiB3ZSBhcmUgYSBtZW1iZXIgb2Yg dGhpcyBncm91cCwgYW5kIG91ciBtZW1iZXJzaGlwIHNob3VsZCBiZQ0KPiA+PiA+ID4+ICAgICAg ICAqIHJlcG9ydGVkLCBzdG9wIG91ciBncm91cCB0aW1lciBhbmQgdHJhbnNpdGlvbiB0byB0aGUg J2xhenknIHN0YXRlLg0KPiA+PiA+ID4+ICAgICAgICAqLw0KPiA+PiA+ID4+IC0gICAgIElOX01V TFRJX0xPQ0soKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4g PiA+PiAgICAgICBpbm0gPSBpbm1fbG9va3VwKGlmcCwgaWdtcC0+aWdtcF9ncm91cCk7DQo+ID4+ ID4gPj4gICAgICAgaWYgKGlubSAhPSBOVUxMKSB7DQo+ID4+ID4gPj4gICAgICAgICAgICAgICBz dHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2k7DQo+ID4+ID4gPj4gQEAgLTEzMDUsNyArMTI5MSw3IEBA IGlnbXBfaW5wdXRfdjFfcmVwb3J0KHN0cnVjdCBpZm5ldCAqaWZwLCAvKmNvbnN0Ki8gc3RydQ0K PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICBvdXRfbG9ja2VkOg0KPiA+ PiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiA+ID4+ICsgICAgIElOX01VTFRJ X0xJU1RfVU5MT0NLKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICByZXR1cm4gKDApOw0K PiA+PiA+ID4+ICB9DQo+ID4+ID4gPj4gQEAgLTEzNzMsNyArMTM1OSw3IEBAIGlnbXBfaW5wdXRf djJfcmVwb3J0KHN0cnVjdCBpZm5ldCAqaWZwLCAvKmNvbnN0Ki8gc3RydQ0KPiA+PiA+ID4+ICAg ICAgICAqIHJlcG9ydGVkLCBhbmQgb3VyIGdyb3VwIHRpbWVyIGlzIHBlbmRpbmcgb3IgYWJvdXQg dG8gYmUgcmVzZXQsDQo+ID4+ID4gPj4gICAgICAgICogc3RvcCBvdXIgZ3JvdXAgdGltZXIgYnkg dHJhbnNpdGlvbmluZyB0byB0aGUgJ2xhenknIHN0YXRlLg0KPiA+PiA+ID4+ICAgICAgICAqLw0K PiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0soKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxU SV9MSVNUX0xPQ0soKTsNCj4gPj4gPiA+PiAgICAgICBpbm0gPSBpbm1fbG9va3VwKGlmcCwgaWdt cC0+aWdtcF9ncm91cCk7DQo+ID4+ID4gPj4gICAgICAgaWYgKGlubSAhPSBOVUxMKSB7DQo+ID4+ ID4gPj4gICAgICAgICAgICAgICBzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2k7DQo+ID4+ID4gPj4g QEAgLTE0MTgsNyArMTQwNCw3IEBAIGlnbXBfaW5wdXRfdjJfcmVwb3J0KHN0cnVjdCBpZm5ldCAq aWZwLCAvKmNvbnN0Ki8gc3RydQ0KPiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPiA+Pg0KPiA+PiA+ ID4+ICBvdXRfbG9ja2VkOg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+ PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+ PiAgICAgICByZXR1cm4gKDApOw0KPiA+PiA+ID4+ICB9DQo+ID4+ID4gPj4gQEAgLTE2NDcsNiAr MTYzMyw3IEBAIGlnbXBfZmFzdHRpbW9fdm5ldCh2b2lkKQ0KPiA+PiA+ID4+ICAgICAgIHN0cnVj dCBpZ21wX2lmc29mdGMgICAgICppZ2k7DQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlh ZGRyICAgICAgKmlmbWE7DQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGluX211bHRpICAgICAgICAg KmlubTsNCj4gPj4gPiA+PiArICAgICBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBpbm1fZnJlZV90bXA7 DQo+ID4+ID4gPj4gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgIGxvb3AsIHVyaV9mYXN0 aHo7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBsb29wID0gMDsNCj4gPj4gPiA+PiBAQCAt MTY2Miw3ICsxNjQ5LDggQEAgaWdtcF9mYXN0dGltb192bmV0KHZvaWQpDQo+ID4+ID4gPj4gICAg ICAgICAgICFWX3N0YXRlX2NoYW5nZV90aW1lcnNfcnVubmluZykNCj4gPj4gPiA+PiAgICAgICAg ICAgICAgIHJldHVybjsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0so KTsNCj4gPj4gPiA+PiArICAgICBTTElTVF9JTklUKCZpbm1fZnJlZV90bXApOw0KPiA+PiA+ID4+ ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiA+ID4+ICAgICAgIElHTVBfTE9DSygp Ow0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgLyoNCj4gPj4gPiA+PiBAQCAtMTcyMCw3ICsx NzA4LDcgQEAgaWdtcF9mYXN0dGltb192bmV0KHZvaWQpDQo+ID4+ID4gPj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlnaS0+aWdpX3ZlcnNpb24pOw0KPiA+PiA+ID4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAg ICAgICAgICBjYXNlIElHTVBfVkVSU0lPTl8zOg0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1lcnMoaWdpLCAmcXJxLA0KPiA+ PiA+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlnbXBfdjNfcHJvY2Vzc19ncm91 cF90aW1lcnMoJmlubV9mcmVlX3RtcCwgJnFycSwNCj4gPj4gPiA+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnNjcSwgaW5tLCB1cmlfZmFzdGh6KTsNCj4gPj4gPiA+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPj4gPiA+PiAgICAgICAgICAgICAg ICAgICAgICAgfQ0KPiA+PiA+ID4+IEBAIC0xNzI4LDggKzE3MTYsNiBAQCBpZ21wX2Zhc3R0aW1v X3ZuZXQodm9pZCkNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIElGX0FERFJfUlVOTE9DSyhpZnAp Ow0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgICAgICAgICBpZiAoaWdpLT5pZ2lfdmVyc2lv biA9PSBJR01QX1ZFUlNJT05fMykgew0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgaW5fbXVsdGkgICAgICAgICAqdGlubTsNCj4gPj4gPiA+PiAtDQo+ID4+ID4gPj4gICAg ICAgICAgICAgICAgICAgICAgIGlnbXBfZGlzcGF0Y2hfcXVldWUoJnFycSwgMCwgbG9vcCk7DQo+ ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIGlnbXBfZGlzcGF0Y2hfcXVldWUoJnNjcSwg MCwgbG9vcCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiBAQCAtMTczNywxOCArMTcyMywxMyBAQCBp Z21wX2Zhc3R0aW1vX3ZuZXQodm9pZCkNCj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAg ICogRnJlZSB0aGUgaW5fbXVsdGkgcmVmZXJlbmNlKHMpIGZvciB0aGlzDQo+ID4+ID4gPj4gICAg ICAgICAgICAgICAgICAgICAgICAqIElHTVAgbGlmZWN5Y2xlLg0KPiA+PiA+ID4+ICAgICAgICAg ICAgICAgICAgICAgICAgKi8NCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgU0xJU1Rf Rk9SRUFDSF9TQUZFKGlubSwgJmlnaS0+aWdpX3JlbGlubWhlYWQsDQo+ID4+ID4gPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgICBpbm1fbnJlbGUsIHRpbm0pIHsNCj4gPj4gPiA+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaWdpLT5pZ2lfcmVsaW5t aGVhZCwNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5tX25y ZWxlKTsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZWFz ZV9sb2NrZWQoaW5tKTsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+PiA+ ID4+ICsgICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVkKCZpbm1f ZnJlZV90bXApOw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgfQ0KPiA+PiA+ID4+ICAgICAgIH0N Cj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICBvdXRfbG9ja2VkOg0KPiA+PiA+ID4+ICAgICAgIElHTVBf VU5MT0NLKCk7DQo+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfVU5MT0NLKCk7DQo+ID4+ID4gPj4g KyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPiA+PiAgfQ0KPiA+PiA+ID4+DQo+ ID4+ID4gPj4gIC8qDQo+ID4+ID4gPj4gQEAgLTE3NjAsNyArMTc0MSw3IEBAIGlnbXBfdjF2Ml9w cm9jZXNzX2dyb3VwX3RpbWVyKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjbw0KPiA+PiA+ID4+ICB7 DQo+ID4+ID4gPj4gICAgICAgaW50IHJlcG9ydF90aW1lcl9leHBpcmVkOw0KPiA+PiA+ID4+DQo+ ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArICAgICBJ Tl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gICAgICAgSUdNUF9MT0NLX0FT U0VSVCgpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgaWYgKGlubS0+aW5tX3RpbWVyID09 IDApIHsNCj4gPj4gPiA+PiBAQCAtMTgwMiwxNCArMTc4MywxNCBAQCBpZ21wX3YxdjJfcHJvY2Vz c19ncm91cF90aW1lcihzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgY28NCj4gPj4gPiA+PiAgICogTm90 ZTogVW5sb2NrZWQgcmVhZCBmcm9tIGlnaS4NCj4gPj4gPiA+PiAgICovDQo+ID4+ID4gPj4gIHN0 YXRpYyB2b2lkDQo+ID4+ID4gPj4gLWlnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1lcnMoc3RydWN0 IGlnbXBfaWZzb2Z0YyAqaWdpLA0KPiA+PiA+ID4+ICtpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGlt ZXJzKHN0cnVjdCBpbl9tdWx0aV9oZWFkICppbm1oLA0KPiA+PiA+ID4+ICAgICAgc3RydWN0IG1i dWZxICpxcnEsIHN0cnVjdCBtYnVmcSAqc2NxLA0KPiA+PiA+ID4+ICAgICAgc3RydWN0IGluX211 bHRpICppbm0sIGNvbnN0IGludCB1cmlfZmFzdGh6KQ0KPiA+PiA+ID4+ICB7DQo+ID4+ID4gPj4g ICAgICAgaW50IHF1ZXJ5X3Jlc3BvbnNlX3RpbWVyX2V4cGlyZWQ7DQo+ID4+ID4gPj4gICAgICAg aW50IHN0YXRlX2NoYW5nZV9yZXRyYW5zbWl0X3RpbWVyX2V4cGlyZWQ7DQo+ID4+ID4gPj4NCj4g Pj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+ICsgICAgIElO X01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiAgICAgICBJR01QX0xPQ0tfQVNT RVJUKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBxdWVyeV9yZXNwb25zZV90aW1lcl9l eHBpcmVkID0gMDsNCj4gPj4gPiA+PiBAQCAtMTkwNyw4ICsxODg4LDcgQEAgaWdtcF92M19wcm9j ZXNzX2dyb3VwX3RpbWVycyhzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2ksDQo+ID4+ID4gPj4gICAg ICAgICAgICAgICAgICAgICAgIGlmIChpbm0tPmlubV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVN QkVSICYmDQo+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAgICBpbm0tPmlubV9zY3J2 ID09IDApIHsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm0tPmlu bV9zdGF0ZSA9IElHTVBfTk9UX01FTUJFUjsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBTTElTVF9JTlNFUlRfSEVBRCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwNCj4gPj4g PiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5tLCBpbm1fbnJlbGUpOw0K PiA+PiA+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubV9yZWxlX2xvY2tlZChp bm1oLCBpbm0pOw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICB9DQo+ID4+ID4gPj4g ICAgICAgICAgICAgICB9DQo+ID4+ID4gPj4gICAgICAgICAgICAgICBicmVhazsNCj4gPj4gPiA+ PiBAQCAtMTkyOSw3ICsxOTA5LDcgQEAgc3RhdGljIHZvaWQNCj4gPj4gPiA+PiAgaWdtcF92M19z dXBwcmVzc19ncm91cF9yZWNvcmQoc3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ID4gPj4gIHsN Cj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+DQo+ID4+ ID4gPj4gICAgICAgS0FTU0VSVChpbm0tPmlubV9pZ2ktPmlnaV92ZXJzaW9uID09IElHTVBfVkVS U0lPTl8zLA0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgKCIlczogbm90IElHTVB2MyBtb2RlIG9u IGxpbmsiLCBfX2Z1bmNfXykpOw0KPiA+PiA+ID4+IEBAIC0yMDAzLDEzICsxOTgzLDE1IEBAIGln bXBfdjNfY2FuY2VsX2xpbmtfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaSkNCj4gPj4g PiA+PiAgew0KPiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAgICAgICppZm1hOw0K PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZm5ldCAgICAgICAgICAgICppZnA7DQo+ID4+ID4gPj4g LSAgICAgc3RydWN0IGluX211bHRpICAgICAgICAgKmlubSwgKnRpbm07DQo+ID4+ID4gPj4gKyAg ICAgc3RydWN0IGluX211bHRpICAgICAgICAgKmlubTsNCj4gPj4gPiA+PiArICAgICBzdHJ1Y3Qg aW5fbXVsdGlfaGVhZCBpbm1fZnJlZV90bXA7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBD VFIzKEtUUl9JR01QVjMsICIlczogY2FuY2VsIHYzIHRpbWVycyBvbiBpZnAgJXAoJXMpIiwgX19m dW5jX18sDQo+ID4+ID4gPj4gICAgICAgICAgIGlnaS0+aWdpX2lmcCwgaWdpLT5pZ2lfaWZwLT5p Zl94bmFtZSk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VS VCgpOw0KPiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4g PiA+PiAgICAgICBJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gKyAgICAgU0xJU1RfSU5J VCgmaW5tX2ZyZWVfdG1wKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ID4g Pj4gICAgICAgICogU3RvcCB0aGUgdjMgR2VuZXJhbCBRdWVyeSBSZXNwb25zZSBvbiB0aGlzIGxp bmsgc3RvbmUgZGVhZC4NCj4gPj4gPiA+PiBAQCAtMjA1MCw3ICsyMDMyLDcgQEAgaWdtcF92M19j YW5jZWxfbGlua190aW1lcnMoc3RydWN0IGlnbXBfaWZzb2Z0YyAqaWdpKQ0KPiA+PiA+ID4+ICAg ICAgICAgICAgICAgICAgICAgICAgKiBtZXNzYWdlIGlzIHNlbnQgdXBzdHJlYW0gdG8gdGhlIG9s ZCBxdWVyaWVyIC0tDQo+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAqIHRyYW5zaXRp b24gdG8gTk9UIHdvdWxkIGxvc2UgdGhlIGxlYXZlIGFuZCByYWNlLg0KPiA+PiA+ID4+ICAgICAg ICAgICAgICAgICAgICAgICAgKi8NCj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgU0xJ U1RfSU5TRVJUX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhlYWQsIGlubSwgaW5tX25yZWxlKTsNCj4g Pj4gPiA+PiArICAgICAgICAgICAgICAgICAgICAgaW5tX3JlbGVfbG9ja2VkKCZpbm1fZnJlZV90 bXAsIGlubSk7DQo+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIC8qIEZBTExUSFJPVUdI ICovDQo+ID4+ID4gPj4gICAgICAgICAgICAgICBjYXNlIElHTVBfR19RVUVSWV9QRU5ESU5HX01F TUJFUjoNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIGNhc2UgSUdNUF9TR19RVUVSWV9QRU5ESU5H X01FTUJFUjoNCj4gPj4gPiA+PiBAQCAtMjA2OSwxMCArMjA1MSw4IEBAIGlnbXBfdjNfY2FuY2Vs X2xpbmtfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29mdGMgKmlnaSkNCj4gPj4gPiA+PiAgICAgICAg ICAgICAgIG1idWZxX2RyYWluKCZpbm0tPmlubV9zY3EpOw0KPiA+PiA+ID4+ICAgICAgIH0NCj4g Pj4gPiA+PiAgICAgICBJRl9BRERSX1JVTkxPQ0soaWZwKTsNCj4gPj4gPiA+PiAtICAgICBTTElT VF9GT1JFQUNIX1NBRkUoaW5tLCAmaWdpLT5pZ2lfcmVsaW5taGVhZCwgaW5tX25yZWxlLCB0aW5t KSB7DQo+ID4+ID4gPj4gLSAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaWdpLT5pZ2lf cmVsaW5taGVhZCwgaW5tX25yZWxlKTsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgIGlubV9yZWxl YXNlX2xvY2tlZChpbm0pOw0KPiA+PiA+ID4+IC0gICAgIH0NCj4gPj4gPiA+PiArDQo+ID4+ID4g Pj4gKyAgICAgaW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJlZCgmaW5tX2ZyZWVfdG1wKTsNCj4gPj4g PiA+PiAgfQ0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gIC8qDQo+ID4+ID4gPj4gQEAgLTIxOTksNyAr MjE3OSw3IEBAIGlnbXBfdjF2Ml9xdWV1ZV9yZXBvcnQoc3RydWN0IGluX211bHRpICppbm0sIGNv bnN0IGludA0KPiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpcCAgICAgICAgICAgICAgICppcDsNCj4g Pj4gPiA+PiAgICAgICBzdHJ1Y3QgbWJ1ZiAgICAgICAgICAgICAqbTsNCj4gPj4gPiA+Pg0KPiA+ PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gKyAgICAgSU5f TVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NF UlQoKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgICAgIGlmcCA9IGlubS0+aW5tX2lmcDsNCj4g Pj4gPiA+PiBAQCAtMjI3NiwxMCArMjI1Niw4IEBAIGlnbXBfY2hhbmdlX3N0YXRlKHN0cnVjdCBp bl9tdWx0aSAqaW5tKQ0KPiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZm5ldCAqaWZwOw0KPiA+PiA+ ID4+ICAgICAgIGludCBlcnJvcjsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJ X0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gLQ0KPiA+PiA+ID4+ICAgICAgIGVycm9yID0gMDsN Cj4gPj4gPiA+PiAtDQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4g Pj4gPiA+PiAgICAgICAvKg0KPiA+PiA+ID4+ICAgICAgICAqIFRyeSB0byBkZXRlY3QgaWYgdGhl IHVwcGVyIGxheWVyIGp1c3QgYXNrZWQgdXMgdG8gY2hhbmdlIHN0YXRlDQo+ID4+ID4gPj4gICAg ICAgICogZm9yIGFuIGludGVyZmFjZSB3aGljaCBoYXMgbm93IGdvbmUgYXdheS4NCj4gPj4gPiA+ PiBAQCAtMjM3OSw5ICsyMzU3LDEwIEBAIGlnbXBfaW5pdGlhbF9qb2luKHN0cnVjdCBpbl9tdWx0 aSAqaW5tLCBzdHJ1Y3QgaWdtcF9pZg0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgICogZ3JvdXAg YXJvdW5kIGZvciB0aGUgZmluYWwgSU5DTFVERSB7fSBlbnF1ZXVlLg0KPiA+PiA+ID4+ICAgICAg ICAgICAgICAgICovDQo+ID4+ID4gPj4gICAgICAgICAgICAgICBpZiAoaWdpLT5pZ2lfdmVyc2lv biA9PSBJR01QX1ZFUlNJT05fMyAmJg0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgIGlubS0+ aW5tX3N0YXRlID09IElHTVBfTEVBVklOR19NRU1CRVIpDQo+ID4+ID4gPj4gLSAgICAgICAgICAg ICAgICAgICAgIGlubV9yZWxlYXNlX2xvY2tlZChpbm0pOw0KPiA+PiA+ID4+IC0NCj4gPj4gPiA+ PiArICAgICAgICAgICAgICAgICBpbm0tPmlubV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVS KSB7DQo+ID4+ID4gPj4gKyAgICAgICAgICAgICAgICAgICAgIE1QQVNTKGlubS0+aW5tX3JlZmNv dW50ID4gMSk7DQo+ID4+ID4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGlubV9yZWxlX2xvY2tl ZChOVUxMLCBpbm0pOw0KPiA+PiA+ID4+ICsgICAgICAgICAgICAgfQ0KPiA+PiA+ID4+ICAgICAg ICAgICAgICAgaW5tLT5pbm1fc3RhdGUgPSBJR01QX1JFUE9SVElOR19NRU1CRVI7DQo+ID4+ID4g Pj4NCj4gPj4gPiA+PiAgICAgICAgICAgICAgIHN3aXRjaCAoaWdpLT5pZ2lfdmVyc2lvbikgew0K PiA+PiA+ID4+IEBAIC0yNDczLDcgKzI0NTIsNyBAQCBpZ21wX2hhbmRsZV9zdGF0ZV9jaGFuZ2Uo c3RydWN0IGluX211bHRpICppbm0sIHN0cnVjdA0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAg aWZwID0gaW5tLT5pbm1faWZwOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElf TE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJU KCk7DQo+ID4+ID4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+DQo+ID4+ ID4gPj4gICAgICAgS0FTU0VSVChpZ2kgJiYgaWdpLT5pZ2lfaWZwID09IGlmcCwgKCIlczogaW5j b25zaXN0ZW50IGlmcCIsIF9fZnVuY19fKSk7DQo+ID4+ID4gPj4gQEAgLTI1MzEsNyArMjUxMCw3 IEBAIGlnbXBfZmluYWxfbGVhdmUoc3RydWN0IGluX211bHRpICppbm0sIHN0cnVjdCBpZ21wX2lm cw0KPiA+PiA+ID4+ICAgICAgICAgICBfX2Z1bmNfXywgbnRvaGwoaW5tLT5pbm1fYWRkci5zX2Fk ZHIpLCBpbm0tPmlubV9pZnAsDQo+ID4+ID4gPj4gICAgICAgICAgIGlubS0+aW5tX2lmcC0+aWZf eG5hbWUpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQo KTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4g Pj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAg c3dpdGNoIChpbm0tPmlubV9zdGF0ZSkgew0KPiA+PiA+ID4+IEBAIC0yNjU4LDcgKzI2MzcsNyBA QCBpZ21wX3YzX2VucXVldWVfZ3JvdXBfcmVjb3JkKHN0cnVjdCBtYnVmcSAqbXEsIHN0cnVjdA0K PiA+PiA+ID4+ICAgICAgIGluX2FkZHJfdCAgICAgICAgICAgICAgICBuYWRkcjsNCj4gPj4gPiA+ PiAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgbW9kZTsNCj4gPj4gPiA+Pg0KPiA+PiA+ ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVM VElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgZXJyb3Ig PSAwOw0KPiA+PiA+ID4+ICAgICAgIGlmcCA9IGlubS0+aW5tX2lmcDsNCj4gPj4gPiA+PiBAQCAt MzAxOCw3ICsyOTk3LDcgQEAgaWdtcF92M19lbnF1ZXVlX2ZpbHRlcl9jaGFuZ2Uoc3RydWN0IG1i dWZxICptcSwgc3RydWN0DQo+ID4+ID4gPj4gICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAg IG1vZGUsIG5vdywgdGhlbjsNCj4gPj4gPiA+PiAgICAgICByZWN0eXBlX3QgICAgICAgICAgICAg ICAgY3J0LCBkcnQsIG5ydDsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xP Q0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgp Ow0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgaWYgKGlubS0+aW5tX25zcmMgPT0gMCB8fA0K PiA+PiA+ID4+ICAgICAgICAgICAoaW5tLT5pbm1fc3RbMF0uaXNzX2FzbSA+IDAgJiYgaW5tLT5p bm1fc3RbMV0uaXNzX2FzbSA+IDApKQ0KPiA+PiA+ID4+IEBAIC0zMjIxLDcgKzMyMDAsNyBAQCBp Z21wX3YzX21lcmdlX3N0YXRlX2NoYW5nZXMoc3RydWN0IGluX211bHRpICppbm0sIHN0cnUNCj4g Pj4gPiA+PiAgICAgICBkb21lcmdlID0gMDsNCj4gPj4gPiA+PiAgICAgICByZWNzbGVuID0gMDsN Cj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+ICAgICAg IElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ ID4gPj4gQEAgLTMzMjAsNyArMzI5OSw3IEBAIGlnbXBfdjNfZGlzcGF0Y2hfZ2VuZXJhbF9xdWVy eShzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZw0KPiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpbl9tdWx0 aSAgICAgICAgICppbm07DQo+ID4+ID4gPj4gICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAg IHJldHZhbCwgbG9vcDsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tf QVNTRVJUKCk7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0K PiA+PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ ICAgICAgIEtBU1NFUlQoaWdpLT5pZ2lfdmVyc2lvbiA9PSBJR01QX1ZFUlNJT05fMywNCj4gPj4g PiA+PiBAQCAtMzYzMiw3ICszNjExLDYgQEAgREJfU0hPV19DT01NQU5EKGlnaV9saXN0LCBkYl9z aG93X2lnaV9saXN0KQ0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgZGJfcHJpbnRmKCIgICAgcWkg JXVcbiIsIGlnaS0+aWdpX3FpKTsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIGRiX3ByaW50Zigi ICAgIHFyaSAldVxuIiwgaWdpLT5pZ2lfcXJpKTsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIGRi X3ByaW50ZigiICAgIHVyaSAldVxuIiwgaWdpLT5pZ2lfdXJpKTsNCj4gPj4gPiA+PiAtICAgICAg ICAgICAgIC8qIFNMSVNUX0hFQUQoLGluX211bHRpKSAgIGlnaV9yZWxpbm1oZWFkICovDQo+ID4+ ID4gPj4gICAgICAgICAgICAgICAvKiBzdHJ1Y3QgbWJ1ZnEgICAgaWdpX2dxOyAqLw0KPiA+PiA+ ID4+ICAgICAgICAgICAgICAgZGJfcHJpbnRmKCJcbiIpOw0KPiA+PiA+ID4+ICAgICAgIH0NCj4g Pj4gPiA+Pg0KPiA+PiA+ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9uZXRpbmV0L2lnbXBfdmFyLmgN Cj4gPj4gPiA+PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4gPiA+PiAtLS0gaGVhZC9zeXMv bmV0aW5ldC9pZ21wX3Zhci5oICAgICAgIFdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOCAgICAgICAg KHIzMzMxNzQpDQo+ID4+ID4gPj4gKysrIGhlYWQvc3lzL25ldGluZXQvaWdtcF92YXIuaCAgICAg ICBXZWQgTWF5ICAyIDE5OjM2OjI5IDIwMTggICAgICAgIChyMzMzMTc1KQ0KPiA+PiA+ID4+IEBA IC0yMTQsNyArMjE0LDYgQEAgc3RydWN0IGlnbXBfaWZzb2Z0YyB7DQo+ID4+ID4gPj4gICAgICAg dWludDMyX3QgaWdpX3FpOyAgICAgICAgLyogSUdNUHYzIFF1ZXJ5IEludGVydmFsIChzKSAqLw0K PiA+PiA+ID4+ICAgICAgIHVpbnQzMl90IGlnaV9xcmk7ICAgICAgIC8qIElHTVB2MyBRdWVyeSBS ZXNwb25zZSBJbnRlcnZhbCAocykgKi8NCj4gPj4gPiA+PiAgICAgICB1aW50MzJfdCBpZ2lfdXJp OyAgICAgICAvKiBJR01QdjMgVW5zb2xpY2l0ZWQgUmVwb3J0IEludGVydmFsIChzKSAqLw0KPiA+ PiA+ID4+IC0gICAgIFNMSVNUX0hFQUQoLGluX211bHRpKSAgIGlnaV9yZWxpbm1oZWFkOyAvKiBy ZWxlYXNlZCBncm91cHMgKi8NCj4gPj4gPiA+PiAgICAgICBzdHJ1Y3QgbWJ1ZnEgICAgaWdpX2dx OyAgICAgICAgIC8qIGdlbmVyYWwgcXVlcnkgcmVzcG9uc2VzIHF1ZXVlICovDQo+ID4+ID4gPj4g IH07DQo+ID4+ID4gPj4NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9u ZXRpbmV0L2luLmMNCj4gPj4gPiA+PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4gPiA+PiAt LS0gaGVhZC9zeXMvbmV0aW5ldC9pbi5jICAgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAg ICAgIChyMzMzMTc0KQ0KPiA+PiA+ID4+ICsrKyBoZWFkL3N5cy9uZXRpbmV0L2luLmMgICAgIFdl ZCBNYXkgIDIgMTk6MzY6MjkgMjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4+ID4gPj4gQEAgLTYz MiwxMiArNjMyLDEwIEBAIGluX2RpZmFkZHJfaW9jdGwodV9sb25nIGNtZCwgY2FkZHJfdCBkYXRh LCBzdHJ1Y3QgaWZuZQ0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgc3RydWN0IGluX2lmaW5mbyAq aWk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICAgICAgICAgIGlpID0gKChzdHJ1Y3QgaW5f aWZpbmZvICopaWZwLT5pZl9hZmRhdGFbQUZfSU5FVF0pOw0KPiA+PiA+ID4+IC0gICAgICAgICAg ICAgSU5fTVVMVElfTE9DSygpOw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgaWYgKGlpLT5paV9h bGxob3N0cykgew0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICAodm9pZClpbl9sZWF2 ZWdyb3VwX2xvY2tlZChpaS0+aWlfYWxsaG9zdHMsIE5VTEwpOw0KPiA+PiA+ID4+ICsgICAgICAg ICAgICAgICAgICAgICAodm9pZClpbl9sZWF2ZWdyb3VwKGlpLT5paV9hbGxob3N0cywgTlVMTCk7 DQo+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIGlpLT5paV9hbGxob3N0cyA9IE5VTEw7 DQo+ID4+ID4gPj4gICAgICAgICAgICAgICB9DQo+ID4+ID4gPj4gLSAgICAgICAgICAgICBJTl9N VUxUSV9VTkxPQ0soKTsNCj4gPj4gPiA+PiAgICAgICB9DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAg ICAgICBJRl9BRERSX1dMT0NLKGlmcCk7DQo+ID4+ID4gPj4gQEAgLTk5NCwxMSArOTkyLDEyIEBA IGluX2Jyb2FkY2FzdChzdHJ1Y3QgaW5fYWRkciBpbiwgc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ ID4gPj4gIHZvaWQNCj4gPj4gPiA+PiAgaW5faWZkZXRhY2goc3RydWN0IGlmbmV0ICppZnApDQo+ ID4+ID4gPj4gIHsNCj4gPj4gPiA+PiAtDQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTE9DSygp Ow0KPiA+PiA+ID4+ICAgICAgIGluX3BjYnB1cmdlaWYwKCZWX3JpcGNiaW5mbywgaWZwKTsNCj4g Pj4gPiA+PiAgICAgICBpbl9wY2JwdXJnZWlmMCgmVl91ZGJpbmZvLCBpZnApOw0KPiA+PiA+ID4+ ICAgICAgIGluX3BjYnB1cmdlaWYwKCZWX3VsaXRlY2JpbmZvLCBpZnApOw0KPiA+PiA+ID4+ICAg ICAgIGluX3B1cmdlbWFkZHJzKGlmcCk7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfVU5MT0NL KCk7DQo+ID4+ID4gPj4gIH0NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAvKg0KPiA+PiA+ID4+IEBA IC0xMDExLDEyICsxMDEwLDEyIEBAIGluX2lmZGV0YWNoKHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+ PiA+ID4+ICBzdGF0aWMgdm9pZA0KPiA+PiA+ID4+ICBpbl9wdXJnZW1hZGRycyhzdHJ1Y3QgaWZu ZXQgKmlmcCkNCj4gPj4gPiA+PiAgew0KPiA+PiA+ID4+IC0gICAgIExJU1RfSEVBRCgsaW5fbXVs dGkpIHB1cmdlaW5tczsNCj4gPj4gPiA+PiAtICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAgICAgICAq aW5tLCAqdGlubTsNCj4gPj4gPiA+PiArICAgICBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCBwdXJnZWlu bXM7DQo+ID4+ID4gPj4gKyAgICAgc3RydWN0IGluX211bHRpICAgICAgICAgKmlubTsNCj4gPj4g PiA+PiAgICAgICBzdHJ1Y3QgaWZtdWx0aWFkZHIgICAgICAqaWZtYTsNCj4gPj4gPiA+Pg0KPiA+ PiA+ID4+IC0gICAgIExJU1RfSU5JVCgmcHVyZ2Vpbm1zKTsNCj4gPj4gPiA+PiAtICAgICBJTl9N VUxUSV9MT0NLKCk7DQo+ID4+ID4gPj4gKyAgICAgU0xJU1RfSU5JVCgmcHVyZ2Vpbm1zKTsNCj4g Pj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ ICAgICAgIC8qDQo+ID4+ID4gPj4gICAgICAgICogRXh0cmFjdCBsaXN0IG9mIGluX211bHRpIGFz c29jaWF0ZWQgd2l0aCB0aGUgZGV0YWNoaW5nIGlmcA0KPiA+PiA+ID4+IEBAIC0xMDM0LDE3ICsx MDMzLDEzIEBAIGluX3B1cmdlbWFkZHJzKHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+PiA+ID4+ICAg ICAgICAgICAgICAgICAgICgiJXM6IGlmbWFfcHJvdG9zcGVjIGlzIE5VTEwiLCBfX2Z1bmNfXykp Ow0KPiA+PiA+ID4+ICAjZW5kaWYNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIGlubSA9IChzdHJ1 Y3QgaW5fbXVsdGkgKilpZm1hLT5pZm1hX3Byb3Rvc3BlYzsNCj4gPj4gPiA+PiAtICAgICAgICAg ICAgIExJU1RfSU5TRVJUX0hFQUQoJnB1cmdlaW5tcywgaW5tLCBpbm1fbGluayk7DQo+ID4+ID4g Pj4gKyAgICAgICAgICAgICBpbm1fcmVsZV9sb2NrZWQoJnB1cmdlaW5tcywgaW5tKTsNCj4gPj4g PiA+PiAgICAgICB9DQo+ID4+ID4gPj4gICAgICAgSUZfQUREUl9SVU5MT0NLKGlmcCk7DQo+ID4+ ID4gPj4NCj4gPj4gPiA+PiAtICAgICBMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZwdXJnZWlubXMs IGlubV9saW5rLCB0aW5tKSB7DQo+ID4+ID4gPj4gLSAgICAgICAgICAgICBMSVNUX1JFTU9WRShp bm0sIGlubV9saW5rKTsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgIGlubV9yZWxlYXNlX2xvY2tl ZChpbm0pOw0KPiA+PiA+ID4+IC0gICAgIH0NCj4gPj4gPiA+PiArICAgICBpbm1fcmVsZWFzZV9s aXN0X2RlZmVycmVkKCZwdXJnZWlubXMpOw0KPiA+PiA+ID4+ICAgICAgIGlnbXBfaWZkZXRhY2go aWZwKTsNCj4gPj4gPiA+PiAtDQo+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfVU5MT0NLKCk7DQo+ ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPiA+PiAgfQ0KPiA+ PiA+ID4+DQo+ID4+ID4gPj4gIHN0cnVjdCBpbl9sbGVudHJ5IHsNCj4gPj4gPiA+Pg0KPiA+PiA+ ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMNCj4gPj4gPiA+PiA9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCj4gPj4gPiA+PiAtLS0gaGVhZC9zeXMvbmV0aW5ldC9pbl9tY2Fz dC5jICAgICAgIFdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOCAgICAgICAgKHIzMzMxNzQpDQo+ID4+ ID4gPj4gKysrIGhlYWQvc3lzL25ldGluZXQvaW5fbWNhc3QuYyAgICAgICBXZWQgTWF5ICAyIDE5 OjM2OjI5IDIwMTggICAgICAgIChyMzMzMTc1KQ0KPiA+PiA+ID4+IEBAIC01MSw2ICs1MSw3IEBA IF9fRkJTRElEKCIkRnJlZUJTRCQiKTsNCj4gPj4gPiA+PiAgI2luY2x1ZGUgPHN5cy9zeXNjdGwu aD4NCj4gPj4gPiA+PiAgI2luY2x1ZGUgPHN5cy9rdHIuaD4NCj4gPj4gPiA+PiAgI2luY2x1ZGUg PHN5cy90YXNrcXVldWUuaD4NCj4gPj4gPiA+PiArI2luY2x1ZGUgPHN5cy9ndGFza3F1ZXVlLmg+ DQo+ID4+ID4gPj4gICNpbmNsdWRlIDxzeXMvdHJlZS5oPg0KPiA+PiA+ID4+DQo+ID4+ID4gPj4g ICNpbmNsdWRlIDxuZXQvaWYuaD4NCj4gPj4gPiA+PiBAQCAtNTksNiArNjAsOCBAQCBfX0ZCU0RJ RCgiJEZyZWVCU0QkIik7DQo+ID4+ID4gPj4gICNpbmNsdWRlIDxuZXQvcm91dGUuaD4NCj4gPj4g PiA+PiAgI2luY2x1ZGUgPG5ldC92bmV0Lmg+DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiArI2luY2x1 ZGUgPG5ldC9ldGhlcm5ldC5oPg0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiAgI2luY2x1ZGUgPG5l dGluZXQvaW4uaD4NCj4gPj4gPiA+PiAgI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4NCj4g Pj4gPiA+PiAgI2luY2x1ZGUgPG5ldGluZXQvaW5fZmliLmg+DQo+ID4+ID4gPj4gQEAgLTkxLDE4 ICs5NCwyNCBAQCBzdGF0aWMgTUFMTE9DX0RFRklORShNX0lQTVNPVVJDRSwgImlwX21zb3VyY2Ui LA0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gIC8qDQo+ID4+ID4gPj4gICAqIExvY2tpbmc6DQo+ID4+ ID4gPj4gLSAqIC0gTG9jayBvcmRlciBpczogR2lhbnQsIElOUF9XTE9DSywgSU5fTVVMVElfTE9D SywgSUdNUF9MT0NLLCBJRl9BRERSX0xPQ0suDQo+ID4+ID4gPj4gKyAqIC0gTG9jayBvcmRlciBp czogR2lhbnQsIElOUF9XTE9DSywgSU5fTVVMVElfTElTVF9MT0NLLCBJR01QX0xPQ0ssDQo+ID4+ ID4gPj4gSUZfQUREUl9MT0NLLg0KPiA+PiA+ID4+ICAgKiAtIFRoZSBJRl9BRERSX0xPQ0sgaXMg aW1wbGljaXRseSB0YWtlbiBieSBpbm1fbG9va3VwKCkgZWFybGllciwgaG93ZXZlcg0KPiA+PiA+ ID4+ICAgKiAgIGl0IGNhbiBiZSB0YWtlbiBieSBjb2RlIGluIG5ldC9pZi5jIGFsc28uDQo+ID4+ ID4gPj4gICAqIC0gaXBfbW9wdGlvbnMgYW5kIGluX21maWx0ZXIgYXJlIGNvdmVyZWQgYnkgdGhl IElOUF9XTE9DSy4NCj4gPj4gPiA+PiAgICoNCj4gPj4gPiA+PiAtICogc3RydWN0IGluX211bHRp IGlzIGNvdmVyZWQgYnkgSU5fTVVMVElfTE9DSy4gVGhlcmUgaXNuJ3Qgc3RyaWN0bHkNCj4gPj4g PiA+PiArICogc3RydWN0IGluX211bHRpIGlzIGNvdmVyZWQgYnkgSU5fTVVMVElfTElTVF9MT0NL LiBUaGVyZSBpc24ndCBzdHJpY3RseQ0KPiA+PiA+ID4+ICAgKiBhbnkgbmVlZCBmb3IgaW5fbXVs dGkgaXRzZWxmIHRvIGJlIHZpcnR1YWxpemVkIC0tIGl0IGlzIGJvdW5kIHRvIGFuIGlmcA0KPiA+ PiA+ID4+ICAgKiBhbnl3YXkgbm8gbWF0dGVyIHdoYXQgaGFwcGVucy4NCj4gPj4gPiA+PiAgICov DQo+ID4+ID4gPj4gLXN0cnVjdCBtdHggaW5fbXVsdGlfbXR4Ow0KPiA+PiA+ID4+IC1NVFhfU1lT SU5JVChpbl9tdWx0aV9tdHgsICZpbl9tdWx0aV9tdHgsICJpbl9tdWx0aV9tdHgiLCBNVFhfREVG KTsNCj4gPj4gPiA+PiArc3RydWN0IG10eCBpbl9tdWx0aV9saXN0X210eDsNCj4gPj4gPiA+PiAr TVRYX1NZU0lOSVQoaW5fbXVsdGlfbXR4LCAmaW5fbXVsdGlfbGlzdF9tdHgsICJpbl9tdWx0aV9s aXN0X210eCIsIE1UWF9ERUYpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gK3N0cnVjdCBtdHggaW5f bXVsdGlfZnJlZV9tdHg7DQo+ID4+ID4gPj4gK01UWF9TWVNJTklUKGluX211bHRpX2ZyZWVfbXR4 LCAmaW5fbXVsdGlfZnJlZV9tdHgsICJpbl9tdWx0aV9mcmVlX210eCIsDQo+ID4+ID4gPj4gTVRY X0RFRik7ICsNCj4gPj4gPiA+PiArc3RydWN0IHN4IGluX211bHRpX3N4Ow0KPiA+PiA+ID4+ICtT WF9TWVNJTklUKGluX211bHRpX3N4LCAmaW5fbXVsdGlfc3gsICJpbl9tdWx0aV9zeCIpOw0KPiA+ PiA+ID4+ICsNCj4gPj4gPiA+PiAgLyoNCj4gPj4gPiA+PiAgICogRnVuY3Rpb25zIHdpdGggbm9u LXN0YXRpYyBsaW5rYWdlIGRlZmluZWQgaW4gdGhpcyBmaWxlIHNob3VsZCBiZQ0KPiA+PiA+ID4+ ICAgKiBkZWNsYXJlZCBpbiBpbl92YXIuaDoNCj4gPj4gPiA+PiBAQCAtMTUxLDYgKzE2MCw3IEBA IHN0YXRpYyBpbnQgICAgICAgIGlubV9pc19pZnBfZGV0YWNoZWQoY29uc3Qgc3RydWN0IGluX211 bHRpDQo+ID4+ID4gPj4gKiBzdGF0aWMgaW50ICAgaW5tX21lcmdlKHN0cnVjdCBpbl9tdWx0aSAq LCAvKmNvbnN0Ki8gc3RydWN0IGluX21maWx0ZXIgKik7DQo+ID4+ID4gPj4gIHN0YXRpYyB2b2lk ICBpbm1fcHVyZ2Uoc3RydWN0IGluX211bHRpICopOw0KPiA+PiA+ID4+ICBzdGF0aWMgdm9pZCAg aW5tX3JlYXAoc3RydWN0IGluX211bHRpICopOw0KPiA+PiA+ID4+ICtzdGF0aWMgdm9pZCBpbm1f cmVsZWFzZShzdHJ1Y3QgaW5fbXVsdGkgKik7DQo+ID4+ID4gPj4gIHN0YXRpYyBzdHJ1Y3QgaXBf bW9wdGlvbnMgKg0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgaW5wX2ZpbmRtb3B0aW9ucyhzdHJ1 Y3QgaW5wY2IgKik7DQo+ID4+ID4gPj4gIHN0YXRpYyB2b2lkICBpbnBfZnJlZW1vcHRpb25zX2lu dGVybmFsKHN0cnVjdCBpcF9tb3B0aW9ucyAqKTsNCj4gPj4gPiA+PiBAQCAtMjE2LDYgKzIyNiw2 NSBAQCBpbm1faXNfaWZwX2RldGFjaGVkKGNvbnN0IHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0KPiA+ PiA+ID4+ICB9DQo+ID4+ID4gPj4gICNlbmRpZg0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gK3N0YXRp YyBzdHJ1Y3QgZ3JvdXB0YXNrIGZyZWVfZ3Rhc2s7DQo+ID4+ID4gPj4gK3N0YXRpYyBzdHJ1Y3Qg aW5fbXVsdGlfaGVhZCBpbm1fZnJlZV9saXN0Ow0KPiA+PiA+ID4+ICtzdGF0aWMgdm9pZCBpbm1f cmVsZWFzZV90YXNrKHZvaWQgKmFyZyBfX3VudXNlZCk7DQo+ID4+ID4gPj4gK3N0YXRpYyB2b2lk IGlubV9pbml0KHZvaWQpDQo+ID4+ID4gPj4gK3sNCj4gPj4gPiA+PiArICAgICBTTElTVF9JTklU KCZpbm1fZnJlZV9saXN0KTsNCj4gPj4gPiA+PiArICAgICB0YXNrcWdyb3VwX2NvbmZpZ19ndGFz a19pbml0KE5VTEwsICZmcmVlX2d0YXNrLCBpbm1fcmVsZWFzZV90YXNrLCAiaW5tDQo+ID4+ID4g Pj4gcmVsZWFzZSB0YXNrIik7ICt9DQo+ID4+ID4gPj4gKw0KPiA+PiA+ID4+ICtTWVNJTklUKGlu bV9pbml0LCBTSV9TVUJfU01QICsgMSwgU0lfT1JERVJfRklSU1QsDQo+ID4+ID4gPj4gKyAgICAg aW5tX2luaXQsIE5VTEwpOw0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiArDQo+ID4+ID4gPj4gK3Zv aWQNCj4gPj4gPiA+PiAraW5tX3JlbGVhc2VfbGlzdF9kZWZlcnJlZChzdHJ1Y3QgaW5fbXVsdGlf aGVhZCAqaW5taCkNCj4gPj4gPiA+PiArew0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiArICAgICBp ZiAoU0xJU1RfRU1QVFkoaW5taCkpDQo+ID4+ID4gPj4gKyAgICAgICAgICAgICByZXR1cm47DQo+ ID4+ID4gPj4gKyAgICAgbXR4X2xvY2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4gPj4gPiA+PiAr ICAgICBTTElTVF9DT05DQVQoJmlubV9mcmVlX2xpc3QsIGlubWgsIGluX211bHRpLCBpbm1fbnJl bGUpOw0KPiA+PiA+ID4+ICsgICAgIG10eF91bmxvY2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4g Pj4gPiA+PiArICAgICBHUk9VUFRBU0tfRU5RVUVVRSgmZnJlZV9ndGFzayk7DQo+ID4+ID4gPj4g K30NCj4gPj4gPiA+PiArDQo+ID4+ID4gPj4gK3ZvaWQNCj4gPj4gPiA+PiAraW5tX3JlbGVhc2Vf ZGVmZXJyZWQoc3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ID4gPj4gK3sNCj4gPj4gPiA+PiAr ICAgICBzdHJ1Y3QgaW5fbXVsdGlfaGVhZCB0bXA7DQo+ID4+ID4gPj4gKw0KPiA+PiA+ID4+ICsg ICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArICAgICBNUEFTUyhp bm0tPmlubV9yZWZjb3VudCA+IDApOw0KPiA+PiA+ID4+ICsgICAgIGlmICgtLWlubS0+aW5tX3Jl ZmNvdW50ID09IDApIHsNCj4gPj4gPiA+PiArICAgICAgICAgICAgIFNMSVNUX0lOSVQoJnRtcCk7 DQo+ID4+ID4gPj4gKyAgICAgICAgICAgICBpbm0tPmlubV9pZm1hLT5pZm1hX3Byb3Rvc3BlYyA9 IE5VTEw7DQo+ID4+ID4gPj4gKyAgICAgICAgICAgICBTTElTVF9JTlNFUlRfSEVBRCgmdG1wLCBp bm0sIGlubV9ucmVsZSk7DQo+ID4+ID4gPj4gKyAgICAgICAgICAgICBpbm1fcmVsZWFzZV9saXN0 X2RlZmVycmVkKCZ0bXApOw0KPiA+PiA+ID4+ICsgICAgIH0NCj4gPj4gPiA+PiArfQ0KPiA+PiA+ ID4+ICsNCj4gPj4gPiA+PiArc3RhdGljIHZvaWQNCj4gPj4gPiA+PiAraW5tX3JlbGVhc2VfdGFz ayh2b2lkICphcmcgX191bnVzZWQpDQo+ID4+ID4gPj4gK3sNCj4gPj4gPiA+PiArICAgICBzdHJ1 Y3QgaW5fbXVsdGlfaGVhZCBpbm1fZnJlZV90bXA7DQo+ID4+ID4gPj4gKyAgICAgc3RydWN0IGlu X211bHRpICppbm0sICp0aW5tOw0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiArICAgICBTTElTVF9J TklUKCZpbm1fZnJlZV90bXApOw0KPiA+PiA+ID4+ICsgICAgIG10eF9sb2NrKCZpbl9tdWx0aV9m cmVlX210eCk7DQo+ID4+ID4gPj4gKyAgICAgU0xJU1RfQ09OQ0FUKCZpbm1fZnJlZV90bXAsICZp bm1fZnJlZV9saXN0LCBpbl9tdWx0aSwgaW5tX25yZWxlKTsNCj4gPj4gPiA+PiArICAgICBtdHhf dW5sb2NrKCZpbl9tdWx0aV9mcmVlX210eCk7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTE9D SygpOw0KPiA+PiA+ID4+ICsgICAgIFNMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZpbm1fZnJlZV90 bXAsIGlubV9ucmVsZSwgdGlubSkgew0KPiA+PiA+ID4+ICsgICAgICAgICAgICAgU0xJU1RfUkVN T1ZFX0hFQUQoJmlubV9mcmVlX3RtcCwgaW5tX25yZWxlKTsNCj4gPj4gPiA+PiArICAgICAgICAg ICAgIE1QQVNTKGlubSk7DQo+ID4+ID4gPj4gKyAgICAgICAgICAgICBpbm1fcmVsZWFzZShpbm0p Ow0KPiA+PiA+ID4+ICsgICAgIH0NCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9VTkxPQ0soKTsN Cj4gPj4gPiA+PiArfQ0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiAgLyoNCj4gPj4gPiA+PiAgICog SW5pdGlhbGl6ZSBhbiBpbl9tZmlsdGVyIHN0cnVjdHVyZSB0byBhIGtub3duIHN0YXRlIGF0IHQw LCB0MQ0KPiA+PiA+ID4+ICAgKiB3aXRoIGFuIGVtcHR5IHNvdXJjZSBmaWx0ZXIgbGlzdC4NCj4g Pj4gPiA+PiBAQCAtMjMyLDcgKzMwMSw3IEBAIGltZl9pbml0KHN0cnVjdCBpbl9tZmlsdGVyICpp bWYsIGNvbnN0IGludCBzdDAsIGNvbnN0DQo+ID4+ID4gPj4gIC8qDQo+ID4+ID4gPj4gICAqIEZ1 bmN0aW9uIGZvciBsb29raW5nIHVwIGFuIGluX211bHRpIHJlY29yZCBmb3IgYW4gSVB2NCBtdWx0 aWNhc3QgYWRkcmVzcw0KPiA+PiA+ID4+ICAgKiBvbiBhIGdpdmVuIGludGVyZmFjZS4gaWZwIG11 c3QgYmUgdmFsaWQuIElmIG5vIHJlY29yZCBmb3VuZCwgcmV0dXJuIE5VTEwuDQo+ID4+ID4gPj4g LSAqIFRoZSBJTl9NVUxUSV9MT0NLIGFuZCBJRl9BRERSX0xPQ0sgb24gaWZwIG11c3QgYmUgaGVs ZC4NCj4gPj4gPiA+PiArICogVGhlIElOX01VTFRJX0xJU1RfTE9DSyBhbmQgSUZfQUREUl9MT0NL IG9uIGlmcCBtdXN0IGJlIGhlbGQuDQo+ID4+ID4gPj4gICAqLw0KPiA+PiA+ID4+ICBzdHJ1Y3Qg aW5fbXVsdGkgKg0KPiA+PiA+ID4+ICBpbm1fbG9va3VwX2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlm cCwgY29uc3Qgc3RydWN0IGluX2FkZHIgaW5hKQ0KPiA+PiA+ID4+IEBAIC0yNDAsNyArMzA5LDcg QEAgaW5tX2xvb2t1cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9h DQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICppZm1hOw0KPiA+PiA+ID4+ICAg ICAgIHN0cnVjdCBpbl9tdWx0aSAqaW5tOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gLSAgICAgSU5f TVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tf QVNTRVJUKCk7DQo+ID4+ID4gPj4gICAgICAgSUZfQUREUl9MT0NLX0FTU0VSVChpZnApOw0KPiA+ PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgaW5tID0gTlVMTDsNCj4gPj4gPiA+PiBAQCAtMjY0LDcg KzMzMyw3IEBAIGlubV9sb29rdXAoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9h ZGRyIGluYQ0KPiA+PiA+ID4+ICB7DQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGluX211bHRpICpp bm07DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0K PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiAg ICAgICBJRl9BRERSX1JMT0NLKGlmcCk7DQo+ID4+ID4gPj4gICAgICAgaW5tID0gaW5tX2xvb2t1 cF9sb2NrZWQoaWZwLCBpbmEpOw0KPiA+PiA+ID4+ICAgICAgIElGX0FERFJfUlVOTE9DSyhpZnAp Ow0KPiA+PiA+ID4+IEBAIC00NTEsNyArNTIwLDcgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0 ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4+ID4gPj4gICAgICAgSU5fTVVMVElf TE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgICAgIGlpID0gKHN0cnVjdCBp bl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXTsNCj4gPj4gPiA+PiAtDQo+ID4+ID4g Pj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ID4gPj4gICAgICAgaW5tID0gaW5t X2xvb2t1cChpZnAsICpncm91cCk7DQo+ID4+ID4gPj4gICAgICAgaWYgKGlubSAhPSBOVUxMKSB7 DQo+ID4+ID4gPj4gICAgICAgICAgICAgICAvKg0KPiA+PiA+ID4+IEBAIC00NjAsMTEgKzUyOSwx MyBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIg KmcNCj4gPj4gPiA+PiAgICAgICAgICAgICAgICAqLw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAg S0FTU0VSVChpbm0tPmlubV9yZWZjb3VudCA+PSAxLA0KPiA+PiA+ID4+ICAgICAgICAgICAgICAg ICAgICgiJXM6IGJhZCByZWZjb3VudCAlZCIsIF9fZnVuY19fLCBpbm0tPmlubV9yZWZjb3VudCkp Ow0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgKytpbm0tPmlubV9yZWZjb3VudDsNCj4gPj4gPiA+ PiArICAgICAgICAgICAgIGlubV9hY3F1aXJlX2xvY2tlZChpbm0pOw0KPiA+PiA+ID4+ICAgICAg ICAgICAgICAgKnBpbm0gPSBpbm07DQo+ID4+ID4gPj4gLSAgICAgICAgICAgICByZXR1cm4gKDAp Ow0KPiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPiA+PiAtDQo+ID4+ID4gPj4gKyAgICAgSU5fTVVM VElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPiA+PiArICAgICBpZiAoaW5tICE9IE5VTEwpDQo+ID4+ ID4gPj4gKyAgICAgICAgICAgICByZXR1cm4gKDApOw0KPiA+PiA+ID4+ICsNCj4gPj4gPiA+PiAg ICAgICBtZW1zZXQoJmdzaW4sIDAsIHNpemVvZihnc2luKSk7DQo+ID4+ID4gPj4gICAgICAgZ3Np bi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCj4gPj4gPiA+PiAgICAgICBnc2luLnNpbl9sZW4gPSBz aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsNCj4gPj4gPiA+PiBAQCAtNDc5LDYgKzU1MCw3IEBA IGluX2dldG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZw0K PiA+PiA+ID4+ICAgICAgICAgICAgICAgcmV0dXJuIChlcnJvcik7DQo+ID4+ID4gPj4NCj4gPj4g PiA+PiAgICAgICAvKiBYWFggaWZtYV9wcm90b3NwZWMgbXVzdCBiZSBjb3ZlcmVkIGJ5IElGX0FE RFJfTE9DSyAqLw0KPiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiA+ ID4+ICAgICAgIElGX0FERFJfV0xPQ0soaWZwKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgICAg IC8qDQo+ID4+ID4gPj4gQEAgLTUwNCwxMCArNTc2LDkgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlm bmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4+ID4gPj4gICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Z1bmNfXywgaWZtYSwgaW5tLCBpbmV0X250b2FfcigqZ3JvdXAsIGFk ZHJidWYpKTsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIH0NCj4gPj4gPiA+PiAgI2VuZGlmDQo+ ID4+ID4gPj4gLSAgICAgICAgICAgICArK2lubS0+aW5tX3JlZmNvdW50Ow0KPiA+PiA+ID4+ICsg ICAgICAgICAgICAgaW5tX2FjcXVpcmVfbG9ja2VkKGlubSk7DQo+ID4+ID4gPj4gICAgICAgICAg ICAgICAqcGlubSA9IGlubTsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgIElGX0FERFJfV1VOTE9D SyhpZnApOw0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgcmV0dXJuICgwKTsNCj4gPj4gPiA+PiAr ICAgICAgICAgICAgIGdvdG8gb3V0X2xvY2tlZDsNCj4gPj4gPiA+PiAgICAgICB9DQo+ID4+ID4g Pj4NCj4gPj4gPiA+PiAgICAgICBJRl9BRERSX1dMT0NLX0FTU0VSVChpZnApOw0KPiA+PiA+ID4+ IEBAIC01MjIsNiArNTkzLDcgQEAgaW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0 IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4+ID4gPj4gICAgICAgaW5tID0gbWFsbG9jKHNpemVvZigq aW5tKSwgTV9JUE1BRERSLCBNX05PV0FJVCB8IE1fWkVSTyk7DQo+ID4+ID4gPj4gICAgICAgaWYg KGlubSA9PSBOVUxMKSB7DQo+ID4+ID4gPj4gICAgICAgICAgICAgICBJRl9BRERSX1dVTkxPQ0so aWZwKTsNCj4gPj4gPiA+PiArICAgICAgICAgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ ID4+ID4gPj4gICAgICAgICAgICAgICBpZl9kZWxtdWx0aV9pZm1hKGlmbWEpOw0KPiA+PiA+ID4+ ICAgICAgICAgICAgICAgcmV0dXJuIChFTk9NRU0pOw0KPiA+PiA+ID4+ICAgICAgIH0NCj4gPj4g PiA+PiBAQCAtNTM5LDggKzYxMSw5IEBAIGluX2dldG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwLCBj b25zdCBzdHJ1Y3QgaW5fYWRkciAqZw0KPiA+PiA+ID4+ICAgICAgIGlmbWEtPmlmbWFfcHJvdG9z cGVjID0gaW5tOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgKnBpbm0gPSBpbm07DQo+ID4+ ID4gPj4gLQ0KPiA+PiA+ID4+ICsgb3V0X2xvY2tlZDoNCj4gPj4gPiA+PiAgICAgICBJRl9BRERS X1dVTkxPQ0soaWZwKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0K PiA+PiA+ID4+ICAgICAgIHJldHVybiAoMCk7DQo+ID4+ID4gPj4gIH0NCj4gPj4gPiA+Pg0KPiA+ PiA+ID4+IEBAIC01NTAsMzYgKzYyMywyOSBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlm cCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gPj4gPiA+PiAgICogSWYgdGhlIHJlZmNvdW50 IGRyb3BzIHRvIDAsIGZyZWUgdGhlIGluX211bHRpIHJlY29yZCBhbmQNCj4gPj4gPiA+PiAgICog ZGVsZXRlIHRoZSB1bmRlcmx5aW5nIGxpbmstbGF5ZXIgbWVtYmVyc2hpcC4NCj4gPj4gPiA+PiAg ICovDQo+ID4+ID4gPj4gLXZvaWQNCj4gPj4gPiA+PiAtaW5tX3JlbGVhc2VfbG9ja2VkKHN0cnVj dCBpbl9tdWx0aSAqaW5tKQ0KPiA+PiA+ID4+ICtzdGF0aWMgdm9pZA0KPiA+PiA+ID4+ICtpbm1f cmVsZWFzZShzdHJ1Y3QgaW5fbXVsdGkgKmlubSkNCj4gPj4gPiA+PiAgew0KPiA+PiA+ID4+ICAg ICAgIHN0cnVjdCBpZm11bHRpYWRkciAqaWZtYTsNCj4gPj4gPiA+PiArICAgICBzdHJ1Y3QgaWZu ZXQgKmlmcDsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJU KCk7DQo+ID4+ID4gPj4gLQ0KPiA+PiA+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBy ZWZjb3VudCBpcyAlZCIsIF9fZnVuY19fLCBpbm0tPmlubV9yZWZjb3VudCk7DQo+ID4+ID4gPj4g LQ0KPiA+PiA+ID4+IC0gICAgIGlmICgtLWlubS0+aW5tX3JlZmNvdW50ID4gMCkgew0KPiA+PiA+ ID4+IC0gICAgICAgICAgICAgQ1RSMihLVFJfSUdNUFYzLCAiJXM6IHJlZmNvdW50IGlzIG5vdyAl ZCIsIF9fZnVuY19fLA0KPiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgIGlubS0+aW5tX3JlZmNv dW50KTsNCj4gPj4gPiA+PiAtICAgICAgICAgICAgIHJldHVybjsNCj4gPj4gPiA+PiAtICAgICB9 DQo+ID4+ID4gPj4gLQ0KPiA+PiA+ID4+ICsgICAgIE1QQVNTKGlubS0+aW5tX3JlZmNvdW50ID09 IDApOw0KPiA+PiA+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBmcmVlaW5nIGlubSAl cCIsIF9fZnVuY19fLCBpbm0pOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgaWZtYSA9IGlu bS0+aW5tX2lmbWE7DQo+ID4+ID4gPj4gKyAgICAgaWZwID0gaW5tLT5pbm1faWZwOw0KPiA+PiA+ ID4+DQo+ID4+ID4gPj4gICAgICAgLyogWFhYIHRoaXMgYWNjZXNzIGlzIG5vdCBjb3ZlcmVkIGJ5 IElGX0FERFJfTE9DSyAqLw0KPiA+PiA+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBw dXJnaW5nIGlmbWEgJXAiLCBfX2Z1bmNfXywgaWZtYSk7DQo+ID4+ID4gPj4gLSAgICAgS0FTU0VS VChpZm1hLT5pZm1hX3Byb3Rvc3BlYyA9PSBpbm0sDQo+ID4+ID4gPj4gLSAgICAgICAgICgiJXM6 IGlmbWFfcHJvdG9zcGVjICE9IGlubSIsIF9fZnVuY19fKSk7DQo+ID4+ID4gPj4gLSAgICAgaWZt YS0+aWZtYV9wcm90b3NwZWMgPSBOVUxMOw0KPiA+PiA+ID4+IC0NCj4gPj4gPiA+PiArICAgICBp ZiAoaWZwKQ0KPiA+PiA+ID4+ICsgICAgICAgICAgICAgQ1VSVk5FVF9TRVQoaWZwLT5pZl92bmV0 KTsNCj4gPj4gPiA+PiAgICAgICBpbm1fcHVyZ2UoaW5tKTsNCj4gPj4gPiA+PiAtDQo+ID4+ID4g Pj4gICAgICAgZnJlZShpbm0sIE1fSVBNQUREUik7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAg ICBpZl9kZWxtdWx0aV9pZm1hKGlmbWEpOw0KPiA+PiA+ID4+ICsgICAgIGlmIChpZnApDQo+ID4+ ID4gPj4gKyAgICAgICAgICAgICBDVVJWTkVUX1JFU1RPUkUoKTsNCj4gPj4gPiA+PiAgfQ0KPiA+ PiA+ID4+DQo+ID4+ID4gPj4gIC8qDQo+ID4+ID4gPj4gQEAgLTU5Miw3ICs2NTgsNyBAQCBpbm1f Y2xlYXJfcmVjb3JkZWQoc3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ID4gPj4gIHsNCj4gPj4g PiA+PiAgICAgICBzdHJ1Y3QgaXBfbXNvdXJjZSAgICAgICAqaW1zOw0KPiA+PiA+ID4+DQo+ID4+ ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+PiArICAgICBJTl9N VUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBSQl9G T1JFQUNIKGltcywgaXBfbXNvdXJjZV90cmVlLCAmaW5tLT5pbm1fc3Jjcykgew0KPiA+PiA+ID4+ ICAgICAgICAgICAgICAgaWYgKGltcy0+aW1zX3N0cCkgew0KPiA+PiA+ID4+IEBAIC02MzIsNyAr Njk4LDcgQEAgaW5tX3JlY29yZF9zb3VyY2Uoc3RydWN0IGluX211bHRpICppbm0sIGNvbnN0IGlu X2FkZHJfDQo+ID4+ID4gPj4gICAgICAgc3RydWN0IGlwX21zb3VyY2UgICAgICAgIGZpbmQ7DQo+ ID4+ID4gPj4gICAgICAgc3RydWN0IGlwX21zb3VyY2UgICAgICAgKmltcywgKm5pbXM7DQo+ID4+ ID4gPj4NCj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ID4+ ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ ICAgICAgIGZpbmQuaW1zX2hhZGRyID0gbnRvaGwobmFkZHIpOw0KPiA+PiA+ID4+ICAgICAgIGlt cyA9IFJCX0ZJTkQoaXBfbXNvdXJjZV90cmVlLCAmaW5tLT5pbm1fc3JjcywgJmZpbmQpOw0KPiA+ PiA+ID4+IEBAIC05NTksNiArMTAyNSw3IEBAIGlubV9tZXJnZShzdHJ1Y3QgaW5fbXVsdGkgKmlu bSwgLypjb25zdCovIHN0cnVjdCBpbl9tZg0KPiA+PiA+ID4+ICAgICAgIHNjaGFuZ2VkID0gMDsN Cj4gPj4gPiA+PiAgICAgICBlcnJvciA9IDA7DQo+ID4+ID4gPj4gICAgICAgbnNyYzEgPSBuc3Jj MCA9IDA7DQo+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+ PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgLyoNCj4gPj4gPiA+PiAgICAgICAgKiBVcGRhdGUgdGhl IHNvdXJjZSBmaWx0ZXJzIGZpcnN0LCBhcyB0aGlzIG1heSBmYWlsLg0KPiA+PiA+ID4+IEBAIC0x MTY1LDYgKzEyMzIsNyBAQCBpbl9qb2luZ3JvdXBfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwLCBj b25zdCBzdHJ1Y3QgaW4NCj4gPj4gPiA+PiAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAg ZXJyb3I7DQo+ID4+ID4gPj4NCj4gPj4gPiA+PiAgICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgp Ow0KPiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ ID4+DQo+ID4+ID4gPj4gICAgICAgQ1RSNChLVFJfSUdNUFYzLCAiJXM6IGpvaW4gMHglMDh4IG9u ICVwKCVzKSkiLCBfX2Z1bmNfXywNCj4gPj4gPiA+PiAgICAgICAgICAgbnRvaGwoZ2luYS0+c19h ZGRyKSwgaWZwLCBpZnAtPmlmX3huYW1lKTsNCj4gPj4gPiA+PiBAQCAtMTE4Niw3ICsxMjU0LDcg QEAgaW5fam9pbmdyb3VwX2xvY2tlZChzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlu DQo+ID4+ID4gPj4gICAgICAgICAgICAgICBDVFIxKEtUUl9JR01QVjMsICIlczogaW5fZ2V0bXVs dGkoKSBmYWlsdXJlIiwgX19mdW5jX18pOw0KPiA+PiA+ID4+ICAgICAgICAgICAgICAgcmV0dXJu IChlcnJvcik7DQo+ID4+ID4gPj4gICAgICAgfQ0KPiA+PiA+ID4+IC0NCj4gPj4gPiA+PiArICAg ICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4gPiA+PiAgICAgICBDVFIxKEtUUl9JR01QVjMs ICIlczogbWVyZ2UgaW5tIHN0YXRlIiwgX19mdW5jX18pOw0KPiA+PiA+ID4+ICAgICAgIGVycm9y ID0gaW5tX21lcmdlKGlubSwgaW1mKTsNCj4gPj4gPiA+PiAgICAgICBpZiAoZXJyb3IpIHsNCj4g Pj4gPiA+PiBAQCAtMTIwMSwxMCArMTI2OSwxMiBAQCBpbl9qb2luZ3JvdXBfbG9ja2VkKHN0cnVj dCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW4NCj4gPj4gPiA+PiAgICAgICAgICAgICAgIGdv dG8gb3V0X2lubV9yZWxlYXNlOw0KPiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPiA+Pg0KPiA+PiA+ ID4+IC1vdXRfaW5tX3JlbGVhc2U6DQo+ID4+ID4gPj4gKyBvdXRfaW5tX3JlbGVhc2U6DQo+ID4+ ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPiA+PiAgICAgICBpZiAo ZXJyb3IpIHsNCj4gPj4gPiA+PiArDQo+ID4+ID4gPj4gICAgICAgICAgICAgICBDVFIyKEtUUl9J R01QVjMsICIlczogZHJvcHBpbmcgcmVmIG9uICVwIiwgX19mdW5jX18sIGlubSk7DQo+ID4+ID4g Pj4gLSAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4gPiA+PiArICAg ICAgICAgICAgIGlubV9yZWxlYXNlX2RlZmVycmVkKGlubSk7DQo+ID4+ID4gPj4gICAgICAgfSBl bHNlIHsNCj4gPj4gPiA+PiAgICAgICAgICAgICAgICpwaW5tID0gaW5tOw0KPiA+PiA+ID4+ICAg ICAgIH0NCj4gPj4gPiA+PiBAQCAtMTI0OSw2ICsxMzE5LDcgQEAgaW5fbGVhdmVncm91cF9sb2Nr ZWQoc3RydWN0IGluX211bHRpICppbm0sIC8qY29uc3QqLyBzDQo+ID4+ID4gPj4gICAgICAgZXJy b3IgPSAwOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQo KTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4g PiA+Pg0KPiA+PiA+ID4+ICAgICAgIENUUjUoS1RSX0lHTVBWMywgIiVzOiBsZWF2ZSBpbm0gJXAs IDB4JTA4eC8lcywgaW1mICVwIiwgX19mdW5jX18sDQo+ID4+ID4gPj4gICAgICAgICAgIGlubSwg bnRvaGwoaW5tLT5pbm1fYWRkci5zX2FkZHIpLA0KPiA+PiA+ID4+IEBAIC0xMjcyLDE4ICsxMzQz LDIwIEBAIGluX2xlYXZlZ3JvdXBfbG9ja2VkKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCAvKmNvbnN0 Ki8gcw0KPiA+PiA+ID4+ICAgICAgICAqIHRoZSB0cmFuc2FjdGlvbiwgaXQgTVVTVCBOT1QgZmFp bC4NCj4gPj4gPiA+PiAgICAgICAgKi8NCj4gPj4gPiA+PiAgICAgICBDVFIxKEtUUl9JR01QVjMs ICIlczogbWVyZ2UgaW5tIHN0YXRlIiwgX19mdW5jX18pOw0KPiA+PiA+ID4+ICsgICAgIElOX01V TFRJX0xJU1RfTE9DSygpOw0KPiA+PiA+ID4+ICAgICAgIGVycm9yID0gaW5tX21lcmdlKGlubSwg aW1mKTsNCj4gPj4gPiA+PiAgICAgICBLQVNTRVJUKGVycm9yID09IDAsICgiJXM6IGZhaWxlZCB0 byBtZXJnZSBpbm0gc3RhdGUiLCBfX2Z1bmNfXykpOw0KPiA+PiA+ID4+DQo+ID4+ID4gPj4gICAg ICAgQ1RSMShLVFJfSUdNUFYzLCAiJXM6IGRvaW5nIGlnbXAgZG93bmNhbGwiLCBfX2Z1bmNfXyk7 DQo+ID4+ID4gPj4gICAgICAgQ1VSVk5FVF9TRVQoaW5tLT5pbm1faWZwLT5pZl92bmV0KTsNCj4g Pj4gPiA+PiAgICAgICBlcnJvciA9IGlnbXBfY2hhbmdlX3N0YXRlKGlubSk7DQo+ID4+ID4gPj4g KyAgICAgaW5tX3JlbGVhc2VfZGVmZXJyZWQoaW5tKTsNCj4gPj4gPiA+PiArICAgICBJTl9NVUxU SV9MSVNUX1VOTE9DSygpOw0KPiA+PiA+ID4+ICAgICAgIENVUlZORVRfUkVTVE9SRSgpOw0KPiA+ PiA+ID4+ICAgICAgIGlmIChlcnJvcikNCj4gPj4gPiA+PiAgICAgICAgICAgICAgIENUUjEoS1RS X0lHTVBWMywgIiVzOiBmYWlsZWQgaWdtcCBkb3duY2FsbCIsIF9fZnVuY19fKTsNCj4gPj4gPiA+ Pg0KPiA+PiA+ID4+ICAgICAgIENUUjIoS1RSX0lHTVBWMywgIiVzOiBkcm9wcGluZyByZWYgb24g JXAiLCBfX2Z1bmNfXywgaW5tKTsNCj4gPj4gPiA+PiAtICAgICBpbm1fcmVsZWFzZV9sb2NrZWQo aW5tKTsNCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICAgICAgIHJldHVybiAoZXJyb3IpOw0KPiA+PiA+ ID4+ICB9DQo+ID4+ID4gPj4gQEAgLTEzMTUsMTggKzEzODgsNiBAQCBpbl9hZGRtdWx0aShzdHJ1 Y3QgaW5fYWRkciAqYXAsIHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+PiA+ID4+ICB9DQo+ID4+ID4g Pj4NCj4gPj4gPiA+PiAgLyoNCj4gPj4gPiA+PiAtICogTGVhdmUgYW4gSVB2NCBtdWx0aWNhc3Qg Z3JvdXAsIGFzc3VtZWQgdG8gYmUgaW4gZXhjbHVzaXZlICgqLEcpIG1vZGUuDQo+ID4+ID4gPj4g LSAqIFRoaXMgS1BJIGlzIGZvciBsZWdhY3kga2VybmVsIGNvbnN1bWVycyBvbmx5Lg0KPiA+PiA+ ID4+IC0gKi8NCj4gPj4gPiA+Pg0KPiA+PiA+ID4+ICoqKiBESUZGIE9VVFBVVCBUUlVOQ0FURUQg QVQgMTAwMCBMSU5FUyAqKioNCj4gPj4gPiA+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXw0KPiA+PiA+ID4+IHN2bi1zcmMtaGVhZEBmcmVlYnNkLm9yZyBt YWlsaW5nIGxpc3QNCj4gPj4gPiA+PiBodHRwczovL2xpc3RzLmZyZWVic2Qub3JnL21haWxtYW4v bGlzdGluZm8vc3ZuLXNyYy1oZWFkDQo+ID4+ID4gPj4gVG8gdW5zdWJzY3JpYmUsIHNlbmQgYW55 IG1haWwgdG8gInN2bi1zcmMtaGVhZC11bnN1YnNjcmliZUBmcmVlYnNkLm9yZyIgIA0KPiA+PiA+ ID4NCj4gPj4gPiA+DQo+ID4+ID4gPiBBZnRlciAoYXJvdW5kISkgdGhpcyB1cGRhdGUsIHNvbWUg Ym94ZXMgd2l0aCBpMzUwIGR1YWwgcG9ydCBOSUNzIGltbWVkaWF0ZWx5DQo+ID4+ID4gPiBjcmFz aCB3aXRoIEZhdGFsIHRyYXAgMTI6IHBhZ2UgZmF1bHQgYW5kIHNvbWV0aGluZyB3aXRoDQo+ID4+ ID4gPg0KPiA+PiA+ID4gY3VycmVudCBwcm9jZXNzOiAoaXNjLXdvcmtlcjAwMDYpDQo+ID4+ID4g Pg0KPiA+PiA+ID4gLi4uLg0KPiA+PiA+ID4NCj4gPj4gPiA+IFRob3NlIGJveGVzIGRvIG5vdCBo YXZlIGRlYnVnZ2luZyBrZXJuZWwuIFRoZSBzeW1wdG9tYnMgYXJlIHRoZSBzYW1lLiBTaW5nbGUg dXNlcg0KPiA+PiA+ID4ga2VybmVsIHdvcmtzLCBidXQgdGhlIG1vbWVudCBJIHBlcmZvcm0gL2V0 Yy9uZXRzdGFydCBhbmQgYW55IGtpbmQgb2YgbmV0IHRyYWZmaWMNCj4gPj4gPiA+IGVzdGFibGlz aGVzLCB0aGlzIGNyYXAgYmFpbHMgb3V0Lg0KPiA+PiA+ID4NCj4gPj4gPiA+DQo+ID4+ID4gPiAt IC0tDQo+ID4+ID4gPiBPLiBIYXJ0bWFubg0KPiA+PiA+ID4NCj4gPj4gPiA+IEljaCB3aWRlcnNw cmVjaGUgZGVyIE51dHp1bmcgb2RlciDDnGJlcm1pdHRsdW5nIG1laW5lciBEYXRlbiBmw7xyDQo+ ID4+ID4gPiBXZXJiZXp3ZWNrZSBvZGVyIGbDvHIgZGllIE1hcmt0LSBvZGVyIE1laW51bmdzZm9y c2NodW5nICjCpyAyOCBBYnMuIDQgQkRTRykuDQo+ID4+ID4gPiAtLS0tLUJFR0lOIFBHUCBTSUdO QVRVUkUtLS0tLQ0KPiA+PiA+ID4NCj4gPj4gPiA+IGlMVUVBUk1LQUIwV0lRUVpWWk16QXR3QzJU Lzg2VHJTNTI4ZnlGaFlsQVVDV3V0anRnQUtDUkRTNTI4ZnlGaFkNCj4gPj4gPiA+IGxBa3pBZjlQ aGFGVHdOaFFEMnpGN3hTSEoyd2Z2THRvVUVqWmx6R3N1c0FDcDFwYTdKQWZ6MFB5ditsbStYTkoN Cj4gPj4gPiA+IHZMRWxySWYxQ21EenVBOHlibFoveC93T1ZTSmtBZjlDKzUwRFZFdEdxNUgvYkhT RE53em1xcmo4WWdCN1hwU3MNCj4gPj4gPiA+IFBNUlhjK0l3SWExSmdpMnlNKzZUQ1NOU3MxTjVi RVVoVTlCaThlWHk2WTBGU2tBWmVWK3MNCj4gPj4gPiA+ID1TMGJDDQo+ID4+ID4gPiAtLS0tLUVO RCBQR1AgU0lHTkFUVVJFLS0tLS0NCj4gPj4gPiA+IF9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fDQo+ID4+ID4gPiBzdm4tc3JjLWhlYWRAZnJlZWJzZC5vcmcg bWFpbGluZyBsaXN0DQo+ID4+ID4gPiBodHRwczovL2xpc3RzLmZyZWVic2Qub3JnL21haWxtYW4v bGlzdGluZm8vc3ZuLXNyYy1oZWFkDQo+ID4+ID4gPiBUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkg bWFpbCB0byAic3ZuLXNyYy1oZWFkLXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIiAgDQo+ID4+DQo+ ID4+DQo+ID4+DQo+ID4+IC0gLS0NCj4gPj4gTy4gSGFydG1hbm4NCj4gPj4NCj4gPj4gSWNoIHdp ZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBvZGVyIMOcYmVybWl0dGx1bmcgbWVpbmVyIERhdGVuIGbD vHINCj4gPj4gV2VyYmV6d2Vja2Ugb2RlciBmw7xyIGRpZSBNYXJrdC0gb2RlciBNZWludW5nc2Zv cnNjaHVuZyAowqcgMjggQWJzLiA0IEJEU0cpLg0KPiA+PiAtLS0tLUJFR0lOIFBHUCBTSUdOQVRV UkUtLS0tLQ0KPiA+Pg0KPiA+PiBpTFVFQVJNS0FCMFdJUVFaVlpNekF0d0MyVC84NlRyUzUyOGZ5 RmhZbEFVQ1d1dHY4d0FLQ1JEUzUyOGZ5RmhZDQo+ID4+IGxJZTFBZndPQ0FpZ3BYYXdaN0tBakxO cFdqUlQ0RHNyemZxY0M1N01vemlWUXlLK1g5cW9RQTJ2MHBsVk5wUDANCj4gPj4gRkxxaDVka1JY aWlPTHJ5cjlhdUlMVUt5TENOeUFmd0w3Y0ZlMVlSWDdWbnNLNXcvLzhYbTI1dEo3NENYQzhQMA0K PiA+PiBnYW9TcXZEcUNLV1RqNmlOK1EvUGpvTm9oV29JSzc2dGlaQVdQamthSGV1RmJ5cFBhMkcr DQo+ID4+ID1FcEphDQo+ID4+IC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0KPiA+PiBfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+PiBzdm4tc3Jj LWhlYWRAZnJlZWJzZC5vcmcgbWFpbGluZyBsaXN0DQo+ID4+IGh0dHBzOi8vbGlzdHMuZnJlZWJz ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9zdm4tc3JjLWhlYWQNCj4gPj4gVG8gdW5zdWJzY3JpYmUs IHNlbmQgYW55IG1haWwgdG8gInN2bi1zcmMtaGVhZC11bnN1YnNjcmliZUBmcmVlYnNkLm9yZyIg IA0KPiA+DQo+ID4NCj4gPg0KPiA+IC0gLS0NCj4gPiBPLiBIYXJ0bWFubg0KPiA+DQo+ID4gSWNo IHdpZGVyc3ByZWNoZSBkZXIgTnV0enVuZyBvZGVyIMOcYmVybWl0dGx1bmcgbWVpbmVyIERhdGVu IGbDvHINCj4gPiBXZXJiZXp3ZWNrZSBvZGVyIGbDvHIgZGllIE1hcmt0LSBvZGVyIE1laW51bmdz Zm9yc2NodW5nICjCpyAyOCBBYnMuIDQgQkRTRykuDQo+ID4gLS0tLS1CRUdJTiBQR1AgU0lHTkFU VVJFLS0tLS0NCj4gPg0KPiA+IGlMVUVBUk1LQUIwV0lRUVpWWk16QXR3QzJULzg2VHJTNTI4ZnlG aFlsQVVDV3UxeThnQUtDUkRTNTI4ZnlGaFkNCj4gPiBsRkVvQWY0aVcrNHRTQU9jRzBFUTEvWTJQ TnFMQ1g0QW5wWVRsU2xhRUN4dEZsRFovWGJOT3czVHlWQjlSYlFDDQo+ID4gcUdFOVV4MnhRQkQ0 OGExTmIxSUhWVkM5amk3akFnQ0xPWHpLVXFtY1hrUE52alNnWldaK1NkeWQ1NUNob0xnWQ0KPiA+ IFNreVk4RlNVM0dFRG0yOFdnYVhqUTRvSmgrNy9GZjY5TnN1RFpsdDdpQzI0S1pkUktIMDANCj4g PiA9NGJZKw0KPiA+IC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLSAgDQo+IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IHN2bi1zcmMtaGVhZEBmcmVl YnNkLm9yZyBtYWlsaW5nIGxpc3QNCj4gaHR0cHM6Ly9saXN0cy5mcmVlYnNkLm9yZy9tYWlsbWFu L2xpc3RpbmZvL3N2bi1zcmMtaGVhZA0KPiBUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkgbWFpbCB0 byAic3ZuLXNyYy1oZWFkLXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIg0KDQoNCg0KLSAtLSANCk8u IEhhcnRtYW5uDQoNCkljaCB3aWRlcnNwcmVjaGUgZGVyIE51dHp1bmcgb2RlciDDnGJlcm1pdHRs dW5nIG1laW5lciBEYXRlbiBmw7xyDQpXZXJiZXp3ZWNrZSBvZGVyIGbDvHIgZGllIE1hcmt0LSBv ZGVyIE1laW51bmdzZm9yc2NodW5nICjCpyAyOCBBYnMuIDQgQkRTRykuDQotLS0tLUJFR0lOIFBH UCBTSUdOQVRVUkUtLS0tLQ0KDQppTFVFQVJNS0FCMFdJUVFaVlpNekF0d0MyVC84NlRyUzUyOGZ5 RmhZbEFVQ1d1NFV0d0FLQ1JEUzUyOGZ5RmhZDQpsSXoyQWY5bnFyU0dRc2FOVlo5RGNTVFg0b3Jv M1NSLzhlZnRiQzQxZGF0NjdnallJdWI5eERLVWxiZlVQSWtUDQpvR2RQUDl4TzM1K1hPbm16T0s2 eG1MeUpid3Y1QWdDWGU3WGJjQmNHZlEzODB6aEdnbWVaNWljaDJUZDFMZ3hvDQo4dDdpRm8reFR2 K1RpY1EyN3VScUN3S1BjWUViejA2VUtLZ3E5dHRZcWdYWlYxVUl6czVoDQo9L1VaZg0KLS0tLS1F TkQgUEdQIFNJR05BVFVSRS0tLS0tDQo= From owner-svn-src-head@freebsd.org Sat May 5 20:45:16 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C8E4DFBA04B for ; Sat, 5 May 2018 20:45:15 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 71DBD80CC6; Sat, 5 May 2018 20:45:15 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: from mail-it0-f53.google.com (mail-it0-f53.google.com [209.85.214.53]) (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)) (Authenticated sender: mmacy) by smtp.freebsd.org (Postfix) with ESMTPSA id 439588998; Sat, 5 May 2018 20:45:15 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: by mail-it0-f53.google.com with SMTP id 144-v6so7210720iti.5; Sat, 05 May 2018 13:45:15 -0700 (PDT) X-Gm-Message-State: ALQs6tAG2npeOkYX307n2h/hZB0O30bX9NMyVdbxp+fw8aHpDP9yUJ92 kJpM5ot4bM8QDV6B8EhEZaGLkf7F59V3D75pAoo= X-Google-Smtp-Source: AB8JxZo1GGLV1ZeQRv0XynFZ+uTnAD+BUjsjZfE51fYxSwuRv6bqrMPEmiazxuosqujYmQkNWSXZ14qWS0BXrwD/Hck= X-Received: by 2002:a24:5a85:: with SMTP id v127-v6mr33902124ita.128.1525553113455; Sat, 05 May 2018 13:45:13 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:b0c3:0:0:0:0:0 with HTTP; Sat, 5 May 2018 13:45:13 -0700 (PDT) In-Reply-To: <20180505223151.580b6522@thor.intern.walstatt.dynvpn.de> References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> <20180505223151.580b6522@thor.intern.walstatt.dynvpn.de> From: Matthew Macy Date: Sat, 5 May 2018 13:45:13 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys: TRAP 12 To: "O. Hartmann" Cc: bde@freebsd.org, svn-src-head@freebsd.org, Stephen Hurd , "O. Hartmann" , Sean Bruno Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 20:45:16 -0000 actually can you try the updated patch please, it turns out I need to workaround this little shop of horrors: static void tcp_usr_detach(struct socket *so) { struct inpcb *inp; int rlock =3D 0; inp =3D sotoinpcb(so); KASSERT(inp !=3D NULL, ("tcp_usr_detach: inp =3D=3D NULL")); if (!INP_INFO_WLOCKED(&V_tcbinfo)) { INP_INFO_RLOCK(&V_tcbinfo); rlock =3D 1; } INP_WLOCK(inp); KASSERT(inp->inp_socket !=3D NULL, ("tcp_usr_detach: inp_socket =3D=3D NULL")); tcp_detach(so, inp); if (rlock) INP_INFO_RUNLOCK(&V_tcbinfo); } We're still acquiring a sleepable mutex out of order with a read lock held with the former version of the patch. On Sat, May 5, 2018 at 1:31 PM, O. Hartmann wrote= : > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > Am Sat, 5 May 2018 11:21:47 -0700 > Matthew Macy schrieb: > >> pho@ and sbruno@ tested the patch before commit, I can't readily >> reproduce even though the detach path should be common enough. Please >> tell me if this helps: >> >> https://people.freebsd.org/~mmacy/inpcb.diff >> >> >> Thanks. >> > > > The privided patch seemingly work so far (FreeBSD 12.0-CURRENT #4 r333274= M: Sat May 5 > 22:19:04 CEST 2018 amd64). I just recompile world and kernel of revision = 333276 and try > to push the box with ne traffic (NFS mostly). > > May I ask on what hardware the mentioned tests of yours has been performe= d? I can tell, > that ALL(!) boxes equipted with Intel's i350 NICs are suffering the very = same problem. I > didn't dare to move on on the other systems with i210, i217 or i219, but = with the patch > provided working so far, I'll test. > > Thanks. > >> >> On Sat, May 5, 2018 at 2:01 AM, O. Hartmann wr= ote: >> > -----BEGIN PGP SIGNED MESSAGE----- >> > Hash: SHA512 >> > >> > Am Thu, 3 May 2018 22:23:52 +0200 >> > "O. Hartmann" schrieb: >> > >> > >> > I'm not familiar with kernel debugging, so there are some struggles. >> > >> > After compiling a debugging kernel on >> > >> > Version String: FreeBSD 12.0-CURRENT #2 r333269: Sat May 5 08:10:32 C= EST 2018 >> > >> > Panic String: Lock tcp not exclusively locked @ /usr/src/sys/netinet/i= n_pcb.c:1391 >> > >> > >> > And this is what I can provide you with: >> > >> > >> > Reading symbols >> > from /usr/obj/usr/src/amd64.amd64/sys/WALHALL-DEBUG/kernel.full...done= . >> > >> > Unread portion of the kernel message buffer: >> > panic: Lock tcp not exclusively locked @ /usr/src/sys/netinet/in_pcb.c= :1391 >> > >> > cpuid =3D 4 >> > time =3D 1525510291 >> > KDB: stack backtrace: >> > db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffffe00= e485e670 >> > vpanic() at vpanic+0x1a3/frame 0xfffffe00e485e6d0 >> > panic() at panic+0x43/frame 0xfffffe00e485e730 >> > _rw_wunlock_cookie() at _rw_wunlock_cookie+0x137/frame 0xfffffe00e485e= 760 >> > in_pcbfree() at in_pcbfree+0x51a/frame 0xfffffe00e485e7b0 >> > tcp_usr_detach() at tcp_usr_detach+0x15e/frame 0xfffffe00e485e7f0 >> > sofree() at sofree+0x2f4/frame 0xfffffe00e485e840 >> > soclose() at soclose+0x387/frame 0xfffffe00e485e8b0 >> > closef() at closef+0x1f5/frame 0xfffffe00e485e940 >> > closefp() at closefp+0xa0/frame 0xfffffe00e485e980 >> > amd64_syscall() at amd64_syscall+0x6d3/frame 0xfffffe00e485eab0 >> > fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe00e48= 5eab0 >> > - --- syscall (6, FreeBSD ELF64, sys_close), rip =3D 0x80111adda, rsp = =3D 0x7fffdf3f7228, >> > rbp =3D 0x7fffdf3f7240 --- KDB: enter: panic >> > >> > __curthread () at ./machine/pcpu.h:231 >> > 231 __asm("movq %%gs:%1,%0" : "=3Dr" (td) >> > (kgdb) bt >> > (kgdb) bt >> > #0 __curthread () at ./machine/pcpu.h:231 >> > #1 doadump (textdump=3D0) at /usr/src/sys/kern/kern_shutdown.c:365 >> > #2 0xffffffff80597d5b in db_dump (dummy=3D, dummy2=3D<= unavailable>, >> > dummy3=3D, dummy4=3D) at /usr/src/sys/ddb/db= _command.c:574 >> > #3 0xffffffff80597ae6 in db_command (last_cmdp=3D, >> > cmd_table=3D> > out>, dopager=3D) at /usr/src/sys/ddb/db_command.c:481 = #4 >> > out>0xffffffff80597814 in db_command_loop () at /usr/src/sys/ddb/db_co= mmand.c:534 >> > #5 0xffffffff8059b04f in db_trap (type=3D, code=3D) >> > at /usr/src/sys/ddb/db_main.c:250 #6 0xffffffff80924463 in kdb_trap (= type=3D3, >> > code=3D-61456, tf=3D) at /usr/src/sys/kern/subr_kdb.c:6= 97 #7 >> > 0xffffffff80c80ab7 in trap (frame=3D0xfffffe00e485e5a0) >> > at /usr/src/sys/amd64/amd64/trap.c:550 #8 #9 = kdb_enter >> > (why=3D0xffffffff80dd7b54 "panic", msg=3D) >> > at /usr/src/sys/kern/subr_kdb.c:479 #10 0xffffffff808db500 in vpanic (= fmt=3D> > out>, ap=3D0xfffffe00e485e710) at /usr/src/sys/kern/kern_shutdown.c:85= 1 #11 >> > out>0xffffffff808db593 in panic >> > (fmt=3D0xffffffff8125bbd8 "\251\312\332\200\377\377\377\3= 77") >> > at /usr/src/sys/kern/kern_shutdown.c:789 #12 0xffffffff808d65b7 in __r= w_assert >> > (c=3D0xfffffe00111ee650, what=3D4, file=3D0xffffffff80dc5157 >> > "/usr/src/sys/netinet/in_pcb.c", line=3D1391) at /usr/src/sys/kern/ker= n_rwlock.c:1426 >> > #13 _rw_wunlock_cookie (c=3D0xfffffe00111ee650, file=3D0xffffffff80dc5= 157 >> > "/usr/src/sys/netinet/in_pcb.c", line=3D1391) at /usr/src/sys/kern/ker= n_rwlock.c:362 >> > #14 0xffffffff80a68caa in in_pcbfree (inp=3D0xfffff80066058b10) >> > at /usr/src/sys/netinet/in_pcb.c:1391 #15 0xffffffff80b09a6e in tcp_de= tach >> > (so=3D, inp=3D) at /usr/src/sys/netinet/= tcp_usrreq.c:258 >> > #16 tcp_usr_detach (so=3D) at /usr/src/sys/netinet/tcp_= usrreq.c:289 #17 >> > 0xffffffff8097c394 in sofree (so=3D0xfffff8001988d358) >> > at /usr/src/sys/kern/uipc_socket.c:1032 #18 0xffffffff8097d487 in socl= ose >> > (so=3D0xfffff8001988d358) at /usr/src/sys/kern/uipc_socket.c:1126 #19 >> > 0xffffffff80885ad5 in fo_close (fp=3D, td=3D) >> > at /usr/src/sys/sys/file.h:348 #20 _fdrop (fp=3D, td=3D= ) >> > at /usr/src/sys/kern/kern_descrip.c:2957 #21 closef (fp=3D0xfffff80004= ef4eb0, >> > td=3D0xfffff80019891560) at /usr/src/sys/kern/kern_descrip.c:2538 #22 >> > 0xffffffff80882920 in closefp (fdp=3D0xfffff80019553450, fd=3D12, fp= =3D0xfffff80004ef4eb0, >> > td=3D0xfffff80019891560, holdleaders=3D0) at /usr/src/sys/kern/kern_de= scrip.c:1208 #23 >> > 0xffffffff80c82033 in syscallenter (td=3D0xfffff80019891560) >> > at /usr/src/sys/amd64/amd64/../../kern/subr_syscall.c:135 #24 amd64_sy= scall >> > (td=3D0xfffff80019891560, traced=3D0) at /usr/src/sys/amd64/amd64/trap= .c:945 #25 > > handler called> #26 0x000000080111adda in ?? () Backtrace stopped: Can= not access >> > memory at address 0x7fffdf3f7228 (kgdb) >> > >> > >> > >> > >> >> -----BEGIN PGP SIGNED MESSAGE----- >> >> Hash: SHA512 >> >> >> >> Am Thu, 3 May 2018 12:53:05 -0700 >> >> "K. Macy" schrieb: >> >> >> >> > Can you give any context on what they're doing? In addition - even = on >> >> > a production kernel it's possible to compile in DDB to at least get= a >> >> > backtrace. Your report only gives us enough information to know tha= t >> >> >> >> Not at the moment. The immediate crash corrupted the /usr/src filesys= tem so I can not >> >> recompile a kernel. Every attempt to /etc/netstart the network on the= buggy kernel >> >> ends up in a further destruction, so I stopped at this very moment an= d hopefully I >> >> can copy /usr/src from a r33153 box (r333153 is for me the last worki= ng revision) >> >> via USB flash drive and recompile the kernel. But I'll go for r333153= first since I >> >> need the server up tomorrow and I'll try on the other box which is al= so affected, >> >> but also equipted with the i350 NIC on which the problem occurs very = quickly. >> >> >> >> > there is _an_ issue. It's difficult to proceed on this alone. I do >> >> > have a report from the FreeBSD CI infrastructure that we're looking= in >> >> > to now. With luck that is the same issue. >> >> > >> >> > -M >> >> > >> >> > On Thu, May 3, 2018 at 12:31 PM, O. Hartmann wrote: >> >> > > -----BEGIN PGP SIGNED MESSAGE----- >> >> > > Hash: SHA512 >> >> > > >> >> > > Am Wed, 2 May 2018 19:36:29 +0000 (UTC) >> >> > > Stephen Hurd schrieb: >> >> > > >> >> > >> Author: shurd >> >> > >> Date: Wed May 2 19:36:29 2018 >> >> > >> New Revision: 333175 >> >> > >> URL: https://svnweb.freebsd.org/changeset/base/333175 >> >> > >> >> >> > >> Log: >> >> > >> Separate list manipulation locking from state change in multic= ast >> >> > >> >> >> > >> Multicast incorrectly calls in to drivers with a mutex held ca= using drivers >> >> > >> to have to go through all manner of contortions to use a non s= leepable lock. >> >> > >> Serialize multicast updates instead. >> >> > >> >> >> > >> Submitted by: mmacy >> >> > >> Reviewed by: shurd, sbruno >> >> > >> Sponsored by: Limelight Networks >> >> > >> Differential Revision: https://reviews.freebsd.org/D14969 >> >> > >> >> >> > >> Modified: >> >> > >> head/sys/kern/subr_gtaskqueue.c >> >> > >> head/sys/kern/subr_witness.c >> >> > >> head/sys/net/if.c >> >> > >> head/sys/netinet/igmp.c >> >> > >> head/sys/netinet/igmp_var.h >> >> > >> head/sys/netinet/in.c >> >> > >> head/sys/netinet/in_mcast.c >> >> > >> head/sys/netinet/in_pcb.c >> >> > >> head/sys/netinet/in_var.h >> >> > >> head/sys/netinet/ip_carp.c >> >> > >> head/sys/netinet6/in6.c >> >> > >> head/sys/netinet6/in6_ifattach.c >> >> > >> head/sys/netinet6/in6_mcast.c >> >> > >> head/sys/netinet6/in6_pcb.c >> >> > >> head/sys/netinet6/in6_var.h >> >> > >> head/sys/netinet6/mld6.c >> >> > >> head/sys/netinet6/mld6_var.h >> >> > >> head/sys/sys/gtaskqueue.h >> >> > >> >> >> > >> Modified: head/sys/kern/subr_gtaskqueue.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/kern/subr_gtaskqueue.c Wed May 2 17:41:00 2018 = (r333174) >> >> > >> +++ head/sys/kern/subr_gtaskqueue.c Wed May 2 19:36:29 2018 = (r333175) >> >> > >> @@ -53,6 +53,7 @@ static void gtaskqueue_thread_enqueue(void *); >> >> > >> static void gtaskqueue_thread_loop(void *arg); >> >> > >> >> >> > >> TASKQGROUP_DEFINE(softirq, mp_ncpus, 1); >> >> > >> +TASKQGROUP_DEFINE(config, 1, 1); >> >> > >> >> >> > >> struct gtaskqueue_busy { >> >> > >> struct gtask *tb_running; >> >> > >> @@ -662,7 +663,7 @@ SYSINIT(tqg_record_smp_started, SI_SUB_SMP, = SI_ORDER_F >> >> > >> >> >> > >> void >> >> > >> taskqgroup_attach(struct taskqgroup *qgroup, struct grouptask *= gtask, >> >> > >> - void *uniq, int irq, char *name) >> >> > >> + void *uniq, int irq, const char *name) >> >> > >> { >> >> > >> cpuset_t mask; >> >> > >> int qid, error; >> >> > >> @@ -976,4 +977,13 @@ void >> >> > >> taskqgroup_destroy(struct taskqgroup *qgroup) >> >> > >> { >> >> > >> >> >> > >> +} >> >> > >> + >> >> > >> +void >> >> > >> +taskqgroup_config_gtask_init(void *ctx, struct grouptask *gtask= , gtask_fn_t >> >> > >> *fn, >> >> > >> + const char *name) >> >> > >> +{ >> >> > >> + >> >> > >> + GROUPTASK_INIT(gtask, 0, fn, ctx); >> >> > >> + taskqgroup_attach(qgroup_config, gtask, gtask, -1, name); >> >> > >> } >> >> > >> >> >> > >> Modified: head/sys/kern/subr_witness.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/kern/subr_witness.c Wed May 2 17:41:00 2018 = (r333174) >> >> > >> +++ head/sys/kern/subr_witness.c Wed May 2 19:36:29 2018 = (r333175) >> >> > >> @@ -532,18 +532,22 @@ static struct witness_order_list_entry ord= er_lists[] =3D >> >> > >> * IPv4 multicast: >> >> > >> * protocol locks before interface locks, after UDP locks. >> >> > >> */ >> >> > >> + { "in_multi_sx", &lock_class_sx }, >> >> > >> { "udpinp", &lock_class_rw }, >> >> > >> - { "in_multi_mtx", &lock_class_mtx_sleep }, >> >> > >> + { "in_multi_list_mtx", &lock_class_mtx_sleep }, >> >> > >> { "igmp_mtx", &lock_class_mtx_sleep }, >> >> > >> + { "ifnet_rw", &lock_class_rw }, >> >> > >> { "if_addr_lock", &lock_class_rw }, >> >> > >> { NULL, NULL }, >> >> > >> /* >> >> > >> * IPv6 multicast: >> >> > >> * protocol locks before interface locks, after UDP locks. >> >> > >> */ >> >> > >> + { "in6_multi_sx", &lock_class_sx }, >> >> > >> { "udpinp", &lock_class_rw }, >> >> > >> - { "in6_multi_mtx", &lock_class_mtx_sleep }, >> >> > >> + { "in6_multi_list_mtx", &lock_class_mtx_sleep }, >> >> > >> { "mld_mtx", &lock_class_mtx_sleep }, >> >> > >> + { "ifnet_rw", &lock_class_rw }, >> >> > >> { "if_addr_lock", &lock_class_rw }, >> >> > >> { NULL, NULL }, >> >> > >> /* >> >> > >> >> >> > >> Modified: head/sys/net/if.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/net/if.c Wed May 2 17:41:00 2018 (r333174) >> >> > >> +++ head/sys/net/if.c Wed May 2 19:36:29 2018 (r333175) >> >> > >> @@ -985,11 +985,13 @@ static void >> >> > >> if_purgemaddrs(struct ifnet *ifp) >> >> > >> { >> >> > >> struct ifmultiaddr *ifma; >> >> > >> - struct ifmultiaddr *next; >> >> > >> >> >> > >> IF_ADDR_WLOCK(ifp); >> >> > >> - TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link, n= ext) >> >> > >> + while (!TAILQ_EMPTY(&ifp->if_multiaddrs)) { >> >> > >> + ifma =3D TAILQ_FIRST(&ifp->if_multiaddrs); >> >> > >> + TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link)= ; >> >> > >> if_delmulti_locked(ifp, ifma, 1); >> >> > >> + } >> >> > >> IF_ADDR_WUNLOCK(ifp); >> >> > >> } >> >> > >> >> >> > >> @@ -3429,6 +3431,12 @@ if_addmulti(struct ifnet *ifp, struct soc= kaddr *sa, >> >> > >> struct sockaddr_dl sdl; >> >> > >> int error; >> >> > >> >> >> > >> +#ifdef INET >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> > >> +#endif >> >> > >> +#ifdef INET6 >> >> > >> + IN6_MULTI_LIST_UNLOCK_ASSERT(); >> >> > >> +#endif >> >> > >> /* >> >> > >> * If the address is already present, return a new referen= ce to it; >> >> > >> * otherwise, allocate storage and set up a new address. >> >> > >> @@ -3610,6 +3618,9 @@ if_delmulti_ifma(struct ifmultiaddr *ifma) >> >> > >> struct ifnet *ifp; >> >> > >> int lastref; >> >> > >> >> >> > >> +#ifdef INET >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> > >> +#endif >> >> > >> ifp =3D ifma->ifma_ifp; >> >> > >> #ifdef DIAGNOSTIC >> >> > >> if (ifp =3D=3D NULL) { >> >> > >> @@ -3711,8 +3722,7 @@ if_delmulti_locked(struct ifnet *ifp, stru= ct ifmultiad >> >> > >> if_freemulti(ll_ifma); >> >> > >> } >> >> > >> } >> >> > >> - >> >> > >> - if (ifp !=3D NULL) >> >> > >> + if (ifp !=3D NULL && detaching =3D=3D 0) >> >> > >> TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_link)= ; >> >> > >> >> >> > >> if_freemulti(ifma); >> >> > >> >> >> > >> Modified: head/sys/netinet/igmp.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/netinet/igmp.c Wed May 2 17:41:00 2018 (r= 333174) >> >> > >> +++ head/sys/netinet/igmp.c Wed May 2 19:36:29 2018 (r= 333175) >> >> > >> @@ -136,7 +136,7 @@ static int igmp_v3_enqueue_group_reco= rd(struct mbufq >> >> > >> * struct in_multi *, const int, const int, const int); >> >> > >> static int igmp_v3_enqueue_filter_change(struct mbufq *, >> >> > >> struct in_multi *); >> >> > >> -static void igmp_v3_process_group_timers(struct igmp_ifsoftc *= , >> >> > >> +static void igmp_v3_process_group_timers(struct in_multi_head = *, >> >> > >> struct mbufq *, struct mbufq *, struct in_mult= i *, >> >> > >> const int); >> >> > >> static int igmp_v3_merge_state_changes(struct in_multi *, >> >> > >> @@ -162,12 +162,12 @@ static const struct netisr_handler igmp_nh= =3D { >> >> > >> * themselves are not virtualized. >> >> > >> * >> >> > >> * Locking: >> >> > >> - * * The permitted lock order is: IN_MULTI_LOCK, IGMP_LOCK, IF= _ADDR_LOCK. >> >> > >> + * * The permitted lock order is: IN_MULTI_LIST_LOCK, IGMP_LOC= K, IF_ADDR_LOCK. >> >> > >> * Any may be taken independently; if any are held at the sa= me >> >> > >> * time, the above lock order must be followed. >> >> > >> * * All output is delegated to the netisr. >> >> > >> * Now that Giant has been eliminated, the netisr may be inl= ined. >> >> > >> - * * IN_MULTI_LOCK covers in_multi. >> >> > >> + * * IN_MULTI_LIST_LOCK covers in_multi. >> >> > >> * * IGMP_LOCK covers igmp_ifsoftc and any global variables in= this file, >> >> > >> * including the output queue. >> >> > >> * * IF_ADDR_LOCK covers if_multiaddrs, which is used for a va= riety of >> >> > >> @@ -441,7 +441,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> >> > >> if (error) >> >> > >> return (error); >> >> > >> >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> IGMP_LOCK(); >> >> > >> >> >> > >> if (name[0] <=3D 0 || name[0] > V_if_index) { >> >> > >> @@ -475,7 +475,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> >> > >> >> >> > >> out_locked: >> >> > >> IGMP_UNLOCK(); >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> return (error); >> >> > >> } >> >> > >> >> >> > >> @@ -586,7 +586,6 @@ igi_alloc_locked(/*const*/ struct ifnet *ifp= ) >> >> > >> igi->igi_qi =3D IGMP_QI_INIT; >> >> > >> igi->igi_qri =3D IGMP_QRI_INIT; >> >> > >> igi->igi_uri =3D IGMP_URI_INIT; >> >> > >> - SLIST_INIT(&igi->igi_relinmhead); >> >> > >> mbufq_init(&igi->igi_gq, IGMP_MAX_RESPONSE_PACKETS); >> >> > >> >> >> > >> LIST_INSERT_HEAD(&V_igi_head, igi, igi_link); >> >> > >> @@ -612,11 +611,12 @@ igmp_ifdetach(struct ifnet *ifp) >> >> > >> { >> >> > >> struct igmp_ifsoftc *igi; >> >> > >> struct ifmultiaddr *ifma; >> >> > >> - struct in_multi *inm, *tinm; >> >> > >> - >> >> > >> + struct in_multi *inm; >> >> > >> + struct in_multi_head inm_free_tmp; >> >> > >> CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)", __func__, if= p, >> >> > >> ifp->if_xname); >> >> > >> >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> > >> IGMP_LOCK(); >> >> > >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_= igmp; >> >> > >> @@ -631,24 +631,15 @@ igmp_ifdetach(struct ifnet *ifp) >> >> > >> ("%s: ifma_protospec is NULL", __func_= _)); >> >> > >> #endif >> >> > >> inm =3D (struct in_multi *)ifma->ifma_prot= ospec; >> >> > >> - if (inm->inm_state =3D=3D IGMP_LEAVING_MEM= BER) { >> >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinm= head, >> >> > >> - inm, inm_nrele); >> >> > >> - } >> >> > >> + if (inm->inm_state =3D=3D IGMP_LEAVING_MEM= BER) >> >> > >> + inm_rele_locked(&inm_free_tmp, inm= ); >> >> > >> inm_clear_recorded(inm); >> >> > >> } >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> > >> - /* >> >> > >> - * Free the in_multi reference(s) for this IGMP li= fecycle. >> >> > >> - */ >> >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_= nrele, >> >> > >> - tinm) { >> >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, in= m_nrele); >> >> > >> - inm_release_locked(inm); >> >> > >> - } >> >> > >> + inm_release_list_deferred(&inm_free_tmp); >> >> > >> } >> >> > >> - >> >> > >> IGMP_UNLOCK(); >> >> > >> + >> >> > >> } >> >> > >> >> >> > >> /* >> >> > >> @@ -684,11 +675,6 @@ igi_delete_locked(const struct ifnet *ifp) >> >> > >> mbufq_drain(&igi->igi_gq); >> >> > >> >> >> > >> LIST_REMOVE(igi, igi_link); >> >> > >> - >> >> > >> - KASSERT(SLIST_EMPTY(&igi->igi_relinmhead), >> >> > >> - ("%s: there are dangling in_multi refe= rences", >> >> > >> - __func__)); >> >> > >> - >> >> > >> free(igi, M_IGMP); >> >> > >> return; >> >> > >> } >> >> > >> @@ -722,7 +708,7 @@ igmp_input_v1_query(struct ifnet *ifp, const= struct ip >> >> > >> } >> >> > >> IGMPSTAT_INC(igps_rcv_gen_queries); >> >> > >> >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> IGMP_LOCK(); >> >> > >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_= igmp; >> >> > >> @@ -778,7 +764,7 @@ igmp_input_v1_query(struct ifnet *ifp, const= struct ip >> >> > >> >> >> > >> out_locked: >> >> > >> IGMP_UNLOCK(); >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> >> >> > >> return (0); >> >> > >> } >> >> > >> @@ -816,7 +802,7 @@ igmp_input_v2_query(struct ifnet *ifp, const= struct ip >> >> > >> IGMPSTAT_INC(igps_rcv_group_queries); >> >> > >> } >> >> > >> >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> IGMP_LOCK(); >> >> > >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_= igmp; >> >> > >> @@ -872,7 +858,7 @@ igmp_input_v2_query(struct ifnet *ifp, const= struct ip >> >> > >> >> >> > >> out_locked: >> >> > >> IGMP_UNLOCK(); >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> >> >> > >> return (0); >> >> > >> } >> >> > >> @@ -899,7 +885,7 @@ igmp_v2_update_group(struct in_multi *inm, c= onst int t >> >> > >> CTR4(KTR_IGMPV3, "0x%08x: %s/%s timer=3D%d", __func__, >> >> > >> ntohl(inm->inm_addr.s_addr), inm->inm_ifp->if_xname, t= imer); >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> switch (inm->inm_state) { >> >> > >> case IGMP_NOT_MEMBER: >> >> > >> @@ -1011,7 +997,7 @@ igmp_input_v3_query(struct ifnet *ifp, cons= t struct ip >> >> > >> IGMPSTAT_INC(igps_rcv_gsr_queries); >> >> > >> } >> >> > >> >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> IGMP_LOCK(); >> >> > >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_= igmp; >> >> > >> @@ -1092,7 +1078,7 @@ igmp_input_v3_query(struct ifnet *ifp, con= st struct ip >> >> > >> >> >> > >> out_locked: >> >> > >> IGMP_UNLOCK(); >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> >> >> > >> return (0); >> >> > >> } >> >> > >> @@ -1109,7 +1095,7 @@ igmp_input_v3_group_query(struct in_multi = *inm, struct >> >> > >> int retval; >> >> > >> uint16_t nsrc; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> retval =3D 0; >> >> > >> @@ -1246,7 +1232,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*= const*/ stru >> >> > >> * If we are a member of this group, and our membership sh= ould be >> >> > >> * reported, stop our group timer and transition to the 'l= azy' state. >> >> > >> */ >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> >> > >> if (inm !=3D NULL) { >> >> > >> struct igmp_ifsoftc *igi; >> >> > >> @@ -1305,7 +1291,7 @@ igmp_input_v1_report(struct ifnet *ifp, /*= const*/ stru >> >> > >> } >> >> > >> >> >> > >> out_locked: >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> >> >> > >> return (0); >> >> > >> } >> >> > >> @@ -1373,7 +1359,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*= const*/ stru >> >> > >> * reported, and our group timer is pending or about to be= reset, >> >> > >> * stop our group timer by transitioning to the 'lazy' sta= te. >> >> > >> */ >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> >> > >> if (inm !=3D NULL) { >> >> > >> struct igmp_ifsoftc *igi; >> >> > >> @@ -1418,7 +1404,7 @@ igmp_input_v2_report(struct ifnet *ifp, /*= const*/ stru >> >> > >> } >> >> > >> >> >> > >> out_locked: >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> >> >> > >> return (0); >> >> > >> } >> >> > >> @@ -1647,6 +1633,7 @@ igmp_fasttimo_vnet(void) >> >> > >> struct igmp_ifsoftc *igi; >> >> > >> struct ifmultiaddr *ifma; >> >> > >> struct in_multi *inm; >> >> > >> + struct in_multi_head inm_free_tmp; >> >> > >> int loop, uri_fasthz; >> >> > >> >> >> > >> loop =3D 0; >> >> > >> @@ -1662,7 +1649,8 @@ igmp_fasttimo_vnet(void) >> >> > >> !V_state_change_timers_running) >> >> > >> return; >> >> > >> >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> IGMP_LOCK(); >> >> > >> >> >> > >> /* >> >> > >> @@ -1720,7 +1708,7 @@ igmp_fasttimo_vnet(void) >> >> > >> igi->igi_version); >> >> > >> break; >> >> > >> case IGMP_VERSION_3: >> >> > >> - igmp_v3_process_group_timers(igi, = &qrq, >> >> > >> + igmp_v3_process_group_timers(&inm_= free_tmp, &qrq, >> >> > >> &scq, inm, uri_fasthz); >> >> > >> break; >> >> > >> } >> >> > >> @@ -1728,8 +1716,6 @@ igmp_fasttimo_vnet(void) >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> > >> >> >> > >> if (igi->igi_version =3D=3D IGMP_VERSION_3) { >> >> > >> - struct in_multi *tinm; >> >> > >> - >> >> > >> igmp_dispatch_queue(&qrq, 0, loop); >> >> > >> igmp_dispatch_queue(&scq, 0, loop); >> >> > >> >> >> > >> @@ -1737,18 +1723,13 @@ igmp_fasttimo_vnet(void) >> >> > >> * Free the in_multi reference(s) for this >> >> > >> * IGMP lifecycle. >> >> > >> */ >> >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhe= ad, >> >> > >> - inm_nrele, tinm) { >> >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinm= head, >> >> > >> - inm_nrele); >> >> > >> - inm_release_locked(inm); >> >> > >> - } >> >> > >> + inm_release_list_deferred(&inm_free_tmp); >> >> > >> } >> >> > >> } >> >> > >> >> >> > >> out_locked: >> >> > >> IGMP_UNLOCK(); >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> } >> >> > >> >> >> > >> /* >> >> > >> @@ -1760,7 +1741,7 @@ igmp_v1v2_process_group_timer(struct in_mu= lti *inm, co >> >> > >> { >> >> > >> int report_timer_expired; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> if (inm->inm_timer =3D=3D 0) { >> >> > >> @@ -1802,14 +1783,14 @@ igmp_v1v2_process_group_timer(struct in_= multi *inm, co >> >> > >> * Note: Unlocked read from igi. >> >> > >> */ >> >> > >> static void >> >> > >> -igmp_v3_process_group_timers(struct igmp_ifsoftc *igi, >> >> > >> +igmp_v3_process_group_timers(struct in_multi_head *inmh, >> >> > >> struct mbufq *qrq, struct mbufq *scq, >> >> > >> struct in_multi *inm, const int uri_fasthz) >> >> > >> { >> >> > >> int query_response_timer_expired; >> >> > >> int state_change_retransmit_timer_expired; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> query_response_timer_expired =3D 0; >> >> > >> @@ -1907,8 +1888,7 @@ igmp_v3_process_group_timers(struct igmp_i= fsoftc *igi, >> >> > >> if (inm->inm_state =3D=3D IGMP_LEAVING_MEM= BER && >> >> > >> inm->inm_scrv =3D=3D 0) { >> >> > >> inm->inm_state =3D IGMP_NOT_MEMBER= ; >> >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinm= head, >> >> > >> - inm, inm_nrele); >> >> > >> + inm_rele_locked(inmh, inm); >> >> > >> } >> >> > >> } >> >> > >> break; >> >> > >> @@ -1929,7 +1909,7 @@ static void >> >> > >> igmp_v3_suppress_group_record(struct in_multi *inm) >> >> > >> { >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> KASSERT(inm->inm_igi->igi_version =3D=3D IGMP_VERSION_3, >> >> > >> ("%s: not IGMPv3 mode on link", __func__)); >> >> > >> @@ -2003,13 +1983,15 @@ igmp_v3_cancel_link_timers(struct igmp_i= fsoftc *igi) >> >> > >> { >> >> > >> struct ifmultiaddr *ifma; >> >> > >> struct ifnet *ifp; >> >> > >> - struct in_multi *inm, *tinm; >> >> > >> + struct in_multi *inm; >> >> > >> + struct in_multi_head inm_free_tmp; >> >> > >> >> >> > >> CTR3(KTR_IGMPV3, "%s: cancel v3 timers on ifp %p(%s)", __f= unc__, >> >> > >> igi->igi_ifp, igi->igi_ifp->if_xname); >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> > >> >> >> > >> /* >> >> > >> * Stop the v3 General Query Response on this link stone d= ead. >> >> > >> @@ -2050,7 +2032,7 @@ igmp_v3_cancel_link_timers(struct igmp_ifs= oftc *igi) >> >> > >> * message is sent upstream to the old que= rier -- >> >> > >> * transition to NOT would lose the leave = and race. >> >> > >> */ >> >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinmhead, in= m, inm_nrele); >> >> > >> + inm_rele_locked(&inm_free_tmp, inm); >> >> > >> /* FALLTHROUGH */ >> >> > >> case IGMP_G_QUERY_PENDING_MEMBER: >> >> > >> case IGMP_SG_QUERY_PENDING_MEMBER: >> >> > >> @@ -2069,10 +2051,8 @@ igmp_v3_cancel_link_timers(struct igmp_if= softc *igi) >> >> > >> mbufq_drain(&inm->inm_scq); >> >> > >> } >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele, t= inm) { >> >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nrele)= ; >> >> > >> - inm_release_locked(inm); >> >> > >> - } >> >> > >> + >> >> > >> + inm_release_list_deferred(&inm_free_tmp); >> >> > >> } >> >> > >> >> >> > >> /* >> >> > >> @@ -2199,7 +2179,7 @@ igmp_v1v2_queue_report(struct in_multi *in= m, const int >> >> > >> struct ip *ip; >> >> > >> struct mbuf *m; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> ifp =3D inm->inm_ifp; >> >> > >> @@ -2276,10 +2256,8 @@ igmp_change_state(struct in_multi *inm) >> >> > >> struct ifnet *ifp; >> >> > >> int error; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> - >> >> > >> error =3D 0; >> >> > >> - >> >> > >> + IN_MULTI_LOCK_ASSERT(); >> >> > >> /* >> >> > >> * Try to detect if the upper layer just asked us to chang= e state >> >> > >> * for an interface which has now gone away. >> >> > >> @@ -2379,9 +2357,10 @@ igmp_initial_join(struct in_multi *inm, s= truct igmp_if >> >> > >> * group around for the final INCLUDE {} enqueue. >> >> > >> */ >> >> > >> if (igi->igi_version =3D=3D IGMP_VERSION_3 && >> >> > >> - inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) >> >> > >> - inm_release_locked(inm); >> >> > >> - >> >> > >> + inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) { >> >> > >> + MPASS(inm->inm_refcount > 1); >> >> > >> + inm_rele_locked(NULL, inm); >> >> > >> + } >> >> > >> inm->inm_state =3D IGMP_REPORTING_MEMBER; >> >> > >> >> >> > >> switch (igi->igi_version) { >> >> > >> @@ -2473,7 +2452,7 @@ igmp_handle_state_change(struct in_multi *= inm, struct >> >> > >> >> >> > >> ifp =3D inm->inm_ifp; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> KASSERT(igi && igi->igi_ifp =3D=3D ifp, ("%s: inconsistent= ifp", __func__)); >> >> > >> @@ -2531,7 +2510,7 @@ igmp_final_leave(struct in_multi *inm, str= uct igmp_ifs >> >> > >> __func__, ntohl(inm->inm_addr.s_addr), inm->inm_ifp, >> >> > >> inm->inm_ifp->if_xname); >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> switch (inm->inm_state) { >> >> > >> @@ -2658,7 +2637,7 @@ igmp_v3_enqueue_group_record(struct mbufq = *mq, struct >> >> > >> in_addr_t naddr; >> >> > >> uint8_t mode; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> error =3D 0; >> >> > >> ifp =3D inm->inm_ifp; >> >> > >> @@ -3018,7 +2997,7 @@ igmp_v3_enqueue_filter_change(struct mbufq= *mq, struct >> >> > >> uint8_t mode, now, then; >> >> > >> rectype_t crt, drt, nrt; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> if (inm->inm_nsrc =3D=3D 0 || >> >> > >> (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_asm = > 0)) >> >> > >> @@ -3221,7 +3200,7 @@ igmp_v3_merge_state_changes(struct in_mult= i *inm, stru >> >> > >> domerge =3D 0; >> >> > >> recslen =3D 0; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> /* >> >> > >> @@ -3320,7 +3299,7 @@ igmp_v3_dispatch_general_query(struct igmp= _ifsoftc *ig >> >> > >> struct in_multi *inm; >> >> > >> int retval, loop; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IGMP_LOCK_ASSERT(); >> >> > >> >> >> > >> KASSERT(igi->igi_version =3D=3D IGMP_VERSION_3, >> >> > >> @@ -3632,7 +3611,6 @@ DB_SHOW_COMMAND(igi_list, db_show_igi_list= ) >> >> > >> db_printf(" qi %u\n", igi->igi_qi); >> >> > >> db_printf(" qri %u\n", igi->igi_qri); >> >> > >> db_printf(" uri %u\n", igi->igi_uri); >> >> > >> - /* SLIST_HEAD(,in_multi) igi_relinmhead */ >> >> > >> /* struct mbufq igi_gq; */ >> >> > >> db_printf("\n"); >> >> > >> } >> >> > >> >> >> > >> Modified: head/sys/netinet/igmp_var.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/netinet/igmp_var.h Wed May 2 17:41:00 2018 = (r333174) >> >> > >> +++ head/sys/netinet/igmp_var.h Wed May 2 19:36:29 2018 = (r333175) >> >> > >> @@ -214,7 +214,6 @@ struct igmp_ifsoftc { >> >> > >> uint32_t igi_qi; /* IGMPv3 Query Interval (s) */ >> >> > >> uint32_t igi_qri; /* IGMPv3 Query Response Interval = (s) */ >> >> > >> uint32_t igi_uri; /* IGMPv3 Unsolicited Report Inter= val (s) */ >> >> > >> - SLIST_HEAD(,in_multi) igi_relinmhead; /* released groups= */ >> >> > >> struct mbufq igi_gq; /* general query responses= queue */ >> >> > >> }; >> >> > >> >> >> > >> >> >> > >> Modified: head/sys/netinet/in.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/netinet/in.c Wed May 2 17:41:00 2018 (r= 333174) >> >> > >> +++ head/sys/netinet/in.c Wed May 2 19:36:29 2018 (r= 333175) >> >> > >> @@ -632,12 +632,10 @@ in_difaddr_ioctl(u_long cmd, caddr_t data,= struct ifne >> >> > >> struct in_ifinfo *ii; >> >> > >> >> >> > >> ii =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET= ]); >> >> > >> - IN_MULTI_LOCK(); >> >> > >> if (ii->ii_allhosts) { >> >> > >> - (void)in_leavegroup_locked(ii->ii_allhosts= , NULL); >> >> > >> + (void)in_leavegroup(ii->ii_allhosts, NULL)= ; >> >> > >> ii->ii_allhosts =3D NULL; >> >> > >> } >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> } >> >> > >> >> >> > >> IF_ADDR_WLOCK(ifp); >> >> > >> @@ -994,11 +992,12 @@ in_broadcast(struct in_addr in, struct ifn= et *ifp) >> >> > >> void >> >> > >> in_ifdetach(struct ifnet *ifp) >> >> > >> { >> >> > >> - >> >> > >> + IN_MULTI_LOCK(); >> >> > >> in_pcbpurgeif0(&V_ripcbinfo, ifp); >> >> > >> in_pcbpurgeif0(&V_udbinfo, ifp); >> >> > >> in_pcbpurgeif0(&V_ulitecbinfo, ifp); >> >> > >> in_purgemaddrs(ifp); >> >> > >> + IN_MULTI_UNLOCK(); >> >> > >> } >> >> > >> >> >> > >> /* >> >> > >> @@ -1011,12 +1010,12 @@ in_ifdetach(struct ifnet *ifp) >> >> > >> static void >> >> > >> in_purgemaddrs(struct ifnet *ifp) >> >> > >> { >> >> > >> - LIST_HEAD(,in_multi) purgeinms; >> >> > >> - struct in_multi *inm, *tinm; >> >> > >> + struct in_multi_head purgeinms; >> >> > >> + struct in_multi *inm; >> >> > >> struct ifmultiaddr *ifma; >> >> > >> >> >> > >> - LIST_INIT(&purgeinms); >> >> > >> - IN_MULTI_LOCK(); >> >> > >> + SLIST_INIT(&purgeinms); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> >> >> > >> /* >> >> > >> * Extract list of in_multi associated with the detaching = ifp >> >> > >> @@ -1034,17 +1033,13 @@ in_purgemaddrs(struct ifnet *ifp) >> >> > >> ("%s: ifma_protospec is NULL", __func__)); >> >> > >> #endif >> >> > >> inm =3D (struct in_multi *)ifma->ifma_protospec; >> >> > >> - LIST_INSERT_HEAD(&purgeinms, inm, inm_link); >> >> > >> + inm_rele_locked(&purgeinms, inm); >> >> > >> } >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> > >> >> >> > >> - LIST_FOREACH_SAFE(inm, &purgeinms, inm_link, tinm) { >> >> > >> - LIST_REMOVE(inm, inm_link); >> >> > >> - inm_release_locked(inm); >> >> > >> - } >> >> > >> + inm_release_list_deferred(&purgeinms); >> >> > >> igmp_ifdetach(ifp); >> >> > >> - >> >> > >> - IN_MULTI_UNLOCK(); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> } >> >> > >> >> >> > >> struct in_llentry { >> >> > >> >> >> > >> Modified: head/sys/netinet/in_mcast.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/netinet/in_mcast.c Wed May 2 17:41:00 2018 = (r333174) >> >> > >> +++ head/sys/netinet/in_mcast.c Wed May 2 19:36:29 2018 = (r333175) >> >> > >> @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); >> >> > >> #include >> >> > >> #include >> >> > >> #include >> >> > >> +#include >> >> > >> #include >> >> > >> >> >> > >> #include >> >> > >> @@ -59,6 +60,8 @@ __FBSDID("$FreeBSD$"); >> >> > >> #include >> >> > >> #include >> >> > >> >> >> > >> +#include >> >> > >> + >> >> > >> #include >> >> > >> #include >> >> > >> #include >> >> > >> @@ -91,18 +94,24 @@ static MALLOC_DEFINE(M_IPMSOURCE, "ip_msourc= e", >> >> > >> >> >> > >> /* >> >> > >> * Locking: >> >> > >> - * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LOCK, IGMP_LOCK,= IF_ADDR_LOCK. >> >> > >> + * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LIST_LOCK, IGMP_= LOCK, >> >> > >> IF_ADDR_LOCK. >> >> > >> * - The IF_ADDR_LOCK is implicitly taken by inm_lookup() earli= er, however >> >> > >> * it can be taken by code in net/if.c also. >> >> > >> * - ip_moptions and in_mfilter are covered by the INP_WLOCK. >> >> > >> * >> >> > >> - * struct in_multi is covered by IN_MULTI_LOCK. There isn't str= ictly >> >> > >> + * struct in_multi is covered by IN_MULTI_LIST_LOCK. There isn'= t strictly >> >> > >> * any need for in_multi itself to be virtualized -- it is boun= d to an ifp >> >> > >> * anyway no matter what happens. >> >> > >> */ >> >> > >> -struct mtx in_multi_mtx; >> >> > >> -MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX_DE= F); >> >> > >> +struct mtx in_multi_list_mtx; >> >> > >> +MTX_SYSINIT(in_multi_mtx, &in_multi_list_mtx, "in_multi_list_mt= x", MTX_DEF); >> >> > >> >> >> > >> +struct mtx in_multi_free_mtx; >> >> > >> +MTX_SYSINIT(in_multi_free_mtx, &in_multi_free_mtx, "in_multi_fr= ee_mtx", >> >> > >> MTX_DEF); + >> >> > >> +struct sx in_multi_sx; >> >> > >> +SX_SYSINIT(in_multi_sx, &in_multi_sx, "in_multi_sx"); >> >> > >> + >> >> > >> /* >> >> > >> * Functions with non-static linkage defined in this file shoul= d be >> >> > >> * declared in in_var.h: >> >> > >> @@ -151,6 +160,7 @@ static int inm_is_ifp_detached(const = struct in_multi >> >> > >> * static int inm_merge(struct in_multi *, /*const*/ struct in_= mfilter *); >> >> > >> static void inm_purge(struct in_multi *); >> >> > >> static void inm_reap(struct in_multi *); >> >> > >> +static void inm_release(struct in_multi *); >> >> > >> static struct ip_moptions * >> >> > >> inp_findmoptions(struct inpcb *); >> >> > >> static void inp_freemoptions_internal(struct ip_moptions *); >> >> > >> @@ -216,6 +226,65 @@ inm_is_ifp_detached(const struct in_multi *= inm) >> >> > >> } >> >> > >> #endif >> >> > >> >> >> > >> +static struct grouptask free_gtask; >> >> > >> +static struct in_multi_head inm_free_list; >> >> > >> +static void inm_release_task(void *arg __unused); >> >> > >> +static void inm_init(void) >> >> > >> +{ >> >> > >> + SLIST_INIT(&inm_free_list); >> >> > >> + taskqgroup_config_gtask_init(NULL, &free_gtask, inm_releas= e_task, "inm >> >> > >> release task"); +} >> >> > >> + >> >> > >> +SYSINIT(inm_init, SI_SUB_SMP + 1, SI_ORDER_FIRST, >> >> > >> + inm_init, NULL); >> >> > >> + >> >> > >> + >> >> > >> +void >> >> > >> +inm_release_list_deferred(struct in_multi_head *inmh) >> >> > >> +{ >> >> > >> + >> >> > >> + if (SLIST_EMPTY(inmh)) >> >> > >> + return; >> >> > >> + mtx_lock(&in_multi_free_mtx); >> >> > >> + SLIST_CONCAT(&inm_free_list, inmh, in_multi, inm_nrele); >> >> > >> + mtx_unlock(&in_multi_free_mtx); >> >> > >> + GROUPTASK_ENQUEUE(&free_gtask); >> >> > >> +} >> >> > >> + >> >> > >> +void >> >> > >> +inm_release_deferred(struct in_multi *inm) >> >> > >> +{ >> >> > >> + struct in_multi_head tmp; >> >> > >> + >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> + MPASS(inm->inm_refcount > 0); >> >> > >> + if (--inm->inm_refcount =3D=3D 0) { >> >> > >> + SLIST_INIT(&tmp); >> >> > >> + inm->inm_ifma->ifma_protospec =3D NULL; >> >> > >> + SLIST_INSERT_HEAD(&tmp, inm, inm_nrele); >> >> > >> + inm_release_list_deferred(&tmp); >> >> > >> + } >> >> > >> +} >> >> > >> + >> >> > >> +static void >> >> > >> +inm_release_task(void *arg __unused) >> >> > >> +{ >> >> > >> + struct in_multi_head inm_free_tmp; >> >> > >> + struct in_multi *inm, *tinm; >> >> > >> + >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> > >> + mtx_lock(&in_multi_free_mtx); >> >> > >> + SLIST_CONCAT(&inm_free_tmp, &inm_free_list, in_multi, inm_= nrele); >> >> > >> + mtx_unlock(&in_multi_free_mtx); >> >> > >> + IN_MULTI_LOCK(); >> >> > >> + SLIST_FOREACH_SAFE(inm, &inm_free_tmp, inm_nrele, tinm) { >> >> > >> + SLIST_REMOVE_HEAD(&inm_free_tmp, inm_nrele); >> >> > >> + MPASS(inm); >> >> > >> + inm_release(inm); >> >> > >> + } >> >> > >> + IN_MULTI_UNLOCK(); >> >> > >> +} >> >> > >> + >> >> > >> /* >> >> > >> * Initialize an in_mfilter structure to a known state at t0, t= 1 >> >> > >> * with an empty source filter list. >> >> > >> @@ -232,7 +301,7 @@ imf_init(struct in_mfilter *imf, const int s= t0, const >> >> > >> /* >> >> > >> * Function for looking up an in_multi record for an IPv4 multi= cast address >> >> > >> * on a given interface. ifp must be valid. If no record found,= return NULL. >> >> > >> - * The IN_MULTI_LOCK and IF_ADDR_LOCK on ifp must be held. >> >> > >> + * The IN_MULTI_LIST_LOCK and IF_ADDR_LOCK on ifp must be held. >> >> > >> */ >> >> > >> struct in_multi * >> >> > >> inm_lookup_locked(struct ifnet *ifp, const struct in_addr ina) >> >> > >> @@ -240,7 +309,7 @@ inm_lookup_locked(struct ifnet *ifp, const s= truct in_a >> >> > >> struct ifmultiaddr *ifma; >> >> > >> struct in_multi *inm; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IF_ADDR_LOCK_ASSERT(ifp); >> >> > >> >> >> > >> inm =3D NULL; >> >> > >> @@ -264,7 +333,7 @@ inm_lookup(struct ifnet *ifp, const struct i= n_addr ina >> >> > >> { >> >> > >> struct in_multi *inm; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> IF_ADDR_RLOCK(ifp); >> >> > >> inm =3D inm_lookup_locked(ifp, ina); >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> > >> @@ -451,7 +520,7 @@ in_getmulti(struct ifnet *ifp, const struct = in_addr *g >> >> > >> IN_MULTI_LOCK_ASSERT(); >> >> > >> >> >> > >> ii =3D (struct in_ifinfo *)ifp->if_afdata[AF_INET]; >> >> > >> - >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> inm =3D inm_lookup(ifp, *group); >> >> > >> if (inm !=3D NULL) { >> >> > >> /* >> >> > >> @@ -460,11 +529,13 @@ in_getmulti(struct ifnet *ifp, const struc= t in_addr *g >> >> > >> */ >> >> > >> KASSERT(inm->inm_refcount >=3D 1, >> >> > >> ("%s: bad refcount %d", __func__, inm->inm_ref= count)); >> >> > >> - ++inm->inm_refcount; >> >> > >> + inm_acquire_locked(inm); >> >> > >> *pinm =3D inm; >> >> > >> - return (0); >> >> > >> } >> >> > >> - >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> + if (inm !=3D NULL) >> >> > >> + return (0); >> >> > >> + >> >> > >> memset(&gsin, 0, sizeof(gsin)); >> >> > >> gsin.sin_family =3D AF_INET; >> >> > >> gsin.sin_len =3D sizeof(struct sockaddr_in); >> >> > >> @@ -479,6 +550,7 @@ in_getmulti(struct ifnet *ifp, const struct = in_addr *g >> >> > >> return (error); >> >> > >> >> >> > >> /* XXX ifma_protospec must be covered by IF_ADDR_LOCK */ >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> IF_ADDR_WLOCK(ifp); >> >> > >> >> >> > >> /* >> >> > >> @@ -504,10 +576,9 @@ in_getmulti(struct ifnet *ifp, const struct= in_addr *g >> >> > >> __func__, ifma, inm, inet_ntoa_r(*grou= p, addrbuf)); >> >> > >> } >> >> > >> #endif >> >> > >> - ++inm->inm_refcount; >> >> > >> + inm_acquire_locked(inm); >> >> > >> *pinm =3D inm; >> >> > >> - IF_ADDR_WUNLOCK(ifp); >> >> > >> - return (0); >> >> > >> + goto out_locked; >> >> > >> } >> >> > >> >> >> > >> IF_ADDR_WLOCK_ASSERT(ifp); >> >> > >> @@ -522,6 +593,7 @@ in_getmulti(struct ifnet *ifp, const struct = in_addr *g >> >> > >> inm =3D malloc(sizeof(*inm), M_IPMADDR, M_NOWAIT | M_ZERO)= ; >> >> > >> if (inm =3D=3D NULL) { >> >> > >> IF_ADDR_WUNLOCK(ifp); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> if_delmulti_ifma(ifma); >> >> > >> return (ENOMEM); >> >> > >> } >> >> > >> @@ -539,8 +611,9 @@ in_getmulti(struct ifnet *ifp, const struct = in_addr *g >> >> > >> ifma->ifma_protospec =3D inm; >> >> > >> >> >> > >> *pinm =3D inm; >> >> > >> - >> >> > >> + out_locked: >> >> > >> IF_ADDR_WUNLOCK(ifp); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> return (0); >> >> > >> } >> >> > >> >> >> > >> @@ -550,36 +623,29 @@ in_getmulti(struct ifnet *ifp, const struc= t in_addr *g >> >> > >> * If the refcount drops to 0, free the in_multi record and >> >> > >> * delete the underlying link-layer membership. >> >> > >> */ >> >> > >> -void >> >> > >> -inm_release_locked(struct in_multi *inm) >> >> > >> +static void >> >> > >> +inm_release(struct in_multi *inm) >> >> > >> { >> >> > >> struct ifmultiaddr *ifma; >> >> > >> + struct ifnet *ifp; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> - >> >> > >> CTR2(KTR_IGMPV3, "%s: refcount is %d", __func__, inm->inm_= refcount); >> >> > >> - >> >> > >> - if (--inm->inm_refcount > 0) { >> >> > >> - CTR2(KTR_IGMPV3, "%s: refcount is now %d", __func_= _, >> >> > >> - inm->inm_refcount); >> >> > >> - return; >> >> > >> - } >> >> > >> - >> >> > >> + MPASS(inm->inm_refcount =3D=3D 0); >> >> > >> CTR2(KTR_IGMPV3, "%s: freeing inm %p", __func__, inm); >> >> > >> >> >> > >> ifma =3D inm->inm_ifma; >> >> > >> + ifp =3D inm->inm_ifp; >> >> > >> >> >> > >> /* XXX this access is not covered by IF_ADDR_LOCK */ >> >> > >> CTR2(KTR_IGMPV3, "%s: purging ifma %p", __func__, ifma); >> >> > >> - KASSERT(ifma->ifma_protospec =3D=3D inm, >> >> > >> - ("%s: ifma_protospec !=3D inm", __func__)); >> >> > >> - ifma->ifma_protospec =3D NULL; >> >> > >> - >> >> > >> + if (ifp) >> >> > >> + CURVNET_SET(ifp->if_vnet); >> >> > >> inm_purge(inm); >> >> > >> - >> >> > >> free(inm, M_IPMADDR); >> >> > >> >> >> > >> if_delmulti_ifma(ifma); >> >> > >> + if (ifp) >> >> > >> + CURVNET_RESTORE(); >> >> > >> } >> >> > >> >> >> > >> /* >> >> > >> @@ -592,7 +658,7 @@ inm_clear_recorded(struct in_multi *inm) >> >> > >> { >> >> > >> struct ip_msource *ims; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) { >> >> > >> if (ims->ims_stp) { >> >> > >> @@ -632,7 +698,7 @@ inm_record_source(struct in_multi *inm, cons= t in_addr_ >> >> > >> struct ip_msource find; >> >> > >> struct ip_msource *ims, *nims; >> >> > >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> find.ims_haddr =3D ntohl(naddr); >> >> > >> ims =3D RB_FIND(ip_msource_tree, &inm->inm_srcs, &find); >> >> > >> @@ -959,6 +1025,7 @@ inm_merge(struct in_multi *inm, /*const*/ s= truct in_mf >> >> > >> schanged =3D 0; >> >> > >> error =3D 0; >> >> > >> nsrc1 =3D nsrc0 =3D 0; >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> > >> >> >> > >> /* >> >> > >> * Update the source filters first, as this may fail. >> >> > >> @@ -1165,6 +1232,7 @@ in_joingroup_locked(struct ifnet *ifp, con= st struct in >> >> > >> int error; >> >> > >> >> >> > >> IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> > >> >> >> > >> CTR4(KTR_IGMPV3, "%s: join 0x%08x on %p(%s))", __func__, >> >> > >> ntohl(gina->s_addr), ifp, ifp->if_xname); >> >> > >> @@ -1186,7 +1254,7 @@ in_joingroup_locked(struct ifnet *ifp, con= st struct in >> >> > >> CTR1(KTR_IGMPV3, "%s: in_getmulti() failure", __fu= nc__); >> >> > >> return (error); >> >> > >> } >> >> > >> - >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> >> > >> error =3D inm_merge(inm, imf); >> >> > >> if (error) { >> >> > >> @@ -1201,10 +1269,12 @@ in_joingroup_locked(struct ifnet *ifp, c= onst struct in >> >> > >> goto out_inm_release; >> >> > >> } >> >> > >> >> >> > >> -out_inm_release: >> >> > >> + out_inm_release: >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> if (error) { >> >> > >> + >> >> > >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func_= _, inm); >> >> > >> - inm_release_locked(inm); >> >> > >> + inm_release_deferred(inm); >> >> > >> } else { >> >> > >> *pinm =3D inm; >> >> > >> } >> >> > >> @@ -1249,6 +1319,7 @@ in_leavegroup_locked(struct in_multi *inm,= /*const*/ s >> >> > >> error =3D 0; >> >> > >> >> >> > >> IN_MULTI_LOCK_ASSERT(); >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> > >> >> >> > >> CTR5(KTR_IGMPV3, "%s: leave inm %p, 0x%08x/%s, imf %p", __= func__, >> >> > >> inm, ntohl(inm->inm_addr.s_addr), >> >> > >> @@ -1272,18 +1343,20 @@ in_leavegroup_locked(struct in_multi *in= m, /*const*/ s >> >> > >> * the transaction, it MUST NOT fail. >> >> > >> */ >> >> > >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> > >> error =3D inm_merge(inm, imf); >> >> > >> KASSERT(error =3D=3D 0, ("%s: failed to merge inm state", = __func__)); >> >> > >> >> >> > >> CTR1(KTR_IGMPV3, "%s: doing igmp downcall", __func__); >> >> > >> CURVNET_SET(inm->inm_ifp->if_vnet); >> >> > >> error =3D igmp_change_state(inm); >> >> > >> + inm_release_deferred(inm); >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> > >> CURVNET_RESTORE(); >> >> > >> if (error) >> >> > >> CTR1(KTR_IGMPV3, "%s: failed igmp downcall", __fun= c__); >> >> > >> >> >> > >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, inm); >> >> > >> - inm_release_locked(inm); >> >> > >> >> >> > >> return (error); >> >> > >> } >> >> > >> @@ -1315,18 +1388,6 @@ in_addmulti(struct in_addr *ap, struct if= net *ifp) >> >> > >> } >> >> > >> >> >> > >> /* >> >> > >> - * Leave an IPv4 multicast group, assumed to be in exclusive (*= ,G) mode. >> >> > >> - * This KPI is for legacy kernel consumers only. >> >> > >> - */ >> >> > >> >> >> > >> *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** >> >> > >> _______________________________________________ >> >> > >> 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@freeb= sd.org" >> >> > > >> >> > > >> >> > > After (around!) this update, some boxes with i350 dual port NICs = immediately >> >> > > crash with Fatal trap 12: page fault and something with >> >> > > >> >> > > current process: (isc-worker0006) >> >> > > >> >> > > .... >> >> > > >> >> > > Those boxes do not have debugging kernel. The symptombs are the s= ame. Single user >> >> > > kernel works, but the moment I perform /etc/netstart and any kind= of net traffic >> >> > > establishes, this crap bails out. >> >> > > >> >> > > >> >> > > - -- >> >> > > 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). >> >> > > -----BEGIN PGP SIGNATURE----- >> >> > > >> >> > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutjtgAKCRDS528fyFhY >> >> > > lAkzAf9PhaFTwNhQD2zF7xSHJ2wfvLtoUEjZlzGsusACp1pa7JAfz0Pyv+lm+XNJ >> >> > > vLElrIf1CmDzuA8yblZ/x/wOVSJkAf9C+50DVEtGq5H/bHSDNwzmqrj8YgB7XpSs >> >> > > PMRXc+IwIa1Jgi2yM+6TCSNSs1N5bEUhU9Bi8eXy6Y0FSkAZeV+s >> >> > > =3DS0bC >> >> > > -----END PGP SIGNATURE----- >> >> > > _______________________________________________ >> >> > > 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@freebs= d.org" >> >> >> >> >> >> >> >> - -- >> >> 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 2= 8 Abs. 4 BDSG). >> >> -----BEGIN PGP SIGNATURE----- >> >> >> >> iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutv8wAKCRDS528fyFhY >> >> lIe1AfwOCAigpXawZ7KAjLNpWjRT4DsrzfqcC57MoziVQyK+X9qoQA2v0plVNpP0 >> >> FLqh5dkRXiiOLryr9auILUKyLCNyAfwL7cFe1YRX7VnsK5w//8Xm25tJ74CXC8P0 >> >> gaoSqvDqCKWTj6iN+Q/PjoNohWoIK76tiZAWPjkaHeuFbypPa2G+ >> >> =3DEpJa >> >> -----END PGP SIGNATURE----- >> >> _______________________________________________ >> >> 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.or= g" >> > >> > >> > >> > - -- >> > 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). >> > -----BEGIN PGP SIGNATURE----- >> > >> > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWu1y8gAKCRDS528fyFhY >> > lFEoAf4iW+4tSAOcG0EQ1/Y2PNqLCX4AnpYTlSlaECxtFlDZ/XbNOw3TyVB9RbQC >> > qGE9Ux2xQBD48a1Nb1IHVVC9ji7jAgCLOXzKUqmcXkPNvjSgZWZ+Sdyd55ChoLgY >> > SkyY8FSU3GEDm28WgaXjQ4oJh+7/Ff69NsuDZlt7iC24KZdRKH00 >> > =3D4bY+ >> > -----END PGP SIGNATURE----- >> _______________________________________________ >> 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" > > > > - -- > 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 Ab= s. 4 BDSG). > -----BEGIN PGP SIGNATURE----- > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWu4UtwAKCRDS528fyFhY > lIz2Af9nqrSGQsaNVZ9DcSTX4oro3SR/8eftbC41dat67gjYIub9xDKUlbfUPIkT > oGdPP9xO35+XOnmzOK6xmLyJbwv5AgCXe7XbcBcGfQ380zhGgmeZ5ich2Td1Lgxo > 8t7iFo+xTv+TicQ27uRqCwKPcYEbz06UKKgq9ttYqgXZV1UIzs5h > =3D/UZf > -----END PGP SIGNATURE----- From owner-svn-src-head@freebsd.org Sat May 5 20:55:15 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 76CA0FBA535 for ; Sat, 5 May 2018 20:55:14 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) (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 A91E2837F7; Sat, 5 May 2018 20:55:13 +0000 (UTC) (envelope-from ohartmann@walstatt.org) Received: from thor.intern.walstatt.dynvpn.de ([77.180.123.97]) by mail.gmx.com (mrgmx101 [212.227.17.168]) with ESMTPSA (Nemesis) id 0MdFwl-1exGF20ykl-00IY9n; Sat, 05 May 2018 22:55:11 +0200 Date: Sat, 5 May 2018 22:54:41 +0200 From: "O. Hartmann" To: Matthew Macy Cc: svn-src-head@freebsd.org, Sean Bruno , Stephen Hurd , bde@freebsd.org Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys: TRAP 12 Message-ID: <20180505225508.12bcee0c@thor.intern.walstatt.dynvpn.de> In-Reply-To: References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> <20180505223151.580b6522@thor.intern.walstatt.dynvpn.de> Organization: WALSTATT User-Agent: OutScare 3.1415926 X-Operating-System: ImNotAnOperatingSystem 3.141592527 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: base64 X-Provags-ID: V03:K1:QXwM5h5zrMTsk92ACD6xwqvTbvWx0PH8eYL1+JvodoKfs0Kb2Va 6lWjQJ9iHQLhHUvT+WRjleTBWb8N24Jm/J8vsJ3Hc6dqTxafUaM5ois+evcohmuettLjeqq aLWzhZF0nKOhf6qhWBm98aokvvHQkQhdcZegIbPMxxvuTMxy5Qq55EEDMP6yJY9M/cD2oj9 MJcp5rNVA745X6lumzR0w== X-UI-Out-Filterresults: notjunk:1;V01:K0:fDdBpmJ35LE=:zoy8YKqqdV52Zc2XHY+JC7 LZA4Hwita4GUJN0Ql78KJwPi2/mP/BIwilhVNi2Za+noQLU5+RxvdxlRSn1roj5pRpcIfsY2J kSfJipFLoa/dPNoEPvT37J6JDSvn1aCi57fheVA+cyM5DtFZK4dIMPUvJhnnoKd5c46pKQ4cI rzm9ECU+tpqnPAALUTFOOeBHTRcmA2IkyZybqkasLjaGwAJips24POGZSaZcwksNdiuG1XmfL hlwQno/TuU6d9/nUE5qY5Vc302Ius7GN0XBR/LrqVbtEdRb/mq/eB1HuQs/xuPN2RHIEvWBFB dXAJHV93rC4UEcaZJksxXMZllZU/pRZ1nRVJ/eBF9fF+yEe8lJz+tpY/Z4NQeGxTONuM4d5PK sxdOwNmhYaJTvBF4L2WFGTnKz20g7tIrVdxVRClLe9/E4qtHC93rntcurv6r5rZ9G8TwnOQqC +Khgzvx7HpDcOkDLJ8qqz6V1qFgwEnSpJzI3IVXGec2p2mQgvnHpFTj0JqralLh8jCTNJqzRX 9VKeW8X4apKtdtiAFP/IwlBbYD1MJ9nsnLuCvlbtdEG333EE+70c7MxzVn10jgM2SONKRSoqo G6ttMnMmVXciFZ9R18Z+Xv6sz/wKg2BlbCIybF2X6z0PDSj+kq/KpCW8wKFSMSToiqSjDTUG7 avqI+1gnoZ6iyEV9z/nTOxXaxXcOZWM/ujLOqAvaVgFR1XwBJKWTkPEofPQ7HEVRB7aP98qG/ agpdV+12fYNk10Y6eEOeM4otoFQbhNhce4bPrhZf/d5nBuHRXTYu2XnHF3sVNH1jYjII9GB6R eZ8RlcS X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 20:55:15 -0000 LS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQ0KSGFzaDogU0hBNTEyDQoNCkFtIFNh dCwgNSBNYXkgMjAxOCAxMzo0NToxMyAtMDcwMA0KTWF0dGhldyBNYWN5IDxtbWFjeUBmcmVlYnNk Lm9yZz4gc2NocmllYjoNCg0KPiBhY3R1YWxseSBjYW4geW91IHRyeSB0aGUgdXBkYXRlZCBwYXRj aCBwbGVhc2UsIGl0IHR1cm5zIG91dCBJIG5lZWQgdG8NCj4gd29ya2Fyb3VuZCB0aGlzIGxpdHRs ZSBzaG9wIG9mIGhvcnJvcnM6DQo+IA0KPiANCj4gc3RhdGljIHZvaWQNCj4gdGNwX3Vzcl9kZXRh Y2goc3RydWN0IHNvY2tldCAqc28pDQo+IHsNCj4gICAgIHN0cnVjdCBpbnBjYiAqaW5wOw0KPiAg ICAgaW50IHJsb2NrID0gMDsNCj4gDQo+ICAgICBpbnAgPSBzb3RvaW5wY2Ioc28pOw0KPiAgICAg S0FTU0VSVChpbnAgIT0gTlVMTCwgKCJ0Y3BfdXNyX2RldGFjaDogaW5wID09IE5VTEwiKSk7DQo+ ICAgICBpZiAoIUlOUF9JTkZPX1dMT0NLRUQoJlZfdGNiaW5mbykpIHsNCj4gICAgICAgICBJTlBf SU5GT19STE9DSygmVl90Y2JpbmZvKTsNCj4gICAgICAgICBybG9jayA9IDE7DQo+ICAgICB9DQo+ ICAgICBJTlBfV0xPQ0soaW5wKTsNCj4gICAgIEtBU1NFUlQoaW5wLT5pbnBfc29ja2V0ICE9IE5V TEwsDQo+ICAgICAgICAgKCJ0Y3BfdXNyX2RldGFjaDogaW5wX3NvY2tldCA9PSBOVUxMIikpOw0K PiAgICAgdGNwX2RldGFjaChzbywgaW5wKTsNCj4gICAgIGlmIChybG9jaykNCj4gICAgICAgICBJ TlBfSU5GT19SVU5MT0NLKCZWX3RjYmluZm8pOw0KPiB9DQo+IA0KPiBXZSdyZSBzdGlsbCBhY3F1 aXJpbmcgYSBzbGVlcGFibGUgbXV0ZXggb3V0IG9mIG9yZGVyIHdpdGggYSByZWFkIGxvY2sNCj4g aGVsZCB3aXRoIHRoZSBmb3JtZXIgdmVyc2lvbiBvZiB0aGUgcGF0Y2guDQo+DQoNCldlbGwsIEkn ZCBhcHByZWNpYXRlIGEgcGF0Y2ggZmlsZSwgaWYgcG9zc2libGUsIHBsZWFzZS4gDQoNCg0KPiAN Cj4gT24gU2F0LCBNYXkgNSwgMjAxOCBhdCAxOjMxIFBNLCBPLiBIYXJ0bWFubiA8by5oYXJ0bWFu bkB3YWxzdGF0dC5vcmc+IHdyb3RlOg0KPiA+IC0tLS0tQkVHSU4gUEdQIFNJR05FRCBNRVNTQUdF LS0tLS0NCj4gPiBIYXNoOiBTSEE1MTINCj4gPg0KPiA+IEFtIFNhdCwgNSBNYXkgMjAxOCAxMToy MTo0NyAtMDcwMA0KPiA+IE1hdHRoZXcgTWFjeSA8bW1hY3lAZnJlZWJzZC5vcmc+IHNjaHJpZWI6 DQo+ID4gIA0KPiA+PiBwaG9AIGFuZCBzYnJ1bm9AIHRlc3RlZCB0aGUgcGF0Y2ggYmVmb3JlIGNv bW1pdCwgSSBjYW4ndCByZWFkaWx5DQo+ID4+IHJlcHJvZHVjZSBldmVuIHRob3VnaCB0aGUgZGV0 YWNoIHBhdGggc2hvdWxkIGJlIGNvbW1vbiBlbm91Z2guIFBsZWFzZQ0KPiA+PiB0ZWxsIG1lIGlm IHRoaXMgaGVscHM6DQo+ID4+DQo+ID4+IGh0dHBzOi8vcGVvcGxlLmZyZWVic2Qub3JnL35tbWFj eS9pbnBjYi5kaWZmDQo+ID4+DQo+ID4+DQo+ID4+IFRoYW5rcy4NCj4gPj4gIA0KPiA+DQo+ID4N Cj4gPiBUaGUgcHJpdmlkZWQgcGF0Y2ggc2VlbWluZ2x5IHdvcmsgc28gZmFyIChGcmVlQlNEIDEy LjAtQ1VSUkVOVCAjNCByMzMzMjc0TTogU2F0IE1heSAgNQ0KPiA+IDIyOjE5OjA0IENFU1QgMjAx OCBhbWQ2NCkuIEkganVzdCByZWNvbXBpbGUgd29ybGQgYW5kIGtlcm5lbCBvZiByZXZpc2lvbiAz MzMyNzYgYW5kDQo+ID4gdHJ5IHRvIHB1c2ggdGhlIGJveCB3aXRoIG5lIHRyYWZmaWMgKE5GUyBt b3N0bHkpLg0KPiA+DQo+ID4gTWF5IEkgYXNrIG9uIHdoYXQgaGFyZHdhcmUgdGhlIG1lbnRpb25l ZCB0ZXN0cyBvZiB5b3VycyBoYXMgYmVlbiBwZXJmb3JtZWQ/IEkgY2FuDQo+ID4gdGVsbCwgdGhh dCBBTEwoISkgYm94ZXMgZXF1aXB0ZWQgd2l0aCBJbnRlbCdzIGkzNTAgTklDcyBhcmUgc3VmZmVy aW5nIHRoZSB2ZXJ5IHNhbWUNCj4gPiBwcm9ibGVtLiBJIGRpZG4ndCBkYXJlIHRvIG1vdmUgb24g b24gdGhlIG90aGVyIHN5c3RlbXMgd2l0aCBpMjEwLCBpMjE3IG9yIGkyMTksIGJ1dA0KPiA+IHdp dGggdGhlIHBhdGNoIHByb3ZpZGVkIHdvcmtpbmcgc28gZmFyLCBJJ2xsIHRlc3QuDQo+ID4NCj4g PiBUaGFua3MuDQo+ID4gIA0KPiA+Pg0KPiA+PiBPbiBTYXQsIE1heSA1LCAyMDE4IGF0IDI6MDEg QU0sIE8uIEhhcnRtYW5uIDxvLmhhcnRtYW5uQHdhbHN0YXR0Lm9yZz4gd3JvdGU6ICANCj4gPj4g PiAtLS0tLUJFR0lOIFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tDQo+ID4+ID4gSGFzaDogU0hBNTEy DQo+ID4+ID4NCj4gPj4gPiBBbSBUaHUsIDMgTWF5IDIwMTggMjI6MjM6NTIgKzAyMDANCj4gPj4g PiAiTy4gSGFydG1hbm4iIDxvaGFydG1hbm5Ad2Fsc3RhdHQub3JnPiBzY2hyaWViOg0KPiA+PiA+ DQo+ID4+ID4NCj4gPj4gPiBJJ20gbm90IGZhbWlsaWFyIHdpdGgga2VybmVsIGRlYnVnZ2luZywg c28gdGhlcmUgYXJlIHNvbWUgc3RydWdnbGVzLg0KPiA+PiA+DQo+ID4+ID4gQWZ0ZXIgY29tcGls aW5nIGEgZGVidWdnaW5nIGtlcm5lbCBvbg0KPiA+PiA+DQo+ID4+ID4gVmVyc2lvbiBTdHJpbmc6 IEZyZWVCU0QgMTIuMC1DVVJSRU5UICMyIHIzMzMyNjk6IFNhdCBNYXkgIDUgMDg6MTA6MzIgQ0VT VCAyMDE4DQo+ID4+ID4NCj4gPj4gPiBQYW5pYyBTdHJpbmc6IExvY2sgdGNwIG5vdCBleGNsdXNp dmVseSBsb2NrZWQgQCAvdXNyL3NyYy9zeXMvbmV0aW5ldC9pbl9wY2IuYzoxMzkxDQo+ID4+ID4N Cj4gPj4gPg0KPiA+PiA+IEFuZCB0aGlzIGlzIHdoYXQgSSBjYW4gcHJvdmlkZSB5b3Ugd2l0aDoN Cj4gPj4gPg0KPiA+PiA+DQo+ID4+ID4gUmVhZGluZyBzeW1ib2xzDQo+ID4+ID4gZnJvbSAvdXNy L29iai91c3Ivc3JjL2FtZDY0LmFtZDY0L3N5cy9XQUxIQUxMLURFQlVHL2tlcm5lbC5mdWxsLi4u ZG9uZS4NCj4gPj4gPg0KPiA+PiA+IFVucmVhZCBwb3J0aW9uIG9mIHRoZSBrZXJuZWwgbWVzc2Fn ZSBidWZmZXI6DQo+ID4+ID4gcGFuaWM6IExvY2sgdGNwIG5vdCBleGNsdXNpdmVseSBsb2NrZWQg QCAvdXNyL3NyYy9zeXMvbmV0aW5ldC9pbl9wY2IuYzoxMzkxDQo+ID4+ID4NCj4gPj4gPiBjcHVp ZCA9IDQNCj4gPj4gPiB0aW1lID0gMTUyNTUxMDI5MQ0KPiA+PiA+IEtEQjogc3RhY2sgYmFja3Ry YWNlOg0KPiA+PiA+IGRiX3RyYWNlX3NlbGZfd3JhcHBlcigpIGF0IGRiX3RyYWNlX3NlbGZfd3Jh cHBlcisweDJiL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTY3MA0KPiA+PiA+IHZwYW5pYygpIGF0IHZw YW5pYysweDFhMy9mcmFtZSAweGZmZmZmZTAwZTQ4NWU2ZDANCj4gPj4gPiBwYW5pYygpIGF0IHBh bmljKzB4NDMvZnJhbWUgMHhmZmZmZmUwMGU0ODVlNzMwDQo+ID4+ID4gX3J3X3d1bmxvY2tfY29v a2llKCkgYXQgX3J3X3d1bmxvY2tfY29va2llKzB4MTM3L2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTc2 MA0KPiA+PiA+IGluX3BjYmZyZWUoKSBhdCBpbl9wY2JmcmVlKzB4NTFhL2ZyYW1lIDB4ZmZmZmZl MDBlNDg1ZTdiMA0KPiA+PiA+IHRjcF91c3JfZGV0YWNoKCkgYXQgdGNwX3Vzcl9kZXRhY2grMHgx NWUvZnJhbWUgMHhmZmZmZmUwMGU0ODVlN2YwDQo+ID4+ID4gc29mcmVlKCkgYXQgc29mcmVlKzB4 MmY0L2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTg0MA0KPiA+PiA+IHNvY2xvc2UoKSBhdCBzb2Nsb3Nl KzB4Mzg3L2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZThiMA0KPiA+PiA+IGNsb3NlZigpIGF0IGNsb3Nl ZisweDFmNS9mcmFtZSAweGZmZmZmZTAwZTQ4NWU5NDANCj4gPj4gPiBjbG9zZWZwKCkgYXQgY2xv c2VmcCsweGEwL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZTk4MA0KPiA+PiA+IGFtZDY0X3N5c2NhbGwo KSBhdCBhbWQ2NF9zeXNjYWxsKzB4NmQzL2ZyYW1lIDB4ZmZmZmZlMDBlNDg1ZWFiMA0KPiA+PiA+ IGZhc3Rfc3lzY2FsbF9jb21tb24oKSBhdCBmYXN0X3N5c2NhbGxfY29tbW9uKzB4MTAxL2ZyYW1l IDB4ZmZmZmZlMDBlNDg1ZWFiMA0KPiA+PiA+IC0gLS0tIHN5c2NhbGwgKDYsIEZyZWVCU0QgRUxG NjQsIHN5c19jbG9zZSksIHJpcCA9IDB4ODAxMTFhZGRhLCByc3AgPQ0KPiA+PiA+IDB4N2ZmZmRm M2Y3MjI4LCByYnAgPSAweDdmZmZkZjNmNzI0MCAtLS0gS0RCOiBlbnRlcjogcGFuaWMNCj4gPj4g Pg0KPiA+PiA+IF9fY3VydGhyZWFkICgpIGF0IC4vbWFjaGluZS9wY3B1Lmg6MjMxDQo+ID4+ID4g MjMxICAgICAgICAgICAgIF9fYXNtKCJtb3ZxICUlZ3M6JTEsJTAiIDogIj1yIiAodGQpDQo+ID4+ ID4gKGtnZGIpIGJ0DQo+ID4+ID4gKGtnZGIpIGJ0DQo+ID4+ID4gIzAgIF9fY3VydGhyZWFkICgp IGF0IC4vbWFjaGluZS9wY3B1Lmg6MjMxDQo+ID4+ID4gIzEgIGRvYWR1bXAgKHRleHRkdW1wPTAp IGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fc2h1dGRvd24uYzozNjUNCj4gPj4gPiAjMiAgMHhm ZmZmZmZmZjgwNTk3ZDViIGluIGRiX2R1bXAgKGR1bW15PTxvcHRpbWl6ZWQgb3V0PiwgZHVtbXky PTx1bmF2YWlsYWJsZT4sDQo+ID4+ID4gZHVtbXkzPTx1bmF2YWlsYWJsZT4sIGR1bW15ND08dW5h dmFpbGFibGU+KSBhdCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo1NzQNCj4gPj4gPiAj MyAgMHhmZmZmZmZmZjgwNTk3YWU2IGluIGRiX2NvbW1hbmQgKGxhc3RfY21kcD08b3B0aW1pemVk IG91dD4sDQo+ID4+ID4gY21kX3RhYmxlPTxvcHRpbWl6ZWQgIA0KPiA+PiA+IG91dD4sIGRvcGFn ZXI9PG9wdGltaXplZCBvdXQ+KSBhdCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo0ODEg IzQNCj4gPj4gPiBvdXQ+MHhmZmZmZmZmZjgwNTk3ODE0IGluIGRiX2NvbW1hbmRfbG9vcCAoKSBh dCAvdXNyL3NyYy9zeXMvZGRiL2RiX2NvbW1hbmQuYzo1MzQgIA0KPiA+PiA+ICM1ICAweGZmZmZm ZmZmODA1OWIwNGYgaW4gZGJfdHJhcCAodHlwZT08b3B0aW1pemVkIG91dD4sIGNvZGU9PG9wdGlt aXplZCBvdXQ+KQ0KPiA+PiA+IGF0IC91c3Ivc3JjL3N5cy9kZGIvZGJfbWFpbi5jOjI1MCAjNiAg MHhmZmZmZmZmZjgwOTI0NDYzIGluIGtkYl90cmFwICh0eXBlPTMsDQo+ID4+ID4gY29kZT0tNjE0 NTYsIHRmPTxvcHRpbWl6ZWQgb3V0PikgYXQgL3Vzci9zcmMvc3lzL2tlcm4vc3Vicl9rZGIuYzo2 OTcgIzcNCj4gPj4gPiAweGZmZmZmZmZmODBjODBhYjcgaW4gdHJhcCAoZnJhbWU9MHhmZmZmZmUw MGU0ODVlNWEwKQ0KPiA+PiA+IGF0IC91c3Ivc3JjL3N5cy9hbWQ2NC9hbWQ2NC90cmFwLmM6NTUw ICM4ICA8c2lnbmFsIGhhbmRsZXIgY2FsbGVkPiAjOSAga2RiX2VudGVyDQo+ID4+ID4gKHdoeT0w eGZmZmZmZmZmODBkZDdiNTQgInBhbmljIiwgbXNnPTxvcHRpbWl6ZWQgb3V0PikNCj4gPj4gPiBh dCAvdXNyL3NyYy9zeXMva2Vybi9zdWJyX2tkYi5jOjQ3OSAjMTAgMHhmZmZmZmZmZjgwOGRiNTAw IGluIHZwYW5pYw0KPiA+PiA+IChmbXQ9PG9wdGltaXplZCAgDQo+ID4+ID4gb3V0PiwgYXA9MHhm ZmZmZmUwMGU0ODVlNzEwKSBhdCAvdXNyL3NyYy9zeXMva2Vybi9rZXJuX3NodXRkb3duLmM6ODUx ICMxMQ0KPiA+PiA+IG91dD4weGZmZmZmZmZmODA4ZGI1OTMgaW4gcGFuaWMgIA0KPiA+PiA+IChm bXQ9MHhmZmZmZmZmZjgxMjViYmQ4IDxjbnB1dHNfbXR4PiAiXDI1MVwzMTJcMzMyXDIwMFwzNzdc Mzc3XDM3N1wzNzciKQ0KPiA+PiA+IGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fc2h1dGRvd24u Yzo3ODkgIzEyIDB4ZmZmZmZmZmY4MDhkNjViNyBpbiBfX3J3X2Fzc2VydA0KPiA+PiA+IChjPTB4 ZmZmZmZlMDAxMTFlZTY1MCwgd2hhdD00LCBmaWxlPTB4ZmZmZmZmZmY4MGRjNTE1Nw0KPiA+PiA+ ICIvdXNyL3NyYy9zeXMvbmV0aW5ldC9pbl9wY2IuYyIsIGxpbmU9MTM5MSkgYXQgL3Vzci9zcmMv c3lzL2tlcm4va2Vybl9yd2xvY2suYzoxNDI2DQo+ID4+ID4gIzEzIF9yd193dW5sb2NrX2Nvb2tp ZSAoYz0weGZmZmZmZTAwMTExZWU2NTAsIGZpbGU9MHhmZmZmZmZmZjgwZGM1MTU3DQo+ID4+ID4g Ii91c3Ivc3JjL3N5cy9uZXRpbmV0L2luX3BjYi5jIiwgbGluZT0xMzkxKSBhdCAvdXNyL3NyYy9z eXMva2Vybi9rZXJuX3J3bG9jay5jOjM2Mg0KPiA+PiA+ICMxNCAweGZmZmZmZmZmODBhNjhjYWEg aW4gaW5fcGNiZnJlZSAoaW5wPTB4ZmZmZmY4MDA2NjA1OGIxMCkNCj4gPj4gPiBhdCAvdXNyL3Ny Yy9zeXMvbmV0aW5ldC9pbl9wY2IuYzoxMzkxICMxNSAweGZmZmZmZmZmODBiMDlhNmUgaW4gdGNw X2RldGFjaA0KPiA+PiA+IChzbz08b3B0aW1pemVkIG91dD4sIGlucD08b3B0aW1pemVkIG91dD4p IGF0IC91c3Ivc3JjL3N5cy9uZXRpbmV0L3RjcF91c3JyZXEuYzoyNTgNCj4gPj4gPiAjMTYgdGNw X3Vzcl9kZXRhY2ggKHNvPTxvcHRpbWl6ZWQgb3V0PikgYXQgL3Vzci9zcmMvc3lzL25ldGluZXQv dGNwX3VzcnJlcS5jOjI4OQ0KPiA+PiA+ICMxNyAweGZmZmZmZmZmODA5N2MzOTQgaW4gc29mcmVl IChzbz0weGZmZmZmODAwMTk4OGQzNTgpDQo+ID4+ID4gYXQgL3Vzci9zcmMvc3lzL2tlcm4vdWlw Y19zb2NrZXQuYzoxMDMyICMxOCAweGZmZmZmZmZmODA5N2Q0ODcgaW4gc29jbG9zZQ0KPiA+PiA+ IChzbz0weGZmZmZmODAwMTk4OGQzNTgpIGF0IC91c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0 LmM6MTEyNiAjMTkNCj4gPj4gPiAweGZmZmZmZmZmODA4ODVhZDUgaW4gZm9fY2xvc2UgKGZwPTxv cHRpbWl6ZWQgb3V0PiwgdGQ9PG9wdGltaXplZCBvdXQ+KQ0KPiA+PiA+IGF0IC91c3Ivc3JjL3N5 cy9zeXMvZmlsZS5oOjM0OCAjMjAgX2Zkcm9wIChmcD08b3B0aW1pemVkIG91dD4sIHRkPTxvcHRp bWl6ZWQgb3V0PikNCj4gPj4gPiBhdCAvdXNyL3NyYy9zeXMva2Vybi9rZXJuX2Rlc2NyaXAuYzoy OTU3ICMyMSBjbG9zZWYgKGZwPTB4ZmZmZmY4MDAwNGVmNGViMCwNCj4gPj4gPiB0ZD0weGZmZmZm ODAwMTk4OTE1NjApIGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fZGVzY3JpcC5jOjI1MzggIzIy DQo+ID4+ID4gMHhmZmZmZmZmZjgwODgyOTIwIGluIGNsb3NlZnAgKGZkcD0weGZmZmZmODAwMTk1 NTM0NTAsIGZkPTEyLA0KPiA+PiA+IGZwPTB4ZmZmZmY4MDAwNGVmNGViMCwgdGQ9MHhmZmZmZjgw MDE5ODkxNTYwLCBob2xkbGVhZGVycz0wKQ0KPiA+PiA+IGF0IC91c3Ivc3JjL3N5cy9rZXJuL2tl cm5fZGVzY3JpcC5jOjEyMDggIzIzIDB4ZmZmZmZmZmY4MGM4MjAzMyBpbiBzeXNjYWxsZW50ZXIN Cj4gPj4gPiAodGQ9MHhmZmZmZjgwMDE5ODkxNTYwKSBhdCAvdXNyL3NyYy9zeXMvYW1kNjQvYW1k NjQvLi4vLi4va2Vybi9zdWJyX3N5c2NhbGwuYzoxMzUNCj4gPj4gPiAjMjQgYW1kNjRfc3lzY2Fs bCAodGQ9MHhmZmZmZjgwMDE5ODkxNTYwLCB0cmFjZWQ9MCkNCj4gPj4gPiBhdCAvdXNyL3NyYy9z eXMvYW1kNjQvYW1kNjQvdHJhcC5jOjk0NSAjMjUgPHNpZ25hbCBoYW5kbGVyIGNhbGxlZD4gIzI2 DQo+ID4+ID4gMHgwMDAwMDAwODAxMTFhZGRhIGluID8/ICgpIEJhY2t0cmFjZSBzdG9wcGVkOiBD YW5ub3QgYWNjZXNzIG1lbW9yeSBhdCBhZGRyZXNzDQo+ID4+ID4gMHg3ZmZmZGYzZjcyMjggKGtn ZGIpDQo+ID4+ID4NCj4gPj4gPg0KPiA+PiA+DQo+ID4+ID4gIA0KPiA+PiA+PiAtLS0tLUJFR0lO IFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tDQo+ID4+ID4+IEhhc2g6IFNIQTUxMg0KPiA+PiA+Pg0K PiA+PiA+PiBBbSBUaHUsIDMgTWF5IDIwMTggMTI6NTM6MDUgLTA3MDANCj4gPj4gPj4gIksuIE1h Y3kiIDxrbWFjeUBmcmVlYnNkLm9yZz4gc2NocmllYjoNCj4gPj4gPj4gIA0KPiA+PiA+PiA+IENh biB5b3UgZ2l2ZSBhbnkgY29udGV4dCBvbiB3aGF0IHRoZXkncmUgZG9pbmc/IEluIGFkZGl0aW9u IC0gZXZlbiBvbg0KPiA+PiA+PiA+IGEgcHJvZHVjdGlvbiBrZXJuZWwgaXQncyBwb3NzaWJsZSB0 byBjb21waWxlIGluIEREQiB0byBhdCBsZWFzdCBnZXQgYQ0KPiA+PiA+PiA+IGJhY2t0cmFjZS4g WW91ciByZXBvcnQgb25seSBnaXZlcyB1cyBlbm91Z2ggaW5mb3JtYXRpb24gdG8ga25vdyB0aGF0 ICANCj4gPj4gPj4NCj4gPj4gPj4gTm90IGF0IHRoZSBtb21lbnQuIFRoZSBpbW1lZGlhdGUgY3Jh c2ggY29ycnVwdGVkIHRoZSAvdXNyL3NyYyBmaWxlc3lzdGVtIHNvIEkgY2FuDQo+ID4+ID4+IG5v dCByZWNvbXBpbGUgYSBrZXJuZWwuIEV2ZXJ5IGF0dGVtcHQgdG8gL2V0Yy9uZXRzdGFydCB0aGUg bmV0d29yayBvbiB0aGUgYnVnZ3kNCj4gPj4gPj4ga2VybmVsIGVuZHMgdXAgaW4gYSBmdXJ0aGVy IGRlc3RydWN0aW9uLCBzbyBJIHN0b3BwZWQgYXQgdGhpcyB2ZXJ5IG1vbWVudCBhbmQNCj4gPj4g Pj4gaG9wZWZ1bGx5IEkgY2FuIGNvcHkgL3Vzci9zcmMgZnJvbSBhIHIzMzE1MyBib3ggKHIzMzMx NTMgaXMgZm9yIG1lIHRoZSBsYXN0DQo+ID4+ID4+IHdvcmtpbmcgcmV2aXNpb24pIHZpYSBVU0Ig Zmxhc2ggZHJpdmUgYW5kIHJlY29tcGlsZSB0aGUga2VybmVsLiBCdXQgSSdsbCBnbyBmb3INCj4g Pj4gPj4gcjMzMzE1MyBmaXJzdCBzaW5jZSBJIG5lZWQgdGhlIHNlcnZlciB1cCB0b21vcnJvdyBh bmQgSSdsbCB0cnkgb24gdGhlIG90aGVyIGJveA0KPiA+PiA+PiB3aGljaCBpcyBhbHNvIGFmZmVj dGVkLCBidXQgYWxzbyBlcXVpcHRlZCB3aXRoIHRoZSBpMzUwIE5JQyBvbiB3aGljaCB0aGUgcHJv YmxlbQ0KPiA+PiA+PiBvY2N1cnMgdmVyeSBxdWlja2x5LiANCj4gPj4gPj4gPiB0aGVyZSBpcyBf YW5fIGlzc3VlLiBJdCdzIGRpZmZpY3VsdCB0byBwcm9jZWVkIG9uIHRoaXMgYWxvbmUuIEkgZG8N Cj4gPj4gPj4gPiBoYXZlIGEgcmVwb3J0IGZyb20gdGhlIEZyZWVCU0QgQ0kgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCB3ZSdyZSBsb29raW5nIGluDQo+ID4+ID4+ID4gdG8gbm93LiAgV2l0aCBsdWNrIHRo YXQgaXMgdGhlIHNhbWUgaXNzdWUuDQo+ID4+ID4+ID4NCj4gPj4gPj4gPiAtTQ0KPiA+PiA+PiA+ DQo+ID4+ID4+ID4gT24gVGh1LCBNYXkgMywgMjAxOCBhdCAxMjozMSBQTSwgTy4gSGFydG1hbm4g PG9oYXJ0bWFubkB3YWxzdGF0dC5vcmc+IHdyb3RlOiAgDQo+ID4+ID4+ID4gPiAtLS0tLUJFR0lO IFBHUCBTSUdORUQgTUVTU0FHRS0tLS0tDQo+ID4+ID4+ID4gPiBIYXNoOiBTSEE1MTINCj4gPj4g Pj4gPiA+DQo+ID4+ID4+ID4gPiBBbSBXZWQsIDIgTWF5IDIwMTggMTk6MzY6MjkgKzAwMDAgKFVU QykNCj4gPj4gPj4gPiA+IFN0ZXBoZW4gSHVyZCA8c2h1cmRARnJlZUJTRC5vcmc+IHNjaHJpZWI6 DQo+ID4+ID4+ID4gPiAgDQo+ID4+ID4+ID4gPj4gQXV0aG9yOiBzaHVyZA0KPiA+PiA+PiA+ID4+ IERhdGU6IFdlZCBNYXkgIDIgMTk6MzY6MjkgMjAxOA0KPiA+PiA+PiA+ID4+IE5ldyBSZXZpc2lv bjogMzMzMTc1DQo+ID4+ID4+ID4gPj4gVVJMOiBodHRwczovL3N2bndlYi5mcmVlYnNkLm9yZy9j aGFuZ2VzZXQvYmFzZS8zMzMxNzUNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IExvZzoNCj4g Pj4gPj4gPiA+PiAgIFNlcGFyYXRlIGxpc3QgbWFuaXB1bGF0aW9uIGxvY2tpbmcgZnJvbSBzdGF0 ZSBjaGFuZ2UgaW4gbXVsdGljYXN0DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgIE11bHRp Y2FzdCBpbmNvcnJlY3RseSBjYWxscyBpbiB0byBkcml2ZXJzIHdpdGggYSBtdXRleCBoZWxkIGNh dXNpbmcgZHJpdmVycw0KPiA+PiA+PiA+ID4+ICAgdG8gaGF2ZSB0byBnbyB0aHJvdWdoIGFsbCBt YW5uZXIgb2YgY29udG9ydGlvbnMgdG8gdXNlIGEgbm9uIHNsZWVwYWJsZQ0KPiA+PiA+PiA+ID4+ IGxvY2suIFNlcmlhbGl6ZSBtdWx0aWNhc3QgdXBkYXRlcyBpbnN0ZWFkLg0KPiA+PiA+PiA+ID4+ DQo+ID4+ID4+ID4gPj4gICBTdWJtaXR0ZWQgYnk6ICAgICAgIG1tYWN5IDxtbWFjeUBtYXR0bWFj eS5pbz4NCj4gPj4gPj4gPiA+PiAgIFJldmlld2VkIGJ5OiAgICAgICAgc2h1cmQsIHNicnVubw0K PiA+PiA+PiA+ID4+ICAgU3BvbnNvcmVkIGJ5OiAgICAgICBMaW1lbGlnaHQgTmV0d29ya3MNCj4g Pj4gPj4gPiA+PiAgIERpZmZlcmVudGlhbCBSZXZpc2lvbjogICAgICBodHRwczovL3Jldmlld3Mu ZnJlZWJzZC5vcmcvRDE0OTY5DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiBNb2RpZmllZDoN Cj4gPj4gPj4gPiA+PiAgIGhlYWQvc3lzL2tlcm4vc3Vicl9ndGFza3F1ZXVlLmMNCj4gPj4gPj4g PiA+PiAgIGhlYWQvc3lzL2tlcm4vc3Vicl93aXRuZXNzLmMNCj4gPj4gPj4gPiA+PiAgIGhlYWQv c3lzL25ldC9pZi5jDQo+ID4+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0L2lnbXAuYw0KPiA+ PiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldC9pZ21wX3Zhci5oDQo+ID4+ID4+ID4gPj4gICBo ZWFkL3N5cy9uZXRpbmV0L2luLmMNCj4gPj4gPj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQvaW5f bWNhc3QuYw0KPiA+PiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldC9pbl9wY2IuYw0KPiA+PiA+ PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldC9pbl92YXIuaA0KPiA+PiA+PiA+ID4+ICAgaGVhZC9z eXMvbmV0aW5ldC9pcF9jYXJwLmMNCj4gPj4gPj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQ2L2lu Ni5jDQo+ID4+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9pbjZfaWZhdHRhY2guYw0KPiA+ PiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0aW5ldDYvaW42X21jYXN0LmMNCj4gPj4gPj4gPiA+PiAg IGhlYWQvc3lzL25ldGluZXQ2L2luNl9wY2IuYw0KPiA+PiA+PiA+ID4+ICAgaGVhZC9zeXMvbmV0 aW5ldDYvaW42X3Zhci5oDQo+ID4+ID4+ID4gPj4gICBoZWFkL3N5cy9uZXRpbmV0Ni9tbGQ2LmMN Cj4gPj4gPj4gPiA+PiAgIGhlYWQvc3lzL25ldGluZXQ2L21sZDZfdmFyLmgNCj4gPj4gPj4gPiA+ PiAgIGhlYWQvc3lzL3N5cy9ndGFza3F1ZXVlLmgNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ IE1vZGlmaWVkOiBoZWFkL3N5cy9rZXJuL3N1YnJfZ3Rhc2txdWV1ZS5jDQo+ID4+ID4+ID4gPj4g PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQo+ID4+ID4+ID4gPj4gLS0tIGhlYWQvc3lzL2tlcm4vc3Vi cl9ndGFza3F1ZXVlLmMgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTgNCj4gPj4gPj4gPiA+PiAo cjMzMzE3NCkgKysrIGhlYWQvc3lzL2tlcm4vc3Vicl9ndGFza3F1ZXVlLmMgICBXZWQgTWF5ICAy IDE5OjM2OjI5DQo+ID4+ID4+ID4gPj4gMjAxOCAgICAgICAgKHIzMzMxNzUpIEBAIC01Myw2ICs1 Myw3IEBAIHN0YXRpYyB2b2lkDQo+ID4+ID4+ID4gPj4gZ3Rhc2txdWV1ZV90aHJlYWRfZW5xdWV1 ZSh2b2lkICopOyBzdGF0aWMgdm9pZCAgZ3Rhc2txdWV1ZV90aHJlYWRfbG9vcCh2b2lkDQo+ID4+ ID4+ID4gPj4gKmFyZyk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgVEFTS1FHUk9VUF9E RUZJTkUoc29mdGlycSwgbXBfbmNwdXMsIDEpOw0KPiA+PiA+PiA+ID4+ICtUQVNLUUdST1VQX0RF RklORShjb25maWcsIDEsIDEpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gIHN0cnVjdCBn dGFza3F1ZXVlX2J1c3kgew0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBndGFzayAgICAqdGJf cnVubmluZzsNCj4gPj4gPj4gPiA+PiBAQCAtNjYyLDcgKzY2Myw3IEBAIFNZU0lOSVQodHFnX3Jl Y29yZF9zbXBfc3RhcnRlZCwgU0lfU1VCX1NNUCwgU0lfT1JERVJfRg0KPiA+PiA+PiA+ID4+DQo+ ID4+ID4+ID4gPj4gIHZvaWQNCj4gPj4gPj4gPiA+PiAgdGFza3Fncm91cF9hdHRhY2goc3RydWN0 IHRhc2txZ3JvdXAgKnFncm91cCwgc3RydWN0IGdyb3VwdGFzayAqZ3Rhc2ssDQo+ID4+ID4+ID4g Pj4gLSAgICB2b2lkICp1bmlxLCBpbnQgaXJxLCBjaGFyICpuYW1lKQ0KPiA+PiA+PiA+ID4+ICsg ICAgdm9pZCAqdW5pcSwgaW50IGlycSwgY29uc3QgY2hhciAqbmFtZSkNCj4gPj4gPj4gPiA+PiAg ew0KPiA+PiA+PiA+ID4+ICAgICAgIGNwdXNldF90IG1hc2s7DQo+ID4+ID4+ID4gPj4gICAgICAg aW50IHFpZCwgZXJyb3I7DQo+ID4+ID4+ID4gPj4gQEAgLTk3Niw0ICs5NzcsMTMgQEAgdm9pZA0K PiA+PiA+PiA+ID4+ICB0YXNrcWdyb3VwX2Rlc3Ryb3koc3RydWN0IHRhc2txZ3JvdXAgKnFncm91 cCkNCj4gPj4gPj4gPiA+PiAgew0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gK30NCj4gPj4g Pj4gPiA+PiArDQo+ID4+ID4+ID4gPj4gK3ZvaWQNCj4gPj4gPj4gPiA+PiArdGFza3Fncm91cF9j b25maWdfZ3Rhc2tfaW5pdCh2b2lkICpjdHgsIHN0cnVjdCBncm91cHRhc2sgKmd0YXNrLCBndGFz a19mbl90DQo+ID4+ID4+ID4gPj4gKmZuLA0KPiA+PiA+PiA+ID4+ICsgICAgIGNvbnN0IGNoYXIg Km5hbWUpDQo+ID4+ID4+ID4gPj4gK3sNCj4gPj4gPj4gPiA+PiArDQo+ID4+ID4+ID4gPj4gKyAg ICAgR1JPVVBUQVNLX0lOSVQoZ3Rhc2ssIDAsIGZuLCBjdHgpOw0KPiA+PiA+PiA+ID4+ICsgICAg IHRhc2txZ3JvdXBfYXR0YWNoKHFncm91cF9jb25maWcsIGd0YXNrLCBndGFzaywgLTEsIG5hbWUp Ow0KPiA+PiA+PiA+ID4+ICB9DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiBNb2RpZmllZDog aGVhZC9zeXMva2Vybi9zdWJyX3dpdG5lc3MuYw0KPiA+PiA+PiA+ID4+ID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQ0KPiA+PiA+PiA+ID4+IC0tLSBoZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jICAg ICAgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4DQo+ID4+ID4+ID4gPj4gKHIzMzMxNzQpICsrKyBo ZWFkL3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jICAgICAgV2VkIE1heSAgMiAxOTozNjoyOQ0KPiA+ PiA+PiA+ID4+IDIwMTggICAgICAgIChyMzMzMTc1KSBAQCAtNTMyLDE4ICs1MzIsMjIgQEAgc3Rh dGljIHN0cnVjdA0KPiA+PiA+PiA+ID4+IHdpdG5lc3Nfb3JkZXJfbGlzdF9lbnRyeSBvcmRlcl9s aXN0c1tdID0NCj4gPj4gPj4gPiA+PiAgICAgICAgKiBJUHY0IG11bHRpY2FzdDoNCj4gPj4gPj4g PiA+PiAgICAgICAgKiBwcm90b2NvbCBsb2NrcyBiZWZvcmUgaW50ZXJmYWNlIGxvY2tzLCBhZnRl ciBVRFAgbG9ja3MuDQo+ID4+ID4+ID4gPj4gICAgICAgICovDQo+ID4+ID4+ID4gPj4gKyAgICAg eyAiaW5fbXVsdGlfc3giLCAmbG9ja19jbGFzc19zeCB9LA0KPiA+PiA+PiA+ID4+ICAgICAgIHsg InVkcGlucCIsICZsb2NrX2NsYXNzX3J3IH0sDQo+ID4+ID4+ID4gPj4gLSAgICAgeyAiaW5fbXVs dGlfbXR4IiwgJmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQo+ID4+ID4+ID4gPj4gKyAgICAgeyAi aW5fbXVsdGlfbGlzdF9tdHgiLCAmbG9ja19jbGFzc19tdHhfc2xlZXAgfSwNCj4gPj4gPj4gPiA+ PiAgICAgICB7ICJpZ21wX210eCIsICZsb2NrX2NsYXNzX210eF9zbGVlcCB9LA0KPiA+PiA+PiA+ ID4+ICsgICAgIHsgImlmbmV0X3J3IiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPj4gPj4gPiA+PiAg ICAgICB7ICJpZl9hZGRyX2xvY2siLCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiA+PiA+ID4+ICAg ICAgIHsgTlVMTCwgTlVMTCB9LA0KPiA+PiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ID4+ID4gPj4g ICAgICAgICogSVB2NiBtdWx0aWNhc3Q6DQo+ID4+ID4+ID4gPj4gICAgICAgICogcHJvdG9jb2wg bG9ja3MgYmVmb3JlIGludGVyZmFjZSBsb2NrcywgYWZ0ZXIgVURQIGxvY2tzLg0KPiA+PiA+PiA+ ID4+ICAgICAgICAqLw0KPiA+PiA+PiA+ID4+ICsgICAgIHsgImluNl9tdWx0aV9zeCIsICZsb2Nr X2NsYXNzX3N4IH0sDQo+ID4+ID4+ID4gPj4gICAgICAgeyAidWRwaW5wIiwgJmxvY2tfY2xhc3Nf cncgfSwNCj4gPj4gPj4gPiA+PiAtICAgICB7ICJpbjZfbXVsdGlfbXR4IiwgJmxvY2tfY2xhc3Nf bXR4X3NsZWVwIH0sDQo+ID4+ID4+ID4gPj4gKyAgICAgeyAiaW42X211bHRpX2xpc3RfbXR4Iiwg JmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQo+ID4+ID4+ID4gPj4gICAgICAgeyAibWxkX210eCIs ICZsb2NrX2NsYXNzX210eF9zbGVlcCB9LA0KPiA+PiA+PiA+ID4+ICsgICAgIHsgImlmbmV0X3J3 IiwgJmxvY2tfY2xhc3NfcncgfSwNCj4gPj4gPj4gPiA+PiAgICAgICB7ICJpZl9hZGRyX2xvY2si LCAmbG9ja19jbGFzc19ydyB9LA0KPiA+PiA+PiA+ID4+ICAgICAgIHsgTlVMTCwgTlVMTCB9LA0K PiA+PiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiBNb2RpZmll ZDogaGVhZC9zeXMvbmV0L2lmLmMNCj4gPj4gPj4gPiA+PiA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N Cj4gPj4gPj4gPiA+PiAtLS0gaGVhZC9zeXMvbmV0L2lmLmMgV2VkIE1heSAgMiAxNzo0MTowMCAy MDE4ICAgICAgICAocjMzMzE3NCkNCj4gPj4gPj4gPiA+PiArKysgaGVhZC9zeXMvbmV0L2lmLmMg V2VkIE1heSAgMiAxOTozNjoyOSAyMDE4ICAgICAgICAocjMzMzE3NSkNCj4gPj4gPj4gPiA+PiBA QCAtOTg1LDExICs5ODUsMTMgQEAgc3RhdGljIHZvaWQNCj4gPj4gPj4gPiA+PiAgaWZfcHVyZ2Vt YWRkcnMoc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ID4+ID4gPj4gIHsNCj4gPj4gPj4gPiA+PiAg ICAgICBzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlmbWE7DQo+ID4+ID4+ID4gPj4gLSAgICAgc3RydWN0 IGlmbXVsdGlhZGRyICpuZXh0Ow0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgSUZf QUREUl9XTE9DSyhpZnApOw0KPiA+PiA+PiA+ID4+IC0gICAgIFRBSUxRX0ZPUkVBQ0hfU0FGRShp Zm1hLCAmaWZwLT5pZl9tdWx0aWFkZHJzLCBpZm1hX2xpbmssIG5leHQpDQo+ID4+ID4+ID4gPj4g KyAgICAgd2hpbGUgKCFUQUlMUV9FTVBUWSgmaWZwLT5pZl9tdWx0aWFkZHJzKSkgew0KPiA+PiA+ PiA+ID4+ICsgICAgICAgICAgICAgaWZtYSA9IFRBSUxRX0ZJUlNUKCZpZnAtPmlmX211bHRpYWRk cnMpOw0KPiA+PiA+PiA+ID4+ICsgICAgICAgICAgICAgVEFJTFFfUkVNT1ZFKCZpZnAtPmlmX211 bHRpYWRkcnMsIGlmbWEsIGlmbWFfbGluayk7DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBp Zl9kZWxtdWx0aV9sb2NrZWQoaWZwLCBpZm1hLCAxKTsNCj4gPj4gPj4gPiA+PiArICAgICB9DQo+ ID4+ID4+ID4gPj4gICAgICAgSUZfQUREUl9XVU5MT0NLKGlmcCk7DQo+ID4+ID4+ID4gPj4gIH0N Cj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IEBAIC0zNDI5LDYgKzM0MzEsMTIgQEAgaWZfYWRk bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBzb2NrYWRkciAqc2EsDQo+ID4+ID4+ID4g Pj4gICAgICAgc3RydWN0IHNvY2thZGRyX2RsIHNkbDsNCj4gPj4gPj4gPiA+PiAgICAgICBpbnQg ZXJyb3I7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiArI2lmZGVmIElORVQNCj4gPj4gPj4g PiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiAr I2VuZGlmDQo+ID4+ID4+ID4gPj4gKyNpZmRlZiBJTkVUNg0KPiA+PiA+PiA+ID4+ICsgICAgIElO Nl9NVUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiArI2VuZGlmDQo+ID4+ ID4+ID4gPj4gICAgICAgLyoNCj4gPj4gPj4gPiA+PiAgICAgICAgKiBJZiB0aGUgYWRkcmVzcyBp cyBhbHJlYWR5IHByZXNlbnQsIHJldHVybiBhIG5ldyByZWZlcmVuY2UgdG8gaXQ7DQo+ID4+ID4+ ID4gPj4gICAgICAgICogb3RoZXJ3aXNlLCBhbGxvY2F0ZSBzdG9yYWdlIGFuZCBzZXQgdXAgYSBu ZXcgYWRkcmVzcy4NCj4gPj4gPj4gPiA+PiBAQCAtMzYxMCw2ICszNjE4LDkgQEAgaWZfZGVsbXVs dGlfaWZtYShzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlmbWEpDQo+ID4+ID4+ID4gPj4gICAgICAgc3Ry dWN0IGlmbmV0ICppZnA7DQo+ID4+ID4+ID4gPj4gICAgICAgaW50IGxhc3RyZWY7DQo+ID4+ID4+ ID4gPj4NCj4gPj4gPj4gPiA+PiArI2lmZGVmIElORVQNCj4gPj4gPj4gPiA+PiArICAgICBJTl9N VUxUSV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiArI2VuZGlmDQo+ID4+ID4+ ID4gPj4gICAgICAgaWZwID0gaWZtYS0+aWZtYV9pZnA7DQo+ID4+ID4+ID4gPj4gICNpZmRlZiBE SUFHTk9TVElDDQo+ID4+ID4+ID4gPj4gICAgICAgaWYgKGlmcCA9PSBOVUxMKSB7DQo+ID4+ID4+ ID4gPj4gQEAgLTM3MTEsOCArMzcyMiw3IEBAIGlmX2RlbG11bHRpX2xvY2tlZChzdHJ1Y3QgaWZu ZXQgKmlmcCwgc3RydWN0IGlmbXVsdGlhZA0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgICAg ICAgICBpZl9mcmVlbXVsdGkobGxfaWZtYSk7DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICB9 DQo+ID4+ID4+ID4gPj4gICAgICAgfQ0KPiA+PiA+PiA+ID4+IC0NCj4gPj4gPj4gPiA+PiAtICAg ICBpZiAoaWZwICE9IE5VTEwpDQo+ID4+ID4+ID4gPj4gKyAgICAgaWYgKGlmcCAhPSBOVUxMICYm IGRldGFjaGluZyA9PSAwKQ0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgVEFJTFFfUkVNT1ZF KCZpZnAtPmlmX211bHRpYWRkcnMsIGlmbWEsIGlmbWFfbGluayk7DQo+ID4+ID4+ID4gPj4NCj4g Pj4gPj4gPiA+PiAgICAgICBpZl9mcmVlbXVsdGkoaWZtYSk7DQo+ID4+ID4+ID4gPj4NCj4gPj4g Pj4gPiA+PiBNb2RpZmllZDogaGVhZC9zeXMvbmV0aW5ldC9pZ21wLmMNCj4gPj4gPj4gPiA+PiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0NCj4gPj4gPj4gPiA+PiAtLS0gaGVhZC9zeXMvbmV0aW5ldC9p Z21wLmMgICBXZWQgTWF5ICAyIDE3OjQxOjAwIDIwMTggICAgICAgIChyMzMzMTc0KQ0KPiA+PiA+ PiA+ID4+ICsrKyBoZWFkL3N5cy9uZXRpbmV0L2lnbXAuYyAgIFdlZCBNYXkgIDIgMTk6MzY6Mjkg MjAxOCAgICAgICAgKHIzMzMxNzUpDQo+ID4+ID4+ID4gPj4gQEAgLTEzNiw3ICsxMzYsNyBAQCBz dGF0aWMgaW50ICAgICAgICBpZ21wX3YzX2VucXVldWVfZ3JvdXBfcmVjb3JkKHN0cnVjdA0KPiA+ PiA+PiA+ID4+IG1idWZxDQo+ID4+ID4+ID4gPj4gKiBzdHJ1Y3QgaW5fbXVsdGkgKiwgY29uc3Qg aW50LCBjb25zdCBpbnQsIGNvbnN0IGludCk7DQo+ID4+ID4+ID4gPj4gIHN0YXRpYyBpbnQgICBp Z21wX3YzX2VucXVldWVfZmlsdGVyX2NoYW5nZShzdHJ1Y3QgbWJ1ZnEgKiwNCj4gPj4gPj4gPiA+ PiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fbXVsdGkgKik7DQo+ID4+ID4+ID4gPj4gLXN0 YXRpYyB2b2lkICBpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0cnVjdCBpZ21wX2lmc29m dGMgKiwNCj4gPj4gPj4gPiA+PiArc3RhdGljIHZvaWQgIGlnbXBfdjNfcHJvY2Vzc19ncm91cF90 aW1lcnMoc3RydWN0IGluX211bHRpX2hlYWQgKiwNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgbWJ1ZnEgKiwgc3RydWN0IG1idWZxICosIHN0cnVjdCBpbl9tdWx0aSAqLA0K PiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCk7DQo+ID4+ID4+ID4gPj4g IHN0YXRpYyBpbnQgICBpZ21wX3YzX21lcmdlX3N0YXRlX2NoYW5nZXMoc3RydWN0IGluX211bHRp ICosDQo+ID4+ID4+ID4gPj4gQEAgLTE2MiwxMiArMTYyLDEyIEBAIHN0YXRpYyBjb25zdCBzdHJ1 Y3QgbmV0aXNyX2hhbmRsZXIgaWdtcF9uaCA9IHsNCj4gPj4gPj4gPiA+PiAgICogdGhlbXNlbHZl cyBhcmUgbm90IHZpcnR1YWxpemVkLg0KPiA+PiA+PiA+ID4+ICAgKg0KPiA+PiA+PiA+ID4+ICAg KiBMb2NraW5nOg0KPiA+PiA+PiA+ID4+IC0gKiAgKiBUaGUgcGVybWl0dGVkIGxvY2sgb3JkZXIg aXM6IElOX01VTFRJX0xPQ0ssIElHTVBfTE9DSywgSUZfQUREUl9MT0NLLg0KPiA+PiA+PiA+ID4+ ICsgKiAgKiBUaGUgcGVybWl0dGVkIGxvY2sgb3JkZXIgaXM6IElOX01VTFRJX0xJU1RfTE9DSywg SUdNUF9MT0NLLA0KPiA+PiA+PiA+ID4+IElGX0FERFJfTE9DSy4NCj4gPj4gPj4gPiA+PiAgICog ICAgQW55IG1heSBiZSB0YWtlbiBpbmRlcGVuZGVudGx5OyBpZiBhbnkgYXJlIGhlbGQgYXQgdGhl IHNhbWUNCj4gPj4gPj4gPiA+PiAgICogICAgdGltZSwgdGhlIGFib3ZlIGxvY2sgb3JkZXIgbXVz dCBiZSBmb2xsb3dlZC4NCj4gPj4gPj4gPiA+PiAgICogICogQWxsIG91dHB1dCBpcyBkZWxlZ2F0 ZWQgdG8gdGhlIG5ldGlzci4NCj4gPj4gPj4gPiA+PiAgICogICAgTm93IHRoYXQgR2lhbnQgaGFz IGJlZW4gZWxpbWluYXRlZCwgdGhlIG5ldGlzciBtYXkgYmUgaW5saW5lZC4NCj4gPj4gPj4gPiA+ PiAtICogICogSU5fTVVMVElfTE9DSyBjb3ZlcnMgaW5fbXVsdGkuDQo+ID4+ID4+ID4gPj4gKyAq ICAqIElOX01VTFRJX0xJU1RfTE9DSyBjb3ZlcnMgaW5fbXVsdGkuDQo+ID4+ID4+ID4gPj4gICAq ICAqIElHTVBfTE9DSyBjb3ZlcnMgaWdtcF9pZnNvZnRjIGFuZCBhbnkgZ2xvYmFsIHZhcmlhYmxl cyBpbiB0aGlzIGZpbGUsDQo+ID4+ID4+ID4gPj4gICAqICAgIGluY2x1ZGluZyB0aGUgb3V0cHV0 IHF1ZXVlLg0KPiA+PiA+PiA+ID4+ICAgKiAgKiBJRl9BRERSX0xPQ0sgY292ZXJzIGlmX211bHRp YWRkcnMsIHdoaWNoIGlzIHVzZWQgZm9yIGEgdmFyaWV0eSBvZg0KPiA+PiA+PiA+ID4+IEBAIC00 NDEsNyArNDQxLDcgQEAgc3lzY3RsX2lnbXBfaWZpbmZvKFNZU0NUTF9IQU5ETEVSX0FSR1MpDQo+ ID4+ID4+ID4gPj4gICAgICAgaWYgKGVycm9yKQ0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAg cmV0dXJuIChlcnJvcik7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxU SV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ ID4+ID4gPj4gICAgICAgSUdNUF9MT0NLKCk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAg ICAgICBpZiAobmFtZVswXSA8PSAwIHx8IG5hbWVbMF0gPiBWX2lmX2luZGV4KSB7DQo+ID4+ID4+ ID4gPj4gQEAgLTQ3NSw3ICs0NzUsNyBAQCBzeXNjdGxfaWdtcF9pZmluZm8oU1lTQ1RMX0hBTkRM RVJfQVJHUykNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICBvdXRfbG9ja2VkOg0KPiA+PiA+ PiA+ID4+ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElf VU5MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4g Pj4gPj4gPiA+PiAgICAgICByZXR1cm4gKGVycm9yKTsNCj4gPj4gPj4gPiA+PiAgfQ0KPiA+PiA+ PiA+ID4+DQo+ID4+ID4+ID4gPj4gQEAgLTU4Niw3ICs1ODYsNiBAQCBpZ2lfYWxsb2NfbG9ja2Vk KC8qY29uc3QqLyBzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gPj4gPj4gPiA+PiAgICAgICBpZ2ktPmln aV9xaSA9IElHTVBfUUlfSU5JVDsNCj4gPj4gPj4gPiA+PiAgICAgICBpZ2ktPmlnaV9xcmkgPSBJ R01QX1FSSV9JTklUOw0KPiA+PiA+PiA+ID4+ICAgICAgIGlnaS0+aWdpX3VyaSA9IElHTVBfVVJJ X0lOSVQ7DQo+ID4+ID4+ID4gPj4gLSAgICAgU0xJU1RfSU5JVCgmaWdpLT5pZ2lfcmVsaW5taGVh ZCk7DQo+ID4+ID4+ID4gPj4gICAgICAgbWJ1ZnFfaW5pdCgmaWdpLT5pZ2lfZ3EsIElHTVBfTUFY X1JFU1BPTlNFX1BBQ0tFVFMpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgTElT VF9JTlNFUlRfSEVBRCgmVl9pZ2lfaGVhZCwgaWdpLCBpZ2lfbGluayk7DQo+ID4+ID4+ID4gPj4g QEAgLTYxMiwxMSArNjExLDEyIEBAIGlnbXBfaWZkZXRhY2goc3RydWN0IGlmbmV0ICppZnApDQo+ ID4+ID4+ID4gPj4gIHsNCj4gPj4gPj4gPiA+PiAgICAgICBzdHJ1Y3QgaWdtcF9pZnNvZnRjICAg ICAqaWdpOw0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAgICAgICppZm1h Ow0KPiA+PiA+PiA+ID4+IC0gICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm0sICp0aW5t Ow0KPiA+PiA+PiA+ID4+IC0NCj4gPj4gPj4gPiA+PiArICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAg ICAgICAqaW5tOw0KPiA+PiA+PiA+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0aV9oZWFkIGlubV9m cmVlX3RtcDsNCj4gPj4gPj4gPiA+PiAgICAgICBDVFIzKEtUUl9JR01QVjMsICIlczogY2FsbGVk IGZvciBpZnAgJXAoJXMpIiwgX19mdW5jX18sIGlmcCwNCj4gPj4gPj4gPiA+PiAgICAgICAgICAg aWZwLT5pZl94bmFtZSk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiArICAgICBTTElTVF9J TklUKCZpbm1fZnJlZV90bXApOw0KPiA+PiA+PiA+ID4+ICAgICAgIElHTVBfTE9DSygpOw0KPiA+ PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgaWdpID0gKChzdHJ1Y3QgaW5faWZpbmZvICop aWZwLT5pZl9hZmRhdGFbQUZfSU5FVF0pLT5paV9pZ21wOw0KPiA+PiA+PiA+ID4+IEBAIC02MzEs MjQgKzYzMSwxNSBAQCBpZ21wX2lmZGV0YWNoKHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+PiA+PiA+ ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCIlczogaWZtYV9wcm90b3NwZWMgaXMgTlVM TCIsIF9fZnVuY19fKSk7DQo+ID4+ID4+ID4gPj4gICNlbmRpZg0KPiA+PiA+PiA+ID4+ICAgICAg ICAgICAgICAgICAgICAgICBpbm0gPSAoc3RydWN0IGluX211bHRpICopaWZtYS0+aWZtYV9wcm90 b3NwZWM7DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgIGlmIChpbm0tPmlubV9z dGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSKSB7DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU0xJU1RfSU5TRVJUX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhlYWQs DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubSwgaW5t X25yZWxlKTsNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+PiA+PiA+ ID4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoaW5tLT5pbm1fc3RhdGUgPT0gSUdNUF9MRUFW SU5HX01FTUJFUikNCj4gPj4gPj4gPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bm1fcmVsZV9sb2NrZWQoJmlubV9mcmVlX3RtcCwgaW5tKTsNCj4gPj4gPj4gPiA+PiAgICAgICAg ICAgICAgICAgICAgICAgaW5tX2NsZWFyX3JlY29yZGVkKGlubSk7DQo+ID4+ID4+ID4gPj4gICAg ICAgICAgICAgICB9DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBJRl9BRERSX1JVTkxPQ0so aWZwKTsNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgIC8qDQo+ID4+ID4+ID4gPj4gLSAgICAg ICAgICAgICAgKiBGcmVlIHRoZSBpbl9tdWx0aSByZWZlcmVuY2UocykgZm9yIHRoaXMgSUdNUCBs aWZlY3ljbGUuDQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgKi8NCj4gPj4gPj4gPiA+PiAt ICAgICAgICAgICAgIFNMSVNUX0ZPUkVBQ0hfU0FGRShpbm0sICZpZ2ktPmlnaV9yZWxpbm1oZWFk LCBpbm1fbnJlbGUsDQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgdGlubSkgew0KPiA+ PiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaWdpLT5p Z2lfcmVsaW5taGVhZCwgaW5tX25yZWxlKTsNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgICAg ICAgICAgaW5tX3JlbGVhc2VfbG9ja2VkKGlubSk7DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAg ICB9DQo+ID4+ID4+ID4gPj4gKyAgICAgICAgICAgICBpbm1fcmVsZWFzZV9saXN0X2RlZmVycmVk KCZpbm1fZnJlZV90bXApOw0KPiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+PiAtDQo+ ID4+ID4+ID4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsNCj4gPj4gPj4gPiA+PiArDQo+ID4+ID4+ ID4gPj4gIH0NCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAvKg0KPiA+PiA+PiA+ID4+IEBA IC02ODQsMTEgKzY3NSw2IEBAIGlnaV9kZWxldGVfbG9ja2VkKGNvbnN0IHN0cnVjdCBpZm5ldCAq aWZwKQ0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICBtYnVmcV9kcmFpbigmaWdp LT5pZ2lfZ3EpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAg ICAgIExJU1RfUkVNT1ZFKGlnaSwgaWdpX2xpbmspOw0KPiA+PiA+PiA+ID4+IC0NCj4gPj4gPj4g PiA+PiAtICAgICAgICAgICAgICAgICAgICAgS0FTU0VSVChTTElTVF9FTVBUWSgmaWdpLT5pZ2lf cmVsaW5taGVhZCksDQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAoIiVz OiB0aGVyZSBhcmUgZGFuZ2xpbmcgaW5fbXVsdGkgcmVmZXJlbmNlcyIsDQo+ID4+ID4+ID4gPj4g LSAgICAgICAgICAgICAgICAgICAgICAgICBfX2Z1bmNfXykpOw0KPiA+PiA+PiA+ID4+IC0NCj4g Pj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgZnJlZShpZ2ksIE1fSUdNUCk7DQo+ID4+ ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCj4gPj4gPj4gPiA+PiAgICAg ICAgICAgICAgIH0NCj4gPj4gPj4gPiA+PiBAQCAtNzIyLDcgKzcwOCw3IEBAIGlnbXBfaW5wdXRf djFfcXVlcnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiA+PiA+PiA+ID4+ ICAgICAgIH0NCj4gPj4gPj4gPiA+PiAgICAgICBJR01QU1RBVF9JTkMoaWdwc19yY3ZfZ2VuX3F1 ZXJpZXMpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DSygp Ow0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiA+PiA+ID4+ ICAgICAgIElHTVBfTE9DSygpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgaWdp ID0gKChzdHJ1Y3QgaW5faWZpbmZvICopaWZwLT5pZl9hZmRhdGFbQUZfSU5FVF0pLT5paV9pZ21w Ow0KPiA+PiA+PiA+ID4+IEBAIC03NzgsNyArNzY0LDcgQEAgaWdtcF9pbnB1dF92MV9xdWVyeShz dHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlwDQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4g PiA+PiAgb3V0X2xvY2tlZDoNCj4gPj4gPj4gPiA+PiAgICAgICBJR01QX1VOTE9DSygpOw0KPiA+ PiA+PiA+ID4+IC0gICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiA+PiA+ID4+ICsgICAgIElO X01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBy ZXR1cm4gKDApOw0KPiA+PiA+PiA+ID4+ICB9DQo+ID4+ID4+ID4gPj4gQEAgLTgxNiw3ICs4MDIs NyBAQCBpZ21wX2lucHV0X3YyX3F1ZXJ5KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3Qg aXANCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIElHTVBTVEFUX0lOQyhpZ3BzX3Jjdl9ncm91 cF9xdWVyaWVzKTsNCj4gPj4gPj4gPiA+PiAgICAgICB9DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4g PiA+PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElf TElTVF9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gICAgICAgSUdNUF9MT0NLKCk7DQo+ID4+ID4+ID4g Pj4NCj4gPj4gPj4gPiA+PiAgICAgICBpZ2kgPSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlm X2FmZGF0YVtBRl9JTkVUXSktPmlpX2lnbXA7DQo+ID4+ID4+ID4gPj4gQEAgLTg3Miw3ICs4NTgs NyBAQCBpZ21wX2lucHV0X3YyX3F1ZXJ5KHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3Qg aXANCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICBvdXRfbG9ja2VkOg0KPiA+PiA+PiA+ID4+ ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfVU5MT0NL KCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPj4g PiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIHJldHVybiAoMCk7DQo+ID4+ID4+ID4gPj4gIH0NCj4g Pj4gPj4gPiA+PiBAQCAtODk5LDcgKzg4NSw3IEBAIGlnbXBfdjJfdXBkYXRlX2dyb3VwKHN0cnVj dCBpbl9tdWx0aSAqaW5tLCBjb25zdCBpbnQgdA0KPiA+PiA+PiA+ID4+ICAgICAgIENUUjQoS1RS X0lHTVBWMywgIjB4JTA4eDogJXMvJXMgdGltZXI9JWQiLCBfX2Z1bmNfXywNCj4gPj4gPj4gPiA+ PiAgICAgICAgICAgbnRvaGwoaW5tLT5pbm1fYWRkci5zX2FkZHIpLCBpbm0tPmlubV9pZnAtPmlm X3huYW1lLCB0aW1lcik7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxU SV9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19B U1NFUlQoKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIHN3aXRjaCAoaW5tLT5p bm1fc3RhdGUpIHsNCj4gPj4gPj4gPiA+PiAgICAgICBjYXNlIElHTVBfTk9UX01FTUJFUjoNCj4g Pj4gPj4gPiA+PiBAQCAtMTAxMSw3ICs5OTcsNyBAQCBpZ21wX2lucHV0X3YzX3F1ZXJ5KHN0cnVj dCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaXANCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAg ICAgICAgICAgSUdNUFNUQVRfSU5DKGlncHNfcmN2X2dzcl9xdWVyaWVzKTsNCj4gPj4gPj4gPiA+ PiAgICAgICB9DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NL KCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ID4+ID4g Pj4gICAgICAgSUdNUF9MT0NLKCk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBp Z2kgPSAoKHN0cnVjdCBpbl9pZmluZm8gKilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSktPmlpX2ln bXA7DQo+ID4+ID4+ID4gPj4gQEAgLTEwOTIsNyArMTA3OCw3IEBAIGlnbXBfaW5wdXRfdjNfcXVl cnkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpcA0KPiA+PiA+PiA+ID4+DQo+ID4+ ID4+ID4gPj4gIG91dF9sb2NrZWQ6DQo+ID4+ID4+ID4gPj4gICAgICAgSUdNUF9VTkxPQ0soKTsN Cj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4gPj4gPiA+PiArICAg ICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAg ICAgcmV0dXJuICgwKTsNCj4gPj4gPj4gPiA+PiAgfQ0KPiA+PiA+PiA+ID4+IEBAIC0xMTA5LDcg KzEwOTUsNyBAQCBpZ21wX2lucHV0X3YzX2dyb3VwX3F1ZXJ5KHN0cnVjdCBpbl9tdWx0aSAqaW5t LCBzdHJ1Y3QNCj4gPj4gPj4gPiA+PiAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmV0 dmFsOw0KPiA+PiA+PiA+ID4+ICAgICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBuc3JjOw0K PiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsN Cj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ ID4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4g Pj4gICAgICAgcmV0dmFsID0gMDsNCj4gPj4gPj4gPiA+PiBAQCAtMTI0Niw3ICsxMjMyLDcgQEAg aWdtcF9pbnB1dF92MV9yZXBvcnQoc3RydWN0IGlmbmV0ICppZnAsIC8qY29uc3QqLyBzdHJ1DQo+ ID4+ID4+ID4gPj4gICAgICAgICogSWYgd2UgYXJlIGEgbWVtYmVyIG9mIHRoaXMgZ3JvdXAsIGFu ZCBvdXIgbWVtYmVyc2hpcCBzaG91bGQgYmUNCj4gPj4gPj4gPiA+PiAgICAgICAgKiByZXBvcnRl ZCwgc3RvcCBvdXIgZ3JvdXAgdGltZXIgYW5kIHRyYW5zaXRpb24gdG8gdGhlICdsYXp5JyBzdGF0 ZS4NCj4gPj4gPj4gPiA+PiAgICAgICAgKi8NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9M T0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ID4+ ID4gPj4gICAgICAgaW5tID0gaW5tX2xvb2t1cChpZnAsIGlnbXAtPmlnbXBfZ3JvdXApOw0KPiA+ PiA+PiA+ID4+ICAgICAgIGlmIChpbm0gIT0gTlVMTCkgew0KPiA+PiA+PiA+ID4+ICAgICAgICAg ICAgICAgc3RydWN0IGlnbXBfaWZzb2Z0YyAqaWdpOw0KPiA+PiA+PiA+ID4+IEBAIC0xMzA1LDcg KzEyOTEsNyBAQCBpZ21wX2lucHV0X3YxX3JlcG9ydChzdHJ1Y3QgaWZuZXQgKmlmcCwgLypjb25z dCovIHN0cnUNCj4gPj4gPj4gPiA+PiAgICAgICB9DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+ PiAgb3V0X2xvY2tlZDoNCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4g Pj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+PiA+PiA+ID4+DQo+ ID4+ID4+ID4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPj4gPj4gPiA+PiAgfQ0KPiA+PiA+PiA+ ID4+IEBAIC0xMzczLDcgKzEzNTksNyBAQCBpZ21wX2lucHV0X3YyX3JlcG9ydChzdHJ1Y3QgaWZu ZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gPj4gPj4gPiA+PiAgICAgICAgKiByZXBvcnRlZCwg YW5kIG91ciBncm91cCB0aW1lciBpcyBwZW5kaW5nIG9yIGFib3V0IHRvIGJlIHJlc2V0LA0KPiA+ PiA+PiA+ID4+ICAgICAgICAqIHN0b3Agb3VyIGdyb3VwIHRpbWVyIGJ5IHRyYW5zaXRpb25pbmcg dG8gdGhlICdsYXp5JyBzdGF0ZS4NCj4gPj4gPj4gPiA+PiAgICAgICAgKi8NCj4gPj4gPj4gPiA+ PiAtICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElT VF9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gICAgICAgaW5tID0gaW5tX2xvb2t1cChpZnAsIGlnbXAt PmlnbXBfZ3JvdXApOw0KPiA+PiA+PiA+ID4+ICAgICAgIGlmIChpbm0gIT0gTlVMTCkgew0KPiA+ PiA+PiA+ID4+ICAgICAgICAgICAgICAgc3RydWN0IGlnbXBfaWZzb2Z0YyAqaWdpOw0KPiA+PiA+ PiA+ID4+IEBAIC0xNDE4LDcgKzE0MDQsNyBAQCBpZ21wX2lucHV0X3YyX3JlcG9ydChzdHJ1Y3Qg aWZuZXQgKmlmcCwgLypjb25zdCovIHN0cnUNCj4gPj4gPj4gPiA+PiAgICAgICB9DQo+ID4+ID4+ ID4gPj4NCj4gPj4gPj4gPiA+PiAgb3V0X2xvY2tlZDoNCj4gPj4gPj4gPiA+PiAtICAgICBJTl9N VUxUSV9VTkxPQ0soKTsNCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygp Ow0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPj4gPj4g PiA+PiAgfQ0KPiA+PiA+PiA+ID4+IEBAIC0xNjQ3LDYgKzE2MzMsNyBAQCBpZ21wX2Zhc3R0aW1v X3ZuZXQodm9pZCkNCj4gPj4gPj4gPiA+PiAgICAgICBzdHJ1Y3QgaWdtcF9pZnNvZnRjICAgICAq aWdpOw0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZm11bHRpYWRkciAgICAgICppZm1hOw0K PiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm07DQo+ID4+ID4+ ID4gPj4gKyAgICAgc3RydWN0IGluX211bHRpX2hlYWQgaW5tX2ZyZWVfdG1wOw0KPiA+PiA+PiA+ ID4+ICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICBsb29wLCB1cmlfZmFzdGh6Ow0KPiA+ PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgbG9vcCA9IDA7DQo+ID4+ID4+ID4gPj4gQEAg LTE2NjIsNyArMTY0OSw4IEBAIGlnbXBfZmFzdHRpbW9fdm5ldCh2b2lkKQ0KPiA+PiA+PiA+ID4+ ICAgICAgICAgICAhVl9zdGF0ZV9jaGFuZ2VfdGltZXJzX3J1bm5pbmcpDQo+ID4+ID4+ID4gPj4g ICAgICAgICAgICAgICByZXR1cm47DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJ Tl9NVUxUSV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgU0xJU1RfSU5JVCgmaW5tX2ZyZWVf dG1wKTsNCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4gPj4g PiA+PiAgICAgICBJR01QX0xPQ0soKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAg IC8qDQo+ID4+ID4+ID4gPj4gQEAgLTE3MjAsNyArMTcwOCw3IEBAIGlnbXBfZmFzdHRpbW9fdm5l dCh2b2lkKQ0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp Z2ktPmlnaV92ZXJzaW9uKTsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBJR01Q X1ZFUlNJT05fMzoNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp Z21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKGlnaSwgJnFycSwNCj4gPj4gPj4gPiA+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKCZp bm1fZnJlZV90bXAsDQo+ID4+ID4+ID4gPj4gJnFycSwgJnNjcSwgaW5tLCB1cmlfZmFzdGh6KTsN Cj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gPj4g Pj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+PiA+PiA+ID4+IEBAIC0xNzI4LDgg KzE3MTYsNiBAQCBpZ21wX2Zhc3R0aW1vX3ZuZXQodm9pZCkNCj4gPj4gPj4gPiA+PiAgICAgICAg ICAgICAgIElGX0FERFJfUlVOTE9DSyhpZnApOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4g ICAgICAgICAgICAgICBpZiAoaWdpLT5pZ2lfdmVyc2lvbiA9PSBJR01QX1ZFUlNJT05fMykgew0K PiA+PiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW5fbXVsdGkgICAgICAg ICAqdGlubTsNCj4gPj4gPj4gPiA+PiAtDQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAg ICAgIGlnbXBfZGlzcGF0Y2hfcXVldWUoJnFycSwgMCwgbG9vcCk7DQo+ID4+ID4+ID4gPj4gICAg ICAgICAgICAgICAgICAgICAgIGlnbXBfZGlzcGF0Y2hfcXVldWUoJnNjcSwgMCwgbG9vcCk7DQo+ ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiBAQCAtMTczNywxOCArMTcyMywxMyBAQCBpZ21wX2Zh c3R0aW1vX3ZuZXQodm9pZCkNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICog RnJlZSB0aGUgaW5fbXVsdGkgcmVmZXJlbmNlKHMpIGZvciB0aGlzDQo+ID4+ID4+ID4gPj4gICAg ICAgICAgICAgICAgICAgICAgICAqIElHTVAgbGlmZWN5Y2xlLg0KPiA+PiA+PiA+ID4+ICAgICAg ICAgICAgICAgICAgICAgICAgKi8NCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAg U0xJU1RfRk9SRUFDSF9TQUZFKGlubSwgJmlnaS0+aWdpX3JlbGlubWhlYWQsDQo+ID4+ID4+ID4g Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICBpbm1fbnJlbGUsIHRpbm0pIHsNCj4gPj4gPj4g PiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaWdp LT5pZ2lfcmVsaW5taGVhZCwNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW5tX25yZWxlKTsNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4gPj4gPiA+PiAtICAgICAgICAg ICAgICAgICAgICAgfQ0KPiA+PiA+PiA+ID4+ICsgICAgICAgICAgICAgICAgICAgICBpbm1fcmVs ZWFzZV9saXN0X2RlZmVycmVkKCZpbm1fZnJlZV90bXApOw0KPiA+PiA+PiA+ID4+ICAgICAgICAg ICAgICAgfQ0KPiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ ICBvdXRfbG9ja2VkOg0KPiA+PiA+PiA+ID4+ICAgICAgIElHTVBfVU5MT0NLKCk7DQo+ID4+ID4+ ID4gPj4gLSAgICAgSU5fTVVMVElfVU5MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVM VElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPj4gPiA+PiAgfQ0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ ID4gPj4gIC8qDQo+ID4+ID4+ID4gPj4gQEAgLTE3NjAsNyArMTc0MSw3IEBAIGlnbXBfdjF2Ml9w cm9jZXNzX2dyb3VwX3RpbWVyKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjbw0KPiA+PiA+PiA+ID4+ ICB7DQo+ID4+ID4+ID4gPj4gICAgICAgaW50IHJlcG9ydF90aW1lcl9leHBpcmVkOw0KPiA+PiA+ PiA+ID4+DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4g Pj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4g ICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAg ICAgaWYgKGlubS0+aW5tX3RpbWVyID09IDApIHsNCj4gPj4gPj4gPiA+PiBAQCAtMTgwMiwxNCAr MTc4MywxNCBAQCBpZ21wX3YxdjJfcHJvY2Vzc19ncm91cF90aW1lcihzdHJ1Y3QgaW5fbXVsdGkg KmlubSwNCj4gPj4gPj4gPiA+PiBjbw0KPiA+PiA+PiA+ID4+ICAgKiBOb3RlOiBVbmxvY2tlZCBy ZWFkIGZyb20gaWdpLg0KPiA+PiA+PiA+ID4+ICAgKi8NCj4gPj4gPj4gPiA+PiAgc3RhdGljIHZv aWQNCj4gPj4gPj4gPiA+PiAtaWdtcF92M19wcm9jZXNzX2dyb3VwX3RpbWVycyhzdHJ1Y3QgaWdt cF9pZnNvZnRjICppZ2ksDQo+ID4+ID4+ID4gPj4gK2lnbXBfdjNfcHJvY2Vzc19ncm91cF90aW1l cnMoc3RydWN0IGluX211bHRpX2hlYWQgKmlubWgsDQo+ID4+ID4+ID4gPj4gICAgICBzdHJ1Y3Qg bWJ1ZnEgKnFycSwgc3RydWN0IG1idWZxICpzY3EsDQo+ID4+ID4+ID4gPj4gICAgICBzdHJ1Y3Qg aW5fbXVsdGkgKmlubSwgY29uc3QgaW50IHVyaV9mYXN0aHopDQo+ID4+ID4+ID4gPj4gIHsNCj4g Pj4gPj4gPiA+PiAgICAgICBpbnQgcXVlcnlfcmVzcG9uc2VfdGltZXJfZXhwaXJlZDsNCj4gPj4g Pj4gPiA+PiAgICAgICBpbnQgc3RhdGVfY2hhbmdlX3JldHJhbnNtaXRfdGltZXJfZXhwaXJlZDsN Cj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7 DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ ID4+ICAgICAgIHF1ZXJ5X3Jlc3BvbnNlX3RpbWVyX2V4cGlyZWQgPSAwOw0KPiA+PiA+PiA+ID4+ IEBAIC0xOTA3LDggKzE4ODgsNyBAQCBpZ21wX3YzX3Byb2Nlc3NfZ3JvdXBfdGltZXJzKHN0cnVj dCBpZ21wX2lmc29mdGMgKmlnaSwNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAg aWYgKGlubS0+aW5tX3N0YXRlID09IElHTVBfTEVBVklOR19NRU1CRVIgJiYNCj4gPj4gPj4gPiA+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubS0+aW5tX3NjcnYgPT0gMCkgew0KPiA+PiA+ PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubS0+aW5tX3N0YXRlID0gSUdN UF9OT1RfTUVNQkVSOw0KPiA+PiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNMSVNUX0lOU0VSVF9IRUFEKCZpZ2ktPmlnaV9yZWxpbm1oZWFkLA0KPiA+PiA+PiA+ID4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm0sIGlubV9ucmVsZSk7DQo+ID4+ID4+ ID4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5tX3JlbGVfbG9ja2VkKGlubWgs IGlubSk7DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgIH0NCj4gPj4gPj4gPiA+ PiAgICAgICAgICAgICAgIH0NCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIGJyZWFrOw0KPiA+ PiA+PiA+ID4+IEBAIC0xOTI5LDcgKzE5MDksNyBAQCBzdGF0aWMgdm9pZA0KPiA+PiA+PiA+ID4+ ICBpZ21wX3YzX3N1cHByZXNzX2dyb3VwX3JlY29yZChzdHJ1Y3QgaW5fbXVsdGkgKmlubSkNCj4g Pj4gPj4gPiA+PiAgew0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElf TE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNT RVJUKCk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBLQVNTRVJUKGlubS0+aW5t X2lnaS0+aWdpX3ZlcnNpb24gPT0gSUdNUF9WRVJTSU9OXzMsDQo+ID4+ID4+ID4gPj4gICAgICAg ICAgICAgICAoIiVzOiBub3QgSUdNUHYzIG1vZGUgb24gbGluayIsIF9fZnVuY19fKSk7DQo+ID4+ ID4+ID4gPj4gQEAgLTIwMDMsMTMgKzE5ODMsMTUgQEAgaWdtcF92M19jYW5jZWxfbGlua190aW1l cnMoc3RydWN0IGlnbXBfaWZzb2Z0YyAqaWdpKQ0KPiA+PiA+PiA+ID4+ICB7DQo+ID4+ID4+ID4g Pj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICAgICAgKmlmbWE7DQo+ID4+ID4+ID4gPj4gICAg ICAgc3RydWN0IGlmbmV0ICAgICAgICAgICAgKmlmcDsNCj4gPj4gPj4gPiA+PiAtICAgICBzdHJ1 Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tLCAqdGlubTsNCj4gPj4gPj4gPiA+PiArICAgICBzdHJ1 Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tOw0KPiA+PiA+PiA+ID4+ICsgICAgIHN0cnVjdCBpbl9t dWx0aV9oZWFkIGlubV9mcmVlX3RtcDsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAg IENUUjMoS1RSX0lHTVBWMywgIiVzOiBjYW5jZWwgdjMgdGltZXJzIG9uIGlmcCAlcCglcykiLCBf X2Z1bmNfXywNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgaWdpLT5pZ2lfaWZwLCBpZ2ktPmlnaV9p ZnAtPmlmX3huYW1lKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElOX01VTFRJ X0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FT U0VSVCgpOw0KPiA+PiA+PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4g PiA+PiArICAgICBTTElTVF9JTklUKCZpbm1fZnJlZV90bXApOw0KPiA+PiA+PiA+ID4+DQo+ID4+ ID4+ID4gPj4gICAgICAgLyoNCj4gPj4gPj4gPiA+PiAgICAgICAgKiBTdG9wIHRoZSB2MyBHZW5l cmFsIFF1ZXJ5IFJlc3BvbnNlIG9uIHRoaXMgbGluayBzdG9uZSBkZWFkLg0KPiA+PiA+PiA+ID4+ IEBAIC0yMDUwLDcgKzIwMzIsNyBAQCBpZ21wX3YzX2NhbmNlbF9saW5rX3RpbWVycyhzdHJ1Y3Qg aWdtcF9pZnNvZnRjICppZ2kpDQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICAq IG1lc3NhZ2UgaXMgc2VudCB1cHN0cmVhbSB0byB0aGUgb2xkIHF1ZXJpZXIgLS0NCj4gPj4gPj4g PiA+PiAgICAgICAgICAgICAgICAgICAgICAgICogdHJhbnNpdGlvbiB0byBOT1Qgd291bGQgbG9z ZSB0aGUgbGVhdmUgYW5kIHJhY2UuDQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICAgICAgICAg ICAqLw0KPiA+PiA+PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBTTElTVF9JTlNFUlRfSEVB RCgmaWdpLT5pZ2lfcmVsaW5taGVhZCwgaW5tLA0KPiA+PiA+PiA+ID4+IGlubV9ucmVsZSk7DQo+ ID4+ID4+ID4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGlubV9yZWxlX2xvY2tlZCgmaW5tX2Zy ZWVfdG1wLCBpbm0pOw0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxM VEhST1VHSCAqLw0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgY2FzZSBJR01QX0dfUVVFUllf UEVORElOR19NRU1CRVI6DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBjYXNlIElHTVBfU0df UVVFUllfUEVORElOR19NRU1CRVI6DQo+ID4+ID4+ID4gPj4gQEAgLTIwNjksMTAgKzIwNTEsOCBA QCBpZ21wX3YzX2NhbmNlbF9saW5rX3RpbWVycyhzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZ2kpDQo+ ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBtYnVmcV9kcmFpbigmaW5tLT5pbm1fc2NxKTsNCj4g Pj4gPj4gPiA+PiAgICAgICB9DQo+ID4+ID4+ID4gPj4gICAgICAgSUZfQUREUl9SVU5MT0NLKGlm cCk7DQo+ID4+ID4+ID4gPj4gLSAgICAgU0xJU1RfRk9SRUFDSF9TQUZFKGlubSwgJmlnaS0+aWdp X3JlbGlubWhlYWQsIGlubV9ucmVsZSwgdGlubSkgew0KPiA+PiA+PiA+ID4+IC0gICAgICAgICAg ICAgU0xJU1RfUkVNT1ZFX0hFQUQoJmlnaS0+aWdpX3JlbGlubWhlYWQsIGlubV9ucmVsZSk7DQo+ ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4g Pj4gPiA+PiAtICAgICB9DQo+ID4+ID4+ID4gPj4gKw0KPiA+PiA+PiA+ID4+ICsgICAgIGlubV9y ZWxlYXNlX2xpc3RfZGVmZXJyZWQoJmlubV9mcmVlX3RtcCk7DQo+ID4+ID4+ID4gPj4gIH0NCj4g Pj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAvKg0KPiA+PiA+PiA+ID4+IEBAIC0yMTk5LDcgKzIx NzksNyBAQCBpZ21wX3YxdjJfcXVldWVfcmVwb3J0KHN0cnVjdCBpbl9tdWx0aSAqaW5tLCBjb25z dCBpbnQNCj4gPj4gPj4gPiA+PiAgICAgICBzdHJ1Y3QgaXAgICAgICAgICAgICAgICAqaXA7DQo+ ID4+ID4+ID4gPj4gICAgICAgc3RydWN0IG1idWYgICAgICAgICAgICAgKm07DQo+ID4+ID4+ID4g Pj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiAgICAg ICBJR01QX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBp ZnAgPSBpbm0tPmlubV9pZnA7DQo+ID4+ID4+ID4gPj4gQEAgLTIyNzYsMTAgKzIyNTYsOCBAQCBp Z21wX2NoYW5nZV9zdGF0ZShzdHJ1Y3QgaW5fbXVsdGkgKmlubSkNCj4gPj4gPj4gPiA+PiAgICAg ICBzdHJ1Y3QgaWZuZXQgKmlmcDsNCj4gPj4gPj4gPiA+PiAgICAgICBpbnQgZXJyb3I7DQo+ID4+ ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ PiA+PiA+ID4+IC0NCj4gPj4gPj4gPiA+PiAgICAgICBlcnJvciA9IDA7DQo+ID4+ID4+ID4gPj4g LQ0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4g Pj4gICAgICAgLyoNCj4gPj4gPj4gPiA+PiAgICAgICAgKiBUcnkgdG8gZGV0ZWN0IGlmIHRoZSB1 cHBlciBsYXllciBqdXN0IGFza2VkIHVzIHRvIGNoYW5nZSBzdGF0ZQ0KPiA+PiA+PiA+ID4+ICAg ICAgICAqIGZvciBhbiBpbnRlcmZhY2Ugd2hpY2ggaGFzIG5vdyBnb25lIGF3YXkuDQo+ID4+ID4+ ID4gPj4gQEAgLTIzNzksOSArMjM1NywxMCBAQCBpZ21wX2luaXRpYWxfam9pbihzdHJ1Y3QgaW5f bXVsdGkgKmlubSwgc3RydWN0IGlnbXBfaWYNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAq IGdyb3VwIGFyb3VuZCBmb3IgdGhlIGZpbmFsIElOQ0xVREUge30gZW5xdWV1ZS4NCj4gPj4gPj4g PiA+PiAgICAgICAgICAgICAgICAqLw0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgaWYgKGln aS0+aWdpX3ZlcnNpb24gPT0gSUdNUF9WRVJTSU9OXzMgJiYNCj4gPj4gPj4gPiA+PiAtICAgICAg ICAgICAgICAgICBpbm0tPmlubV9zdGF0ZSA9PSBJR01QX0xFQVZJTkdfTUVNQkVSKQ0KPiA+PiA+ PiA+ID4+IC0gICAgICAgICAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4g Pj4gPj4gPiA+PiAtDQo+ID4+ID4+ID4gPj4gKyAgICAgICAgICAgICAgICAgaW5tLT5pbm1fc3Rh dGUgPT0gSUdNUF9MRUFWSU5HX01FTUJFUikgew0KPiA+PiA+PiA+ID4+ICsgICAgICAgICAgICAg ICAgICAgICBNUEFTUyhpbm0tPmlubV9yZWZjb3VudCA+IDEpOw0KPiA+PiA+PiA+ID4+ICsgICAg ICAgICAgICAgICAgICAgICBpbm1fcmVsZV9sb2NrZWQoTlVMTCwgaW5tKTsNCj4gPj4gPj4gPiA+ PiArICAgICAgICAgICAgIH0NCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIGlubS0+aW5tX3N0 YXRlID0gSUdNUF9SRVBPUlRJTkdfTUVNQkVSOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4g ICAgICAgICAgICAgICBzd2l0Y2ggKGlnaS0+aWdpX3ZlcnNpb24pIHsNCj4gPj4gPj4gPiA+PiBA QCAtMjQ3Myw3ICsyNDUyLDcgQEAgaWdtcF9oYW5kbGVfc3RhdGVfY2hhbmdlKHN0cnVjdCBpbl9t dWx0aSAqaW5tLCBzdHJ1Y3QNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIGlmcCA9 IGlubS0+aW5tX2lmcDsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElOX01VTFRJ X0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FT U0VSVCgpOw0KPiA+PiA+PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4g PiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIEtBU1NFUlQoaWdpICYmIGlnaS0+aWdpX2lmcCA9PSBp ZnAsICgiJXM6IGluY29uc2lzdGVudCBpZnAiLA0KPiA+PiA+PiA+ID4+IF9fZnVuY19fKSk7IEBA IC0yNTMxLDcgKzI1MTAsNyBAQCBpZ21wX2ZpbmFsX2xlYXZlKHN0cnVjdCBpbl9tdWx0aSAqaW5t LA0KPiA+PiA+PiA+ID4+IHN0cnVjdCBpZ21wX2lmcyBfX2Z1bmNfXywgbnRvaGwoaW5tLT5pbm1f YWRkci5zX2FkZHIpLCBpbm0tPmlubV9pZnAsDQo+ID4+ID4+ID4gPj4gICAgICAgICAgIGlubS0+ aW5tX2lmcC0+aWZfeG5hbWUpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5f TVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX0xP Q0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gICAgICAgSUdNUF9MT0NLX0FTU0VSVCgpOw0KPiA+ PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgc3dpdGNoIChpbm0tPmlubV9zdGF0ZSkgew0K PiA+PiA+PiA+ID4+IEBAIC0yNjU4LDcgKzI2MzcsNyBAQCBpZ21wX3YzX2VucXVldWVfZ3JvdXBf cmVjb3JkKHN0cnVjdCBtYnVmcSAqbXEsIHN0cnVjdA0KPiA+PiA+PiA+ID4+ICAgICAgIGluX2Fk ZHJfdCAgICAgICAgICAgICAgICBuYWRkcjsNCj4gPj4gPj4gPiA+PiAgICAgICB1aW50OF90ICAg ICAgICAgICAgICAgICAgbW9kZTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElO X01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9M T0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgZXJyb3IgPSAw Ow0KPiA+PiA+PiA+ID4+ICAgICAgIGlmcCA9IGlubS0+aW5tX2lmcDsNCj4gPj4gPj4gPiA+PiBA QCAtMzAxOCw3ICsyOTk3LDcgQEAgaWdtcF92M19lbnF1ZXVlX2ZpbHRlcl9jaGFuZ2Uoc3RydWN0 IG1idWZxICptcSwgc3RydWN0DQo+ID4+ID4+ID4gPj4gICAgICAgdWludDhfdCAgICAgICAgICAg ICAgICAgIG1vZGUsIG5vdywgdGhlbjsNCj4gPj4gPj4gPiA+PiAgICAgICByZWN0eXBlX3QgICAg ICAgICAgICAgICAgY3J0LCBkcnQsIG5ydDsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0g ICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElf TElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgaWYg KGlubS0+aW5tX25zcmMgPT0gMCB8fA0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAoaW5tLT5pbm1f c3RbMF0uaXNzX2FzbSA+IDAgJiYgaW5tLT5pbm1fc3RbMV0uaXNzX2FzbSA+IDApKQ0KPiA+PiA+ PiA+ID4+IEBAIC0zMjIxLDcgKzMyMDAsNyBAQCBpZ21wX3YzX21lcmdlX3N0YXRlX2NoYW5nZXMo c3RydWN0IGluX211bHRpICppbm0sIHN0cnUNCj4gPj4gPj4gPiA+PiAgICAgICBkb21lcmdlID0g MDsNCj4gPj4gPj4gPiA+PiAgICAgICByZWNzbGVuID0gMDsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+ PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAg SU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+ICAgICAgIElHTVBfTE9D S19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIC8qDQo+ID4+ID4+ ID4gPj4gQEAgLTMzMjAsNyArMzI5OSw3IEBAIGlnbXBfdjNfZGlzcGF0Y2hfZ2VuZXJhbF9xdWVy eShzdHJ1Y3QgaWdtcF9pZnNvZnRjICppZw0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpbl9t dWx0aSAgICAgICAgICppbm07DQo+ID4+ID4+ID4gPj4gICAgICAgaW50ICAgICAgICAgICAgICAg ICAgICAgIHJldHZhbCwgbG9vcDsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElO X01VTFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9M T0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+ICAgICAgIElHTVBfTE9DS19BU1NFUlQoKTsNCj4g Pj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIEtBU1NFUlQoaWdpLT5pZ2lfdmVyc2lvbiA9 PSBJR01QX1ZFUlNJT05fMywNCj4gPj4gPj4gPiA+PiBAQCAtMzYzMiw3ICszNjExLDYgQEAgREJf U0hPV19DT01NQU5EKGlnaV9saXN0LCBkYl9zaG93X2lnaV9saXN0KQ0KPiA+PiA+PiA+ID4+ICAg ICAgICAgICAgICAgZGJfcHJpbnRmKCIgICAgcWkgJXVcbiIsIGlnaS0+aWdpX3FpKTsNCj4gPj4g Pj4gPiA+PiAgICAgICAgICAgICAgIGRiX3ByaW50ZigiICAgIHFyaSAldVxuIiwgaWdpLT5pZ2lf cXJpKTsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIGRiX3ByaW50ZigiICAgIHVyaSAldVxu IiwgaWdpLT5pZ2lfdXJpKTsNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAgIC8qIFNMSVNUX0hF QUQoLGluX211bHRpKSAgIGlnaV9yZWxpbm1oZWFkICovDQo+ID4+ID4+ID4gPj4gICAgICAgICAg ICAgICAvKiBzdHJ1Y3QgbWJ1ZnEgICAgaWdpX2dxOyAqLw0KPiA+PiA+PiA+ID4+ICAgICAgICAg ICAgICAgZGJfcHJpbnRmKCJcbiIpOw0KPiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+ Pg0KPiA+PiA+PiA+ID4+IE1vZGlmaWVkOiBoZWFkL3N5cy9uZXRpbmV0L2lnbXBfdmFyLmgNCj4g Pj4gPj4gPiA+PiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4gPj4gPiA+PiAtLS0gaGVhZC9z eXMvbmV0aW5ldC9pZ21wX3Zhci5oICAgICAgIFdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOA0KPiA+ PiA+PiA+ID4+IChyMzMzMTc0KSArKysgaGVhZC9zeXMvbmV0aW5ldC9pZ21wX3Zhci5oICAgICAg IFdlZCBNYXkgIDIgMTk6MzY6MjkNCj4gPj4gPj4gPiA+PiAyMDE4ICAgICAgICAocjMzMzE3NSkg QEAgLTIxNCw3ICsyMTQsNiBAQCBzdHJ1Y3QgaWdtcF9pZnNvZnRjIHsNCj4gPj4gPj4gPiA+PiAg ICAgICB1aW50MzJfdCBpZ2lfcWk7ICAgICAgICAvKiBJR01QdjMgUXVlcnkgSW50ZXJ2YWwgKHMp ICovDQo+ID4+ID4+ID4gPj4gICAgICAgdWludDMyX3QgaWdpX3FyaTsgICAgICAgLyogSUdNUHYz IFF1ZXJ5IFJlc3BvbnNlIEludGVydmFsIChzKSAqLw0KPiA+PiA+PiA+ID4+ICAgICAgIHVpbnQz Ml90IGlnaV91cmk7ICAgICAgIC8qIElHTVB2MyBVbnNvbGljaXRlZCBSZXBvcnQgSW50ZXJ2YWwg KHMpICovDQo+ID4+ID4+ID4gPj4gLSAgICAgU0xJU1RfSEVBRCgsaW5fbXVsdGkpICAgaWdpX3Jl bGlubWhlYWQ7IC8qIHJlbGVhc2VkIGdyb3VwcyAqLw0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVj dCBtYnVmcSAgICBpZ2lfZ3E7ICAgICAgICAgLyogZ2VuZXJhbCBxdWVyeSByZXNwb25zZXMgcXVl dWUgKi8NCj4gPj4gPj4gPiA+PiAgfTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+DQo+ID4+ ID4+ID4gPj4gTW9kaWZpZWQ6IGhlYWQvc3lzL25ldGluZXQvaW4uYw0KPiA+PiA+PiA+ID4+ID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQ0KPiA+PiA+PiA+ID4+IC0tLSBoZWFkL3N5cy9uZXRpbmV0L2lu LmMgICAgIFdlZCBNYXkgIDIgMTc6NDE6MDAgMjAxOCAgICAgICAgKHIzMzMxNzQpDQo+ID4+ID4+ ID4gPj4gKysrIGhlYWQvc3lzL25ldGluZXQvaW4uYyAgICAgV2VkIE1heSAgMiAxOTozNjoyOSAy MDE4ICAgICAgICAocjMzMzE3NSkNCj4gPj4gPj4gPiA+PiBAQCAtNjMyLDEyICs2MzIsMTAgQEAg aW5fZGlmYWRkcl9pb2N0bCh1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEsIHN0cnVjdCBpZm5lDQo+ ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBzdHJ1Y3QgaW5faWZpbmZvICppaTsNCj4gPj4gPj4g PiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgaWkgPSAoKHN0cnVjdCBpbl9pZmluZm8g KilpZnAtPmlmX2FmZGF0YVtBRl9JTkVUXSk7DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICBJ Tl9NVUxUSV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBpZiAoaWktPmlpX2Fs bGhvc3RzKSB7DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgICAgICh2b2lkKWluX2xl YXZlZ3JvdXBfbG9ja2VkKGlpLT5paV9hbGxob3N0cywgTlVMTCk7DQo+ID4+ID4+ID4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICh2b2lkKWluX2xlYXZlZ3JvdXAoaWktPmlpX2FsbGhvc3RzLCBO VUxMKTsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgaWktPmlpX2FsbGhvc3Rz ID0gTlVMTDsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIH0NCj4gPj4gPj4gPiA+PiAtICAg ICAgICAgICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4g Pj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIElGX0FERFJfV0xPQ0soaWZwKTsNCj4gPj4gPj4g PiA+PiBAQCAtOTk0LDExICs5OTIsMTIgQEAgaW5fYnJvYWRjYXN0KHN0cnVjdCBpbl9hZGRyIGlu LCBzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gPj4gPj4gPiA+PiAgdm9pZA0KPiA+PiA+PiA+ID4+ICBp bl9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKmlmcCkNCj4gPj4gPj4gPiA+PiAgew0KPiA+PiA+PiA+ ID4+IC0NCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4g ICAgICAgaW5fcGNicHVyZ2VpZjAoJlZfcmlwY2JpbmZvLCBpZnApOw0KPiA+PiA+PiA+ID4+ICAg ICAgIGluX3BjYnB1cmdlaWYwKCZWX3VkYmluZm8sIGlmcCk7DQo+ID4+ID4+ID4gPj4gICAgICAg aW5fcGNicHVyZ2VpZjAoJlZfdWxpdGVjYmluZm8sIGlmcCk7DQo+ID4+ID4+ID4gPj4gICAgICAg aW5fcHVyZ2VtYWRkcnMoaWZwKTsNCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9VTkxPQ0so KTsNCj4gPj4gPj4gPiA+PiAgfQ0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gIC8qDQo+ID4+ ID4+ID4gPj4gQEAgLTEwMTEsMTIgKzEwMTAsMTIgQEAgaW5faWZkZXRhY2goc3RydWN0IGlmbmV0 ICppZnApDQo+ID4+ID4+ID4gPj4gIHN0YXRpYyB2b2lkDQo+ID4+ID4+ID4gPj4gIGluX3B1cmdl bWFkZHJzKHN0cnVjdCBpZm5ldCAqaWZwKQ0KPiA+PiA+PiA+ID4+ICB7DQo+ID4+ID4+ID4gPj4g LSAgICAgTElTVF9IRUFEKCxpbl9tdWx0aSkgcHVyZ2Vpbm1zOw0KPiA+PiA+PiA+ID4+IC0gICAg IHN0cnVjdCBpbl9tdWx0aSAgICAgICAgICppbm0sICp0aW5tOw0KPiA+PiA+PiA+ID4+ICsgICAg IHN0cnVjdCBpbl9tdWx0aV9oZWFkIHB1cmdlaW5tczsNCj4gPj4gPj4gPiA+PiArICAgICBzdHJ1 Y3QgaW5fbXVsdGkgICAgICAgICAqaW5tOw0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpZm11 bHRpYWRkciAgICAgICppZm1hOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gLSAgICAgTElT VF9JTklUKCZwdXJnZWlubXMpOw0KPiA+PiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0soKTsN Cj4gPj4gPj4gPiA+PiArICAgICBTTElTVF9JTklUKCZwdXJnZWlubXMpOw0KPiA+PiA+PiA+ID4+ ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4g ICAgICAgLyoNCj4gPj4gPj4gPiA+PiAgICAgICAgKiBFeHRyYWN0IGxpc3Qgb2YgaW5fbXVsdGkg YXNzb2NpYXRlZCB3aXRoIHRoZSBkZXRhY2hpbmcgaWZwDQo+ID4+ID4+ID4gPj4gQEAgLTEwMzQs MTcgKzEwMzMsMTMgQEAgaW5fcHVyZ2VtYWRkcnMoc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ID4+ ID4gPj4gICAgICAgICAgICAgICAgICAgKCIlczogaWZtYV9wcm90b3NwZWMgaXMgTlVMTCIsIF9f ZnVuY19fKSk7DQo+ID4+ID4+ID4gPj4gICNlbmRpZg0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAg ICAgaW5tID0gKHN0cnVjdCBpbl9tdWx0aSAqKWlmbWEtPmlmbWFfcHJvdG9zcGVjOw0KPiA+PiA+ PiA+ID4+IC0gICAgICAgICAgICAgTElTVF9JTlNFUlRfSEVBRCgmcHVyZ2Vpbm1zLCBpbm0sIGlu bV9saW5rKTsNCj4gPj4gPj4gPiA+PiArICAgICAgICAgICAgIGlubV9yZWxlX2xvY2tlZCgmcHVy Z2Vpbm1zLCBpbm0pOw0KPiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+PiAgICAgICBJ Rl9BRERSX1JVTkxPQ0soaWZwKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIExJ U1RfRk9SRUFDSF9TQUZFKGlubSwgJnB1cmdlaW5tcywgaW5tX2xpbmssIHRpbm0pIHsNCj4gPj4g Pj4gPiA+PiAtICAgICAgICAgICAgIExJU1RfUkVNT1ZFKGlubSwgaW5tX2xpbmspOw0KPiA+PiA+ PiA+ID4+IC0gICAgICAgICAgICAgaW5tX3JlbGVhc2VfbG9ja2VkKGlubSk7DQo+ID4+ID4+ID4g Pj4gLSAgICAgfQ0KPiA+PiA+PiA+ID4+ICsgICAgIGlubV9yZWxlYXNlX2xpc3RfZGVmZXJyZWQo JnB1cmdlaW5tcyk7DQo+ID4+ID4+ID4gPj4gICAgICAgaWdtcF9pZmRldGFjaChpZnApOw0KPiA+ PiA+PiA+ID4+IC0NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9VTkxPQ0soKTsNCj4gPj4g Pj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+PiA+PiA+ID4+ICB9DQo+ ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgc3RydWN0IGluX2xsZW50cnkgew0KPiA+PiA+PiA+ ID4+DQo+ID4+ID4+ID4gPj4gTW9kaWZpZWQ6IGhlYWQvc3lzL25ldGluZXQvaW5fbWNhc3QuYw0K PiA+PiA+PiA+ID4+ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PiA+PiA+ID4+IC0tLSBoZWFk L3N5cy9uZXRpbmV0L2luX21jYXN0LmMgICAgICAgV2VkIE1heSAgMiAxNzo0MTowMCAyMDE4DQo+ ID4+ID4+ID4gPj4gKHIzMzMxNzQpICsrKyBoZWFkL3N5cy9uZXRpbmV0L2luX21jYXN0LmMgICAg ICAgV2VkIE1heSAgMiAxOTozNjoyOQ0KPiA+PiA+PiA+ID4+IDIwMTggICAgICAgIChyMzMzMTc1 KSBAQCAtNTEsNiArNTEsNyBAQCBfX0ZCU0RJRCgiJEZyZWVCU0QkIik7DQo+ID4+ID4+ID4gPj4g ICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQo+ID4+ID4+ID4gPj4gICNpbmNsdWRlIDxzeXMva3Ry Lmg+DQo+ID4+ID4+ID4gPj4gICNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+DQo+ID4+ID4+ID4g Pj4gKyNpbmNsdWRlIDxzeXMvZ3Rhc2txdWV1ZS5oPg0KPiA+PiA+PiA+ID4+ICAjaW5jbHVkZSA8 c3lzL3RyZWUuaD4NCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAjaW5jbHVkZSA8bmV0L2lm Lmg+DQo+ID4+ID4+ID4gPj4gQEAgLTU5LDYgKzYwLDggQEAgX19GQlNESUQoIiRGcmVlQlNEJCIp Ow0KPiA+PiA+PiA+ID4+ICAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQo+ID4+ID4+ID4gPj4gICNp bmNsdWRlIDxuZXQvdm5ldC5oPg0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gKyNpbmNsdWRl IDxuZXQvZXRoZXJuZXQuaD4NCj4gPj4gPj4gPiA+PiArDQo+ID4+ID4+ID4gPj4gICNpbmNsdWRl IDxuZXRpbmV0L2luLmg+DQo+ID4+ID4+ID4gPj4gICNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3Rt Lmg+DQo+ID4+ID4+ID4gPj4gICNpbmNsdWRlIDxuZXRpbmV0L2luX2ZpYi5oPg0KPiA+PiA+PiA+ ID4+IEBAIC05MSwxOCArOTQsMjQgQEAgc3RhdGljIE1BTExPQ19ERUZJTkUoTV9JUE1TT1VSQ0Us ICJpcF9tc291cmNlIiwNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAvKg0KPiA+PiA+PiA+ ID4+ICAgKiBMb2NraW5nOg0KPiA+PiA+PiA+ID4+IC0gKiAtIExvY2sgb3JkZXIgaXM6IEdpYW50 LCBJTlBfV0xPQ0ssIElOX01VTFRJX0xPQ0ssIElHTVBfTE9DSywNCj4gPj4gPj4gPiA+PiBJRl9B RERSX0xPQ0suDQo+ID4+ID4+ID4gPj4gKyAqIC0gTG9jayBvcmRlciBpczogR2lhbnQsIElOUF9X TE9DSywgSU5fTVVMVElfTElTVF9MT0NLLCBJR01QX0xPQ0ssDQo+ID4+ID4+ID4gPj4gSUZfQURE Ul9MT0NLLg0KPiA+PiA+PiA+ID4+ICAgKiAtIFRoZSBJRl9BRERSX0xPQ0sgaXMgaW1wbGljaXRs eSB0YWtlbiBieSBpbm1fbG9va3VwKCkgZWFybGllciwgaG93ZXZlcg0KPiA+PiA+PiA+ID4+ICAg KiAgIGl0IGNhbiBiZSB0YWtlbiBieSBjb2RlIGluIG5ldC9pZi5jIGFsc28uDQo+ID4+ID4+ID4g Pj4gICAqIC0gaXBfbW9wdGlvbnMgYW5kIGluX21maWx0ZXIgYXJlIGNvdmVyZWQgYnkgdGhlIElO UF9XTE9DSy4NCj4gPj4gPj4gPiA+PiAgICoNCj4gPj4gPj4gPiA+PiAtICogc3RydWN0IGluX211 bHRpIGlzIGNvdmVyZWQgYnkgSU5fTVVMVElfTE9DSy4gVGhlcmUgaXNuJ3Qgc3RyaWN0bHkNCj4g Pj4gPj4gPiA+PiArICogc3RydWN0IGluX211bHRpIGlzIGNvdmVyZWQgYnkgSU5fTVVMVElfTElT VF9MT0NLLiBUaGVyZSBpc24ndCBzdHJpY3RseQ0KPiA+PiA+PiA+ID4+ICAgKiBhbnkgbmVlZCBm b3IgaW5fbXVsdGkgaXRzZWxmIHRvIGJlIHZpcnR1YWxpemVkIC0tIGl0IGlzIGJvdW5kIHRvIGFu IGlmcA0KPiA+PiA+PiA+ID4+ICAgKiBhbnl3YXkgbm8gbWF0dGVyIHdoYXQgaGFwcGVucy4NCj4g Pj4gPj4gPiA+PiAgICovDQo+ID4+ID4+ID4gPj4gLXN0cnVjdCBtdHggaW5fbXVsdGlfbXR4Ow0K PiA+PiA+PiA+ID4+IC1NVFhfU1lTSU5JVChpbl9tdWx0aV9tdHgsICZpbl9tdWx0aV9tdHgsICJp bl9tdWx0aV9tdHgiLCBNVFhfREVGKTsNCj4gPj4gPj4gPiA+PiArc3RydWN0IG10eCBpbl9tdWx0 aV9saXN0X210eDsNCj4gPj4gPj4gPiA+PiArTVRYX1NZU0lOSVQoaW5fbXVsdGlfbXR4LCAmaW5f bXVsdGlfbGlzdF9tdHgsICJpbl9tdWx0aV9saXN0X210eCIsIE1UWF9ERUYpOw0KPiA+PiA+PiA+ ID4+DQo+ID4+ID4+ID4gPj4gK3N0cnVjdCBtdHggaW5fbXVsdGlfZnJlZV9tdHg7DQo+ID4+ID4+ ID4gPj4gK01UWF9TWVNJTklUKGluX211bHRpX2ZyZWVfbXR4LCAmaW5fbXVsdGlfZnJlZV9tdHgs ICJpbl9tdWx0aV9mcmVlX210eCIsDQo+ID4+ID4+ID4gPj4gTVRYX0RFRik7ICsNCj4gPj4gPj4g PiA+PiArc3RydWN0IHN4IGluX211bHRpX3N4Ow0KPiA+PiA+PiA+ID4+ICtTWF9TWVNJTklUKGlu X211bHRpX3N4LCAmaW5fbXVsdGlfc3gsICJpbl9tdWx0aV9zeCIpOw0KPiA+PiA+PiA+ID4+ICsN Cj4gPj4gPj4gPiA+PiAgLyoNCj4gPj4gPj4gPiA+PiAgICogRnVuY3Rpb25zIHdpdGggbm9uLXN0 YXRpYyBsaW5rYWdlIGRlZmluZWQgaW4gdGhpcyBmaWxlIHNob3VsZCBiZQ0KPiA+PiA+PiA+ID4+ ICAgKiBkZWNsYXJlZCBpbiBpbl92YXIuaDoNCj4gPj4gPj4gPiA+PiBAQCAtMTUxLDYgKzE2MCw3 IEBAIHN0YXRpYyBpbnQgICAgICAgIGlubV9pc19pZnBfZGV0YWNoZWQoY29uc3Qgc3RydWN0DQo+ ID4+ID4+ID4gPj4gaW5fbXVsdGkNCj4gPj4gPj4gPiA+PiAqIHN0YXRpYyBpbnQgICBpbm1fbWVy Z2Uoc3RydWN0IGluX211bHRpICosIC8qY29uc3QqLyBzdHJ1Y3QgaW5fbWZpbHRlciAqKTsNCj4g Pj4gPj4gPiA+PiAgc3RhdGljIHZvaWQgIGlubV9wdXJnZShzdHJ1Y3QgaW5fbXVsdGkgKik7DQo+ ID4+ID4+ID4gPj4gIHN0YXRpYyB2b2lkICBpbm1fcmVhcChzdHJ1Y3QgaW5fbXVsdGkgKik7DQo+ ID4+ID4+ID4gPj4gK3N0YXRpYyB2b2lkIGlubV9yZWxlYXNlKHN0cnVjdCBpbl9tdWx0aSAqKTsN Cj4gPj4gPj4gPiA+PiAgc3RhdGljIHN0cnVjdCBpcF9tb3B0aW9ucyAqDQo+ID4+ID4+ID4gPj4g ICAgICAgICAgICAgICBpbnBfZmluZG1vcHRpb25zKHN0cnVjdCBpbnBjYiAqKTsNCj4gPj4gPj4g PiA+PiAgc3RhdGljIHZvaWQgIGlucF9mcmVlbW9wdGlvbnNfaW50ZXJuYWwoc3RydWN0IGlwX21v cHRpb25zICopOw0KPiA+PiA+PiA+ID4+IEBAIC0yMTYsNiArMjI2LDY1IEBAIGlubV9pc19pZnBf ZGV0YWNoZWQoY29uc3Qgc3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ID4+ID4gPj4gIH0NCj4g Pj4gPj4gPiA+PiAgI2VuZGlmDQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiArc3RhdGljIHN0 cnVjdCBncm91cHRhc2sgZnJlZV9ndGFzazsNCj4gPj4gPj4gPiA+PiArc3RhdGljIHN0cnVjdCBp bl9tdWx0aV9oZWFkIGlubV9mcmVlX2xpc3Q7DQo+ID4+ID4+ID4gPj4gK3N0YXRpYyB2b2lkIGlu bV9yZWxlYXNlX3Rhc2sodm9pZCAqYXJnIF9fdW51c2VkKTsNCj4gPj4gPj4gPiA+PiArc3RhdGlj IHZvaWQgaW5tX2luaXQodm9pZCkNCj4gPj4gPj4gPiA+PiArew0KPiA+PiA+PiA+ID4+ICsgICAg IFNMSVNUX0lOSVQoJmlubV9mcmVlX2xpc3QpOw0KPiA+PiA+PiA+ID4+ICsgICAgIHRhc2txZ3Jv dXBfY29uZmlnX2d0YXNrX2luaXQoTlVMTCwgJmZyZWVfZ3Rhc2ssIGlubV9yZWxlYXNlX3Rhc2ss ICJpbm0NCj4gPj4gPj4gPiA+PiByZWxlYXNlIHRhc2siKTsgK30NCj4gPj4gPj4gPiA+PiArDQo+ ID4+ID4+ID4gPj4gK1NZU0lOSVQoaW5tX2luaXQsIFNJX1NVQl9TTVAgKyAxLCBTSV9PUkRFUl9G SVJTVCwNCj4gPj4gPj4gPiA+PiArICAgICBpbm1faW5pdCwgTlVMTCk7DQo+ID4+ID4+ID4gPj4g Kw0KPiA+PiA+PiA+ID4+ICsNCj4gPj4gPj4gPiA+PiArdm9pZA0KPiA+PiA+PiA+ID4+ICtpbm1f cmVsZWFzZV9saXN0X2RlZmVycmVkKHN0cnVjdCBpbl9tdWx0aV9oZWFkICppbm1oKQ0KPiA+PiA+ PiA+ID4+ICt7DQo+ID4+ID4+ID4gPj4gKw0KPiA+PiA+PiA+ID4+ICsgICAgIGlmIChTTElTVF9F TVBUWShpbm1oKSkNCj4gPj4gPj4gPiA+PiArICAgICAgICAgICAgIHJldHVybjsNCj4gPj4gPj4g PiA+PiArICAgICBtdHhfbG9jaygmaW5fbXVsdGlfZnJlZV9tdHgpOw0KPiA+PiA+PiA+ID4+ICsg ICAgIFNMSVNUX0NPTkNBVCgmaW5tX2ZyZWVfbGlzdCwgaW5taCwgaW5fbXVsdGksIGlubV9ucmVs ZSk7DQo+ID4+ID4+ID4gPj4gKyAgICAgbXR4X3VubG9jaygmaW5fbXVsdGlfZnJlZV9tdHgpOw0K PiA+PiA+PiA+ID4+ICsgICAgIEdST1VQVEFTS19FTlFVRVVFKCZmcmVlX2d0YXNrKTsNCj4gPj4g Pj4gPiA+PiArfQ0KPiA+PiA+PiA+ID4+ICsNCj4gPj4gPj4gPiA+PiArdm9pZA0KPiA+PiA+PiA+ ID4+ICtpbm1fcmVsZWFzZV9kZWZlcnJlZChzdHJ1Y3QgaW5fbXVsdGkgKmlubSkNCj4gPj4gPj4g PiA+PiArew0KPiA+PiA+PiA+ID4+ICsgICAgIHN0cnVjdCBpbl9tdWx0aV9oZWFkIHRtcDsNCj4g Pj4gPj4gPiA+PiArDQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VS VCgpOw0KPiA+PiA+PiA+ID4+ICsgICAgIE1QQVNTKGlubS0+aW5tX3JlZmNvdW50ID4gMCk7DQo+ ID4+ID4+ID4gPj4gKyAgICAgaWYgKC0taW5tLT5pbm1fcmVmY291bnQgPT0gMCkgew0KPiA+PiA+ PiA+ID4+ICsgICAgICAgICAgICAgU0xJU1RfSU5JVCgmdG1wKTsNCj4gPj4gPj4gPiA+PiArICAg ICAgICAgICAgIGlubS0+aW5tX2lmbWEtPmlmbWFfcHJvdG9zcGVjID0gTlVMTDsNCj4gPj4gPj4g PiA+PiArICAgICAgICAgICAgIFNMSVNUX0lOU0VSVF9IRUFEKCZ0bXAsIGlubSwgaW5tX25yZWxl KTsNCj4gPj4gPj4gPiA+PiArICAgICAgICAgICAgIGlubV9yZWxlYXNlX2xpc3RfZGVmZXJyZWQo JnRtcCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgfQ0KPiA+PiA+PiA+ID4+ICt9DQo+ID4+ID4+ID4g Pj4gKw0KPiA+PiA+PiA+ID4+ICtzdGF0aWMgdm9pZA0KPiA+PiA+PiA+ID4+ICtpbm1fcmVsZWFz ZV90YXNrKHZvaWQgKmFyZyBfX3VudXNlZCkNCj4gPj4gPj4gPiA+PiArew0KPiA+PiA+PiA+ID4+ ICsgICAgIHN0cnVjdCBpbl9tdWx0aV9oZWFkIGlubV9mcmVlX3RtcDsNCj4gPj4gPj4gPiA+PiAr ICAgICBzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgKnRpbm07DQo+ID4+ID4+ID4gPj4gKw0KPiA+PiA+ PiA+ID4+ICsgICAgIFNMSVNUX0lOSVQoJmlubV9mcmVlX3RtcCk7DQo+ID4+ID4+ID4gPj4gKyAg ICAgbXR4X2xvY2soJmluX211bHRpX2ZyZWVfbXR4KTsNCj4gPj4gPj4gPiA+PiArICAgICBTTElT VF9DT05DQVQoJmlubV9mcmVlX3RtcCwgJmlubV9mcmVlX2xpc3QsIGluX211bHRpLCBpbm1fbnJl bGUpOw0KPiA+PiA+PiA+ID4+ICsgICAgIG10eF91bmxvY2soJmluX211bHRpX2ZyZWVfbXR4KTsN Cj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAg U0xJU1RfRk9SRUFDSF9TQUZFKGlubSwgJmlubV9mcmVlX3RtcCwgaW5tX25yZWxlLCB0aW5tKSB7 DQo+ID4+ID4+ID4gPj4gKyAgICAgICAgICAgICBTTElTVF9SRU1PVkVfSEVBRCgmaW5tX2ZyZWVf dG1wLCBpbm1fbnJlbGUpOw0KPiA+PiA+PiA+ID4+ICsgICAgICAgICAgICAgTVBBU1MoaW5tKTsN Cj4gPj4gPj4gPiA+PiArICAgICAgICAgICAgIGlubV9yZWxlYXNlKGlubSk7DQo+ID4+ID4+ID4g Pj4gKyAgICAgfQ0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX1VOTE9DSygpOw0KPiA+PiA+ PiA+ID4+ICt9DQo+ID4+ID4+ID4gPj4gKw0KPiA+PiA+PiA+ID4+ICAvKg0KPiA+PiA+PiA+ID4+ ICAgKiBJbml0aWFsaXplIGFuIGluX21maWx0ZXIgc3RydWN0dXJlIHRvIGEga25vd24gc3RhdGUg YXQgdDAsIHQxDQo+ID4+ID4+ID4gPj4gICAqIHdpdGggYW4gZW1wdHkgc291cmNlIGZpbHRlciBs aXN0Lg0KPiA+PiA+PiA+ID4+IEBAIC0yMzIsNyArMzAxLDcgQEAgaW1mX2luaXQoc3RydWN0IGlu X21maWx0ZXIgKmltZiwgY29uc3QgaW50IHN0MCwgY29uc3QNCj4gPj4gPj4gPiA+PiAgLyoNCj4g Pj4gPj4gPiA+PiAgICogRnVuY3Rpb24gZm9yIGxvb2tpbmcgdXAgYW4gaW5fbXVsdGkgcmVjb3Jk IGZvciBhbiBJUHY0IG11bHRpY2FzdCBhZGRyZXNzDQo+ID4+ID4+ID4gPj4gICAqIG9uIGEgZ2l2 ZW4gaW50ZXJmYWNlLiBpZnAgbXVzdCBiZSB2YWxpZC4gSWYgbm8gcmVjb3JkIGZvdW5kLCByZXR1 cm4gTlVMTC4NCj4gPj4gPj4gPiA+PiAtICogVGhlIElOX01VTFRJX0xPQ0sgYW5kIElGX0FERFJf TE9DSyBvbiBpZnAgbXVzdCBiZSBoZWxkLg0KPiA+PiA+PiA+ID4+ICsgKiBUaGUgSU5fTVVMVElf TElTVF9MT0NLIGFuZCBJRl9BRERSX0xPQ0sgb24gaWZwIG11c3QgYmUgaGVsZC4NCj4gPj4gPj4g PiA+PiAgICovDQo+ID4+ID4+ID4gPj4gIHN0cnVjdCBpbl9tdWx0aSAqDQo+ID4+ID4+ID4gPj4g IGlubV9sb29rdXBfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRk ciBpbmEpDQo+ID4+ID4+ID4gPj4gQEAgLTI0MCw3ICszMDksNyBAQCBpbm1fbG9va3VwX2xvY2tl ZChzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2ENCj4gPj4gPj4gPiA+PiAgICAg ICBzdHJ1Y3QgaWZtdWx0aWFkZHIgKmlmbWE7DQo+ID4+ID4+ID4gPj4gICAgICAgc3RydWN0IGlu X211bHRpICppbm07DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9NVUxUSV9M T0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DS19BU1NF UlQoKTsNCj4gPj4gPj4gPiA+PiAgICAgICBJRl9BRERSX0xPQ0tfQVNTRVJUKGlmcCk7DQo+ID4+ ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBpbm0gPSBOVUxMOw0KPiA+PiA+PiA+ID4+IEBA IC0yNjQsNyArMzMzLDcgQEAgaW5tX2xvb2t1cChzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3Ry dWN0IGluX2FkZHIgaW5hDQo+ID4+ID4+ID4gPj4gIHsNCj4gPj4gPj4gPiA+PiAgICAgICBzdHJ1 Y3QgaW5fbXVsdGkgKmlubTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElOX01V TFRJX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NL X0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+ICAgICAgIElGX0FERFJfUkxPQ0soaWZwKTsNCj4gPj4g Pj4gPiA+PiAgICAgICBpbm0gPSBpbm1fbG9va3VwX2xvY2tlZChpZnAsIGluYSk7DQo+ID4+ID4+ ID4gPj4gICAgICAgSUZfQUREUl9SVU5MT0NLKGlmcCk7DQo+ID4+ID4+ID4gPj4gQEAgLTQ1MSw3 ICs1MjAsNyBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGlu X2FkZHIgKmcNCj4gPj4gPj4gPiA+PiAgICAgICBJTl9NVUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+ PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgaWkgPSAoc3RydWN0IGluX2lmaW5mbyAqKWlm cC0+aWZfYWZkYXRhW0FGX0lORVRdOw0KPiA+PiA+PiA+ID4+IC0NCj4gPj4gPj4gPiA+PiArICAg ICBJTl9NVUxUSV9MSVNUX0xPQ0soKTsNCj4gPj4gPj4gPiA+PiAgICAgICBpbm0gPSBpbm1fbG9v a3VwKGlmcCwgKmdyb3VwKTsNCj4gPj4gPj4gPiA+PiAgICAgICBpZiAoaW5tICE9IE5VTEwpIHsN Cj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIC8qDQo+ID4+ID4+ID4gPj4gQEAgLTQ2MCwxMSAr NTI5LDEzIEBAIGluX2dldG11bHRpKHN0cnVjdCBpZm5ldCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5f YWRkciAqZw0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgICovDQo+ID4+ID4+ID4gPj4gICAg ICAgICAgICAgICBLQVNTRVJUKGlubS0+aW5tX3JlZmNvdW50ID49IDEsDQo+ID4+ID4+ID4gPj4g ICAgICAgICAgICAgICAgICAgKCIlczogYmFkIHJlZmNvdW50ICVkIiwgX19mdW5jX18sIGlubS0+ aW5tX3JlZmNvdW50KSk7DQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICArK2lubS0+aW5tX3Jl ZmNvdW50Ow0KPiA+PiA+PiA+ID4+ICsgICAgICAgICAgICAgaW5tX2FjcXVpcmVfbG9ja2VkKGlu bSk7DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICAqcGlubSA9IGlubTsNCj4gPj4gPj4gPiA+ PiAtICAgICAgICAgICAgIHJldHVybiAoMCk7DQo+ID4+ID4+ID4gPj4gICAgICAgfQ0KPiA+PiA+ PiA+ID4+IC0NCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxUSV9MSVNUX1VOTE9DSygpOw0KPiA+ PiA+PiA+ID4+ICsgICAgIGlmIChpbm0gIT0gTlVMTCkNCj4gPj4gPj4gPiA+PiArICAgICAgICAg ICAgIHJldHVybiAoMCk7DQo+ID4+ID4+ID4gPj4gKw0KPiA+PiA+PiA+ID4+ICAgICAgIG1lbXNl dCgmZ3NpbiwgMCwgc2l6ZW9mKGdzaW4pKTsNCj4gPj4gPj4gPiA+PiAgICAgICBnc2luLnNpbl9m YW1pbHkgPSBBRl9JTkVUOw0KPiA+PiA+PiA+ID4+ICAgICAgIGdzaW4uc2luX2xlbiA9IHNpemVv ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOw0KPiA+PiA+PiA+ID4+IEBAIC00NzksNiArNTUwLDcgQEAg aW5fZ2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ ID4+ID4+ID4gPj4gICAgICAgICAgICAgICByZXR1cm4gKGVycm9yKTsNCj4gPj4gPj4gPiA+Pg0K PiA+PiA+PiA+ID4+ICAgICAgIC8qIFhYWCBpZm1hX3Byb3Rvc3BlYyBtdXN0IGJlIGNvdmVyZWQg YnkgSUZfQUREUl9MT0NLICovDQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NL KCk7DQo+ID4+ID4+ID4gPj4gICAgICAgSUZfQUREUl9XTE9DSyhpZnApOw0KPiA+PiA+PiA+ID4+ DQo+ID4+ID4+ID4gPj4gICAgICAgLyoNCj4gPj4gPj4gPiA+PiBAQCAtNTA0LDEwICs1NzYsOSBA QCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwgY29uc3Qgc3RydWN0IGluX2FkZHIgKmcN Cj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpZm1hLCBp bm0sIGluZXRfbnRvYV9yKCpncm91cCwgYWRkcmJ1ZikpOw0KPiA+PiA+PiA+ID4+ICAgICAgICAg ICAgICAgfQ0KPiA+PiA+PiA+ID4+ICAjZW5kaWYNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgICAg ICsraW5tLT5pbm1fcmVmY291bnQ7DQo+ID4+ID4+ID4gPj4gKyAgICAgICAgICAgICBpbm1fYWNx dWlyZV9sb2NrZWQoaW5tKTsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICpwaW5tID0gaW5t Ow0KPiA+PiA+PiA+ID4+IC0gICAgICAgICAgICAgSUZfQUREUl9XVU5MT0NLKGlmcCk7DQo+ID4+ ID4+ID4gPj4gLSAgICAgICAgICAgICByZXR1cm4gKDApOw0KPiA+PiA+PiA+ID4+ICsgICAgICAg ICAgICAgZ290byBvdXRfbG9ja2VkOw0KPiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+ Pg0KPiA+PiA+PiA+ID4+ICAgICAgIElGX0FERFJfV0xPQ0tfQVNTRVJUKGlmcCk7DQo+ID4+ID4+ ID4gPj4gQEAgLTUyMiw2ICs1OTMsNyBAQCBpbl9nZXRtdWx0aShzdHJ1Y3QgaWZuZXQgKmlmcCwg Y29uc3Qgc3RydWN0IGluX2FkZHIgKmcNCj4gPj4gPj4gPiA+PiAgICAgICBpbm0gPSBtYWxsb2Mo c2l6ZW9mKCppbm0pLCBNX0lQTUFERFIsIE1fTk9XQUlUIHwgTV9aRVJPKTsNCj4gPj4gPj4gPiA+ PiAgICAgICBpZiAoaW5tID09IE5VTEwpIHsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIElG X0FERFJfV1VOTE9DSyhpZnApOw0KPiA+PiA+PiA+ID4+ICsgICAgICAgICAgICAgSU5fTVVMVElf TElTVF9VTkxPQ0soKTsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIGlmX2RlbG11bHRpX2lm bWEoaWZtYSk7DQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICByZXR1cm4gKEVOT01FTSk7DQo+ ID4+ID4+ID4gPj4gICAgICAgfQ0KPiA+PiA+PiA+ID4+IEBAIC01MzksOCArNjExLDkgQEAgaW5f Z2V0bXVsdGkoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0cnVjdCBpbl9hZGRyICpnDQo+ID4+ ID4+ID4gPj4gICAgICAgaWZtYS0+aWZtYV9wcm90b3NwZWMgPSBpbm07DQo+ID4+ID4+ID4gPj4N Cj4gPj4gPj4gPiA+PiAgICAgICAqcGlubSA9IGlubTsNCj4gPj4gPj4gPiA+PiAtDQo+ID4+ID4+ ID4gPj4gKyBvdXRfbG9ja2VkOg0KPiA+PiA+PiA+ID4+ICAgICAgIElGX0FERFJfV1VOTE9DSyhp ZnApOw0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ID4+ ID4gPj4gICAgICAgcmV0dXJuICgwKTsNCj4gPj4gPj4gPiA+PiAgfQ0KPiA+PiA+PiA+ID4+DQo+ ID4+ID4+ID4gPj4gQEAgLTU1MCwzNiArNjIzLDI5IEBAIGluX2dldG11bHRpKHN0cnVjdCBpZm5l dCAqaWZwLCBjb25zdCBzdHJ1Y3QgaW5fYWRkciAqZw0KPiA+PiA+PiA+ID4+ICAgKiBJZiB0aGUg cmVmY291bnQgZHJvcHMgdG8gMCwgZnJlZSB0aGUgaW5fbXVsdGkgcmVjb3JkIGFuZA0KPiA+PiA+ PiA+ID4+ICAgKiBkZWxldGUgdGhlIHVuZGVybHlpbmcgbGluay1sYXllciBtZW1iZXJzaGlwLg0K PiA+PiA+PiA+ID4+ICAgKi8NCj4gPj4gPj4gPiA+PiAtdm9pZA0KPiA+PiA+PiA+ID4+IC1pbm1f cmVsZWFzZV9sb2NrZWQoc3RydWN0IGluX211bHRpICppbm0pDQo+ID4+ID4+ID4gPj4gK3N0YXRp YyB2b2lkDQo+ID4+ID4+ID4gPj4gK2lubV9yZWxlYXNlKHN0cnVjdCBpbl9tdWx0aSAqaW5tKQ0K PiA+PiA+PiA+ID4+ICB7DQo+ID4+ID4+ID4gPj4gICAgICAgc3RydWN0IGlmbXVsdGlhZGRyICpp Zm1hOw0KPiA+PiA+PiA+ID4+ICsgICAgIHN0cnVjdCBpZm5ldCAqaWZwOw0KPiA+PiA+PiA+ID4+ DQo+ID4+ID4+ID4gPj4gLSAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+ PiAtDQo+ID4+ID4+ID4gPj4gICAgICAgQ1RSMihLVFJfSUdNUFYzLCAiJXM6IHJlZmNvdW50IGlz ICVkIiwgX19mdW5jX18sIGlubS0+aW5tX3JlZmNvdW50KTsNCj4gPj4gPj4gPiA+PiAtDQo+ID4+ ID4+ID4gPj4gLSAgICAgaWYgKC0taW5tLT5pbm1fcmVmY291bnQgPiAwKSB7DQo+ID4+ID4+ID4g Pj4gLSAgICAgICAgICAgICBDVFIyKEtUUl9JR01QVjMsICIlczogcmVmY291bnQgaXMgbm93ICVk IiwgX19mdW5jX18sDQo+ID4+ID4+ID4gPj4gLSAgICAgICAgICAgICAgICAgaW5tLT5pbm1fcmVm Y291bnQpOw0KPiA+PiA+PiA+ID4+IC0gICAgICAgICAgICAgcmV0dXJuOw0KPiA+PiA+PiA+ID4+ IC0gICAgIH0NCj4gPj4gPj4gPiA+PiAtDQo+ID4+ID4+ID4gPj4gKyAgICAgTVBBU1MoaW5tLT5p bm1fcmVmY291bnQgPT0gMCk7DQo+ID4+ID4+ID4gPj4gICAgICAgQ1RSMihLVFJfSUdNUFYzLCAi JXM6IGZyZWVpbmcgaW5tICVwIiwgX19mdW5jX18sIGlubSk7DQo+ID4+ID4+ID4gPj4NCj4gPj4g Pj4gPiA+PiAgICAgICBpZm1hID0gaW5tLT5pbm1faWZtYTsNCj4gPj4gPj4gPiA+PiArICAgICBp ZnAgPSBpbm0tPmlubV9pZnA7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICAvKiBY WFggdGhpcyBhY2Nlc3MgaXMgbm90IGNvdmVyZWQgYnkgSUZfQUREUl9MT0NLICovDQo+ID4+ID4+ ID4gPj4gICAgICAgQ1RSMihLVFJfSUdNUFYzLCAiJXM6IHB1cmdpbmcgaWZtYSAlcCIsIF9fZnVu Y19fLCBpZm1hKTsNCj4gPj4gPj4gPiA+PiAtICAgICBLQVNTRVJUKGlmbWEtPmlmbWFfcHJvdG9z cGVjID09IGlubSwNCj4gPj4gPj4gPiA+PiAtICAgICAgICAgKCIlczogaWZtYV9wcm90b3NwZWMg IT0gaW5tIiwgX19mdW5jX18pKTsNCj4gPj4gPj4gPiA+PiAtICAgICBpZm1hLT5pZm1hX3Byb3Rv c3BlYyA9IE5VTEw7DQo+ID4+ID4+ID4gPj4gLQ0KPiA+PiA+PiA+ID4+ICsgICAgIGlmIChpZnAp DQo+ID4+ID4+ID4gPj4gKyAgICAgICAgICAgICBDVVJWTkVUX1NFVChpZnAtPmlmX3ZuZXQpOw0K PiA+PiA+PiA+ID4+ICAgICAgIGlubV9wdXJnZShpbm0pOw0KPiA+PiA+PiA+ID4+IC0NCj4gPj4g Pj4gPiA+PiAgICAgICBmcmVlKGlubSwgTV9JUE1BRERSKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+ PiA+ID4+ICAgICAgIGlmX2RlbG11bHRpX2lmbWEoaWZtYSk7DQo+ID4+ID4+ID4gPj4gKyAgICAg aWYgKGlmcCkNCj4gPj4gPj4gPiA+PiArICAgICAgICAgICAgIENVUlZORVRfUkVTVE9SRSgpOw0K PiA+PiA+PiA+ID4+ICB9DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgLyoNCj4gPj4gPj4g PiA+PiBAQCAtNTkyLDcgKzY1OCw3IEBAIGlubV9jbGVhcl9yZWNvcmRlZChzdHJ1Y3QgaW5fbXVs dGkgKmlubSkNCj4gPj4gPj4gPiA+PiAgew0KPiA+PiA+PiA+ID4+ICAgICAgIHN0cnVjdCBpcF9t c291cmNlICAgICAgICppbXM7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAtICAgICBJTl9N VUxUSV9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9D S19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIFJCX0ZPUkVBQ0go aW1zLCBpcF9tc291cmNlX3RyZWUsICZpbm0tPmlubV9zcmNzKSB7DQo+ID4+ID4+ID4gPj4gICAg ICAgICAgICAgICBpZiAoaW1zLT5pbXNfc3RwKSB7DQo+ID4+ID4+ID4gPj4gQEAgLTYzMiw3ICs2 OTgsNyBAQCBpbm1fcmVjb3JkX3NvdXJjZShzdHJ1Y3QgaW5fbXVsdGkgKmlubSwgY29uc3QgaW5f YWRkcl8NCj4gPj4gPj4gPiA+PiAgICAgICBzdHJ1Y3QgaXBfbXNvdXJjZSAgICAgICAgZmluZDsN Cj4gPj4gPj4gPiA+PiAgICAgICBzdHJ1Y3QgaXBfbXNvdXJjZSAgICAgICAqaW1zLCAqbmltczsN Cj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC0gICAgIElOX01VTFRJX0xPQ0tfQVNTRVJUKCk7 DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9MT0NLX0FTU0VSVCgpOw0KPiA+PiA+ PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgZmluZC5pbXNfaGFkZHIgPSBudG9obChuYWRkcik7 DQo+ID4+ID4+ID4gPj4gICAgICAgaW1zID0gUkJfRklORChpcF9tc291cmNlX3RyZWUsICZpbm0t PmlubV9zcmNzLCAmZmluZCk7DQo+ID4+ID4+ID4gPj4gQEAgLTk1OSw2ICsxMDI1LDcgQEAgaW5t X21lcmdlKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCAvKmNvbnN0Ki8gc3RydWN0IGluX21mDQo+ID4+ ID4+ID4gPj4gICAgICAgc2NoYW5nZWQgPSAwOw0KPiA+PiA+PiA+ID4+ICAgICAgIGVycm9yID0g MDsNCj4gPj4gPj4gPiA+PiAgICAgICBuc3JjMSA9IG5zcmMwID0gMDsNCj4gPj4gPj4gPiA+PiAr ICAgICBJTl9NVUxUSV9MSVNUX0xPQ0tfQVNTRVJUKCk7DQo+ID4+ID4+ID4gPj4NCj4gPj4gPj4g PiA+PiAgICAgICAvKg0KPiA+PiA+PiA+ID4+ICAgICAgICAqIFVwZGF0ZSB0aGUgc291cmNlIGZp bHRlcnMgZmlyc3QsIGFzIHRoaXMgbWF5IGZhaWwuDQo+ID4+ID4+ID4gPj4gQEAgLTExNjUsNiAr MTIzMiw3IEBAIGluX2pvaW5ncm91cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAsIGNvbnN0IHN0 cnVjdCBpbg0KPiA+PiA+PiA+ID4+ICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICBlcnJv cjsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAgIElOX01VTFRJX0xPQ0tfQVNTRVJU KCk7DQo+ID4+ID4+ID4gPj4gKyAgICAgSU5fTVVMVElfTElTVF9VTkxPQ0tfQVNTRVJUKCk7DQo+ ID4+ID4+ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBDVFI0KEtUUl9JR01QVjMsICIlczogam9p biAweCUwOHggb24gJXAoJXMpKSIsIF9fZnVuY19fLA0KPiA+PiA+PiA+ID4+ICAgICAgICAgICBu dG9obChnaW5hLT5zX2FkZHIpLCBpZnAsIGlmcC0+aWZfeG5hbWUpOw0KPiA+PiA+PiA+ID4+IEBA IC0xMTg2LDcgKzEyNTQsNyBAQCBpbl9qb2luZ3JvdXBfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZw LCBjb25zdCBzdHJ1Y3QgaW4NCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgIENUUjEoS1RSX0lH TVBWMywgIiVzOiBpbl9nZXRtdWx0aSgpIGZhaWx1cmUiLCBfX2Z1bmNfXyk7DQo+ID4+ID4+ID4g Pj4gICAgICAgICAgICAgICByZXR1cm4gKGVycm9yKTsNCj4gPj4gPj4gPiA+PiAgICAgICB9DQo+ ID4+ID4+ID4gPj4gLQ0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfTE9DSygpOw0K PiA+PiA+PiA+ID4+ICAgICAgIENUUjEoS1RSX0lHTVBWMywgIiVzOiBtZXJnZSBpbm0gc3RhdGUi LCBfX2Z1bmNfXyk7DQo+ID4+ID4+ID4gPj4gICAgICAgZXJyb3IgPSBpbm1fbWVyZ2UoaW5tLCBp bWYpOw0KPiA+PiA+PiA+ID4+ICAgICAgIGlmIChlcnJvcikgew0KPiA+PiA+PiA+ID4+IEBAIC0x MjAxLDEwICsxMjY5LDEyIEBAIGluX2pvaW5ncm91cF9sb2NrZWQoc3RydWN0IGlmbmV0ICppZnAs IGNvbnN0IHN0cnVjdA0KPiA+PiA+PiA+ID4+IGluIGdvdG8gb3V0X2lubV9yZWxlYXNlOw0KPiA+ PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+IC1vdXRfaW5tX3Jl bGVhc2U6DQo+ID4+ID4+ID4gPj4gKyBvdXRfaW5tX3JlbGVhc2U6DQo+ID4+ID4+ID4gPj4gKyAg ICAgSU5fTVVMVElfTElTVF9VTkxPQ0soKTsNCj4gPj4gPj4gPiA+PiAgICAgICBpZiAoZXJyb3Ip IHsNCj4gPj4gPj4gPiA+PiArDQo+ID4+ID4+ID4gPj4gICAgICAgICAgICAgICBDVFIyKEtUUl9J R01QVjMsICIlczogZHJvcHBpbmcgcmVmIG9uICVwIiwgX19mdW5jX18sIGlubSk7DQo+ID4+ID4+ ID4gPj4gLSAgICAgICAgICAgICBpbm1fcmVsZWFzZV9sb2NrZWQoaW5tKTsNCj4gPj4gPj4gPiA+ PiArICAgICAgICAgICAgIGlubV9yZWxlYXNlX2RlZmVycmVkKGlubSk7DQo+ID4+ID4+ID4gPj4g ICAgICAgfSBlbHNlIHsNCj4gPj4gPj4gPiA+PiAgICAgICAgICAgICAgICpwaW5tID0gaW5tOw0K PiA+PiA+PiA+ID4+ICAgICAgIH0NCj4gPj4gPj4gPiA+PiBAQCAtMTI0OSw2ICsxMzE5LDcgQEAg aW5fbGVhdmVncm91cF9sb2NrZWQoc3RydWN0IGluX211bHRpICppbm0sIC8qY29uc3QqLyBzDQo+ ID4+ID4+ID4gPj4gICAgICAgZXJyb3IgPSAwOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4g ICAgICAgSU5fTVVMVElfTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+PiArICAgICBJTl9NVUxU SV9MSVNUX1VOTE9DS19BU1NFUlQoKTsNCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAgICAg IENUUjUoS1RSX0lHTVBWMywgIiVzOiBsZWF2ZSBpbm0gJXAsIDB4JTA4eC8lcywgaW1mICVwIiwg X19mdW5jX18sDQo+ID4+ID4+ID4gPj4gICAgICAgICAgIGlubSwgbnRvaGwoaW5tLT5pbm1fYWRk ci5zX2FkZHIpLA0KPiA+PiA+PiA+ID4+IEBAIC0xMjcyLDE4ICsxMzQzLDIwIEBAIGluX2xlYXZl Z3JvdXBfbG9ja2VkKHN0cnVjdCBpbl9tdWx0aSAqaW5tLCAvKmNvbnN0Ki8NCj4gPj4gPj4gPiA+ PiBzDQo+ID4+ID4+ID4gPj4gICAgICAgICogdGhlIHRyYW5zYWN0aW9uLCBpdCBNVVNUIE5PVCBm YWlsLg0KPiA+PiA+PiA+ID4+ICAgICAgICAqLw0KPiA+PiA+PiA+ID4+ICAgICAgIENUUjEoS1RS X0lHTVBWMywgIiVzOiBtZXJnZSBpbm0gc3RhdGUiLCBfX2Z1bmNfXyk7DQo+ID4+ID4+ID4gPj4g KyAgICAgSU5fTVVMVElfTElTVF9MT0NLKCk7DQo+ID4+ID4+ID4gPj4gICAgICAgZXJyb3IgPSBp bm1fbWVyZ2UoaW5tLCBpbWYpOw0KPiA+PiA+PiA+ID4+ICAgICAgIEtBU1NFUlQoZXJyb3IgPT0g MCwgKCIlczogZmFpbGVkIHRvIG1lcmdlIGlubSBzdGF0ZSIsIF9fZnVuY19fKSk7DQo+ID4+ID4+ ID4gPj4NCj4gPj4gPj4gPiA+PiAgICAgICBDVFIxKEtUUl9JR01QVjMsICIlczogZG9pbmcgaWdt cCBkb3duY2FsbCIsIF9fZnVuY19fKTsNCj4gPj4gPj4gPiA+PiAgICAgICBDVVJWTkVUX1NFVChp bm0tPmlubV9pZnAtPmlmX3ZuZXQpOw0KPiA+PiA+PiA+ID4+ICAgICAgIGVycm9yID0gaWdtcF9j aGFuZ2Vfc3RhdGUoaW5tKTsNCj4gPj4gPj4gPiA+PiArICAgICBpbm1fcmVsZWFzZV9kZWZlcnJl ZChpbm0pOw0KPiA+PiA+PiA+ID4+ICsgICAgIElOX01VTFRJX0xJU1RfVU5MT0NLKCk7DQo+ID4+ ID4+ID4gPj4gICAgICAgQ1VSVk5FVF9SRVNUT1JFKCk7DQo+ID4+ID4+ID4gPj4gICAgICAgaWYg KGVycm9yKQ0KPiA+PiA+PiA+ID4+ICAgICAgICAgICAgICAgQ1RSMShLVFJfSUdNUFYzLCAiJXM6 IGZhaWxlZCBpZ21wIGRvd25jYWxsIiwgX19mdW5jX18pOw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ ID4gPj4gICAgICAgQ1RSMihLVFJfSUdNUFYzLCAiJXM6IGRyb3BwaW5nIHJlZiBvbiAlcCIsIF9f ZnVuY19fLCBpbm0pOw0KPiA+PiA+PiA+ID4+IC0gICAgIGlubV9yZWxlYXNlX2xvY2tlZChpbm0p Ow0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ID4gPj4gICAgICAgcmV0dXJuIChlcnJvcik7DQo+ID4+ ID4+ID4gPj4gIH0NCj4gPj4gPj4gPiA+PiBAQCAtMTMxNSwxOCArMTM4OCw2IEBAIGluX2FkZG11 bHRpKHN0cnVjdCBpbl9hZGRyICphcCwgc3RydWN0IGlmbmV0ICppZnApDQo+ID4+ID4+ID4gPj4g IH0NCj4gPj4gPj4gPiA+Pg0KPiA+PiA+PiA+ID4+ICAvKg0KPiA+PiA+PiA+ID4+IC0gKiBMZWF2 ZSBhbiBJUHY0IG11bHRpY2FzdCBncm91cCwgYXNzdW1lZCB0byBiZSBpbiBleGNsdXNpdmUgKCos RykgbW9kZS4NCj4gPj4gPj4gPiA+PiAtICogVGhpcyBLUEkgaXMgZm9yIGxlZ2FjeSBrZXJuZWwg Y29uc3VtZXJzIG9ubHkuDQo+ID4+ID4+ID4gPj4gLSAqLw0KPiA+PiA+PiA+ID4+DQo+ID4+ID4+ ID4gPj4gKioqIERJRkYgT1VUUFVUIFRSVU5DQVRFRCBBVCAxMDAwIExJTkVTICoqKg0KPiA+PiA+ PiA+ID4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+ ID4+ID4+ID4gPj4gc3ZuLXNyYy1oZWFkQGZyZWVic2Qub3JnIG1haWxpbmcgbGlzdA0KPiA+PiA+ PiA+ID4+IGh0dHBzOi8vbGlzdHMuZnJlZWJzZC5vcmcvbWFpbG1hbi9saXN0aW5mby9zdm4tc3Jj LWhlYWQNCj4gPj4gPj4gPiA+PiBUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkgbWFpbCB0byAic3Zu LXNyYy1oZWFkLXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIiAgDQo+ID4+ID4+ID4gPg0KPiA+PiA+ PiA+ID4NCj4gPj4gPj4gPiA+IEFmdGVyIChhcm91bmQhKSB0aGlzIHVwZGF0ZSwgc29tZSBib3hl cyB3aXRoIGkzNTAgZHVhbCBwb3J0IE5JQ3MgaW1tZWRpYXRlbHkNCj4gPj4gPj4gPiA+IGNyYXNo IHdpdGggRmF0YWwgdHJhcCAxMjogcGFnZSBmYXVsdCBhbmQgc29tZXRoaW5nIHdpdGgNCj4gPj4g Pj4gPiA+DQo+ID4+ID4+ID4gPiBjdXJyZW50IHByb2Nlc3M6IChpc2Mtd29ya2VyMDAwNikNCj4g Pj4gPj4gPiA+DQo+ID4+ID4+ID4gPiAuLi4uDQo+ID4+ID4+ID4gPg0KPiA+PiA+PiA+ID4gVGhv c2UgYm94ZXMgZG8gbm90IGhhdmUgZGVidWdnaW5nIGtlcm5lbC4gVGhlIHN5bXB0b21icyBhcmUg dGhlIHNhbWUuIFNpbmdsZQ0KPiA+PiA+PiA+ID4gdXNlciBrZXJuZWwgd29ya3MsIGJ1dCB0aGUg bW9tZW50IEkgcGVyZm9ybSAvZXRjL25ldHN0YXJ0IGFuZCBhbnkga2luZCBvZiBuZXQNCj4gPj4g Pj4gPiA+IHRyYWZmaWMgZXN0YWJsaXNoZXMsIHRoaXMgY3JhcCBiYWlscyBvdXQuDQo+ID4+ID4+ ID4gPg0KPiA+PiA+PiA+ID4NCj4gPj4gPj4gPiA+IC0gLS0NCj4gPj4gPj4gPiA+IE8uIEhhcnRt YW5uDQo+ID4+ID4+ID4gPg0KPiA+PiA+PiA+ID4gSWNoIHdpZGVyc3ByZWNoZSBkZXIgTnV0enVu ZyBvZGVyIMOcYmVybWl0dGx1bmcgbWVpbmVyIERhdGVuIGbDvHINCj4gPj4gPj4gPiA+IFdlcmJl endlY2tlIG9kZXIgZsO8ciBkaWUgTWFya3QtIG9kZXIgTWVpbnVuZ3Nmb3JzY2h1bmcgKMKnIDI4 IEFicy4gNCBCRFNHKS4NCj4gPj4gPj4gPiA+IC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0t DQo+ID4+ID4+ID4gPg0KPiA+PiA+PiA+ID4gaUxVRUFSTUtBQjBXSVFRWlZaTXpBdHdDMlQvODZU clM1MjhmeUZoWWxBVUNXdXRqdGdBS0NSRFM1MjhmeUZoWQ0KPiA+PiA+PiA+ID4gbEFrekFmOVBo YUZUd05oUUQyekY3eFNISjJ3ZnZMdG9VRWpabHpHc3VzQUNwMXBhN0pBZnowUHl2K2xtK1hOSg0K PiA+PiA+PiA+ID4gdkxFbHJJZjFDbUR6dUE4eWJsWi94L3dPVlNKa0FmOUMrNTBEVkV0R3E1SC9i SFNETnd6bXFyajhZZ0I3WHBTcw0KPiA+PiA+PiA+ID4gUE1SWGMrSXdJYTFKZ2kyeU0rNlRDU05T czFONWJFVWhVOUJpOGVYeTZZMEZTa0FaZVYrcw0KPiA+PiA+PiA+ID4gPVMwYkMNCj4gPj4gPj4g PiA+IC0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0KPiA+PiA+PiA+ID4gX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPj4gPj4gPiA+IHN2bi1zcmMt aGVhZEBmcmVlYnNkLm9yZyBtYWlsaW5nIGxpc3QNCj4gPj4gPj4gPiA+IGh0dHBzOi8vbGlzdHMu ZnJlZWJzZC5vcmcvbWFpbG1hbi9saXN0aW5mby9zdm4tc3JjLWhlYWQNCj4gPj4gPj4gPiA+IFRv IHVuc3Vic2NyaWJlLCBzZW5kIGFueSBtYWlsIHRvICJzdm4tc3JjLWhlYWQtdW5zdWJzY3JpYmVA ZnJlZWJzZC5vcmciICANCj4gPj4gPj4NCj4gPj4gPj4NCj4gPj4gPj4NCj4gPj4gPj4gLSAtLQ0K PiA+PiA+PiBPLiBIYXJ0bWFubg0KPiA+PiA+Pg0KPiA+PiA+PiBJY2ggd2lkZXJzcHJlY2hlIGRl ciBOdXR6dW5nIG9kZXIgw5xiZXJtaXR0bHVuZyBtZWluZXIgRGF0ZW4gZsO8cg0KPiA+PiA+PiBX ZXJiZXp3ZWNrZSBvZGVyIGbDvHIgZGllIE1hcmt0LSBvZGVyIE1laW51bmdzZm9yc2NodW5nICjC pyAyOCBBYnMuIDQgQkRTRykuDQo+ID4+ID4+IC0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0t DQo+ID4+ID4+DQo+ID4+ID4+IGlMVUVBUk1LQUIwV0lRUVpWWk16QXR3QzJULzg2VHJTNTI4ZnlG aFlsQVVDV3V0djh3QUtDUkRTNTI4ZnlGaFkNCj4gPj4gPj4gbEllMUFmd09DQWlncFhhd1o3S0Fq TE5wV2pSVDREc3J6ZnFjQzU3TW96aVZReUsrWDlxb1FBMnYwcGxWTnBQMA0KPiA+PiA+PiBGTHFo NWRrUlhpaU9McnlyOWF1SUxVS3lMQ055QWZ3TDdjRmUxWVJYN1Zuc0s1dy8vOFhtMjV0Sjc0Q1hD OFAwDQo+ID4+ID4+IGdhb1NxdkRxQ0tXVGo2aU4rUS9Qam9Ob2hXb0lLNzZ0aVpBV1Bqa2FIZXVG YnlwUGEyRysNCj4gPj4gPj4gPUVwSmENCj4gPj4gPj4gLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0t LS0tDQo+ID4+ID4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fDQo+ID4+ID4+IHN2bi1zcmMtaGVhZEBmcmVlYnNkLm9yZyBtYWlsaW5nIGxpc3QNCj4gPj4g Pj4gaHR0cHM6Ly9saXN0cy5mcmVlYnNkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3N2bi1zcmMtaGVh ZA0KPiA+PiA+PiBUbyB1bnN1YnNjcmliZSwgc2VuZCBhbnkgbWFpbCB0byAic3ZuLXNyYy1oZWFk LXVuc3Vic2NyaWJlQGZyZWVic2Qub3JnIiAgDQo+ID4+ID4NCj4gPj4gPg0KPiA+PiA+DQo+ID4+ ID4gLSAtLQ0KPiA+PiA+IE8uIEhhcnRtYW5uDQo+ID4+ID4NCj4gPj4gPiBJY2ggd2lkZXJzcHJl Y2hlIGRlciBOdXR6dW5nIG9kZXIgw5xiZXJtaXR0bHVuZyBtZWluZXIgRGF0ZW4gZsO8cg0KPiA+ PiA+IFdlcmJlendlY2tlIG9kZXIgZsO8ciBkaWUgTWFya3QtIG9kZXIgTWVpbnVuZ3Nmb3JzY2h1 bmcgKMKnIDI4IEFicy4gNCBCRFNHKS4NCj4gPj4gPiAtLS0tLUJFR0lOIFBHUCBTSUdOQVRVUkUt LS0tLQ0KPiA+PiA+DQo+ID4+ID4gaUxVRUFSTUtBQjBXSVFRWlZaTXpBdHdDMlQvODZUclM1Mjhm eUZoWWxBVUNXdTF5OGdBS0NSRFM1MjhmeUZoWQ0KPiA+PiA+IGxGRW9BZjRpVys0dFNBT2NHMEVR MS9ZMlBOcUxDWDRBbnBZVGxTbGFFQ3h0RmxEWi9YYk5PdzNUeVZCOVJiUUMNCj4gPj4gPiBxR0U5 VXgyeFFCRDQ4YTFOYjFJSFZWQzlqaTdqQWdDTE9YektVcW1jWGtQTnZqU2daV1orU2R5ZDU1Q2hv TGdZDQo+ID4+ID4gU2t5WThGU1UzR0VEbTI4V2dhWGpRNG9KaCs3L0ZmNjlOc3VEWmx0N2lDMjRL WmRSS0gwMA0KPiA+PiA+ID00YlkrDQo+ID4+ID4gLS0tLS1FTkQgUEdQIFNJR05BVFVSRS0tLS0t ICANCj4gPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18N Cj4gPj4gc3ZuLXNyYy1oZWFkQGZyZWVic2Qub3JnIG1haWxpbmcgbGlzdA0KPiA+PiBodHRwczov L2xpc3RzLmZyZWVic2Qub3JnL21haWxtYW4vbGlzdGluZm8vc3ZuLXNyYy1oZWFkDQo+ID4+IFRv IHVuc3Vic2NyaWJlLCBzZW5kIGFueSBtYWlsIHRvICJzdm4tc3JjLWhlYWQtdW5zdWJzY3JpYmVA ZnJlZWJzZC5vcmciICANCj4gPg0KPiA+DQo+ID4NCj4gPiAtIC0tDQo+ID4gTy4gSGFydG1hbm4N Cj4gPg0KPiA+IEljaCB3aWRlcnNwcmVjaGUgZGVyIE51dHp1bmcgb2RlciDDnGJlcm1pdHRsdW5n IG1laW5lciBEYXRlbiBmw7xyDQo+ID4gV2VyYmV6d2Vja2Ugb2RlciBmw7xyIGRpZSBNYXJrdC0g b2RlciBNZWludW5nc2ZvcnNjaHVuZyAowqcgMjggQWJzLiA0IEJEU0cpLg0KPiA+IC0tLS0tQkVH SU4gUEdQIFNJR05BVFVSRS0tLS0tDQo+ID4NCj4gPiBpTFVFQVJNS0FCMFdJUVFaVlpNekF0d0My VC84NlRyUzUyOGZ5RmhZbEFVQ1d1NFV0d0FLQ1JEUzUyOGZ5RmhZDQo+ID4gbEl6MkFmOW5xclNH UXNhTlZaOURjU1RYNG9ybzNTUi84ZWZ0YkM0MWRhdDY3Z2pZSXViOXhES1VsYmZVUElrVA0KPiA+ IG9HZFBQOXhPMzUrWE9ubXpPSzZ4bUx5SmJ3djVBZ0NYZTdYYmNCY0dmUTM4MHpoR2dtZVo1aWNo MlRkMUxneG8NCj4gPiA4dDdpRm8reFR2K1RpY1EyN3VScUN3S1BjWUViejA2VUtLZ3E5dHRZcWdY WlYxVUl6czVoDQo+ID4gPS9VWmYNCj4gPiAtLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0gIA0K PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBzdm4t c3JjLWhlYWRAZnJlZWJzZC5vcmcgbWFpbGluZyBsaXN0DQo+IGh0dHBzOi8vbGlzdHMuZnJlZWJz ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9zdm4tc3JjLWhlYWQNCj4gVG8gdW5zdWJzY3JpYmUsIHNl bmQgYW55IG1haWwgdG8gInN2bi1zcmMtaGVhZC11bnN1YnNjcmliZUBmcmVlYnNkLm9yZyINCg0K DQoNCi0gLS0gDQpPLiBIYXJ0bWFubg0KDQpJY2ggd2lkZXJzcHJlY2hlIGRlciBOdXR6dW5nIG9k ZXIgw5xiZXJtaXR0bHVuZyBtZWluZXIgRGF0ZW4gZsO8cg0KV2VyYmV6d2Vja2Ugb2RlciBmw7xy IGRpZSBNYXJrdC0gb2RlciBNZWludW5nc2ZvcnNjaHVuZyAowqcgMjggQWJzLiA0IEJEU0cpLg0K LS0tLS1CRUdJTiBQR1AgU0lHTkFUVVJFLS0tLS0NCg0KaUxVRUFSTUtBQjBXSVFRWlZaTXpBdHdD MlQvODZUclM1MjhmeUZoWWxBVUNXdTRhTFFBS0NSRFM1MjhmeUZoWQ0KbE5zb0FmMGZGbkU3bkdh bmttMzg3eHNrT0FIS3hiR1BmelFjTkp5V1ZWM1pCWm94ZTQ5L1RuYkxYcmc0UERxQw0KN2tYZkl1 ejMwZWdRV1Y1b0h6WndZZU9SZnR4VUFmMFUzZjgyVEZIVEZQeVZVUVdMT2FyU1hoOVpEYzh3NHVi OQ0KSGV1cHh0RlUwTnlQb3JEYjQ4YVIzNFJ5ZkdUVkJmVnBjbWQ3ajRwcVY1REF5YjZtVVQwdQ0K PXY4b1INCi0tLS0tRU5EIFBHUCBTSUdOQVRVUkUtLS0tLQ0K From owner-svn-src-head@freebsd.org Sat May 5 21:12:07 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 286D6FBAB16 for ; Sat, 5 May 2018 21:12:07 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "smtp.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id B9D02872BE; Sat, 5 May 2018 21:12:06 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: from mail-io0-f182.google.com (mail-io0-f182.google.com [209.85.223.182]) (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)) (Authenticated sender: mmacy) by smtp.freebsd.org (Postfix) with ESMTPSA id 8AD4D8C9B; Sat, 5 May 2018 21:12:06 +0000 (UTC) (envelope-from mmacy@freebsd.org) Received: by mail-io0-f182.google.com with SMTP id a10-v6so29486276ioc.9; Sat, 05 May 2018 14:12:06 -0700 (PDT) X-Gm-Message-State: ALQs6tB0BIqj6BFU5ezib9ldsOI3PwAxKQvMxjASPukFSLzHaGEyd1FE jv+JxV1dEW2n3EgfEi1k5TSR/Qowfa0thdcM+cc= X-Google-Smtp-Source: AB8JxZrwuATk2LG27sW3p22RPTX5U2YTmkUN+Ud6GJNkgKik4lPPBWL0kE/aiezfzG4pzL3Qf0jEXvuBDh2YFQ0jPdY= X-Received: by 2002:a6b:a712:: with SMTP id q18-v6mr33821898ioe.237.1525554724822; Sat, 05 May 2018 14:12:04 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:b0c3:0:0:0:0:0 with HTTP; Sat, 5 May 2018 14:12:04 -0700 (PDT) In-Reply-To: <20180505225508.12bcee0c@thor.intern.walstatt.dynvpn.de> References: <201805021936.w42JaTlq039053@repo.freebsd.org> <20180503213206.7fba052c@thor.intern.walstatt.dynvpn.de> <20180503222419.4228e8e8@thor.intern.walstatt.dynvpn.de> <20180505110138.6cae0f75@thor.intern.walstatt.dynvpn.de> <20180505223151.580b6522@thor.intern.walstatt.dynvpn.de> <20180505225508.12bcee0c@thor.intern.walstatt.dynvpn.de> From: Matthew Macy Date: Sat, 5 May 2018 14:12:04 -0700 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: svn commit: r333175 - in head/sys: kern net netinet netinet6 sys: TRAP 12 To: "O. Hartmann" Cc: svn-src-head@freebsd.org, Sean Bruno , Stephen Hurd , bde@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.25 X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: 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, 05 May 2018 21:12:07 -0000 it's in the same place as before but I'll attach just to be clear. Gzipped to keep gmail from inserting carriage returns. -M On Sat, May 5, 2018 at 1:54 PM, O. Hartmann wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA512 > > Am Sat, 5 May 2018 13:45:13 -0700 > Matthew Macy schrieb: > >> actually can you try the updated patch please, it turns out I need to >> workaround this little shop of horrors: >> >> >> static void >> tcp_usr_detach(struct socket *so) >> { >> struct inpcb *inp; >> int rlock =3D 0; >> >> inp =3D sotoinpcb(so); >> KASSERT(inp !=3D NULL, ("tcp_usr_detach: inp =3D=3D NULL")); >> if (!INP_INFO_WLOCKED(&V_tcbinfo)) { >> INP_INFO_RLOCK(&V_tcbinfo); >> rlock =3D 1; >> } >> INP_WLOCK(inp); >> KASSERT(inp->inp_socket !=3D NULL, >> ("tcp_usr_detach: inp_socket =3D=3D NULL")); >> tcp_detach(so, inp); >> if (rlock) >> INP_INFO_RUNLOCK(&V_tcbinfo); >> } >> >> We're still acquiring a sleepable mutex out of order with a read lock >> held with the former version of the patch. >> > > Well, I'd appreciate a patch file, if possible, please. > > >> >> On Sat, May 5, 2018 at 1:31 PM, O. Hartmann wr= ote: >> > -----BEGIN PGP SIGNED MESSAGE----- >> > Hash: SHA512 >> > >> > Am Sat, 5 May 2018 11:21:47 -0700 >> > Matthew Macy schrieb: >> > >> >> pho@ and sbruno@ tested the patch before commit, I can't readily >> >> reproduce even though the detach path should be common enough. Please >> >> tell me if this helps: >> >> >> >> https://people.freebsd.org/~mmacy/inpcb.diff >> >> >> >> >> >> Thanks. >> >> >> > >> > >> > The privided patch seemingly work so far (FreeBSD 12.0-CURRENT #4 r333= 274M: Sat May 5 >> > 22:19:04 CEST 2018 amd64). I just recompile world and kernel of revisi= on 333276 and >> > try to push the box with ne traffic (NFS mostly). >> > >> > May I ask on what hardware the mentioned tests of yours has been perfo= rmed? I can >> > tell, that ALL(!) boxes equipted with Intel's i350 NICs are suffering = the very same >> > problem. I didn't dare to move on on the other systems with i210, i217= or i219, but >> > with the patch provided working so far, I'll test. >> > >> > Thanks. >> > >> >> >> >> On Sat, May 5, 2018 at 2:01 AM, O. Hartmann = wrote: >> >> > -----BEGIN PGP SIGNED MESSAGE----- >> >> > Hash: SHA512 >> >> > >> >> > Am Thu, 3 May 2018 22:23:52 +0200 >> >> > "O. Hartmann" schrieb: >> >> > >> >> > >> >> > I'm not familiar with kernel debugging, so there are some struggles= . >> >> > >> >> > After compiling a debugging kernel on >> >> > >> >> > Version String: FreeBSD 12.0-CURRENT #2 r333269: Sat May 5 08:10:3= 2 CEST 2018 >> >> > >> >> > Panic String: Lock tcp not exclusively locked @ /usr/src/sys/netine= t/in_pcb.c:1391 >> >> > >> >> > >> >> > And this is what I can provide you with: >> >> > >> >> > >> >> > Reading symbols >> >> > from /usr/obj/usr/src/amd64.amd64/sys/WALHALL-DEBUG/kernel.full...d= one. >> >> > >> >> > Unread portion of the kernel message buffer: >> >> > panic: Lock tcp not exclusively locked @ /usr/src/sys/netinet/in_pc= b.c:1391 >> >> > >> >> > cpuid =3D 4 >> >> > time =3D 1525510291 >> >> > KDB: stack backtrace: >> >> > db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 0xfffff= e00e485e670 >> >> > vpanic() at vpanic+0x1a3/frame 0xfffffe00e485e6d0 >> >> > panic() at panic+0x43/frame 0xfffffe00e485e730 >> >> > _rw_wunlock_cookie() at _rw_wunlock_cookie+0x137/frame 0xfffffe00e4= 85e760 >> >> > in_pcbfree() at in_pcbfree+0x51a/frame 0xfffffe00e485e7b0 >> >> > tcp_usr_detach() at tcp_usr_detach+0x15e/frame 0xfffffe00e485e7f0 >> >> > sofree() at sofree+0x2f4/frame 0xfffffe00e485e840 >> >> > soclose() at soclose+0x387/frame 0xfffffe00e485e8b0 >> >> > closef() at closef+0x1f5/frame 0xfffffe00e485e940 >> >> > closefp() at closefp+0xa0/frame 0xfffffe00e485e980 >> >> > amd64_syscall() at amd64_syscall+0x6d3/frame 0xfffffe00e485eab0 >> >> > fast_syscall_common() at fast_syscall_common+0x101/frame 0xfffffe00= e485eab0 >> >> > - --- syscall (6, FreeBSD ELF64, sys_close), rip =3D 0x80111adda, r= sp =3D >> >> > 0x7fffdf3f7228, rbp =3D 0x7fffdf3f7240 --- KDB: enter: panic >> >> > >> >> > __curthread () at ./machine/pcpu.h:231 >> >> > 231 __asm("movq %%gs:%1,%0" : "=3Dr" (td) >> >> > (kgdb) bt >> >> > (kgdb) bt >> >> > #0 __curthread () at ./machine/pcpu.h:231 >> >> > #1 doadump (textdump=3D0) at /usr/src/sys/kern/kern_shutdown.c:365 >> >> > #2 0xffffffff80597d5b in db_dump (dummy=3D, dummy2= =3D, >> >> > dummy3=3D, dummy4=3D) at /usr/src/sys/ddb= /db_command.c:574 >> >> > #3 0xffffffff80597ae6 in db_command (last_cmdp=3D, >> >> > cmd_table=3D> >> > out>, dopager=3D) at /usr/src/sys/ddb/db_command.c:4= 81 #4 >> >> > out>0xffffffff80597814 in db_command_loop () at /usr/src/sys/ddb/db= _command.c:534 >> >> > #5 0xffffffff8059b04f in db_trap (type=3D, code=3D<= optimized out>) >> >> > at /usr/src/sys/ddb/db_main.c:250 #6 0xffffffff80924463 in kdb_tra= p (type=3D3, >> >> > code=3D-61456, tf=3D) at /usr/src/sys/kern/subr_kdb.= c:697 #7 >> >> > 0xffffffff80c80ab7 in trap (frame=3D0xfffffe00e485e5a0) >> >> > at /usr/src/sys/amd64/amd64/trap.c:550 #8 = #9 kdb_enter >> >> > (why=3D0xffffffff80dd7b54 "panic", msg=3D) >> >> > at /usr/src/sys/kern/subr_kdb.c:479 #10 0xffffffff808db500 in vpani= c >> >> > (fmt=3D> >> > out>, ap=3D0xfffffe00e485e710) at /usr/src/sys/kern/kern_shutdown.c= :851 #11 >> >> > out>0xffffffff808db593 in panic >> >> > (fmt=3D0xffffffff8125bbd8 "\251\312\332\200\377\377\37= 7\377") >> >> > at /usr/src/sys/kern/kern_shutdown.c:789 #12 0xffffffff808d65b7 in = __rw_assert >> >> > (c=3D0xfffffe00111ee650, what=3D4, file=3D0xffffffff80dc5157 >> >> > "/usr/src/sys/netinet/in_pcb.c", line=3D1391) at /usr/src/sys/kern/= kern_rwlock.c:1426 >> >> > #13 _rw_wunlock_cookie (c=3D0xfffffe00111ee650, file=3D0xffffffff80= dc5157 >> >> > "/usr/src/sys/netinet/in_pcb.c", line=3D1391) at /usr/src/sys/kern/= kern_rwlock.c:362 >> >> > #14 0xffffffff80a68caa in in_pcbfree (inp=3D0xfffff80066058b10) >> >> > at /usr/src/sys/netinet/in_pcb.c:1391 #15 0xffffffff80b09a6e in tcp= _detach >> >> > (so=3D, inp=3D) at /usr/src/sys/netin= et/tcp_usrreq.c:258 >> >> > #16 tcp_usr_detach (so=3D) at /usr/src/sys/netinet/t= cp_usrreq.c:289 >> >> > #17 0xffffffff8097c394 in sofree (so=3D0xfffff8001988d358) >> >> > at /usr/src/sys/kern/uipc_socket.c:1032 #18 0xffffffff8097d487 in s= oclose >> >> > (so=3D0xfffff8001988d358) at /usr/src/sys/kern/uipc_socket.c:1126 #= 19 >> >> > 0xffffffff80885ad5 in fo_close (fp=3D, td=3D) >> >> > at /usr/src/sys/sys/file.h:348 #20 _fdrop (fp=3D, td= =3D) >> >> > at /usr/src/sys/kern/kern_descrip.c:2957 #21 closef (fp=3D0xfffff80= 004ef4eb0, >> >> > td=3D0xfffff80019891560) at /usr/src/sys/kern/kern_descrip.c:2538 #= 22 >> >> > 0xffffffff80882920 in closefp (fdp=3D0xfffff80019553450, fd=3D12, >> >> > fp=3D0xfffff80004ef4eb0, td=3D0xfffff80019891560, holdleaders=3D0) >> >> > at /usr/src/sys/kern/kern_descrip.c:1208 #23 0xffffffff80c82033 in = syscallenter >> >> > (td=3D0xfffff80019891560) at /usr/src/sys/amd64/amd64/../../kern/su= br_syscall.c:135 >> >> > #24 amd64_syscall (td=3D0xfffff80019891560, traced=3D0) >> >> > at /usr/src/sys/amd64/amd64/trap.c:945 #25 = #26 >> >> > 0x000000080111adda in ?? () Backtrace stopped: Cannot access memory= at address >> >> > 0x7fffdf3f7228 (kgdb) >> >> > >> >> > >> >> > >> >> > >> >> >> -----BEGIN PGP SIGNED MESSAGE----- >> >> >> Hash: SHA512 >> >> >> >> >> >> Am Thu, 3 May 2018 12:53:05 -0700 >> >> >> "K. Macy" schrieb: >> >> >> >> >> >> > Can you give any context on what they're doing? In addition - ev= en on >> >> >> > a production kernel it's possible to compile in DDB to at least = get a >> >> >> > backtrace. Your report only gives us enough information to know = that >> >> >> >> >> >> Not at the moment. The immediate crash corrupted the /usr/src file= system so I can >> >> >> not recompile a kernel. Every attempt to /etc/netstart the network= on the buggy >> >> >> kernel ends up in a further destruction, so I stopped at this very= moment and >> >> >> hopefully I can copy /usr/src from a r33153 box (r333153 is for me= the last >> >> >> working revision) via USB flash drive and recompile the kernel. Bu= t I'll go for >> >> >> r333153 first since I need the server up tomorrow and I'll try on = the other box >> >> >> which is also affected, but also equipted with the i350 NIC on whi= ch the problem >> >> >> occurs very quickly. >> >> >> > there is _an_ issue. It's difficult to proceed on this alone. I = do >> >> >> > have a report from the FreeBSD CI infrastructure that we're look= ing in >> >> >> > to now. With luck that is the same issue. >> >> >> > >> >> >> > -M >> >> >> > >> >> >> > On Thu, May 3, 2018 at 12:31 PM, O. Hartmann wrote: >> >> >> > > -----BEGIN PGP SIGNED MESSAGE----- >> >> >> > > Hash: SHA512 >> >> >> > > >> >> >> > > Am Wed, 2 May 2018 19:36:29 +0000 (UTC) >> >> >> > > Stephen Hurd schrieb: >> >> >> > > >> >> >> > >> Author: shurd >> >> >> > >> Date: Wed May 2 19:36:29 2018 >> >> >> > >> New Revision: 333175 >> >> >> > >> URL: https://svnweb.freebsd.org/changeset/base/333175 >> >> >> > >> >> >> >> > >> Log: >> >> >> > >> Separate list manipulation locking from state change in mul= ticast >> >> >> > >> >> >> >> > >> Multicast incorrectly calls in to drivers with a mutex held= causing drivers >> >> >> > >> to have to go through all manner of contortions to use a no= n sleepable >> >> >> > >> lock. Serialize multicast updates instead. >> >> >> > >> >> >> >> > >> Submitted by: mmacy >> >> >> > >> Reviewed by: shurd, sbruno >> >> >> > >> Sponsored by: Limelight Networks >> >> >> > >> Differential Revision: https://reviews.freebsd.org/D14= 969 >> >> >> > >> >> >> >> > >> Modified: >> >> >> > >> head/sys/kern/subr_gtaskqueue.c >> >> >> > >> head/sys/kern/subr_witness.c >> >> >> > >> head/sys/net/if.c >> >> >> > >> head/sys/netinet/igmp.c >> >> >> > >> head/sys/netinet/igmp_var.h >> >> >> > >> head/sys/netinet/in.c >> >> >> > >> head/sys/netinet/in_mcast.c >> >> >> > >> head/sys/netinet/in_pcb.c >> >> >> > >> head/sys/netinet/in_var.h >> >> >> > >> head/sys/netinet/ip_carp.c >> >> >> > >> head/sys/netinet6/in6.c >> >> >> > >> head/sys/netinet6/in6_ifattach.c >> >> >> > >> head/sys/netinet6/in6_mcast.c >> >> >> > >> head/sys/netinet6/in6_pcb.c >> >> >> > >> head/sys/netinet6/in6_var.h >> >> >> > >> head/sys/netinet6/mld6.c >> >> >> > >> head/sys/netinet6/mld6_var.h >> >> >> > >> head/sys/sys/gtaskqueue.h >> >> >> > >> >> >> >> > >> Modified: head/sys/kern/subr_gtaskqueue.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/kern/subr_gtaskqueue.c Wed May 2 17:41:00 201= 8 >> >> >> > >> (r333174) +++ head/sys/kern/subr_gtaskqueue.c Wed May 2 19= :36:29 >> >> >> > >> 2018 (r333175) @@ -53,6 +53,7 @@ static void >> >> >> > >> gtaskqueue_thread_enqueue(void *); static void gtaskqueue_th= read_loop(void >> >> >> > >> *arg); >> >> >> > >> >> >> >> > >> TASKQGROUP_DEFINE(softirq, mp_ncpus, 1); >> >> >> > >> +TASKQGROUP_DEFINE(config, 1, 1); >> >> >> > >> >> >> >> > >> struct gtaskqueue_busy { >> >> >> > >> struct gtask *tb_running; >> >> >> > >> @@ -662,7 +663,7 @@ SYSINIT(tqg_record_smp_started, SI_SUB_SM= P, SI_ORDER_F >> >> >> > >> >> >> >> > >> void >> >> >> > >> taskqgroup_attach(struct taskqgroup *qgroup, struct grouptas= k *gtask, >> >> >> > >> - void *uniq, int irq, char *name) >> >> >> > >> + void *uniq, int irq, const char *name) >> >> >> > >> { >> >> >> > >> cpuset_t mask; >> >> >> > >> int qid, error; >> >> >> > >> @@ -976,4 +977,13 @@ void >> >> >> > >> taskqgroup_destroy(struct taskqgroup *qgroup) >> >> >> > >> { >> >> >> > >> >> >> >> > >> +} >> >> >> > >> + >> >> >> > >> +void >> >> >> > >> +taskqgroup_config_gtask_init(void *ctx, struct grouptask *gt= ask, gtask_fn_t >> >> >> > >> *fn, >> >> >> > >> + const char *name) >> >> >> > >> +{ >> >> >> > >> + >> >> >> > >> + GROUPTASK_INIT(gtask, 0, fn, ctx); >> >> >> > >> + taskqgroup_attach(qgroup_config, gtask, gtask, -1, name= ); >> >> >> > >> } >> >> >> > >> >> >> >> > >> Modified: head/sys/kern/subr_witness.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/kern/subr_witness.c Wed May 2 17:41:00 201= 8 >> >> >> > >> (r333174) +++ head/sys/kern/subr_witness.c Wed May 2 19= :36:29 >> >> >> > >> 2018 (r333175) @@ -532,18 +532,22 @@ static struct >> >> >> > >> witness_order_list_entry order_lists[] =3D >> >> >> > >> * IPv4 multicast: >> >> >> > >> * protocol locks before interface locks, after UDP loc= ks. >> >> >> > >> */ >> >> >> > >> + { "in_multi_sx", &lock_class_sx }, >> >> >> > >> { "udpinp", &lock_class_rw }, >> >> >> > >> - { "in_multi_mtx", &lock_class_mtx_sleep }, >> >> >> > >> + { "in_multi_list_mtx", &lock_class_mtx_sleep }, >> >> >> > >> { "igmp_mtx", &lock_class_mtx_sleep }, >> >> >> > >> + { "ifnet_rw", &lock_class_rw }, >> >> >> > >> { "if_addr_lock", &lock_class_rw }, >> >> >> > >> { NULL, NULL }, >> >> >> > >> /* >> >> >> > >> * IPv6 multicast: >> >> >> > >> * protocol locks before interface locks, after UDP loc= ks. >> >> >> > >> */ >> >> >> > >> + { "in6_multi_sx", &lock_class_sx }, >> >> >> > >> { "udpinp", &lock_class_rw }, >> >> >> > >> - { "in6_multi_mtx", &lock_class_mtx_sleep }, >> >> >> > >> + { "in6_multi_list_mtx", &lock_class_mtx_sleep }, >> >> >> > >> { "mld_mtx", &lock_class_mtx_sleep }, >> >> >> > >> + { "ifnet_rw", &lock_class_rw }, >> >> >> > >> { "if_addr_lock", &lock_class_rw }, >> >> >> > >> { NULL, NULL }, >> >> >> > >> /* >> >> >> > >> >> >> >> > >> Modified: head/sys/net/if.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/net/if.c Wed May 2 17:41:00 2018 (r33317= 4) >> >> >> > >> +++ head/sys/net/if.c Wed May 2 19:36:29 2018 (r33317= 5) >> >> >> > >> @@ -985,11 +985,13 @@ static void >> >> >> > >> if_purgemaddrs(struct ifnet *ifp) >> >> >> > >> { >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> - struct ifmultiaddr *next; >> >> >> > >> >> >> >> > >> IF_ADDR_WLOCK(ifp); >> >> >> > >> - TAILQ_FOREACH_SAFE(ifma, &ifp->if_multiaddrs, ifma_link= , next) >> >> >> > >> + while (!TAILQ_EMPTY(&ifp->if_multiaddrs)) { >> >> >> > >> + ifma =3D TAILQ_FIRST(&ifp->if_multiaddrs); >> >> >> > >> + TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_li= nk); >> >> >> > >> if_delmulti_locked(ifp, ifma, 1); >> >> >> > >> + } >> >> >> > >> IF_ADDR_WUNLOCK(ifp); >> >> >> > >> } >> >> >> > >> >> >> >> > >> @@ -3429,6 +3431,12 @@ if_addmulti(struct ifnet *ifp, struct = sockaddr *sa, >> >> >> > >> struct sockaddr_dl sdl; >> >> >> > >> int error; >> >> >> > >> >> >> >> > >> +#ifdef INET >> >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> >> > >> +#endif >> >> >> > >> +#ifdef INET6 >> >> >> > >> + IN6_MULTI_LIST_UNLOCK_ASSERT(); >> >> >> > >> +#endif >> >> >> > >> /* >> >> >> > >> * If the address is already present, return a new refe= rence to it; >> >> >> > >> * otherwise, allocate storage and set up a new address= . >> >> >> > >> @@ -3610,6 +3618,9 @@ if_delmulti_ifma(struct ifmultiaddr *if= ma) >> >> >> > >> struct ifnet *ifp; >> >> >> > >> int lastref; >> >> >> > >> >> >> >> > >> +#ifdef INET >> >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> >> > >> +#endif >> >> >> > >> ifp =3D ifma->ifma_ifp; >> >> >> > >> #ifdef DIAGNOSTIC >> >> >> > >> if (ifp =3D=3D NULL) { >> >> >> > >> @@ -3711,8 +3722,7 @@ if_delmulti_locked(struct ifnet *ifp, s= truct ifmultiad >> >> >> > >> if_freemulti(ll_ifma); >> >> >> > >> } >> >> >> > >> } >> >> >> > >> - >> >> >> > >> - if (ifp !=3D NULL) >> >> >> > >> + if (ifp !=3D NULL && detaching =3D=3D 0) >> >> >> > >> TAILQ_REMOVE(&ifp->if_multiaddrs, ifma, ifma_li= nk); >> >> >> > >> >> >> >> > >> if_freemulti(ifma); >> >> >> > >> >> >> >> > >> Modified: head/sys/netinet/igmp.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/netinet/igmp.c Wed May 2 17:41:00 2018 = (r333174) >> >> >> > >> +++ head/sys/netinet/igmp.c Wed May 2 19:36:29 2018 = (r333175) >> >> >> > >> @@ -136,7 +136,7 @@ static int igmp_v3_enqueue_group_r= ecord(struct >> >> >> > >> mbufq >> >> >> > >> * struct in_multi *, const int, const int, const int); >> >> >> > >> static int igmp_v3_enqueue_filter_change(struct mbufq *, >> >> >> > >> struct in_multi *); >> >> >> > >> -static void igmp_v3_process_group_timers(struct igmp_ifsoft= c *, >> >> >> > >> +static void igmp_v3_process_group_timers(struct in_multi_he= ad *, >> >> >> > >> struct mbufq *, struct mbufq *, struct in_m= ulti *, >> >> >> > >> const int); >> >> >> > >> static int igmp_v3_merge_state_changes(struct in_multi *, >> >> >> > >> @@ -162,12 +162,12 @@ static const struct netisr_handler igmp= _nh =3D { >> >> >> > >> * themselves are not virtualized. >> >> >> > >> * >> >> >> > >> * Locking: >> >> >> > >> - * * The permitted lock order is: IN_MULTI_LOCK, IGMP_LOCK,= IF_ADDR_LOCK. >> >> >> > >> + * * The permitted lock order is: IN_MULTI_LIST_LOCK, IGMP_= LOCK, >> >> >> > >> IF_ADDR_LOCK. >> >> >> > >> * Any may be taken independently; if any are held at the= same >> >> >> > >> * time, the above lock order must be followed. >> >> >> > >> * * All output is delegated to the netisr. >> >> >> > >> * Now that Giant has been eliminated, the netisr may be = inlined. >> >> >> > >> - * * IN_MULTI_LOCK covers in_multi. >> >> >> > >> + * * IN_MULTI_LIST_LOCK covers in_multi. >> >> >> > >> * * IGMP_LOCK covers igmp_ifsoftc and any global variables= in this file, >> >> >> > >> * including the output queue. >> >> >> > >> * * IF_ADDR_LOCK covers if_multiaddrs, which is used for a= variety of >> >> >> > >> @@ -441,7 +441,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> >> >> > >> if (error) >> >> >> > >> return (error); >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> IGMP_LOCK(); >> >> >> > >> >> >> >> > >> if (name[0] <=3D 0 || name[0] > V_if_index) { >> >> >> > >> @@ -475,7 +475,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS) >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> IGMP_UNLOCK(); >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> return (error); >> >> >> > >> } >> >> >> > >> >> >> >> > >> @@ -586,7 +586,6 @@ igi_alloc_locked(/*const*/ struct ifnet *= ifp) >> >> >> > >> igi->igi_qi =3D IGMP_QI_INIT; >> >> >> > >> igi->igi_qri =3D IGMP_QRI_INIT; >> >> >> > >> igi->igi_uri =3D IGMP_URI_INIT; >> >> >> > >> - SLIST_INIT(&igi->igi_relinmhead); >> >> >> > >> mbufq_init(&igi->igi_gq, IGMP_MAX_RESPONSE_PACKETS); >> >> >> > >> >> >> >> > >> LIST_INSERT_HEAD(&V_igi_head, igi, igi_link); >> >> >> > >> @@ -612,11 +611,12 @@ igmp_ifdetach(struct ifnet *ifp) >> >> >> > >> { >> >> >> > >> struct igmp_ifsoftc *igi; >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> - struct in_multi *inm, *tinm; >> >> >> > >> - >> >> >> > >> + struct in_multi *inm; >> >> >> > >> + struct in_multi_head inm_free_tmp; >> >> >> > >> CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)", __func__,= ifp, >> >> >> > >> ifp->if_xname); >> >> >> > >> >> >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> >> > >> IGMP_LOCK(); >> >> >> > >> >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->= ii_igmp; >> >> >> > >> @@ -631,24 +631,15 @@ igmp_ifdetach(struct ifnet *ifp) >> >> >> > >> ("%s: ifma_protospec is NULL", __fu= nc__)); >> >> >> > >> #endif >> >> >> > >> inm =3D (struct in_multi *)ifma->ifma_p= rotospec; >> >> >> > >> - if (inm->inm_state =3D=3D IGMP_LEAVING_= MEMBER) { >> >> >> > >> - SLIST_INSERT_HEAD(&igi->igi_rel= inmhead, >> >> >> > >> - inm, inm_nrele); >> >> >> > >> - } >> >> >> > >> + if (inm->inm_state =3D=3D IGMP_LEAVING_= MEMBER) >> >> >> > >> + inm_rele_locked(&inm_free_tmp, = inm); >> >> >> > >> inm_clear_recorded(inm); >> >> >> > >> } >> >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> >> > >> - /* >> >> >> > >> - * Free the in_multi reference(s) for this IGMP= lifecycle. >> >> >> > >> - */ >> >> >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, i= nm_nrele, >> >> >> > >> - tinm) { >> >> >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead,= inm_nrele); >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> - } >> >> >> > >> + inm_release_list_deferred(&inm_free_tmp); >> >> >> > >> } >> >> >> > >> - >> >> >> > >> IGMP_UNLOCK(); >> >> >> > >> + >> >> >> > >> } >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -684,11 +675,6 @@ igi_delete_locked(const struct ifnet *if= p) >> >> >> > >> mbufq_drain(&igi->igi_gq); >> >> >> > >> >> >> >> > >> LIST_REMOVE(igi, igi_link); >> >> >> > >> - >> >> >> > >> - KASSERT(SLIST_EMPTY(&igi->igi_relinmhea= d), >> >> >> > >> - ("%s: there are dangling in_multi r= eferences", >> >> >> > >> - __func__)); >> >> >> > >> - >> >> >> > >> free(igi, M_IGMP); >> >> >> > >> return; >> >> >> > >> } >> >> >> > >> @@ -722,7 +708,7 @@ igmp_input_v1_query(struct ifnet *ifp, co= nst struct ip >> >> >> > >> } >> >> >> > >> IGMPSTAT_INC(igps_rcv_gen_queries); >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> IGMP_LOCK(); >> >> >> > >> >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->= ii_igmp; >> >> >> > >> @@ -778,7 +764,7 @@ igmp_input_v1_query(struct ifnet *ifp, co= nst struct ip >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> IGMP_UNLOCK(); >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> >> >> >> > >> return (0); >> >> >> > >> } >> >> >> > >> @@ -816,7 +802,7 @@ igmp_input_v2_query(struct ifnet *ifp, co= nst struct ip >> >> >> > >> IGMPSTAT_INC(igps_rcv_group_queries); >> >> >> > >> } >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> IGMP_LOCK(); >> >> >> > >> >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->= ii_igmp; >> >> >> > >> @@ -872,7 +858,7 @@ igmp_input_v2_query(struct ifnet *ifp, co= nst struct ip >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> IGMP_UNLOCK(); >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> >> >> >> > >> return (0); >> >> >> > >> } >> >> >> > >> @@ -899,7 +885,7 @@ igmp_v2_update_group(struct in_multi *inm= , const int t >> >> >> > >> CTR4(KTR_IGMPV3, "0x%08x: %s/%s timer=3D%d", __func__, >> >> >> > >> ntohl(inm->inm_addr.s_addr), inm->inm_ifp->if_xname= , timer); >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> switch (inm->inm_state) { >> >> >> > >> case IGMP_NOT_MEMBER: >> >> >> > >> @@ -1011,7 +997,7 @@ igmp_input_v3_query(struct ifnet *ifp, c= onst struct ip >> >> >> > >> IGMPSTAT_INC(igps_rcv_gsr_queries); >> >> >> > >> } >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> IGMP_LOCK(); >> >> >> > >> >> >> >> > >> igi =3D ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->= ii_igmp; >> >> >> > >> @@ -1092,7 +1078,7 @@ igmp_input_v3_query(struct ifnet *ifp, = const struct ip >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> IGMP_UNLOCK(); >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> >> >> >> > >> return (0); >> >> >> > >> } >> >> >> > >> @@ -1109,7 +1095,7 @@ igmp_input_v3_group_query(struct in_mul= ti *inm, struct >> >> >> > >> int retval; >> >> >> > >> uint16_t nsrc; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> retval =3D 0; >> >> >> > >> @@ -1246,7 +1232,7 @@ igmp_input_v1_report(struct ifnet *ifp,= /*const*/ stru >> >> >> > >> * If we are a member of this group, and our membership= should be >> >> >> > >> * reported, stop our group timer and transition to the= 'lazy' state. >> >> >> > >> */ >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> >> >> > >> if (inm !=3D NULL) { >> >> >> > >> struct igmp_ifsoftc *igi; >> >> >> > >> @@ -1305,7 +1291,7 @@ igmp_input_v1_report(struct ifnet *ifp,= /*const*/ stru >> >> >> > >> } >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> >> >> >> > >> return (0); >> >> >> > >> } >> >> >> > >> @@ -1373,7 +1359,7 @@ igmp_input_v2_report(struct ifnet *ifp,= /*const*/ stru >> >> >> > >> * reported, and our group timer is pending or about to= be reset, >> >> >> > >> * stop our group timer by transitioning to the 'lazy' = state. >> >> >> > >> */ >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> inm =3D inm_lookup(ifp, igmp->igmp_group); >> >> >> > >> if (inm !=3D NULL) { >> >> >> > >> struct igmp_ifsoftc *igi; >> >> >> > >> @@ -1418,7 +1404,7 @@ igmp_input_v2_report(struct ifnet *ifp,= /*const*/ stru >> >> >> > >> } >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> >> >> >> > >> return (0); >> >> >> > >> } >> >> >> > >> @@ -1647,6 +1633,7 @@ igmp_fasttimo_vnet(void) >> >> >> > >> struct igmp_ifsoftc *igi; >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> struct in_multi *inm; >> >> >> > >> + struct in_multi_head inm_free_tmp; >> >> >> > >> int loop, uri_fasthz; >> >> >> > >> >> >> >> > >> loop =3D 0; >> >> >> > >> @@ -1662,7 +1649,8 @@ igmp_fasttimo_vnet(void) >> >> >> > >> !V_state_change_timers_running) >> >> >> > >> return; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> IGMP_LOCK(); >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -1720,7 +1708,7 @@ igmp_fasttimo_vnet(void) >> >> >> > >> igi->igi_version); >> >> >> > >> break; >> >> >> > >> case IGMP_VERSION_3: >> >> >> > >> - igmp_v3_process_group_timers(ig= i, &qrq, >> >> >> > >> + igmp_v3_process_group_timers(&i= nm_free_tmp, >> >> >> > >> &qrq, &scq, inm, uri_fasthz); >> >> >> > >> break; >> >> >> > >> } >> >> >> > >> @@ -1728,8 +1716,6 @@ igmp_fasttimo_vnet(void) >> >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> >> > >> >> >> >> > >> if (igi->igi_version =3D=3D IGMP_VERSION_3) { >> >> >> > >> - struct in_multi *tinm; >> >> >> > >> - >> >> >> > >> igmp_dispatch_queue(&qrq, 0, loop); >> >> >> > >> igmp_dispatch_queue(&scq, 0, loop); >> >> >> > >> >> >> >> > >> @@ -1737,18 +1723,13 @@ igmp_fasttimo_vnet(void) >> >> >> > >> * Free the in_multi reference(s) for t= his >> >> >> > >> * IGMP lifecycle. >> >> >> > >> */ >> >> >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relin= mhead, >> >> >> > >> - inm_nrele, tinm) { >> >> >> > >> - SLIST_REMOVE_HEAD(&igi->igi_rel= inmhead, >> >> >> > >> - inm_nrele); >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> - } >> >> >> > >> + inm_release_list_deferred(&inm_free_tmp= ); >> >> >> > >> } >> >> >> > >> } >> >> >> > >> >> >> >> > >> out_locked: >> >> >> > >> IGMP_UNLOCK(); >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> } >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -1760,7 +1741,7 @@ igmp_v1v2_process_group_timer(struct in= _multi *inm, co >> >> >> > >> { >> >> >> > >> int report_timer_expired; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> if (inm->inm_timer =3D=3D 0) { >> >> >> > >> @@ -1802,14 +1783,14 @@ igmp_v1v2_process_group_timer(struct = in_multi *inm, >> >> >> > >> co >> >> >> > >> * Note: Unlocked read from igi. >> >> >> > >> */ >> >> >> > >> static void >> >> >> > >> -igmp_v3_process_group_timers(struct igmp_ifsoftc *igi, >> >> >> > >> +igmp_v3_process_group_timers(struct in_multi_head *inmh, >> >> >> > >> struct mbufq *qrq, struct mbufq *scq, >> >> >> > >> struct in_multi *inm, const int uri_fasthz) >> >> >> > >> { >> >> >> > >> int query_response_timer_expired; >> >> >> > >> int state_change_retransmit_timer_expired; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> query_response_timer_expired =3D 0; >> >> >> > >> @@ -1907,8 +1888,7 @@ igmp_v3_process_group_timers(struct igm= p_ifsoftc *igi, >> >> >> > >> if (inm->inm_state =3D=3D IGMP_LEAVING_= MEMBER && >> >> >> > >> inm->inm_scrv =3D=3D 0) { >> >> >> > >> inm->inm_state =3D IGMP_NOT_MEM= BER; >> >> >> > >> - SLIST_INSERT_HEAD(&igi->igi_rel= inmhead, >> >> >> > >> - inm, inm_nrele); >> >> >> > >> + inm_rele_locked(inmh, inm); >> >> >> > >> } >> >> >> > >> } >> >> >> > >> break; >> >> >> > >> @@ -1929,7 +1909,7 @@ static void >> >> >> > >> igmp_v3_suppress_group_record(struct in_multi *inm) >> >> >> > >> { >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> KASSERT(inm->inm_igi->igi_version =3D=3D IGMP_VERSION_3= , >> >> >> > >> ("%s: not IGMPv3 mode on link", __func__)); >> >> >> > >> @@ -2003,13 +1983,15 @@ igmp_v3_cancel_link_timers(struct igm= p_ifsoftc *igi) >> >> >> > >> { >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> struct ifnet *ifp; >> >> >> > >> - struct in_multi *inm, *tinm; >> >> >> > >> + struct in_multi *inm; >> >> >> > >> + struct in_multi_head inm_free_tmp; >> >> >> > >> >> >> >> > >> CTR3(KTR_IGMPV3, "%s: cancel v3 timers on ifp %p(%s)", = __func__, >> >> >> > >> igi->igi_ifp, igi->igi_ifp->if_xname); >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> >> > >> >> >> >> > >> /* >> >> >> > >> * Stop the v3 General Query Response on this link ston= e dead. >> >> >> > >> @@ -2050,7 +2032,7 @@ igmp_v3_cancel_link_timers(struct igmp_= ifsoftc *igi) >> >> >> > >> * message is sent upstream to the old = querier -- >> >> >> > >> * transition to NOT would lose the lea= ve and race. >> >> >> > >> */ >> >> >> > >> - SLIST_INSERT_HEAD(&igi->igi_relinmhead,= inm, >> >> >> > >> inm_nrele); >> >> >> > >> + inm_rele_locked(&inm_free_tmp, inm); >> >> >> > >> /* FALLTHROUGH */ >> >> >> > >> case IGMP_G_QUERY_PENDING_MEMBER: >> >> >> > >> case IGMP_SG_QUERY_PENDING_MEMBER: >> >> >> > >> @@ -2069,10 +2051,8 @@ igmp_v3_cancel_link_timers(struct igmp= _ifsoftc *igi) >> >> >> > >> mbufq_drain(&inm->inm_scq); >> >> >> > >> } >> >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> >> > >> - SLIST_FOREACH_SAFE(inm, &igi->igi_relinmhead, inm_nrele= , tinm) { >> >> >> > >> - SLIST_REMOVE_HEAD(&igi->igi_relinmhead, inm_nre= le); >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> - } >> >> >> > >> + >> >> >> > >> + inm_release_list_deferred(&inm_free_tmp); >> >> >> > >> } >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -2199,7 +2179,7 @@ igmp_v1v2_queue_report(struct in_multi = *inm, const int >> >> >> > >> struct ip *ip; >> >> >> > >> struct mbuf *m; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> ifp =3D inm->inm_ifp; >> >> >> > >> @@ -2276,10 +2256,8 @@ igmp_change_state(struct in_multi *inm= ) >> >> >> > >> struct ifnet *ifp; >> >> >> > >> int error; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> - >> >> >> > >> error =3D 0; >> >> >> > >> - >> >> >> > >> + IN_MULTI_LOCK_ASSERT(); >> >> >> > >> /* >> >> >> > >> * Try to detect if the upper layer just asked us to ch= ange state >> >> >> > >> * for an interface which has now gone away. >> >> >> > >> @@ -2379,9 +2357,10 @@ igmp_initial_join(struct in_multi *inm= , struct igmp_if >> >> >> > >> * group around for the final INCLUDE {} enqueu= e. >> >> >> > >> */ >> >> >> > >> if (igi->igi_version =3D=3D IGMP_VERSION_3 && >> >> >> > >> - inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> - >> >> >> > >> + inm->inm_state =3D=3D IGMP_LEAVING_MEMBER) = { >> >> >> > >> + MPASS(inm->inm_refcount > 1); >> >> >> > >> + inm_rele_locked(NULL, inm); >> >> >> > >> + } >> >> >> > >> inm->inm_state =3D IGMP_REPORTING_MEMBER; >> >> >> > >> >> >> >> > >> switch (igi->igi_version) { >> >> >> > >> @@ -2473,7 +2452,7 @@ igmp_handle_state_change(struct in_mult= i *inm, struct >> >> >> > >> >> >> >> > >> ifp =3D inm->inm_ifp; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> KASSERT(igi && igi->igi_ifp =3D=3D ifp, ("%s: inconsist= ent ifp", >> >> >> > >> __func__)); @@ -2531,7 +2510,7 @@ igmp_final_leave(struct in_= multi *inm, >> >> >> > >> struct igmp_ifs __func__, ntohl(inm->inm_addr.s_addr), inm->i= nm_ifp, >> >> >> > >> inm->inm_ifp->if_xname); >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> switch (inm->inm_state) { >> >> >> > >> @@ -2658,7 +2637,7 @@ igmp_v3_enqueue_group_record(struct mbu= fq *mq, struct >> >> >> > >> in_addr_t naddr; >> >> >> > >> uint8_t mode; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> error =3D 0; >> >> >> > >> ifp =3D inm->inm_ifp; >> >> >> > >> @@ -3018,7 +2997,7 @@ igmp_v3_enqueue_filter_change(struct mb= ufq *mq, struct >> >> >> > >> uint8_t mode, now, then; >> >> >> > >> rectype_t crt, drt, nrt; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> if (inm->inm_nsrc =3D=3D 0 || >> >> >> > >> (inm->inm_st[0].iss_asm > 0 && inm->inm_st[1].iss_a= sm > 0)) >> >> >> > >> @@ -3221,7 +3200,7 @@ igmp_v3_merge_state_changes(struct in_m= ulti *inm, stru >> >> >> > >> domerge =3D 0; >> >> >> > >> recslen =3D 0; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -3320,7 +3299,7 @@ igmp_v3_dispatch_general_query(struct i= gmp_ifsoftc *ig >> >> >> > >> struct in_multi *inm; >> >> >> > >> int retval, loop; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IGMP_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> KASSERT(igi->igi_version =3D=3D IGMP_VERSION_3, >> >> >> > >> @@ -3632,7 +3611,6 @@ DB_SHOW_COMMAND(igi_list, db_show_igi_l= ist) >> >> >> > >> db_printf(" qi %u\n", igi->igi_qi); >> >> >> > >> db_printf(" qri %u\n", igi->igi_qri); >> >> >> > >> db_printf(" uri %u\n", igi->igi_uri); >> >> >> > >> - /* SLIST_HEAD(,in_multi) igi_relinmhead */ >> >> >> > >> /* struct mbufq igi_gq; */ >> >> >> > >> db_printf("\n"); >> >> >> > >> } >> >> >> > >> >> >> >> > >> Modified: head/sys/netinet/igmp_var.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/netinet/igmp_var.h Wed May 2 17:41:00 201= 8 >> >> >> > >> (r333174) +++ head/sys/netinet/igmp_var.h Wed May 2 19= :36:29 >> >> >> > >> 2018 (r333175) @@ -214,7 +214,6 @@ struct igmp_ifsoftc= { >> >> >> > >> uint32_t igi_qi; /* IGMPv3 Query Interval (s) */ >> >> >> > >> uint32_t igi_qri; /* IGMPv3 Query Response Interv= al (s) */ >> >> >> > >> uint32_t igi_uri; /* IGMPv3 Unsolicited Report In= terval (s) */ >> >> >> > >> - SLIST_HEAD(,in_multi) igi_relinmhead; /* released gro= ups */ >> >> >> > >> struct mbufq igi_gq; /* general query respon= ses queue */ >> >> >> > >> }; >> >> >> > >> >> >> >> > >> >> >> >> > >> Modified: head/sys/netinet/in.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/netinet/in.c Wed May 2 17:41:00 2018 = (r333174) >> >> >> > >> +++ head/sys/netinet/in.c Wed May 2 19:36:29 2018 = (r333175) >> >> >> > >> @@ -632,12 +632,10 @@ in_difaddr_ioctl(u_long cmd, caddr_t da= ta, struct ifne >> >> >> > >> struct in_ifinfo *ii; >> >> >> > >> >> >> >> > >> ii =3D ((struct in_ifinfo *)ifp->if_afdata[AF_I= NET]); >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> if (ii->ii_allhosts) { >> >> >> > >> - (void)in_leavegroup_locked(ii->ii_allho= sts, NULL); >> >> >> > >> + (void)in_leavegroup(ii->ii_allhosts, NU= LL); >> >> >> > >> ii->ii_allhosts =3D NULL; >> >> >> > >> } >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> } >> >> >> > >> >> >> >> > >> IF_ADDR_WLOCK(ifp); >> >> >> > >> @@ -994,11 +992,12 @@ in_broadcast(struct in_addr in, struct = ifnet *ifp) >> >> >> > >> void >> >> >> > >> in_ifdetach(struct ifnet *ifp) >> >> >> > >> { >> >> >> > >> - >> >> >> > >> + IN_MULTI_LOCK(); >> >> >> > >> in_pcbpurgeif0(&V_ripcbinfo, ifp); >> >> >> > >> in_pcbpurgeif0(&V_udbinfo, ifp); >> >> >> > >> in_pcbpurgeif0(&V_ulitecbinfo, ifp); >> >> >> > >> in_purgemaddrs(ifp); >> >> >> > >> + IN_MULTI_UNLOCK(); >> >> >> > >> } >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -1011,12 +1010,12 @@ in_ifdetach(struct ifnet *ifp) >> >> >> > >> static void >> >> >> > >> in_purgemaddrs(struct ifnet *ifp) >> >> >> > >> { >> >> >> > >> - LIST_HEAD(,in_multi) purgeinms; >> >> >> > >> - struct in_multi *inm, *tinm; >> >> >> > >> + struct in_multi_head purgeinms; >> >> >> > >> + struct in_multi *inm; >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> >> >> >> > >> - LIST_INIT(&purgeinms); >> >> >> > >> - IN_MULTI_LOCK(); >> >> >> > >> + SLIST_INIT(&purgeinms); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> >> >> >> > >> /* >> >> >> > >> * Extract list of in_multi associated with the detachi= ng ifp >> >> >> > >> @@ -1034,17 +1033,13 @@ in_purgemaddrs(struct ifnet *ifp) >> >> >> > >> ("%s: ifma_protospec is NULL", __func__)); >> >> >> > >> #endif >> >> >> > >> inm =3D (struct in_multi *)ifma->ifma_protospec= ; >> >> >> > >> - LIST_INSERT_HEAD(&purgeinms, inm, inm_link); >> >> >> > >> + inm_rele_locked(&purgeinms, inm); >> >> >> > >> } >> >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> >> > >> >> >> >> > >> - LIST_FOREACH_SAFE(inm, &purgeinms, inm_link, tinm) { >> >> >> > >> - LIST_REMOVE(inm, inm_link); >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> - } >> >> >> > >> + inm_release_list_deferred(&purgeinms); >> >> >> > >> igmp_ifdetach(ifp); >> >> >> > >> - >> >> >> > >> - IN_MULTI_UNLOCK(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> } >> >> >> > >> >> >> >> > >> struct in_llentry { >> >> >> > >> >> >> >> > >> Modified: head/sys/netinet/in_mcast.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/netinet/in_mcast.c Wed May 2 17:41:00 201= 8 >> >> >> > >> (r333174) +++ head/sys/netinet/in_mcast.c Wed May 2 19= :36:29 >> >> >> > >> 2018 (r333175) @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$")= ; >> >> >> > >> #include >> >> >> > >> #include >> >> >> > >> #include >> >> >> > >> +#include >> >> >> > >> #include >> >> >> > >> >> >> >> > >> #include >> >> >> > >> @@ -59,6 +60,8 @@ __FBSDID("$FreeBSD$"); >> >> >> > >> #include >> >> >> > >> #include >> >> >> > >> >> >> >> > >> +#include >> >> >> > >> + >> >> >> > >> #include >> >> >> > >> #include >> >> >> > >> #include >> >> >> > >> @@ -91,18 +94,24 @@ static MALLOC_DEFINE(M_IPMSOURCE, "ip_mso= urce", >> >> >> > >> >> >> >> > >> /* >> >> >> > >> * Locking: >> >> >> > >> - * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LOCK, IGMP_LO= CK, >> >> >> > >> IF_ADDR_LOCK. >> >> >> > >> + * - Lock order is: Giant, INP_WLOCK, IN_MULTI_LIST_LOCK, IG= MP_LOCK, >> >> >> > >> IF_ADDR_LOCK. >> >> >> > >> * - The IF_ADDR_LOCK is implicitly taken by inm_lookup() ea= rlier, however >> >> >> > >> * it can be taken by code in net/if.c also. >> >> >> > >> * - ip_moptions and in_mfilter are covered by the INP_WLOCK= . >> >> >> > >> * >> >> >> > >> - * struct in_multi is covered by IN_MULTI_LOCK. There isn't = strictly >> >> >> > >> + * struct in_multi is covered by IN_MULTI_LIST_LOCK. There i= sn't strictly >> >> >> > >> * any need for in_multi itself to be virtualized -- it is b= ound to an ifp >> >> >> > >> * anyway no matter what happens. >> >> >> > >> */ >> >> >> > >> -struct mtx in_multi_mtx; >> >> >> > >> -MTX_SYSINIT(in_multi_mtx, &in_multi_mtx, "in_multi_mtx", MTX= _DEF); >> >> >> > >> +struct mtx in_multi_list_mtx; >> >> >> > >> +MTX_SYSINIT(in_multi_mtx, &in_multi_list_mtx, "in_multi_list= _mtx", MTX_DEF); >> >> >> > >> >> >> >> > >> +struct mtx in_multi_free_mtx; >> >> >> > >> +MTX_SYSINIT(in_multi_free_mtx, &in_multi_free_mtx, "in_multi= _free_mtx", >> >> >> > >> MTX_DEF); + >> >> >> > >> +struct sx in_multi_sx; >> >> >> > >> +SX_SYSINIT(in_multi_sx, &in_multi_sx, "in_multi_sx"); >> >> >> > >> + >> >> >> > >> /* >> >> >> > >> * Functions with non-static linkage defined in this file sh= ould be >> >> >> > >> * declared in in_var.h: >> >> >> > >> @@ -151,6 +160,7 @@ static int inm_is_ifp_detached(con= st struct >> >> >> > >> in_multi >> >> >> > >> * static int inm_merge(struct in_multi *, /*const*/ struct = in_mfilter *); >> >> >> > >> static void inm_purge(struct in_multi *); >> >> >> > >> static void inm_reap(struct in_multi *); >> >> >> > >> +static void inm_release(struct in_multi *); >> >> >> > >> static struct ip_moptions * >> >> >> > >> inp_findmoptions(struct inpcb *); >> >> >> > >> static void inp_freemoptions_internal(struct ip_moptions *)= ; >> >> >> > >> @@ -216,6 +226,65 @@ inm_is_ifp_detached(const struct in_mult= i *inm) >> >> >> > >> } >> >> >> > >> #endif >> >> >> > >> >> >> >> > >> +static struct grouptask free_gtask; >> >> >> > >> +static struct in_multi_head inm_free_list; >> >> >> > >> +static void inm_release_task(void *arg __unused); >> >> >> > >> +static void inm_init(void) >> >> >> > >> +{ >> >> >> > >> + SLIST_INIT(&inm_free_list); >> >> >> > >> + taskqgroup_config_gtask_init(NULL, &free_gtask, inm_rel= ease_task, "inm >> >> >> > >> release task"); +} >> >> >> > >> + >> >> >> > >> +SYSINIT(inm_init, SI_SUB_SMP + 1, SI_ORDER_FIRST, >> >> >> > >> + inm_init, NULL); >> >> >> > >> + >> >> >> > >> + >> >> >> > >> +void >> >> >> > >> +inm_release_list_deferred(struct in_multi_head *inmh) >> >> >> > >> +{ >> >> >> > >> + >> >> >> > >> + if (SLIST_EMPTY(inmh)) >> >> >> > >> + return; >> >> >> > >> + mtx_lock(&in_multi_free_mtx); >> >> >> > >> + SLIST_CONCAT(&inm_free_list, inmh, in_multi, inm_nrele)= ; >> >> >> > >> + mtx_unlock(&in_multi_free_mtx); >> >> >> > >> + GROUPTASK_ENQUEUE(&free_gtask); >> >> >> > >> +} >> >> >> > >> + >> >> >> > >> +void >> >> >> > >> +inm_release_deferred(struct in_multi *inm) >> >> >> > >> +{ >> >> >> > >> + struct in_multi_head tmp; >> >> >> > >> + >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> + MPASS(inm->inm_refcount > 0); >> >> >> > >> + if (--inm->inm_refcount =3D=3D 0) { >> >> >> > >> + SLIST_INIT(&tmp); >> >> >> > >> + inm->inm_ifma->ifma_protospec =3D NULL; >> >> >> > >> + SLIST_INSERT_HEAD(&tmp, inm, inm_nrele); >> >> >> > >> + inm_release_list_deferred(&tmp); >> >> >> > >> + } >> >> >> > >> +} >> >> >> > >> + >> >> >> > >> +static void >> >> >> > >> +inm_release_task(void *arg __unused) >> >> >> > >> +{ >> >> >> > >> + struct in_multi_head inm_free_tmp; >> >> >> > >> + struct in_multi *inm, *tinm; >> >> >> > >> + >> >> >> > >> + SLIST_INIT(&inm_free_tmp); >> >> >> > >> + mtx_lock(&in_multi_free_mtx); >> >> >> > >> + SLIST_CONCAT(&inm_free_tmp, &inm_free_list, in_multi, i= nm_nrele); >> >> >> > >> + mtx_unlock(&in_multi_free_mtx); >> >> >> > >> + IN_MULTI_LOCK(); >> >> >> > >> + SLIST_FOREACH_SAFE(inm, &inm_free_tmp, inm_nrele, tinm)= { >> >> >> > >> + SLIST_REMOVE_HEAD(&inm_free_tmp, inm_nrele); >> >> >> > >> + MPASS(inm); >> >> >> > >> + inm_release(inm); >> >> >> > >> + } >> >> >> > >> + IN_MULTI_UNLOCK(); >> >> >> > >> +} >> >> >> > >> + >> >> >> > >> /* >> >> >> > >> * Initialize an in_mfilter structure to a known state at t0= , t1 >> >> >> > >> * with an empty source filter list. >> >> >> > >> @@ -232,7 +301,7 @@ imf_init(struct in_mfilter *imf, const in= t st0, const >> >> >> > >> /* >> >> >> > >> * Function for looking up an in_multi record for an IPv4 mu= lticast address >> >> >> > >> * on a given interface. ifp must be valid. If no record fou= nd, return NULL. >> >> >> > >> - * The IN_MULTI_LOCK and IF_ADDR_LOCK on ifp must be held. >> >> >> > >> + * The IN_MULTI_LIST_LOCK and IF_ADDR_LOCK on ifp must be he= ld. >> >> >> > >> */ >> >> >> > >> struct in_multi * >> >> >> > >> inm_lookup_locked(struct ifnet *ifp, const struct in_addr in= a) >> >> >> > >> @@ -240,7 +309,7 @@ inm_lookup_locked(struct ifnet *ifp, cons= t struct in_a >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> struct in_multi *inm; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IF_ADDR_LOCK_ASSERT(ifp); >> >> >> > >> >> >> >> > >> inm =3D NULL; >> >> >> > >> @@ -264,7 +333,7 @@ inm_lookup(struct ifnet *ifp, const struc= t in_addr ina >> >> >> > >> { >> >> >> > >> struct in_multi *inm; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> IF_ADDR_RLOCK(ifp); >> >> >> > >> inm =3D inm_lookup_locked(ifp, ina); >> >> >> > >> IF_ADDR_RUNLOCK(ifp); >> >> >> > >> @@ -451,7 +520,7 @@ in_getmulti(struct ifnet *ifp, const stru= ct in_addr *g >> >> >> > >> IN_MULTI_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> ii =3D (struct in_ifinfo *)ifp->if_afdata[AF_INET]; >> >> >> > >> - >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> inm =3D inm_lookup(ifp, *group); >> >> >> > >> if (inm !=3D NULL) { >> >> >> > >> /* >> >> >> > >> @@ -460,11 +529,13 @@ in_getmulti(struct ifnet *ifp, const st= ruct in_addr *g >> >> >> > >> */ >> >> >> > >> KASSERT(inm->inm_refcount >=3D 1, >> >> >> > >> ("%s: bad refcount %d", __func__, inm->inm_= refcount)); >> >> >> > >> - ++inm->inm_refcount; >> >> >> > >> + inm_acquire_locked(inm); >> >> >> > >> *pinm =3D inm; >> >> >> > >> - return (0); >> >> >> > >> } >> >> >> > >> - >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> + if (inm !=3D NULL) >> >> >> > >> + return (0); >> >> >> > >> + >> >> >> > >> memset(&gsin, 0, sizeof(gsin)); >> >> >> > >> gsin.sin_family =3D AF_INET; >> >> >> > >> gsin.sin_len =3D sizeof(struct sockaddr_in); >> >> >> > >> @@ -479,6 +550,7 @@ in_getmulti(struct ifnet *ifp, const stru= ct in_addr *g >> >> >> > >> return (error); >> >> >> > >> >> >> >> > >> /* XXX ifma_protospec must be covered by IF_ADDR_LOCK *= / >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> IF_ADDR_WLOCK(ifp); >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -504,10 +576,9 @@ in_getmulti(struct ifnet *ifp, const str= uct in_addr *g >> >> >> > >> __func__, ifma, inm, inet_ntoa_r(*g= roup, addrbuf)); >> >> >> > >> } >> >> >> > >> #endif >> >> >> > >> - ++inm->inm_refcount; >> >> >> > >> + inm_acquire_locked(inm); >> >> >> > >> *pinm =3D inm; >> >> >> > >> - IF_ADDR_WUNLOCK(ifp); >> >> >> > >> - return (0); >> >> >> > >> + goto out_locked; >> >> >> > >> } >> >> >> > >> >> >> >> > >> IF_ADDR_WLOCK_ASSERT(ifp); >> >> >> > >> @@ -522,6 +593,7 @@ in_getmulti(struct ifnet *ifp, const stru= ct in_addr *g >> >> >> > >> inm =3D malloc(sizeof(*inm), M_IPMADDR, M_NOWAIT | M_ZE= RO); >> >> >> > >> if (inm =3D=3D NULL) { >> >> >> > >> IF_ADDR_WUNLOCK(ifp); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> if_delmulti_ifma(ifma); >> >> >> > >> return (ENOMEM); >> >> >> > >> } >> >> >> > >> @@ -539,8 +611,9 @@ in_getmulti(struct ifnet *ifp, const stru= ct in_addr *g >> >> >> > >> ifma->ifma_protospec =3D inm; >> >> >> > >> >> >> >> > >> *pinm =3D inm; >> >> >> > >> - >> >> >> > >> + out_locked: >> >> >> > >> IF_ADDR_WUNLOCK(ifp); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> return (0); >> >> >> > >> } >> >> >> > >> >> >> >> > >> @@ -550,36 +623,29 @@ in_getmulti(struct ifnet *ifp, const st= ruct in_addr *g >> >> >> > >> * If the refcount drops to 0, free the in_multi record and >> >> >> > >> * delete the underlying link-layer membership. >> >> >> > >> */ >> >> >> > >> -void >> >> >> > >> -inm_release_locked(struct in_multi *inm) >> >> >> > >> +static void >> >> >> > >> +inm_release(struct in_multi *inm) >> >> >> > >> { >> >> >> > >> struct ifmultiaddr *ifma; >> >> >> > >> + struct ifnet *ifp; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> - >> >> >> > >> CTR2(KTR_IGMPV3, "%s: refcount is %d", __func__, inm->i= nm_refcount); >> >> >> > >> - >> >> >> > >> - if (--inm->inm_refcount > 0) { >> >> >> > >> - CTR2(KTR_IGMPV3, "%s: refcount is now %d", __fu= nc__, >> >> >> > >> - inm->inm_refcount); >> >> >> > >> - return; >> >> >> > >> - } >> >> >> > >> - >> >> >> > >> + MPASS(inm->inm_refcount =3D=3D 0); >> >> >> > >> CTR2(KTR_IGMPV3, "%s: freeing inm %p", __func__, inm); >> >> >> > >> >> >> >> > >> ifma =3D inm->inm_ifma; >> >> >> > >> + ifp =3D inm->inm_ifp; >> >> >> > >> >> >> >> > >> /* XXX this access is not covered by IF_ADDR_LOCK */ >> >> >> > >> CTR2(KTR_IGMPV3, "%s: purging ifma %p", __func__, ifma)= ; >> >> >> > >> - KASSERT(ifma->ifma_protospec =3D=3D inm, >> >> >> > >> - ("%s: ifma_protospec !=3D inm", __func__)); >> >> >> > >> - ifma->ifma_protospec =3D NULL; >> >> >> > >> - >> >> >> > >> + if (ifp) >> >> >> > >> + CURVNET_SET(ifp->if_vnet); >> >> >> > >> inm_purge(inm); >> >> >> > >> - >> >> >> > >> free(inm, M_IPMADDR); >> >> >> > >> >> >> >> > >> if_delmulti_ifma(ifma); >> >> >> > >> + if (ifp) >> >> >> > >> + CURVNET_RESTORE(); >> >> >> > >> } >> >> >> > >> >> >> >> > >> /* >> >> >> > >> @@ -592,7 +658,7 @@ inm_clear_recorded(struct in_multi *inm) >> >> >> > >> { >> >> >> > >> struct ip_msource *ims; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> RB_FOREACH(ims, ip_msource_tree, &inm->inm_srcs) { >> >> >> > >> if (ims->ims_stp) { >> >> >> > >> @@ -632,7 +698,7 @@ inm_record_source(struct in_multi *inm, c= onst in_addr_ >> >> >> > >> struct ip_msource find; >> >> >> > >> struct ip_msource *ims, *nims; >> >> >> > >> >> >> >> > >> - IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> find.ims_haddr =3D ntohl(naddr); >> >> >> > >> ims =3D RB_FIND(ip_msource_tree, &inm->inm_srcs, &find)= ; >> >> >> > >> @@ -959,6 +1025,7 @@ inm_merge(struct in_multi *inm, /*const*= / struct in_mf >> >> >> > >> schanged =3D 0; >> >> >> > >> error =3D 0; >> >> >> > >> nsrc1 =3D nsrc0 =3D 0; >> >> >> > >> + IN_MULTI_LIST_LOCK_ASSERT(); >> >> >> > >> >> >> >> > >> /* >> >> >> > >> * Update the source filters first, as this may fail. >> >> >> > >> @@ -1165,6 +1232,7 @@ in_joingroup_locked(struct ifnet *ifp, = const struct in >> >> >> > >> int error; >> >> >> > >> >> >> >> > >> IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> >> > >> >> >> >> > >> CTR4(KTR_IGMPV3, "%s: join 0x%08x on %p(%s))", __func__= , >> >> >> > >> ntohl(gina->s_addr), ifp, ifp->if_xname); >> >> >> > >> @@ -1186,7 +1254,7 @@ in_joingroup_locked(struct ifnet *ifp, = const struct in >> >> >> > >> CTR1(KTR_IGMPV3, "%s: in_getmulti() failure", _= _func__); >> >> >> > >> return (error); >> >> >> > >> } >> >> >> > >> - >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> >> >> > >> error =3D inm_merge(inm, imf); >> >> >> > >> if (error) { >> >> >> > >> @@ -1201,10 +1269,12 @@ in_joingroup_locked(struct ifnet *ifp= , const struct >> >> >> > >> in goto out_inm_release; >> >> >> > >> } >> >> >> > >> >> >> >> > >> -out_inm_release: >> >> >> > >> + out_inm_release: >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> if (error) { >> >> >> > >> + >> >> >> > >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __fu= nc__, inm); >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> + inm_release_deferred(inm); >> >> >> > >> } else { >> >> >> > >> *pinm =3D inm; >> >> >> > >> } >> >> >> > >> @@ -1249,6 +1319,7 @@ in_leavegroup_locked(struct in_multi *i= nm, /*const*/ s >> >> >> > >> error =3D 0; >> >> >> > >> >> >> >> > >> IN_MULTI_LOCK_ASSERT(); >> >> >> > >> + IN_MULTI_LIST_UNLOCK_ASSERT(); >> >> >> > >> >> >> >> > >> CTR5(KTR_IGMPV3, "%s: leave inm %p, 0x%08x/%s, imf %p",= __func__, >> >> >> > >> inm, ntohl(inm->inm_addr.s_addr), >> >> >> > >> @@ -1272,18 +1343,20 @@ in_leavegroup_locked(struct in_multi = *inm, /*const*/ >> >> >> > >> s >> >> >> > >> * the transaction, it MUST NOT fail. >> >> >> > >> */ >> >> >> > >> CTR1(KTR_IGMPV3, "%s: merge inm state", __func__); >> >> >> > >> + IN_MULTI_LIST_LOCK(); >> >> >> > >> error =3D inm_merge(inm, imf); >> >> >> > >> KASSERT(error =3D=3D 0, ("%s: failed to merge inm state= ", __func__)); >> >> >> > >> >> >> >> > >> CTR1(KTR_IGMPV3, "%s: doing igmp downcall", __func__); >> >> >> > >> CURVNET_SET(inm->inm_ifp->if_vnet); >> >> >> > >> error =3D igmp_change_state(inm); >> >> >> > >> + inm_release_deferred(inm); >> >> >> > >> + IN_MULTI_LIST_UNLOCK(); >> >> >> > >> CURVNET_RESTORE(); >> >> >> > >> if (error) >> >> >> > >> CTR1(KTR_IGMPV3, "%s: failed igmp downcall", __= func__); >> >> >> > >> >> >> >> > >> CTR2(KTR_IGMPV3, "%s: dropping ref on %p", __func__, in= m); >> >> >> > >> - inm_release_locked(inm); >> >> >> > >> >> >> >> > >> return (error); >> >> >> > >> } >> >> >> > >> @@ -1315,18 +1388,6 @@ in_addmulti(struct in_addr *ap, struct= ifnet *ifp) >> >> >> > >> } >> >> >> > >> >> >> >> > >> /* >> >> >> > >> - * Leave an IPv4 multicast group, assumed to be in exclusive= (*,G) mode. >> >> >> > >> - * This KPI is for legacy kernel consumers only. >> >> >> > >> - */ >> >> >> > >> >> >> >> > >> *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** >> >> >> > >> _______________________________________________ >> >> >> > >> 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@fr= eebsd.org" >> >> >> > > >> >> >> > > >> >> >> > > After (around!) this update, some boxes with i350 dual port NI= Cs immediately >> >> >> > > crash with Fatal trap 12: page fault and something with >> >> >> > > >> >> >> > > current process: (isc-worker0006) >> >> >> > > >> >> >> > > .... >> >> >> > > >> >> >> > > Those boxes do not have debugging kernel. The symptombs are th= e same. Single >> >> >> > > user kernel works, but the moment I perform /etc/netstart and = any kind of net >> >> >> > > traffic establishes, this crap bails out. >> >> >> > > >> >> >> > > >> >> >> > > - -- >> >> >> > > O. Hartmann >> >> >> > > >> >> >> > > Ich widerspreche der Nutzung oder =C3=9Cbermittlung meiner Dat= en f=C3=BCr >> >> >> > > Werbezwecke oder f=C3=BCr die Markt- oder Meinungsforschung (= =C2=A7 28 Abs. 4 BDSG). >> >> >> > > -----BEGIN PGP SIGNATURE----- >> >> >> > > >> >> >> > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutjtgAKCRDS528fyF= hY >> >> >> > > lAkzAf9PhaFTwNhQD2zF7xSHJ2wfvLtoUEjZlzGsusACp1pa7JAfz0Pyv+lm+X= NJ >> >> >> > > vLElrIf1CmDzuA8yblZ/x/wOVSJkAf9C+50DVEtGq5H/bHSDNwzmqrj8YgB7Xp= Ss >> >> >> > > PMRXc+IwIa1Jgi2yM+6TCSNSs1N5bEUhU9Bi8eXy6Y0FSkAZeV+s >> >> >> > > =3DS0bC >> >> >> > > -----END PGP SIGNATURE----- >> >> >> > > _______________________________________________ >> >> >> > > 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@fre= ebsd.org" >> >> >> >> >> >> >> >> >> >> >> >> - -- >> >> >> 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). >> >> >> -----BEGIN PGP SIGNATURE----- >> >> >> >> >> >> iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWutv8wAKCRDS528fyFhY >> >> >> lIe1AfwOCAigpXawZ7KAjLNpWjRT4DsrzfqcC57MoziVQyK+X9qoQA2v0plVNpP0 >> >> >> FLqh5dkRXiiOLryr9auILUKyLCNyAfwL7cFe1YRX7VnsK5w//8Xm25tJ74CXC8P0 >> >> >> gaoSqvDqCKWTj6iN+Q/PjoNohWoIK76tiZAWPjkaHeuFbypPa2G+ >> >> >> =3DEpJa >> >> >> -----END PGP SIGNATURE----- >> >> >> _______________________________________________ >> >> >> 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" >> >> > >> >> > >> >> > >> >> > - -- >> >> > 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). >> >> > -----BEGIN PGP SIGNATURE----- >> >> > >> >> > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWu1y8gAKCRDS528fyFhY >> >> > lFEoAf4iW+4tSAOcG0EQ1/Y2PNqLCX4AnpYTlSlaECxtFlDZ/XbNOw3TyVB9RbQC >> >> > qGE9Ux2xQBD48a1Nb1IHVVC9ji7jAgCLOXzKUqmcXkPNvjSgZWZ+Sdyd55ChoLgY >> >> > SkyY8FSU3GEDm28WgaXjQ4oJh+7/Ff69NsuDZlt7iC24KZdRKH00 >> >> > =3D4bY+ >> >> > -----END PGP SIGNATURE----- >> >> _______________________________________________ >> >> 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.or= g" >> > >> > >> > >> > - -- >> > 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). >> > -----BEGIN PGP SIGNATURE----- >> > >> > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWu4UtwAKCRDS528fyFhY >> > lIz2Af9nqrSGQsaNVZ9DcSTX4oro3SR/8eftbC41dat67gjYIub9xDKUlbfUPIkT >> > oGdPP9xO35+XOnmzOK6xmLyJbwv5AgCXe7XbcBcGfQ380zhGgmeZ5ich2Td1Lgxo >> > 8t7iFo+xTv+TicQ27uRqCwKPcYEbz06UKKgq9ttYqgXZV1UIzs5h >> > =3D/UZf >> > -----END PGP SIGNATURE----- >> _______________________________________________ >> 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" > > > > - -- > 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 Ab= s. 4 BDSG). > -----BEGIN PGP SIGNATURE----- > > iLUEARMKAB0WIQQZVZMzAtwC2T/86TrS528fyFhYlAUCWu4aLQAKCRDS528fyFhY > lNsoAf0fFnE7nGankm387xskOAHKxbGPfzQcNJyWVV3ZBZoxe49/TnbLXrg4PDqC > 7kXfIuz30egQWV5oHzZwYeORftxUAf0U3f82TFHTFPyVUQWLOarSXh9ZDc8w4ub9 > HeupxtFU0NyPorDb48aR34RyfGTVBfVpcmd7j4pqV5DAyb6mUT0u > =3Dv8oR > -----END PGP SIGNATURE----- From owner-svn-src-head@freebsd.org Sat May 5 22:40:41 2018 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5737FFBDA89; Sat, 5 May 2018 22:40:41 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EF8FE79B3B; Sat, 5 May 2018 22:40:40 +0000 (UTC) (envelope-from mmacy@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 mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id EA76023C67; Sat, 5 May 2018 22:40:40 +0000 (UTC) (envelope-from mmacy@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id w45MeeR6020556; Sat, 5 May 2018 22:40:40 GMT (envelope-from mmacy@FreeBSD.org) Received: (from mmacy@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id w45MeeKM020551; Sat, 5 May 2018 22:40:40 GMT (envelope-from mmacy@FreeBSD.org) Message-Id: <201805052240.w45MeeKM020551@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: mmacy set sender to mmacy@FreeBSD.org using -f From: Matt Macy Date: Sat, 5 May 2018 22:40:40 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r333277 - in head/sys: netinet netinet6 X-SVN-Group: head X-SVN-Commit-Author: mmacy X-SVN-Commit-Paths: in head/sys: netinet netinet6 X-SVN-Commit-Revision: 333277 X-SVN-Commit-Repository: base 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.25 Precedence: list List-Id: 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, 05 May 2018 22:40:41 -0000 Author: mmacy Date: Sat May 5 22:40:40 2018 New Revision: 333277 URL: https://svnweb.freebsd.org/changeset/base/333277 Log: Currently in_pcbfree will unconditionally wunlock the pcbinfo lock to avoid a LOR on the multicast list lock in the freemoptions routines. As it turns out, tcp_usr_detach can acquire the tcbinfo lock readonly. Trying to wunlock the pcbinfo lock in that context has caused a number of reported crashes. This change unclutters in_pcbfree and moves the handling of wunlock vs runlock of pcbinfo to the freemoptions routine. Reported by: mjg@, bde@, o.hartmann at walstatt.org Approved by: sbruno Modified: head/sys/netinet/in_mcast.c head/sys/netinet/in_pcb.c head/sys/netinet/ip_var.h head/sys/netinet6/in6_mcast.c head/sys/netinet6/in6_var.h Modified: head/sys/netinet/in_mcast.c ============================================================================== --- head/sys/netinet/in_mcast.c Sat May 5 20:16:08 2018 (r333276) +++ head/sys/netinet/in_mcast.c Sat May 5 22:40:40 2018 (r333277) @@ -1639,16 +1639,29 @@ inp_findmoptions(struct inpcb *inp) * SMPng: NOTE: assumes INP write lock is held. */ void -inp_freemoptions(struct ip_moptions *imo) +inp_freemoptions(struct ip_moptions *imo, struct inpcbinfo *pcbinfo) { + int wlock; if (imo == NULL) return; + + INP_INFO_LOCK_ASSERT(pcbinfo); + wlock = INP_INFO_WLOCKED(pcbinfo); + if (wlock) + INP_INFO_WUNLOCK(pcbinfo); + else + INP_INFO_RUNLOCK(pcbinfo); + KASSERT(imo != NULL, ("%s: ip_moptions is NULL", __func__)); IN_MULTI_LIST_LOCK(); STAILQ_INSERT_TAIL(&imo_gc_list, imo, imo_link); IN_MULTI_LIST_UNLOCK(); taskqueue_enqueue(taskqueue_thread, &imo_gc_task); + if (wlock) + INP_INFO_WLOCK(pcbinfo); + else + INP_INFO_RLOCK(pcbinfo); } static void Modified: head/sys/netinet/in_pcb.c ============================================================================== --- head/sys/netinet/in_pcb.c Sat May 5 20:16:08 2018 (r333276) +++ head/sys/netinet/in_pcb.c Sat May 5 22:40:40 2018 (r333277) @@ -1388,14 +1388,12 @@ in_pcbfree(struct inpcb *inp) if (imo == NULL && im6o == NULL) return; #endif - INP_INFO_WUNLOCK(pcbinfo); #ifdef INET6 - ip6_freemoptions(im6o); + ip6_freemoptions(im6o, pcbinfo); #endif #ifdef INET - inp_freemoptions(imo); + inp_freemoptions(imo, pcbinfo); #endif - INP_INFO_WLOCK(pcbinfo); } /* Modified: head/sys/netinet/ip_var.h ============================================================================== --- head/sys/netinet/ip_var.h Sat May 5 20:16:08 2018 (r333276) +++ head/sys/netinet/ip_var.h Sat May 5 22:40:40 2018 (r333277) @@ -175,6 +175,7 @@ struct ip; struct inpcb; struct route; struct sockopt; +struct inpcbinfo; VNET_DECLARE(int, ip_defttl); /* default IP ttl */ VNET_DECLARE(int, ipforwarding); /* ip forwarding */ @@ -201,7 +202,7 @@ extern struct pr_usrreqs rip_usrreqs; #define V_rsvp_on VNET(rsvp_on) #define V_drop_redirect VNET(drop_redirect) -void inp_freemoptions(struct ip_moptions *); +void inp_freemoptions(struct ip_moptions *, struct inpcbinfo *); int inp_getmoptions(struct inpcb *, struct sockopt *); int inp_setmoptions(struct inpcb *, struct sockopt *); Modified: head/sys/netinet6/in6_mcast.c ============================================================================== --- head/sys/netinet6/in6_mcast.c Sat May 5 20:16:08 2018 (r333276) +++ head/sys/netinet6/in6_mcast.c Sat May 5 22:40:40 2018 (r333277) @@ -1585,13 +1585,20 @@ in6p_findmoptions(struct inpcb *inp) * SMPng: NOTE: assumes INP write lock is held. */ void -ip6_freemoptions(struct ip6_moptions *imo) +ip6_freemoptions(struct ip6_moptions *imo, struct inpcbinfo *pcbinfo) { struct in6_mfilter *imf; size_t idx, nmships; + int wlock; if (imo == NULL) return; + INP_INFO_LOCK_ASSERT(pcbinfo); + wlock = INP_INFO_WLOCKED(pcbinfo); + if (wlock) + INP_INFO_WUNLOCK(pcbinfo); + else + INP_INFO_RUNLOCK(pcbinfo); nmships = imo->im6o_num_memberships; for (idx = 0; idx < nmships; ++idx) { @@ -1608,6 +1615,10 @@ ip6_freemoptions(struct ip6_moptions *imo) free(imo->im6o_mfilters, M_IN6MFILTER); free(imo->im6o_membership, M_IP6MOPTS); free(imo, M_IP6MOPTS); + if (wlock) + INP_INFO_WLOCK(pcbinfo); + else + INP_INFO_RLOCK(pcbinfo); } /* Modified: head/sys/netinet6/in6_var.h ============================================================================== --- head/sys/netinet6/in6_var.h Sat May 5 20:16:08 2018 (r333276) +++ head/sys/netinet6/in6_var.h Sat May 5 22:40:40 2018 (r333277) @@ -807,6 +807,7 @@ in6m_rele_locked(struct in6_multi_head *inmh, struct i struct ip6_moptions; struct sockopt; +struct inpcbinfo; /* Multicast KPIs. */ int im6o_mc_filter(const struct ip6_moptions *, const struct ifnet *, @@ -823,7 +824,7 @@ void in6m_print(const struct in6_multi *); int in6m_record_source(struct in6_multi *, const struct in6_addr *); void in6m_release_deferred(struct in6_multi *); void in6m_release_list_deferred(struct in6_multi_head *); -void ip6_freemoptions(struct ip6_moptions *); +void ip6_freemoptions(struct ip6_moptions *, struct inpcbinfo *); int ip6_getmoptions(struct inpcb *, struct sockopt *); int ip6_setmoptions(struct inpcb *, struct sockopt *);