From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 05:11:29 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id ECFD2106566C; Sun, 7 Oct 2012 05:11:29 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D52E08FC0A; Sun, 7 Oct 2012 05:11:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q975BT9c023809; Sun, 7 Oct 2012 05:11:29 GMT (envelope-from pfg@svn.freebsd.org) Received: (from pfg@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q975BTMo023801; Sun, 7 Oct 2012 05:11:29 GMT (envelope-from pfg@svn.freebsd.org) Message-Id: <201210070511.q975BTMo023801@svn.freebsd.org> From: "Pedro F. Giffuni" Date: Sun, 7 Oct 2012 05:11:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241309 - in stable/9: include/rpc lib/libc/rpc sys/rpc X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 05:11:30 -0000 Author: pfg Date: Sun Oct 7 05:11:29 2012 New Revision: 241309 URL: http://svn.freebsd.org/changeset/base/241309 Log: MFC r241141, r241165, r241165, r241181; rpc: convert all uid and gid variables to u_int. Follow a similar change in Solaris and linux where the uid and gid variables were made more similar to what the system expects. In our case we use u_int which is what XDR can manage, Reviewed by: bde Modified: stable/9/include/rpc/auth.h stable/9/include/rpc/auth_unix.h stable/9/lib/libc/rpc/auth_unix.c stable/9/lib/libc/rpc/authunix_prot.c stable/9/lib/libc/rpc/rpc_soc.3 stable/9/lib/libc/rpc/svc_auth_unix.c stable/9/sys/rpc/auth.h Modified: stable/9/include/rpc/auth.h ============================================================================== --- stable/9/include/rpc/auth.h Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/include/rpc/auth.h Sun Oct 7 05:11:29 2012 (r241309) @@ -243,14 +243,13 @@ __END_DECLS * System style authentication * AUTH *authunix_create(machname, uid, gid, len, aup_gids) * char *machname; - * int uid; - * int gid; + * u_int uid; + * u_int gid; * int len; - * int *aup_gids; + * u_int *aup_gids; */ __BEGIN_DECLS -extern AUTH *authunix_create(char *, int, int, int, - int *); +extern AUTH *authunix_create(char *, u_int, u_int, int, u_int *); extern AUTH *authunix_create_default(void); /* takes no parameters */ extern AUTH *authnone_create(void); /* takes no parameters */ __END_DECLS Modified: stable/9/include/rpc/auth_unix.h ============================================================================== --- stable/9/include/rpc/auth_unix.h Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/include/rpc/auth_unix.h Sun Oct 7 05:11:29 2012 (r241309) @@ -60,10 +60,10 @@ struct authunix_parms { u_long aup_time; char *aup_machname; - int aup_uid; - int aup_gid; + u_int aup_uid; + u_int aup_gid; u_int aup_len; - int *aup_gids; + u_int *aup_gids; }; #define authsys_parms authunix_parms Modified: stable/9/lib/libc/rpc/auth_unix.c ============================================================================== --- stable/9/lib/libc/rpc/auth_unix.c Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/lib/libc/rpc/auth_unix.c Sun Oct 7 05:11:29 2012 (r241309) @@ -94,10 +94,10 @@ struct audata { AUTH * authunix_create(machname, uid, gid, len, aup_gids) char *machname; - int uid; - int gid; + u_int uid; + u_int gid; int len; - int *aup_gids; + u_int *aup_gids; { struct authunix_parms aup; char mymem[MAX_AUTH_BYTES]; @@ -189,9 +189,9 @@ authunix_create_default() int ngids; long ngids_max; char machname[MAXHOSTNAMELEN + 1]; - uid_t uid; - gid_t gid; - gid_t *gids; + u_int uid; + u_int gid; + u_int *gids; ngids_max = sysconf(_SC_NGROUPS_MAX) + 1; gids = malloc(sizeof(gid_t) * ngids_max); @@ -207,9 +207,8 @@ authunix_create_default() abort(); if (ngids > NGRPS) ngids = NGRPS; - /* XXX: interface problem; those should all have been unsigned */ - auth = authunix_create(machname, (int)uid, (int)gid, ngids, - (int *)gids); + /* XXX: interface problem; we should translate from uid_t and gid_t */ + auth = authunix_create(machname, uid, gid, ngids, gids); free(gids); return (auth); } Modified: stable/9/lib/libc/rpc/authunix_prot.c ============================================================================== --- stable/9/lib/libc/rpc/authunix_prot.c Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/lib/libc/rpc/authunix_prot.c Sun Oct 7 05:11:29 2012 (r241309) @@ -60,19 +60,19 @@ xdr_authunix_parms(xdrs, p) XDR *xdrs; struct authunix_parms *p; { - int **paup_gids; + u_int **paup_gids; assert(xdrs != NULL); assert(p != NULL); paup_gids = &p->aup_gids; - if (xdr_u_long(xdrs, &(p->aup_time)) - && xdr_string(xdrs, &(p->aup_machname), MAX_MACHINE_NAME) - && xdr_int(xdrs, &(p->aup_uid)) - && xdr_int(xdrs, &(p->aup_gid)) - && xdr_array(xdrs, (char **) paup_gids, - &(p->aup_len), NGRPS, sizeof(int), (xdrproc_t)xdr_int) ) { + if (xdr_u_long(xdrs, &(p->aup_time)) && + xdr_string(xdrs, &(p->aup_machname), MAX_MACHINE_NAME) && + xdr_u_int(xdrs, &(p->aup_uid)) && + xdr_u_int(xdrs, &(p->aup_gid)) && + xdr_array(xdrs, (char **) paup_gids, + &(p->aup_len), NGRPS, sizeof(u_int), (xdrproc_t)xdr_u_int) ) { return (TRUE); } return (FALSE); Modified: stable/9/lib/libc/rpc/rpc_soc.3 ============================================================================== --- stable/9/lib/libc/rpc/rpc_soc.3 Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/lib/libc/rpc/rpc_soc.3 Sun Oct 7 05:11:29 2012 (r241309) @@ -148,7 +148,7 @@ default authentication used by .Ft "AUTH *" .Xc .It Xo -.Fn authunix_create "char *host" "int uid" "int gid" "int len" "int *aup_gids" +.Fn authunix_create "char *host" "u_int uid" "u_int gid" "int len" "u_int *aup_gids" .Xc .Pp Create and return an Modified: stable/9/lib/libc/rpc/svc_auth_unix.c ============================================================================== --- stable/9/lib/libc/rpc/svc_auth_unix.c Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/lib/libc/rpc/svc_auth_unix.c Sun Oct 7 05:11:29 2012 (r241309) @@ -68,7 +68,7 @@ _svcauth_unix(rqst, msg) struct area { struct authunix_parms area_aup; char area_machname[MAX_MACHINE_NAME+1]; - int area_gids[NGRPS]; + u_int area_gids[NGRPS]; } *area; u_int auth_len; size_t str_len, gid_len; Modified: stable/9/sys/rpc/auth.h ============================================================================== --- stable/9/sys/rpc/auth.h Sun Oct 7 02:08:19 2012 (r241308) +++ stable/9/sys/rpc/auth.h Sun Oct 7 05:11:29 2012 (r241309) @@ -234,18 +234,17 @@ __END_DECLS * System style authentication * AUTH *authunix_create(machname, uid, gid, len, aup_gids) * char *machname; - * int uid; - * int gid; + * u_int uid; + * u_int gid; * int len; - * int *aup_gids; + * u_int *aup_gids; */ __BEGIN_DECLS #ifdef _KERNEL struct ucred; extern AUTH *authunix_create(struct ucred *); #else -extern AUTH *authunix_create(char *, int, int, int, - int *); +extern AUTH *authunix_create(char *, u_int, u_int, int, u_int *); extern AUTH *authunix_create_default(void); /* takes no parameters */ #endif extern AUTH *authnone_create(void); /* takes no parameters */ From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:18:59 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D5120106564A; Sun, 7 Oct 2012 18:18:59 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BF2BD8FC0A; Sun, 7 Oct 2012 18:18:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IIx30046381; Sun, 7 Oct 2012 18:18:59 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IIxDd046379; Sun, 7 Oct 2012 18:18:59 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071818.q97IIxDd046379@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:18:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241314 - stable/9/sys/dev/cxgb X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:19:00 -0000 Author: jhb Date: Sun Oct 7 18:18:59 2012 New Revision: 241314 URL: http://svn.freebsd.org/changeset/base/241314 Log: MFC 239913: Attach interrupt handlers during attach instead of during the first time the interface is brought up. Without this, the boot time interrupt round-robin assignment does not think the allocated interrupt resources are active and leaves them assigned to CPU 0. While here, add descriptive tags to each interrupt handler when MSI-X is used. Modified: stable/9/sys/dev/cxgb/cxgb_main.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/cxgb/cxgb_main.c ============================================================================== --- stable/9/sys/dev/cxgb/cxgb_main.c Sun Oct 7 18:07:45 2012 (r241313) +++ stable/9/sys/dev/cxgb/cxgb_main.c Sun Oct 7 18:18:59 2012 (r241314) @@ -675,6 +675,9 @@ cxgb_controller_attach(device_t dev) for (i = 0; i < NUM_CPL_HANDLERS; i++) sc->cpl_handler[i] = cpl_not_handled; #endif + + t3_intr_clear(sc); + error = cxgb_setup_interrupts(sc); out: if (error) cxgb_free(sc); @@ -922,6 +925,7 @@ cxgb_setup_interrupts(adapter_t *sc) if (!(intr_flag & USING_MSIX) || err) return (err); + bus_describe_intr(sc->dev, sc->irq_res, sc->intr_tag, "err"); for (i = 0; i < sc->msi_count - 1; i++) { rid = i + 2; res = bus_alloc_resource_any(sc->dev, SYS_RES_IRQ, &rid, @@ -945,6 +949,7 @@ cxgb_setup_interrupts(adapter_t *sc) sc->msix_irq_rid[i] = rid; sc->msix_irq_res[i] = res; sc->msix_intr_tag[i] = tag; + bus_describe_intr(sc->dev, res, tag, "qs%d", i); } if (err) @@ -1611,11 +1616,6 @@ cxgb_up(struct adapter *sc) alloc_filters(sc); setup_rss(sc); - t3_intr_clear(sc); - err = cxgb_setup_interrupts(sc); - if (err) - goto out; - t3_add_configured_sysctls(sc); sc->flags |= FULL_INIT_DONE; } From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:23:00 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id F0BE1106564A; Sun, 7 Oct 2012 18:22:59 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DA4B68FC0A; Sun, 7 Oct 2012 18:22:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IMxJ7047052; Sun, 7 Oct 2012 18:22:59 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IMx7g047050; Sun, 7 Oct 2012 18:22:59 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071822.q97IMx7g047050@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:22:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241316 - stable/9/lib/libc/sys X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:23:00 -0000 Author: jhb Date: Sun Oct 7 18:22:59 2012 New Revision: 241316 URL: http://svn.freebsd.org/changeset/base/241316 Log: MFC 240132: When WIFCONTINUED was added, the number of "first" macros grew from three to four. Modified: stable/9/lib/libc/sys/wait.2 Directory Properties: stable/9/lib/libc/ (props changed) stable/9/lib/libc/sys/ (props changed) Modified: stable/9/lib/libc/sys/wait.2 ============================================================================== --- stable/9/lib/libc/sys/wait.2 Sun Oct 7 18:19:13 2012 (r241315) +++ stable/9/lib/libc/sys/wait.2 Sun Oct 7 18:22:59 2012 (r241316) @@ -177,7 +177,7 @@ with a value of -1. .Pp The following macros may be used to test the manner of exit of the process. -One of the first three macros will evaluate to a non-zero (true) value: +One of the first four macros will evaluate to a non-zero (true) value: .Bl -tag -width Ds .It Fn WIFCONTINUED status True if the process has not terminated, and From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:25:34 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 96606106566C; Sun, 7 Oct 2012 18:25:34 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 815D88FC08; Sun, 7 Oct 2012 18:25:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IPY34047461; Sun, 7 Oct 2012 18:25:34 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IPYXn047458; Sun, 7 Oct 2012 18:25:34 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071825.q97IPYXn047458@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:25:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241318 - stable/9/share/man/man9 X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:25:34 -0000 Author: jhb Date: Sun Oct 7 18:25:33 2012 New Revision: 241318 URL: http://svn.freebsd.org/changeset/base/241318 Log: MFC 239906: Clarify that bus_dma does not stall future load requests once a load is deferred. The caller is required to enforce that if that is desired. Modified: stable/9/share/man/man9/bus_dma.9 Directory Properties: stable/9/share/man/man9/ (props changed) Modified: stable/9/share/man/man9/bus_dma.9 ============================================================================== --- stable/9/share/man/man9/bus_dma.9 Sun Oct 7 18:23:15 2012 (r241317) +++ stable/9/share/man/man9/bus_dma.9 Sun Oct 7 18:25:33 2012 (r241318) @@ -580,8 +580,13 @@ The status of the mapping has been deliv The mapping has been deferred for lack of resources. The callback will be called as soon as resources are available. Callbacks are serviced in FIFO order. -To ensure that ordering is guaranteed, all subsequent load requests will also -be deferred until all callbacks have been processed. +.Pp +Note that subsequent load operations for the same tag that do not require +extra resources will still succeed. +This may result in out-of-order processing of requests. +If the caller requires the order of requests to be preserved, +then the caller is required to stall subsequent requests until a pending +request's callback is invoked. .It Er ENOMEM The load request has failed due to insufficient resources, and the caller specifically used the From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:31:01 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B79001065672; Sun, 7 Oct 2012 18:31:01 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 96FC48FC0A; Sun, 7 Oct 2012 18:31:01 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IV1Db048285; Sun, 7 Oct 2012 18:31:01 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IV1AA048281; Sun, 7 Oct 2012 18:31:01 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071831.q97IV1AA048281@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:31:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241320 - stable/9/bin/mv X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:31:01 -0000 Author: jhb Date: Sun Oct 7 18:31:01 2012 New Revision: 241320 URL: http://svn.freebsd.org/changeset/base/241320 Log: MFC 226961,239951: Add a -h flag similar to the -h flag for ln to force mv(1) to treat a symbolic link to a directory for the target as a symbolic link instead of a directory. This makes it possible to atomically update a symbolic link using rename(). Modified: stable/9/bin/mv/mv.1 stable/9/bin/mv/mv.c Directory Properties: stable/9/bin/mv/ (props changed) Modified: stable/9/bin/mv/mv.1 ============================================================================== --- stable/9/bin/mv/mv.1 Sun Oct 7 18:25:48 2012 (r241319) +++ stable/9/bin/mv/mv.1 Sun Oct 7 18:31:01 2012 (r241320) @@ -32,7 +32,7 @@ .\" @(#)mv.1 8.1 (Berkeley) 5/31/93 .\" $FreeBSD$ .\" -.Dd May 12, 2007 +.Dd August 28, 2012 .Dt MV 1 .Os .Sh NAME @@ -41,7 +41,7 @@ .Sh SYNOPSIS .Nm .Op Fl f | i | n -.Op Fl v +.Op Fl hv .Ar source target .Nm .Op Fl f | i | n @@ -81,6 +81,21 @@ option overrides any previous or .Fl n options.) +.It Fl h +If the +.Ar target +operand is a symbolic link to a directory, +do not follow it. +This causes the +.Nm +utility to rename the file +.Ar source +to the destination path +.Ar target +rather than moving +.Ar source +into the directory referenced by +.Ar target . .It Fl i Cause .Nm @@ -142,7 +157,8 @@ rm -rf source_file .Ex -std .Sh COMPATIBILITY The -.Fl n +.Fl h , +.Fl n , and .Fl v options are non-standard and their use in scripts is not recommended. Modified: stable/9/bin/mv/mv.c ============================================================================== --- stable/9/bin/mv/mv.c Sun Oct 7 18:25:48 2012 (r241319) +++ stable/9/bin/mv/mv.c Sun Oct 7 18:31:01 2012 (r241320) @@ -68,7 +68,7 @@ __FBSDID("$FreeBSD$"); /* Exit code for a failed exec. */ #define EXEC_FAILED 127 -int fflg, iflg, nflg, vflg; +static int fflg, hflg, iflg, nflg, vflg; static int copy(const char *, const char *); static int do_move(const char *, const char *); @@ -87,8 +87,11 @@ main(int argc, char *argv[]) int ch; char path[PATH_MAX]; - while ((ch = getopt(argc, argv, "finv")) != -1) + while ((ch = getopt(argc, argv, "fhinv")) != -1) switch (ch) { + case 'h': + hflg = 1; + break; case 'i': iflg = 1; fflg = nflg = 0; @@ -123,6 +126,17 @@ main(int argc, char *argv[]) exit(do_move(argv[0], argv[1])); } + /* + * If -h was specified, treat the target as a symlink instead of + * directory. + */ + if (hflg) { + if (argc > 2) + usage(); + if (lstat(argv[1], &sb) == 0 && S_ISLNK(sb.st_mode)) + exit(do_move(argv[0], argv[1])); + } + /* It's a directory, move each file into it. */ if (strlen(argv[argc - 1]) > sizeof(path) - 1) errx(1, "%s: destination pathname too long", *argv); @@ -489,7 +503,7 @@ usage(void) { (void)fprintf(stderr, "%s\n%s\n", - "usage: mv [-f | -i | -n] [-v] source target", + "usage: mv [-f | -i | -n] [-hv] source target", " mv [-f | -i | -n] [-v] source ... directory"); exit(EX_USAGE); } From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:37:48 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2308E106566C; Sun, 7 Oct 2012 18:37:48 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0E5308FC17; Sun, 7 Oct 2012 18:37:48 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IblsO049402; Sun, 7 Oct 2012 18:37:47 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IblVq049400; Sun, 7 Oct 2012 18:37:47 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071837.q97IblVq049400@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:37:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241322 - stable/9/sys/kern X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:37:48 -0000 Author: jhb Date: Sun Oct 7 18:37:47 2012 New Revision: 241322 URL: http://svn.freebsd.org/changeset/base/241322 Log: MFC 239335: Remove D_NEEDGIANT from dead_devsw. biofinish() (and thus dead_strategy) does not need Giant. Modified: stable/9/sys/kern/kern_conf.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/kern/kern_conf.c ============================================================================== --- stable/9/sys/kern/kern_conf.c Sun Oct 7 18:31:17 2012 (r241321) +++ stable/9/sys/kern/kern_conf.c Sun Oct 7 18:37:47 2012 (r241322) @@ -306,7 +306,6 @@ dead_strategy(struct bio *bp) static struct cdevsw dead_cdevsw = { .d_version = D_VERSION, - .d_flags = D_NEEDGIANT, /* XXX: does dead_strategy need this ? */ .d_open = dead_open, .d_close = dead_close, .d_read = dead_read, From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:41:49 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1822A106566B; Sun, 7 Oct 2012 18:41:49 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 03A818FC08; Sun, 7 Oct 2012 18:41:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IfmiS050037; Sun, 7 Oct 2012 18:41:48 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IfmJt050035; Sun, 7 Oct 2012 18:41:48 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071841.q97IfmJt050035@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:41:48 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241324 - stable/9/sys/dev/mfi X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:41:49 -0000 Author: jhb Date: Sun Oct 7 18:41:48 2012 New Revision: 241324 URL: http://svn.freebsd.org/changeset/base/241324 Log: MFC 240962: Grab the mfi_config_lock while performing a MFI_DCMD_CFG_FOREIGN_IMPORT request on behalf of a user utility. Modified: stable/9/sys/dev/mfi/mfi.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/mfi/mfi.c ============================================================================== --- stable/9/sys/dev/mfi/mfi.c Sun Oct 7 18:37:59 2012 (r241323) +++ stable/9/sys/dev/mfi/mfi.c Sun Oct 7 18:41:48 2012 (r241324) @@ -2550,6 +2550,7 @@ mfi_config_lock(struct mfi_softc *sc, ui case MFI_DCMD_LD_DELETE: case MFI_DCMD_CFG_ADD: case MFI_DCMD_CFG_CLEAR: + case MFI_DCMD_CFG_FOREIGN_IMPORT: sx_xlock(&sc->mfi_config_lock); return (1); default: From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:47:53 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id D72BD106575F; Sun, 7 Oct 2012 18:47:53 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C179E8FC08; Sun, 7 Oct 2012 18:47:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IlrOG051078; Sun, 7 Oct 2012 18:47:53 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97Ilrp5051076; Sun, 7 Oct 2012 18:47:53 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071847.q97Ilrp5051076@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:47:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241326 - stable/9/sys/x86/x86 X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:47:54 -0000 Author: jhb Date: Sun Oct 7 18:47:53 2012 New Revision: 241326 URL: http://svn.freebsd.org/changeset/base/241326 Log: MFC 239354: Allow static DMA allocations that allow for enough segments to do page-sized segments for the entire allocation to use kmem_alloc_attr() to allocate KVM rather than using kmem_alloc_contig(). This avoids requiring a single physically contiguous chunk in this case. Modified: stable/9/sys/x86/x86/busdma_machdep.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/x86/x86/busdma_machdep.c ============================================================================== --- stable/9/sys/x86/x86/busdma_machdep.c Sun Oct 7 18:42:02 2012 (r241325) +++ stable/9/sys/x86/x86/busdma_machdep.c Sun Oct 7 18:47:53 2012 (r241326) @@ -541,13 +541,14 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, voi dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) && attr == VM_MEMATTR_DEFAULT) { *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags); + } else if (dmat->nsegments >= btoc(dmat->maxsize) && + dmat->alignment <= PAGE_SIZE && + (dmat->boundary == 0 || dmat->boundary >= dmat->lowaddr)) { + /* Page-based multi-segment allocations allowed */ + *vaddr = (void *)kmem_alloc_attr(kernel_map, dmat->maxsize, + mflags, 0ul, dmat->lowaddr, attr); + *mapp = &contig_dmamap; } else { - /* - * XXX Use Contigmalloc until it is merged into this facility - * and handles multi-seg allocations. Nobody is doing - * multi-seg allocations yet though. - * XXX Certain AGP hardware does. - */ *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize, mflags, 0ul, dmat->lowaddr, dmat->alignment ? dmat->alignment : 1ul, dmat->boundary, attr); From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 18:57:29 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id BCD111065670; Sun, 7 Oct 2012 18:57:29 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A641A8FC17; Sun, 7 Oct 2012 18:57:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97IvTJd052578; Sun, 7 Oct 2012 18:57:29 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97IvTNO052576; Sun, 7 Oct 2012 18:57:29 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210071857.q97IvTNO052576@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 18:57:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241327 - stable/9/sys/net X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 18:57:30 -0000 Author: jhb Date: Sun Oct 7 18:57:29 2012 New Revision: 241327 URL: http://svn.freebsd.org/changeset/base/241327 Log: MFC 239440,239519: Refine the changes made in r208212 to avoid bogus failures from if_delmulti() when clearing the configuration for a subinterface when the parent interface is being detached. The current code was still triggering an assertion in if_delmulti() due to the parent interface being partially detached. Fix this by not calling if_delmulti() at all if the parent interface is being detached. Warn if if_delmulti() fails when the parent is not being detached (but similar to 208212, still proceed with tearing down the vlan state). Modified: stable/9/sys/net/if_vlan.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/net/if_vlan.c ============================================================================== --- stable/9/sys/net/if_vlan.c Sun Oct 7 18:47:53 2012 (r241326) +++ stable/9/sys/net/if_vlan.c Sun Oct 7 18:57:29 2012 (r241327) @@ -190,7 +190,7 @@ static int vlan_setflags(struct ifnet *i static int vlan_setmulti(struct ifnet *ifp); static int vlan_transmit(struct ifnet *ifp, struct mbuf *m); static void vlan_unconfig(struct ifnet *ifp); -static void vlan_unconfig_locked(struct ifnet *ifp); +static void vlan_unconfig_locked(struct ifnet *ifp, int departing); static int vlan_config(struct ifvlan *ifv, struct ifnet *p, uint16_t tag); static void vlan_link_state(struct ifnet *ifp); static void vlan_capabilities(struct ifvlan *ifv); @@ -575,7 +575,7 @@ vlan_ifdetach(void *arg __unused, struct #ifdef VLAN_ARRAY for (i = 0; i < VLAN_ARRAY_SIZE; i++) if ((ifv = ifp->if_vlantrunk->vlans[i])) { - vlan_unconfig_locked(ifv->ifv_ifp); + vlan_unconfig_locked(ifv->ifv_ifp, 1); if (ifp->if_vlantrunk == NULL) break; } @@ -583,7 +583,7 @@ vlan_ifdetach(void *arg __unused, struct restart: for (i = 0; i < (1 << ifp->if_vlantrunk->hwidth); i++) if ((ifv = LIST_FIRST(&ifp->if_vlantrunk->hash[i]))) { - vlan_unconfig_locked(ifv->ifv_ifp); + vlan_unconfig_locked(ifv->ifv_ifp, 1); if (ifp->if_vlantrunk) goto restart; /* trunk->hwidth can change */ else @@ -959,7 +959,7 @@ vlan_clone_create(struct if_clone *ifc, error = vlan_config(ifv, p, tag); if (error != 0) { /* - * Since we've partialy failed, we need to back + * Since we've partially failed, we need to back * out all the way, otherwise userland could get * confused. Thus, we destroy the interface. */ @@ -1298,17 +1298,18 @@ vlan_unconfig(struct ifnet *ifp) { VLAN_LOCK(); - vlan_unconfig_locked(ifp); + vlan_unconfig_locked(ifp, 0); VLAN_UNLOCK(); } static void -vlan_unconfig_locked(struct ifnet *ifp) +vlan_unconfig_locked(struct ifnet *ifp, int departing) { struct ifvlantrunk *trunk; struct vlan_mc_entry *mc; struct ifvlan *ifv; struct ifnet *parent; + int error; VLAN_LOCK_ASSERT(); @@ -1328,14 +1329,21 @@ vlan_unconfig_locked(struct ifnet *ifp) */ while ((mc = SLIST_FIRST(&ifv->vlan_mc_listhead)) != NULL) { /* - * This may fail if the parent interface is - * being detached. Regardless, we should do a - * best effort to free this interface as much - * as possible as all callers expect vlan - * destruction to succeed. + * If the parent interface is being detached, + * all its multicast addresses have already + * been removed. Warn about errors if + * if_delmulti() does fail, but don't abort as + * all callers expect vlan destruction to + * succeed. */ - (void)if_delmulti(parent, - (struct sockaddr *)&mc->mc_addr); + if (!departing) { + error = if_delmulti(parent, + (struct sockaddr *)&mc->mc_addr); + if (error) + if_printf(ifp, + "Failed to delete multicast address from parent: %d\n", + error); + } SLIST_REMOVE_HEAD(&ifv->vlan_mc_listhead, mc_entries); free(mc, M_VLAN); } From owner-svn-src-stable-9@FreeBSD.ORG Sun Oct 7 21:32:42 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8055A106566C; Sun, 7 Oct 2012 21:32:42 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 66DCF8FC08; Sun, 7 Oct 2012 21:32:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q97LWgmS074081; Sun, 7 Oct 2012 21:32:42 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q97LWgDc074078; Sun, 7 Oct 2012 21:32:42 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201210072132.q97LWgDc074078@svn.freebsd.org> From: John Baldwin Date: Sun, 7 Oct 2012 21:32:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241334 - stable/9/sys/conf X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 07 Oct 2012 21:32:42 -0000 Author: jhb Date: Sun Oct 7 21:32:41 2012 New Revision: 241334 URL: http://svn.freebsd.org/changeset/base/241334 Log: MFC 239955-239957: Cleanups and fixes for building firmware modules into a kernel: - Add common rules for building firmware object files (NORMAL_FW to run uudecode, and NORMAL_FWO to use ld to build the .fwo file) and use those instead of explicit ld/uudecode invocations in sys/conf/files. Apart from increasing readability, this makes it possible to adjust the flags used for firmware objects in one place. - Similar to how r171350 fixed linking of kernel modules containing firmware objects by adding --no-warn-mismatch to the linker flags, add --no-warn-mismatch when linking firmware objects (*.fwo) as well as to the link of the main kernel file. This permits firmware modules to be statically linked into an ia64 kernel. Modified: stable/9/sys/conf/files stable/9/sys/conf/kern.pre.mk Directory Properties: stable/9/sys/ (props changed) stable/9/sys/conf/ (props changed) Modified: stable/9/sys/conf/files ============================================================================== --- stable/9/sys/conf/files Sun Oct 7 20:36:46 2012 (r241333) +++ stable/9/sys/conf/files Sun Oct 7 21:32:41 2012 (r241334) @@ -1163,12 +1163,12 @@ ipwbssfw.c optional ipwbssfw | ipwfw clean "ipwbssfw.c" ipw_bss.fwo optional ipwbssfw | ipwfw \ dependency "ipw_bss.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} ipw_bss.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "ipw_bss.fwo" ipw_bss.fw optional ipwbssfw | ipwfw \ dependency "$S/contrib/dev/ipw/ipw2100-1.3.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ipw/ipw2100-1.3.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "ipw_bss.fw" ipwibssfw.c optional ipwibssfw | ipwfw \ @@ -1177,12 +1177,12 @@ ipwibssfw.c optional ipwibssfw | ipwfw clean "ipwibssfw.c" ipw_ibss.fwo optional ipwibssfw | ipwfw \ dependency "ipw_ibss.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} ipw_ibss.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "ipw_ibss.fwo" ipw_ibss.fw optional ipwibssfw | ipwfw \ dependency "$S/contrib/dev/ipw/ipw2100-1.3-i.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ipw/ipw2100-1.3-i.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "ipw_ibss.fw" ipwmonitorfw.c optional ipwmonitorfw | ipwfw \ @@ -1191,12 +1191,12 @@ ipwmonitorfw.c optional ipwmonitorfw | clean "ipwmonitorfw.c" ipw_monitor.fwo optional ipwmonitorfw | ipwfw \ dependency "ipw_monitor.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} ipw_monitor.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "ipw_monitor.fwo" ipw_monitor.fw optional ipwmonitorfw | ipwfw \ dependency "$S/contrib/dev/ipw/ipw2100-1.3-p.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ipw/ipw2100-1.3-p.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "ipw_monitor.fw" dev/iscsi/initiator/iscsi.c optional iscsi_initiator scbus @@ -1219,12 +1219,12 @@ iwibssfw.c optional iwibssfw | iwifw clean "iwibssfw.c" iwi_bss.fwo optional iwibssfw | iwifw \ dependency "iwi_bss.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwi_bss.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwi_bss.fwo" iwi_bss.fw optional iwibssfw | iwifw \ dependency "$S/contrib/dev/iwi/ipw2200-bss.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwi/ipw2200-bss.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwi_bss.fw" iwiibssfw.c optional iwiibssfw | iwifw \ @@ -1233,12 +1233,12 @@ iwiibssfw.c optional iwiibssfw | iwifw clean "iwiibssfw.c" iwi_ibss.fwo optional iwiibssfw | iwifw \ dependency "iwi_ibss.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwi_ibss.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwi_ibss.fwo" iwi_ibss.fw optional iwiibssfw | iwifw \ dependency "$S/contrib/dev/iwi/ipw2200-ibss.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwi/ipw2200-ibss.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwi_ibss.fw" iwimonitorfw.c optional iwimonitorfw | iwifw \ @@ -1247,12 +1247,12 @@ iwimonitorfw.c optional iwimonitorfw | clean "iwimonitorfw.c" iwi_monitor.fwo optional iwimonitorfw | iwifw \ dependency "iwi_monitor.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwi_monitor.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwi_monitor.fwo" iwi_monitor.fw optional iwimonitorfw | iwifw \ dependency "$S/contrib/dev/iwi/ipw2200-sniffer.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwi/ipw2200-sniffer.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwi_monitor.fw" dev/iwn/if_iwn.c optional iwn @@ -1262,12 +1262,12 @@ iwn1000fw.c optional iwn1000fw | iwnfw clean "iwn1000fw.c" iwn1000fw.fwo optional iwn1000fw | iwnfw \ dependency "iwn1000.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn1000.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn1000fw.fwo" iwn1000.fw optional iwn1000fw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-1000-39.31.5.1.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-1000-39.31.5.1.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn1000.fw" iwn4965fw.c optional iwn4965fw | iwnfw \ @@ -1276,12 +1276,12 @@ iwn4965fw.c optional iwn4965fw | iwnfw clean "iwn4965fw.c" iwn4965fw.fwo optional iwn4965fw | iwnfw \ dependency "iwn4965.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn4965.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn4965fw.fwo" iwn4965.fw optional iwn4965fw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-4965-228.61.2.24.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-4965-228.61.2.24.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn4965.fw" iwn5000fw.c optional iwn5000fw | iwnfw \ @@ -1290,12 +1290,12 @@ iwn5000fw.c optional iwn5000fw | iwnfw clean "iwn5000fw.c" iwn5000fw.fwo optional iwn5000fw | iwnfw \ dependency "iwn5000.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn5000.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn5000fw.fwo" iwn5000.fw optional iwn5000fw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-5000-8.83.5.1.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-5000-8.83.5.1.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn5000.fw" iwn5150fw.c optional iwn5150fw | iwnfw \ @@ -1304,12 +1304,12 @@ iwn5150fw.c optional iwn5150fw | iwnfw clean "iwn5150fw.c" iwn5150fw.fwo optional iwn5150fw | iwnfw \ dependency "iwn5150.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn5150.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn5150fw.fwo" iwn5150.fw optional iwn5150fw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-5150-8.24.2.2.fw.uu"\ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-5150-8.24.2.2.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn5150.fw" iwn6000fw.c optional iwn6000fw | iwnfw \ @@ -1318,12 +1318,12 @@ iwn6000fw.c optional iwn6000fw | iwnfw clean "iwn6000fw.c" iwn6000fw.fwo optional iwn6000fw | iwnfw \ dependency "iwn6000.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn6000.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn6000fw.fwo" iwn6000.fw optional iwn6000fw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-6000-9.221.4.1.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-6000-9.221.4.1.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn6000.fw" iwn6000g2afw.c optional iwn6000g2afw | iwnfw \ @@ -1332,12 +1332,12 @@ iwn6000g2afw.c optional iwn6000g2afw | clean "iwn6000g2afw.c" iwn6000g2afw.fwo optional iwn6000g2afw | iwnfw \ dependency "iwn6000g2a.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn6000g2a.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn6000g2afw.fwo" iwn6000g2a.fw optional iwn6000g2afw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-6000g2a-17.168.5.2.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-6000g2a-17.168.5.2.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn6000g2a.fw" iwn6000g2bfw.c optional iwn6000g2bfw | iwnfw \ @@ -1346,12 +1346,12 @@ iwn6000g2bfw.c optional iwn6000g2bfw | clean "iwn6000g2bfw.c" iwn6000g2bfw.fwo optional iwn6000g2bfw | iwnfw \ dependency "iwn6000g2b.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn6000g2b.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn6000g2bfw.fwo" iwn6000g2b.fw optional iwn6000g2bfw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-6000g2b-17.168.5.2.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-6000g2b-17.168.5.2.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn6000g2b.fw" iwn6050fw.c optional iwn6050fw | iwnfw \ @@ -1360,12 +1360,12 @@ iwn6050fw.c optional iwn6050fw | iwnfw clean "iwn6050fw.c" iwn6050fw.fwo optional iwn6050fw | iwnfw \ dependency "iwn6050.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} iwn6050.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "iwn6050fw.fwo" iwn6050.fw optional iwn6050fw | iwnfw \ dependency "$S/contrib/dev/iwn/iwlwifi-6050-41.28.5.1.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/iwn/iwlwifi-6050-41.28.5.1.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "iwn6050.fw" dev/ixgb/if_ixgb.c optional ixgb @@ -1494,22 +1494,22 @@ mwlfw.c optional mwlfw \ clean "mwlfw.c" mw88W8363.fwo optional mwlfw \ dependency "mw88W8363.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} mw88W8363.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "mw88W8363.fwo" mw88W8363.fw optional mwlfw \ dependency "$S/contrib/dev/mwl/mw88W8363.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/mwl/mw88W8363.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "mw88W8363.fw" mwlboot.fwo optional mwlfw \ dependency "mwlboot.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} mwlboot.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "mwlboot.fwo" mwlboot.fw optional mwlfw \ dependency "$S/contrib/dev/mwl/mwlboot.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/mwl/mwlboot.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "mwlboot.fw" dev/mxge/if_mxge.c optional mxge pci @@ -1626,12 +1626,12 @@ rt2561fw.c optional rt2561fw | ralfw clean "rt2561fw.c" rt2561fw.fwo optional rt2561fw | ralfw \ dependency "rt2561.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} rt2561.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "rt2561fw.fwo" rt2561.fw optional rt2561fw | ralfw \ dependency "$S/contrib/dev/ral/rt2561.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ral/rt2561.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "rt2561.fw" rt2561sfw.c optional rt2561sfw | ralfw \ @@ -1640,12 +1640,12 @@ rt2561sfw.c optional rt2561sfw | ralfw clean "rt2561sfw.c" rt2561sfw.fwo optional rt2561sfw | ralfw \ dependency "rt2561s.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} rt2561s.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "rt2561sfw.fwo" rt2561s.fw optional rt2561sfw | ralfw \ dependency "$S/contrib/dev/ral/rt2561s.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ral/rt2561s.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "rt2561s.fw" rt2661fw.c optional rt2661fw | ralfw \ @@ -1654,12 +1654,12 @@ rt2661fw.c optional rt2661fw | ralfw clean "rt2661fw.c" rt2661fw.fwo optional rt2661fw | ralfw \ dependency "rt2661.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} rt2661.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "rt2661fw.fwo" rt2661.fw optional rt2661fw | ralfw \ dependency "$S/contrib/dev/ral/rt2661.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ral/rt2661.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "rt2661.fw" rt2860fw.c optional rt2860fw | ralfw \ @@ -1668,12 +1668,12 @@ rt2860fw.c optional rt2860fw | ralfw clean "rt2860fw.c" rt2860fw.fwo optional rt2860fw | ralfw \ dependency "rt2860.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} rt2860.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "rt2860fw.fwo" rt2860.fw optional rt2860fw | ralfw \ dependency "$S/contrib/dev/ral/rt2860.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/ral/rt2860.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "rt2860.fw" dev/random/harvest.c standard @@ -1958,12 +1958,12 @@ runfw.c optional runfw \ clean "runfw.c" runfw.fwo optional runfw \ dependency "runfw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} runfw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "runfw.fwo" runfw optional runfw \ dependency "$S/contrib/dev/run/rt2870.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/run/rt2870.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "runfw" dev/usb/wlan/if_uath.c optional uath @@ -2071,12 +2071,12 @@ wpifw.c optional wpifw \ clean "wpifw.c" wpifw.fwo optional wpifw \ dependency "wpi.fw" \ - compile-with "${LD} -b binary -d -warn-common -r -d -o ${.TARGET} wpi.fw" \ + compile-with "${NORMAL_FWO}" \ no-implicit-rule \ clean "wpifw.fwo" wpi.fw optional wpifw \ dependency "$S/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu" \ - compile-with "uudecode -o ${.TARGET} $S/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu" \ + compile-with "${NORMAL_FW}" \ no-obj no-implicit-rule \ clean "wpi.fw" dev/xe/if_xe.c optional xe Modified: stable/9/sys/conf/kern.pre.mk ============================================================================== --- stable/9/sys/conf/kern.pre.mk Sun Oct 7 20:36:46 2012 (r241333) +++ stable/9/sys/conf/kern.pre.mk Sun Oct 7 21:32:41 2012 (r241334) @@ -131,6 +131,10 @@ NORMAL_C_NOWERROR= ${CC} -c ${CFLAGS} ${ NORMAL_M= ${AWK} -f $S/tools/makeobjops.awk ${.IMPSRC} -c ; \ ${CC} -c ${CFLAGS} ${WERROR} ${PROF} ${.PREFIX}.c +NORMAL_FW= uudecode -o ${.TARGET} ${.ALLSRC} +NORMAL_FWO= ${LD} -b binary --no-warn-mismatch -d -warn-common -r \ + -o ${.TARGET} ${.ALLSRC:M*.fw} + NORMAL_CTFCONVERT= [ -z "${CTFCONVERT}" -o -n "${NO_CTF}" ] || \ ${CTFCONVERT} ${CTFFLAGS} ${.TARGET} @@ -151,7 +155,7 @@ SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS} SYSTEM_OBJS+= ${SYSTEM_CFILES:.c=.o} SYSTEM_OBJS+= hack.So SYSTEM_CTFMERGE= [ -z "${CTFMERGE}" -o -n "${NO_CTF}" ] || ${CTFMERGE} ${CTFFLAGS} -o ${.TARGET} ${SYSTEM_OBJS} vers.o -SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} \ +SYSTEM_LD= @${LD} -Bdynamic -T ${LDSCRIPT} --no-warn-mismatch \ -warn-common -export-dynamic -dynamic-linker /red/herring \ -o ${.TARGET} -X ${SYSTEM_OBJS} vers.o SYSTEM_LD_TAIL= @${OBJCOPY} --strip-symbol gcc2_compiled. ${.TARGET} ; \ From owner-svn-src-stable-9@FreeBSD.ORG Mon Oct 8 05:50:59 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 2AC01106566B; Mon, 8 Oct 2012 05:50:59 +0000 (UTC) (envelope-from dougb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0B5328FC0C; Mon, 8 Oct 2012 05:50:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q985owNx040756; Mon, 8 Oct 2012 05:50:58 GMT (envelope-from dougb@svn.freebsd.org) Received: (from dougb@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q985owp7040754; Mon, 8 Oct 2012 05:50:58 GMT (envelope-from dougb@svn.freebsd.org) Message-Id: <201210080550.q985owp7040754@svn.freebsd.org> From: Doug Barton Date: Mon, 8 Oct 2012 05:50:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241337 - stable/9/usr.sbin/mergemaster X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Oct 2012 05:50:59 -0000 Author: dougb Date: Mon Oct 8 05:50:58 2012 New Revision: 241337 URL: http://svn.freebsd.org/changeset/base/241337 Log: MFC r241218: Remove references to CVS so that people will stop bringing it up For -p: The localtime update should have been excluded in the first place The make.conf comparison has been OBE for some time now, and there is no src.conf equivalent to share/examples/make.conf, so remove the whole thing. Update copyright Modified: stable/9/usr.sbin/mergemaster/mergemaster.sh Directory Properties: stable/9/usr.sbin/mergemaster/ (props changed) Modified: stable/9/usr.sbin/mergemaster/mergemaster.sh ============================================================================== --- stable/9/usr.sbin/mergemaster/mergemaster.sh Sun Oct 7 23:45:19 2012 (r241336) +++ stable/9/usr.sbin/mergemaster/mergemaster.sh Mon Oct 8 05:50:58 2012 (r241337) @@ -5,8 +5,8 @@ # Compare files created by /usr/src/etc/Makefile (or the directory # the user specifies) with the currently installed copies. -# Copyright 1998-2011 Douglas Barton -# dougb@FreeBSD.org +# Copyright (c) 1998-2012 Douglas Barton, All rights reserved +# Please see detailed copyright below # $FreeBSD$ @@ -532,9 +532,9 @@ if [ -t 0 ]; then esac fi -# Define what CVS $Id tag to look for to aid portability. +# Define what $Id tag to look for to aid portability. # -CVS_ID_TAG=FreeBSD +ID_TAG=FreeBSD delete_temproot () { rm -rf "${TEMPROOT}" 2>/dev/null @@ -1095,17 +1095,17 @@ for COMPFILE in `find . -type f | sort`; case "${STRICT}" in '' | [Nn][Oo]) - # Compare CVS $Id's first so if the file hasn't been modified + # Compare $Id's first so if the file hasn't been modified # local changes will be ignored. # If the files have the same $Id, delete the one in temproot so the # user will have less to wade through if files are left to merge by hand. # - CVSID1=`grep "[$]${CVS_ID_TAG}:" ${DESTDIR}${COMPFILE#.} 2>/dev/null` - CVSID2=`grep "[$]${CVS_ID_TAG}:" ${COMPFILE} 2>/dev/null` || CVSID2=none + ID1=`grep "[$]${ID_TAG}:" ${DESTDIR}${COMPFILE#.} 2>/dev/null` + ID2=`grep "[$]${ID_TAG}:" ${COMPFILE} 2>/dev/null` || ID2=none - case "${CVSID2}" in - "${CVSID1}") - echo " *** Temp ${COMPFILE} and installed have the same CVS Id, deleting" + case "${ID2}" in + "${ID1}") + echo " *** Temp ${COMPFILE} and installed have the same Id, deleting" rm "${COMPFILE}" ;; esac @@ -1334,7 +1334,7 @@ case "${NEED_PWD_MKDB}" in ;; esac -if [ -e "${DESTDIR}/etc/localtime" ]; then # Ignore if TZ == UTC +if [ -e "${DESTDIR}/etc/localtime" -a -z "${PRE_WORLD}" ]; then # Ignore if TZ == UTC echo '' [ -n "${DESTDIR}" ] && tzs_args="-C ${DESTDIR}" if [ -f "${DESTDIR}/var/db/zoneinfo" ]; then @@ -1380,29 +1380,35 @@ case "${COMP_CONFS}" in ;; esac -case "${PRE_WORLD}" in -'') ;; -*) - MAKE_CONF="${SOURCEDIR}/share/examples/etc/make.conf" - - (echo '' - echo '*** Comparing make variables' - echo '' - echo "*** From ${DESTDIR}/etc/make.conf" - echo "*** From ${MAKE_CONF}" - - for MAKE_VAR in `grep -i ^[a-z] ${DESTDIR}/etc/make.conf | cut -d '=' -f 1`; do - echo '' - grep -w ^${MAKE_VAR} ${DESTDIR}/etc/make.conf - grep -w ^#${MAKE_VAR} ${MAKE_CONF} || - echo ' * No example variable with this name' - done) | ${PAGER} - ;; -esac - if [ -n "${PRESERVE_FILES}" ]; then find -d $PRESERVE_FILES_DIR -type d -empty -delete 2>/dev/null rmdir $PRESERVE_FILES_DIR 2>/dev/null fi exit 0 + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +# Copyright (c) 1998-2012 Douglas Barton +# 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. From owner-svn-src-stable-9@FreeBSD.ORG Mon Oct 8 12:59:09 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CB7B9106564A; Mon, 8 Oct 2012 12:59:09 +0000 (UTC) (envelope-from rmacklem@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B4AAE8FC1A; Mon, 8 Oct 2012 12:59:09 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q98Cx9i6003791; Mon, 8 Oct 2012 12:59:09 GMT (envelope-from rmacklem@svn.freebsd.org) Received: (from rmacklem@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q98Cx9WS003789; Mon, 8 Oct 2012 12:59:09 GMT (envelope-from rmacklem@svn.freebsd.org) Message-Id: <201210081259.q98Cx9WS003789@svn.freebsd.org> From: Rick Macklem Date: Mon, 8 Oct 2012 12:59:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r241347 - stable/9/usr.sbin/mountd X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Oct 2012 12:59:09 -0000 Author: rmacklem Date: Mon Oct 8 12:59:09 2012 New Revision: 241347 URL: http://svn.freebsd.org/changeset/base/241347 Log: MFC: r240902 Attila Bogar reported a bug in mountd when multiple export entries with different security flavors are in the exports(5) file. For that case, mountd replies with the security flavors of the last entry and not the correct one for the client host. This patch fixes that by storing separate copies of the flavors for each host/net case, plus a default one for the case where no hosts/nets are specified on an entry in the exports(5) file. Unlike the patch in the PR, it replies with the security flavors for the entry instead of merging the security flavors for all the entries and replying with that. Modified: stable/9/usr.sbin/mountd/mountd.c Directory Properties: stable/9/usr.sbin/mountd/ (props changed) Modified: stable/9/usr.sbin/mountd/mountd.c ============================================================================== --- stable/9/usr.sbin/mountd/mountd.c Mon Oct 8 10:43:59 2012 (r241346) +++ stable/9/usr.sbin/mountd/mountd.c Mon Oct 8 12:59:09 2012 (r241347) @@ -117,6 +117,8 @@ struct exportlist { char *ex_indexfile; int ex_numsecflavors; int ex_secflavors[MAXSECFLAVORS]; + int ex_defnumsecflavors; + int ex_defsecflavors[MAXSECFLAVORS]; }; /* ex_flag bits */ #define EX_LINKED 0x1 @@ -136,6 +138,8 @@ struct grouplist { int gr_type; union grouptypes gr_ptr; struct grouplist *gr_next; + int gr_numsecflavors; + int gr_secflavors[MAXSECFLAVORS]; }; /* Group types */ #define GT_NULL 0x0 @@ -163,12 +167,13 @@ struct fhreturn { /* Global defs */ char *add_expdir(struct dirlist **, char *, int); void add_dlist(struct dirlist **, struct dirlist *, - struct grouplist *, int); + struct grouplist *, int, struct exportlist *); void add_mlist(char *, char *); int check_dirpath(char *); int check_options(struct dirlist *); int checkmask(struct sockaddr *sa); -int chk_host(struct dirlist *, struct sockaddr *, int *, int *); +int chk_host(struct dirlist *, struct sockaddr *, int *, int *, int *, + int **); static int create_service(struct netconfig *nconf); static void complete_service(struct netconfig *nconf, char *port_str); static void clearout_service(void); @@ -938,6 +943,7 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t char rpcpath[MNTPATHLEN + 1], dirpath[MAXPATHLEN]; int bad = 0, defset, hostset; sigset_t sighup_mask; + int numsecflavors, *secflavorsp; sigemptyset(&sighup_mask); sigaddset(&sighup_mask, SIGHUP); @@ -1000,9 +1006,11 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t sigprocmask(SIG_BLOCK, &sighup_mask, NULL); ep = ex_search(&fsb.f_fsid); hostset = defset = 0; - if (ep && (chk_host(ep->ex_defdir, saddr, &defset, &hostset) || + if (ep && (chk_host(ep->ex_defdir, saddr, &defset, &hostset, + &numsecflavors, &secflavorsp) || ((dp = dirp_search(ep->ex_dirl, dirpath)) && - chk_host(dp, saddr, &defset, &hostset)) || + chk_host(dp, saddr, &defset, &hostset, &numsecflavors, + &secflavorsp)) || (defset && scan_tree(ep->ex_defdir, saddr) == 0 && scan_tree(ep->ex_dirl, saddr) == 0))) { if (bad) { @@ -1012,10 +1020,15 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL); return; } - if (hostset & DP_HOSTSET) + if (hostset & DP_HOSTSET) { fhr.fhr_flag = hostset; - else + fhr.fhr_numsecflavors = numsecflavors; + fhr.fhr_secflavors = secflavorsp; + } else { fhr.fhr_flag = defset; + fhr.fhr_numsecflavors = ep->ex_defnumsecflavors; + fhr.fhr_secflavors = ep->ex_defsecflavors; + } fhr.fhr_vers = rqstp->rq_vers; /* Get the file handle */ memset(&fhr.fhr_fh, 0, sizeof(nfsfh_t)); @@ -1028,8 +1041,6 @@ mntsrv(struct svc_req *rqstp, SVCXPRT *t sigprocmask(SIG_UNBLOCK, &sighup_mask, NULL); return; } - fhr.fhr_numsecflavors = ep->ex_numsecflavors; - fhr.fhr_secflavors = ep->ex_secflavors; if (!svc_sendreply(transp, (xdrproc_t)xdr_fhs, (caddr_t)&fhr)) syslog(LOG_ERR, "can't send reply"); @@ -1884,11 +1895,21 @@ hang_dirp(struct dirlist *dp, struct gro ep->ex_defdir = dp; if (grp == (struct grouplist *)NULL) { ep->ex_defdir->dp_flag |= DP_DEFSET; + /* Save the default security flavors list. */ + ep->ex_defnumsecflavors = ep->ex_numsecflavors; + if (ep->ex_numsecflavors > 0) + memcpy(ep->ex_defsecflavors, ep->ex_secflavors, + sizeof(ep->ex_secflavors)); } else while (grp) { hp = get_ht(); hp->ht_grp = grp; hp->ht_next = ep->ex_defdir->dp_hosts; ep->ex_defdir->dp_hosts = hp; + /* Save the security flavors list for this host set. */ + grp->gr_numsecflavors = ep->ex_numsecflavors; + if (ep->ex_numsecflavors > 0) + memcpy(grp->gr_secflavors, ep->ex_secflavors, + sizeof(ep->ex_secflavors)); grp = grp->gr_next; } } else { @@ -1898,7 +1919,7 @@ hang_dirp(struct dirlist *dp, struct gro */ while (dp) { dp2 = dp->dp_left; - add_dlist(&ep->ex_dirl, dp, grp, flags); + add_dlist(&ep->ex_dirl, dp, grp, flags, ep); dp = dp2; } } @@ -1910,7 +1931,7 @@ hang_dirp(struct dirlist *dp, struct gro */ void add_dlist(struct dirlist **dpp, struct dirlist *newdp, struct grouplist *grp, - int flags) + int flags, struct exportlist *ep) { struct dirlist *dp; struct hostlist *hp; @@ -1920,10 +1941,10 @@ add_dlist(struct dirlist **dpp, struct d if (dp) { cmp = strcmp(dp->dp_dirp, newdp->dp_dirp); if (cmp > 0) { - add_dlist(&dp->dp_left, newdp, grp, flags); + add_dlist(&dp->dp_left, newdp, grp, flags, ep); return; } else if (cmp < 0) { - add_dlist(&dp->dp_right, newdp, grp, flags); + add_dlist(&dp->dp_right, newdp, grp, flags, ep); return; } else free((caddr_t)newdp); @@ -1942,10 +1963,20 @@ add_dlist(struct dirlist **dpp, struct d hp->ht_grp = grp; hp->ht_next = dp->dp_hosts; dp->dp_hosts = hp; + /* Save the security flavors list for this host set. */ + grp->gr_numsecflavors = ep->ex_numsecflavors; + if (ep->ex_numsecflavors > 0) + memcpy(grp->gr_secflavors, ep->ex_secflavors, + sizeof(ep->ex_secflavors)); grp = grp->gr_next; } while (grp); } else { dp->dp_flag |= DP_DEFSET; + /* Save the default security flavors list. */ + ep->ex_defnumsecflavors = ep->ex_numsecflavors; + if (ep->ex_numsecflavors > 0) + memcpy(ep->ex_defsecflavors, ep->ex_secflavors, + sizeof(ep->ex_secflavors)); } } @@ -1974,7 +2005,7 @@ dirp_search(struct dirlist *dp, char *di */ int chk_host(struct dirlist *dp, struct sockaddr *saddr, int *defsetp, - int *hostsetp) + int *hostsetp, int *numsecflavors, int **secflavorsp) { struct hostlist *hp; struct grouplist *grp; @@ -1993,6 +2024,12 @@ chk_host(struct dirlist *dp, struct sock if (!sacmp(ai->ai_addr, saddr, NULL)) { *hostsetp = (hp->ht_flag | DP_HOSTSET); + if (numsecflavors != NULL) { + *numsecflavors = + grp->gr_numsecflavors; + *secflavorsp = + grp->gr_secflavors; + } return (1); } } @@ -2003,6 +2040,12 @@ chk_host(struct dirlist *dp, struct sock (struct sockaddr *) &grp->gr_ptr.gt_net.nt_mask)) { *hostsetp = (hp->ht_flag | DP_HOSTSET); + if (numsecflavors != NULL) { + *numsecflavors = + grp->gr_numsecflavors; + *secflavorsp = + grp->gr_secflavors; + } return (1); } break; @@ -2024,7 +2067,7 @@ scan_tree(struct dirlist *dp, struct soc if (dp) { if (scan_tree(dp->dp_left, saddr)) return (1); - if (chk_host(dp, saddr, &defset, &hostset)) + if (chk_host(dp, saddr, &defset, &hostset, NULL, NULL)) return (1); if (scan_tree(dp->dp_right, saddr)) return (1); From owner-svn-src-stable-9@FreeBSD.ORG Tue Oct 9 06:32:27 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A9695107E; Tue, 9 Oct 2012 06:32:27 +0000 (UTC) (envelope-from sbruno@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 769868FC22; Tue, 9 Oct 2012 06:32:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q993fxM4024283; Tue, 9 Oct 2012 03:41:59 GMT (envelope-from sbruno@svn.freebsd.org) Received: (from sbruno@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q993fx8F024277; Tue, 9 Oct 2012 03:41:59 GMT (envelope-from sbruno@svn.freebsd.org) Message-Id: <201210090341.q993fx8F024277@svn.freebsd.org> From: Sean Bruno Date: Tue, 9 Oct 2012 03:41:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241366 - stable/9/sys/dev/e1000 X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Oct 2012 06:32:27 -0000 Author: sbruno Date: Tue Oct 9 03:41:59 2012 New Revision: 241366 URL: http://svn.freebsd.org/changeset/base/241366 Log: MFC r240879 This patch fixes a nit in the em, lem, and igb driver statistics. Increment adapter->dropped_pkts instead of if_ierrors because if_ierrors is overwritten by hw stats collection. Submitted by: Andrew Boyer Reviewed by: Jack F Vogel Modified: stable/9/sys/dev/e1000/if_em.c stable/9/sys/dev/e1000/if_igb.c stable/9/sys/dev/e1000/if_lem.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) stable/9/sys/dev/e1000/ (props changed) Modified: stable/9/sys/dev/e1000/if_em.c ============================================================================== --- stable/9/sys/dev/e1000/if_em.c Tue Oct 9 03:11:15 2012 (r241365) +++ stable/9/sys/dev/e1000/if_em.c Tue Oct 9 03:41:59 2012 (r241366) @@ -4434,7 +4434,7 @@ em_rxeof(struct rx_ring *rxr, int count, if ((cur->errors & E1000_RXD_ERR_FRAME_ERR_MASK) || (rxr->discard == TRUE)) { - ifp->if_ierrors++; + adapter->dropped_pkts++; ++rxr->rx_discarded; if (!eop) /* Catch subsequent segs */ rxr->discard = TRUE; Modified: stable/9/sys/dev/e1000/if_igb.c ============================================================================== --- stable/9/sys/dev/e1000/if_igb.c Tue Oct 9 03:11:15 2012 (r241365) +++ stable/9/sys/dev/e1000/if_igb.c Tue Oct 9 03:41:59 2012 (r241366) @@ -4752,7 +4752,7 @@ igb_rxeof(struct igb_queue *que, int cou /* Make sure all segments of a bad packet are discarded */ if (((staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) != 0) || (rxr->discard)) { - ifp->if_ierrors++; + adapter->dropped_pkts++; ++rxr->rx_discarded; if (!eop) /* Catch subsequent segs */ rxr->discard = TRUE; Modified: stable/9/sys/dev/e1000/if_lem.c ============================================================================== --- stable/9/sys/dev/e1000/if_lem.c Tue Oct 9 03:11:15 2012 (r241365) +++ stable/9/sys/dev/e1000/if_lem.c Tue Oct 9 03:41:59 2012 (r241366) @@ -3597,7 +3597,7 @@ skip: adapter->lmp = NULL; } } else { - ifp->if_ierrors++; + adapter->dropped_pkts++; discard: /* Reuse loaded DMA map and just update mbuf chain */ mp = adapter->rx_buffer_area[i].m_head; From owner-svn-src-stable-9@FreeBSD.ORG Tue Oct 9 13:34:50 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1E822883 for ; Tue, 9 Oct 2012 13:34:50 +0000 (UTC) (envelope-from jpm820@gmail.com) Received: from mail-vc0-f182.google.com (mail-vc0-f182.google.com [209.85.220.182]) by mx1.freebsd.org (Postfix) with ESMTP id C567A8FC0C for ; Tue, 9 Oct 2012 13:34:49 +0000 (UTC) Received: by mail-vc0-f182.google.com with SMTP id fw7so8422676vcb.13 for ; Tue, 09 Oct 2012 06:34:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=cCdjnon/y37qL40ProKspKPUCv2jLRzqt8fDCaB0hBQ=; b=epg8K2lTwpFraMTn9Mtb10Z+Y7MmoviFVKZAGsPOasAUp9Qrv4lmIu7fqqqyPyQQsl UOoBao4Rac3uku0gPRW9M2qujJHm/cLLgK6ml9mKyCZBjDU42+iEvOKAIXGoOjkEBLOW XMixe7L0uuYHflPWhnrecWcAk3gcKH3UGiODKDS7IbtFU133C570LJo22t7E+GG0V7Ug JxxwC6as/0HWtUjmlVFr6ZudUX/jmV11Ya+FkjbE0cGfkqY/sonxjHZJLHHHZpYjVfu7 ij0OPcmVTn5u8j4ZH0Em6QFlwEMlWOgQ3wAqqUtg0zDqejl5kdXw7jrWchPi/tHEczPL 9qUQ== MIME-Version: 1.0 Received: by 10.220.225.138 with SMTP id is10mr11664398vcb.24.1349789689152; Tue, 09 Oct 2012 06:34:49 -0700 (PDT) Received: by 10.58.238.101 with HTTP; Tue, 9 Oct 2012 06:34:49 -0700 (PDT) Date: Tue, 9 Oct 2012 08:34:49 -0500 Message-ID: Subject: 9.1 rc1 problem running buildworld with rc2 src From: Joe Maloney To: svn-src-stable-9@freebsd.org Content-Type: text/plain; charset=ISO-8859-1 X-Content-Filtered-By: Mailman/MimeDel 2.1.14 X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Oct 2012 13:34:50 -0000 malco_2001 [image: malco_2001 is online now] Junior Member Join Date: Oct 2010 Posts: 7 Thanks: 0 Thanked 1 Time in 1 Post [image: Default] *9.1rc1 problem running buildworld with rc2 src* ------------------------------ Running this from FreeBSD 9.1 RC1 to update to RC2 svn co svn://svn0.us-west.freebsd.org/base/stable/9 /usr/src make buildworld will generate this cc -O2 -pipe -I/usr/src/lib/libc/include -I/usr/src/lib/libc/../../include -I/usr/src/lib/libc/amd64 -DNLS -D__DBINTERFACE_PRIVATE -I/usr/src/lib/libc/../../contrib/gdtoa -DINET6 -I/usr/obj/usr/src/lib/libc -I/usr/src/lib/libc/resolv -D_ACL_PRIVATE -DPOSIX_MISTAKE -I/usr/src/lib/libc/../../contrib/tzcode/stdtime -I/usr/src/lib/libc/stdtime -I/usr/src/lib/libc/locale -DBROKEN_DES -DPORTMAP -DDES_BUILTIN -I/usr/src/lib/libc/rpc -DYP -DNS_CACHING -DSYMBOL_VERSIONING -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -Wno-uninitialized -Wno-pointer-sign -c nsparser.c -o nsparser.o cc1: warnings being treated as errors /usr/src/lib/libc/net/nsparser.y: In function '_nsaddsrctomap': /usr/src/lib/libc/net/nsparser.y:169: warning: implicit declaration of function 'free' In file included from nsparser.c:398: /usr/src/lib/libc/../../include/stdlib.h: At top level: /usr/src/lib/libc/../../include/stdlib.h:93: warning: conflicting types for 'free' /usr/src/lib/libc/net/nsparser.y:169: warning: previous implicit declaration of 'free' was here *** [nsparser.o] Error code 1 Stop in /usr/src/lib/libc. *** [lib/libc__L] Error code 1 Stop in /usr/src. *** [libraries] Error code 1 Stop in /usr/src. *** [_libraries] Error code 1 Stop in /usr/src. *** [buildworld] Error code 1 Stop in /usr/src. root@bsd91rc1:/usr/src # I am able to build the src on a fresh install of rc2. Has anyone else run into this? From owner-svn-src-stable-9@FreeBSD.ORG Tue Oct 9 19:53:16 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 3FD9C7F4; Tue, 9 Oct 2012 19:53:16 +0000 (UTC) (envelope-from jimharris@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 27DE88FC0C; Tue, 9 Oct 2012 19:53:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q99JrGUx066236; Tue, 9 Oct 2012 19:53:16 GMT (envelope-from jimharris@svn.freebsd.org) Received: (from jimharris@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q99JrFJr066234; Tue, 9 Oct 2012 19:53:15 GMT (envelope-from jimharris@svn.freebsd.org) Message-Id: <201210091953.q99JrFJr066234@svn.freebsd.org> From: Jim Harris Date: Tue, 9 Oct 2012 19:53:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241379 - stable/9/sys/dev/tws X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Oct 2012 19:53:16 -0000 Author: jimharris Date: Tue Oct 9 19:53:15 2012 New Revision: 241379 URL: http://svn.freebsd.org/changeset/base/241379 Log: MFC r240900: Specify MTX_RECURSE for the controller's io_lock. Without it, tws(4) immediately panics on boot with INVARIANTS enabled. The driver already clearly expects to be able to recurse on this mutex - the main I/O path is always recursing on this lock. Modified: stable/9/sys/dev/tws/tws.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/tws/tws.c ============================================================================== --- stable/9/sys/dev/tws/tws.c Tue Oct 9 18:45:08 2012 (r241378) +++ stable/9/sys/dev/tws/tws.c Tue Oct 9 19:53:15 2012 (r241379) @@ -197,7 +197,7 @@ tws_attach(device_t dev) mtx_init( &sc->q_lock, "tws_q_lock", NULL, MTX_DEF); mtx_init( &sc->sim_lock, "tws_sim_lock", NULL, MTX_DEF); mtx_init( &sc->gen_lock, "tws_gen_lock", NULL, MTX_DEF); - mtx_init( &sc->io_lock, "tws_io_lock", NULL, MTX_DEF); + mtx_init( &sc->io_lock, "tws_io_lock", NULL, MTX_DEF | MTX_RECURSE); if ( tws_init_trace_q(sc) == FAILURE ) printf("trace init failure\n"); From owner-svn-src-stable-9@FreeBSD.ORG Tue Oct 9 19:55:13 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0A69F89E; Tue, 9 Oct 2012 19:55:13 +0000 (UTC) (envelope-from jimharris@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E6C4F8FC08; Tue, 9 Oct 2012 19:55:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q99JtCDv066671; Tue, 9 Oct 2012 19:55:12 GMT (envelope-from jimharris@svn.freebsd.org) Received: (from jimharris@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q99JtCD7066669; Tue, 9 Oct 2012 19:55:12 GMT (envelope-from jimharris@svn.freebsd.org) Message-Id: <201210091955.q99JtCD7066669@svn.freebsd.org> From: Jim Harris Date: Tue, 9 Oct 2012 19:55:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241380 - stable/9/sys/dev/tws X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Oct 2012 19:55:13 -0000 Author: jimharris Date: Tue Oct 9 19:55:12 2012 New Revision: 241380 URL: http://svn.freebsd.org/changeset/base/241380 Log: MFC r240901: Use CAM_SEL_TIMEOUT and CAM_DEV_NOT_THERE to report missing targets or LUNs respectively. This removes a huge number of error messages from CAM during bus scans. Modified: stable/9/sys/dev/tws/tws_cam.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/tws/tws_cam.c ============================================================================== --- stable/9/sys/dev/tws/tws_cam.c Tue Oct 9 19:53:15 2012 (r241379) +++ stable/9/sys/dev/tws/tws_cam.c Tue Oct 9 19:55:12 2012 (r241380) @@ -529,10 +529,10 @@ tws_scsi_err_complete(struct tws_request if ( ccb->ccb_h.target_lun ) { TWS_TRACE_DEBUG(sc, "invalid lun error",0,0); - ccb->ccb_h.status |= CAM_LUN_INVALID; + ccb->ccb_h.status |= CAM_DEV_NOT_THERE; } else { TWS_TRACE_DEBUG(sc, "invalid target error",0,0); - ccb->ccb_h.status |= CAM_TID_INVALID; + ccb->ccb_h.status |= CAM_SEL_TIMEOUT; } } else { From owner-svn-src-stable-9@FreeBSD.ORG Tue Oct 9 20:05:20 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8E96FBD4; Tue, 9 Oct 2012 20:05:20 +0000 (UTC) (envelope-from jimharris@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 769F68FC08; Tue, 9 Oct 2012 20:05:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q99K5KAe069034; Tue, 9 Oct 2012 20:05:20 GMT (envelope-from jimharris@svn.freebsd.org) Received: (from jimharris@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q99K5KPW069032; Tue, 9 Oct 2012 20:05:20 GMT (envelope-from jimharris@svn.freebsd.org) Message-Id: <201210092005.q99K5KPW069032@svn.freebsd.org> From: Jim Harris Date: Tue, 9 Oct 2012 20:05:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241383 - stable/9/sys/dev/pci X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 09 Oct 2012 20:05:20 -0000 Author: jimharris Date: Tue Oct 9 20:05:19 2012 New Revision: 241383 URL: http://svn.freebsd.org/changeset/base/241383 Log: MFC r240695: Add constants for programming interfaces for NVM/solid state storage controller sub-class code. Reference: PCI Code and ID Assignment Specification Rev 1.2 Modified: stable/9/sys/dev/pci/pcireg.h Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/pci/pcireg.h ============================================================================== --- stable/9/sys/dev/pci/pcireg.h Tue Oct 9 19:59:22 2012 (r241382) +++ stable/9/sys/dev/pci/pcireg.h Tue Oct 9 20:05:19 2012 (r241383) @@ -264,6 +264,8 @@ #define PCIP_STORAGE_SATA_AHCI_1_0 0x01 #define PCIS_STORAGE_SAS 0x07 #define PCIS_STORAGE_NVM 0x08 +#define PCIP_STORAGE_NVM_NVMHCI_1_0 0x01 +#define PCIP_STORAGE_NVM_ENTERPRISE_NVMHCI_1_0 0x02 #define PCIS_STORAGE_OTHER 0x80 #define PCIC_NETWORK 0x02 From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 19:07:57 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1C4A9301; Wed, 10 Oct 2012 19:07:57 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 04F538FC08; Wed, 10 Oct 2012 19:07:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9AJ7ulY083717; Wed, 10 Oct 2012 19:07:56 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9AJ7uJB083715; Wed, 10 Oct 2012 19:07:56 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201210101907.q9AJ7uJB083715@svn.freebsd.org> From: Dimitry Andric Date: Wed, 10 Oct 2012 19:07:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241407 - stable/9/contrib/llvm/tools/clang/lib/Driver X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 19:07:57 -0000 Author: dim Date: Wed Oct 10 19:07:56 2012 New Revision: 241407 URL: http://svn.freebsd.org/changeset/base/241407 Log: MFC r241163: Pull in r164717 from upstream clang trunk: Allow -MF to be used in combination with -E -M or -E -MM. This should help with building the lang/ghc port. Modified: stable/9/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Directory Properties: stable/9/contrib/llvm/ (props changed) stable/9/contrib/llvm/tools/clang/ (props changed) Modified: stable/9/contrib/llvm/tools/clang/lib/Driver/Tools.cpp ============================================================================== --- stable/9/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Wed Oct 10 19:06:11 2012 (r241406) +++ stable/9/contrib/llvm/tools/clang/lib/Driver/Tools.cpp Wed Oct 10 19:07:56 2012 (r241407) @@ -217,11 +217,11 @@ void Clang::AddPreprocessingOptions(Comp (A = Args.getLastArg(options::OPT_MMD))) { // Determine the output location. const char *DepFile; - if (Output.getType() == types::TY_Dependencies) { - DepFile = Output.getFilename(); - } else if (Arg *MF = Args.getLastArg(options::OPT_MF)) { + if (Arg *MF = Args.getLastArg(options::OPT_MF)) { DepFile = MF->getValue(Args); C.addFailureResultFile(DepFile); + } else if (Output.getType() == types::TY_Dependencies) { + DepFile = Output.getFilename(); } else if (A->getOption().matches(options::OPT_M) || A->getOption().matches(options::OPT_MM)) { DepFile = "-"; From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 19:08:46 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id A5DFF47C; Wed, 10 Oct 2012 19:08:46 +0000 (UTC) (envelope-from pfg@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8C7A18FC08; Wed, 10 Oct 2012 19:08:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9AJ8kaJ083861; Wed, 10 Oct 2012 19:08:46 GMT (envelope-from pfg@svn.freebsd.org) Received: (from pfg@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9AJ8kAO083859; Wed, 10 Oct 2012 19:08:46 GMT (envelope-from pfg@svn.freebsd.org) Message-Id: <201210101908.q9AJ8kAO083859@svn.freebsd.org> From: "Pedro F. Giffuni" Date: Wed, 10 Oct 2012 19:08:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241408 - stable/9/lib/libc/rpc X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 19:08:46 -0000 Author: pfg Date: Wed Oct 10 19:08:46 2012 New Revision: 241408 URL: http://svn.freebsd.org/changeset/base/241408 Log: rpc: fix __rpc_getconfip __rpc_getconfip is supposed to return the first netconf entry supporting tcp or udp, respectively. The code will currently return the *last* entry, plus it will leak memory when there is more than one such entry. Tested by: David Wolfskill Obtained from: Bull GNU/linux NFSv4 Project (libtirpc) Modified: stable/9/lib/libc/rpc/rpc_generic.c Modified: stable/9/lib/libc/rpc/rpc_generic.c ============================================================================== --- stable/9/lib/libc/rpc/rpc_generic.c Wed Oct 10 19:07:56 2012 (r241407) +++ stable/9/lib/libc/rpc/rpc_generic.c Wed Oct 10 19:08:46 2012 (r241408) @@ -269,7 +269,8 @@ __rpc_getconfip(nettype) } while ((nconf = getnetconfig(confighandle)) != NULL) { if (strcmp(nconf->nc_protofmly, NC_INET) == 0) { - if (strcmp(nconf->nc_proto, NC_TCP) == 0) { + if (strcmp(nconf->nc_proto, NC_TCP) == 0 && + netid_tcp == NULL) { netid_tcp = strdup(nconf->nc_netid); if (main_thread) netid_tcp_main = netid_tcp; @@ -277,7 +278,8 @@ __rpc_getconfip(nettype) thr_setspecific(tcp_key, (void *) netid_tcp); } else - if (strcmp(nconf->nc_proto, NC_UDP) == 0) { + if (strcmp(nconf->nc_proto, NC_UDP) == 0 && + netid_udp == NULL) { netid_udp = strdup(nconf->nc_netid); if (main_thread) netid_udp_main = netid_udp; From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 19:50:15 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CF20D9C7; Wed, 10 Oct 2012 19:50:15 +0000 (UTC) (envelope-from delphij@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AEAE08FC19; Wed, 10 Oct 2012 19:50:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9AJoFd9089569; Wed, 10 Oct 2012 19:50:15 GMT (envelope-from delphij@svn.freebsd.org) Received: (from delphij@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9AJoFTu089564; Wed, 10 Oct 2012 19:50:15 GMT (envelope-from delphij@svn.freebsd.org) Message-Id: <201210101950.q9AJoFTu089564@svn.freebsd.org> From: Xin LI Date: Wed, 10 Oct 2012 19:50:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241415 - in stable/9/contrib/bind9: . bin/named X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 19:50:15 -0000 Author: delphij Date: Wed Oct 10 19:50:15 2012 New Revision: 241415 URL: http://svn.freebsd.org/changeset/base/241415 Log: MFC r241414: Upgrade to 9.8.3-P4: Prevents a lockup when queried a deliberately constructed combination of records. [CVE-2012-5166] For more information: https://kb.isc.org/article/AA-00801 Modified: stable/9/contrib/bind9/CHANGES stable/9/contrib/bind9/bin/named/query.c stable/9/contrib/bind9/version Directory Properties: stable/9/contrib/bind9/ (props changed) Modified: stable/9/contrib/bind9/CHANGES ============================================================================== --- stable/9/contrib/bind9/CHANGES Wed Oct 10 19:47:52 2012 (r241414) +++ stable/9/contrib/bind9/CHANGES Wed Oct 10 19:50:15 2012 (r241415) @@ -1,3 +1,9 @@ + --- 9.8.3-P4 released --- + +3383. [security] A certain combination of records in the RBT could + cause named to hang while populating the additional + section of a response. [RT #31090] + --- 9.8.3-P3 released --- 3364. [security] Named could die on specially crafted record. Modified: stable/9/contrib/bind9/bin/named/query.c ============================================================================== --- stable/9/contrib/bind9/bin/named/query.c Wed Oct 10 19:47:52 2012 (r241414) +++ stable/9/contrib/bind9/bin/named/query.c Wed Oct 10 19:50:15 2012 (r241415) @@ -1119,13 +1119,6 @@ query_isduplicate(ns_client_t *client, d mname = NULL; } - /* - * If the dns_name_t we're looking up is already in the message, - * we don't want to trigger the caller's name replacement logic. - */ - if (name == mname) - mname = NULL; - if (mnamep != NULL) *mnamep = mname; @@ -1324,6 +1317,7 @@ query_addadditional(void *arg, dns_name_ if (dns_rdataset_isassociated(rdataset) && !query_isduplicate(client, fname, type, &mname)) { if (mname != NULL) { + INSIST(mname != fname); query_releasename(client, &fname); fname = mname; } else @@ -1393,11 +1387,13 @@ query_addadditional(void *arg, dns_name_ #endif if (!query_isduplicate(client, fname, dns_rdatatype_a, &mname)) { - if (mname != NULL) { - query_releasename(client, &fname); - fname = mname; - } else - need_addname = ISC_TRUE; + if (mname != fname) { + if (mname != NULL) { + query_releasename(client, &fname); + fname = mname; + } else + need_addname = ISC_TRUE; + } ISC_LIST_APPEND(fname->list, rdataset, link); added_something = ISC_TRUE; if (sigrdataset != NULL && @@ -1450,11 +1446,13 @@ query_addadditional(void *arg, dns_name_ #endif if (!query_isduplicate(client, fname, dns_rdatatype_aaaa, &mname)) { - if (mname != NULL) { - query_releasename(client, &fname); - fname = mname; - } else - need_addname = ISC_TRUE; + if (mname != fname) { + if (mname != NULL) { + query_releasename(client, &fname); + fname = mname; + } else + need_addname = ISC_TRUE; + } ISC_LIST_APPEND(fname->list, rdataset, link); added_something = ISC_TRUE; if (sigrdataset != NULL && @@ -1977,22 +1975,24 @@ query_addadditional2(void *arg, dns_name crdataset->type == dns_rdatatype_aaaa) { if (!query_isduplicate(client, fname, crdataset->type, &mname)) { - if (mname != NULL) { - /* - * A different type of this name is - * already stored in the additional - * section. We'll reuse the name. - * Note that this should happen at most - * once. Otherwise, fname->link could - * leak below. - */ - INSIST(mname0 == NULL); - - query_releasename(client, &fname); - fname = mname; - mname0 = mname; - } else - need_addname = ISC_TRUE; + if (mname != fname) { + if (mname != NULL) { + /* + * A different type of this name is + * already stored in the additional + * section. We'll reuse the name. + * Note that this should happen at most + * once. Otherwise, fname->link could + * leak below. + */ + INSIST(mname0 == NULL); + + query_releasename(client, &fname); + fname = mname; + mname0 = mname; + } else + need_addname = ISC_TRUE; + } ISC_LIST_UNLINK(cfname.list, crdataset, link); ISC_LIST_APPEND(fname->list, crdataset, link); added_something = ISC_TRUE; Modified: stable/9/contrib/bind9/version ============================================================================== --- stable/9/contrib/bind9/version Wed Oct 10 19:47:52 2012 (r241414) +++ stable/9/contrib/bind9/version Wed Oct 10 19:50:15 2012 (r241415) @@ -7,4 +7,4 @@ MAJORVER=9 MINORVER=8 PATCHVER=3 RELEASETYPE=-P -RELEASEVER=3 +RELEASEVER=4 From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 21:20:35 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 35A24E70; Wed, 10 Oct 2012 21:20:35 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1ED1D8FC12; Wed, 10 Oct 2012 21:20:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9ALKYcH003831; Wed, 10 Oct 2012 21:20:34 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9ALKYgG003820; Wed, 10 Oct 2012 21:20:34 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201210102120.q9ALKYgG003820@svn.freebsd.org> From: Eitan Adler Date: Wed, 10 Oct 2012 21:20:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241420 - stable/9/usr.bin/procstat X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 21:20:35 -0000 Author: eadler Date: Wed Oct 10 21:20:34 2012 New Revision: 241420 URL: http://svn.freebsd.org/changeset/base/241420 Log: MFC r241117: add SG state type PR: bin/171664 Approved by: cperciva (implicit) Modified: stable/9/usr.bin/procstat/procstat.1 Directory Properties: stable/9/usr.bin/procstat/ (props changed) Modified: stable/9/usr.bin/procstat/procstat.1 ============================================================================== --- stable/9/usr.bin/procstat/procstat.1 Wed Oct 10 21:20:34 2012 (r241419) +++ stable/9/usr.bin/procstat/procstat.1 Wed Oct 10 21:20:34 2012 (r241420) @@ -418,6 +418,8 @@ default device .It ph physical +.It sg +scatter/gather .It sw swap .It vn From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 21:21:55 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 051B4326; Wed, 10 Oct 2012 21:21:55 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E1FAF8FC0C; Wed, 10 Oct 2012 21:21:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9ALLsVY004119; Wed, 10 Oct 2012 21:21:54 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9ALLsTv004114; Wed, 10 Oct 2012 21:21:54 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201210102121.q9ALLsTv004114@svn.freebsd.org> From: Eitan Adler Date: Wed, 10 Oct 2012 21:21:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241424 - stable/9/usr.bin/mktemp X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 21:21:55 -0000 Author: eadler Date: Wed Oct 10 21:21:54 2012 New Revision: 241424 URL: http://svn.freebsd.org/changeset/base/241424 Log: MFC r241118: Implement the Sun/GNU extension of using a default prefix when no arguments are supplied. Approved by: cperciva (implicit) Modified: stable/9/usr.bin/mktemp/mktemp.1 stable/9/usr.bin/mktemp/mktemp.c Directory Properties: stable/9/usr.bin/mktemp/ (props changed) Modified: stable/9/usr.bin/mktemp/mktemp.1 ============================================================================== --- stable/9/usr.bin/mktemp/mktemp.1 Wed Oct 10 21:21:54 2012 (r241423) +++ stable/9/usr.bin/mktemp/mktemp.1 Wed Oct 10 21:21:54 2012 (r241424) @@ -99,6 +99,14 @@ Care should be taken to ensure that it is appropriate to use an environment variable potentially supplied by the user. .Pp +If no arguments are passed or if only the +.Fl d +flag is passed +.Nm +behaves as if +.Fl t Li tmp +was supplied. +.Pp Any number of temporary files may be created in a single invocation, including one based on the internal template resulting from the .Fl t Modified: stable/9/usr.bin/mktemp/mktemp.c ============================================================================== --- stable/9/usr.bin/mktemp/mktemp.c Wed Oct 10 21:21:54 2012 (r241423) +++ stable/9/usr.bin/mktemp/mktemp.c Wed Oct 10 21:21:54 2012 (r241424) @@ -87,6 +87,11 @@ main(int argc, char **argv) argc -= optind; argv += optind; + if (!tflag && argc < 1) { + tflag = 1; + prefix = "tmp"; + } + if (tflag) { tmpdir = getenv("TMPDIR"); if (tmpdir == NULL) @@ -100,8 +105,6 @@ main(int argc, char **argv) else errx(1, "cannot generate template"); } - } else if (argc < 1) { - usage(); } /* generate all requested files */ From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 21:27:31 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 186669D4; Wed, 10 Oct 2012 21:27:31 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 021228FC16; Wed, 10 Oct 2012 21:27:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9ALRUrE005068; Wed, 10 Oct 2012 21:27:30 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9ALRUdq005066; Wed, 10 Oct 2012 21:27:30 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201210102127.q9ALRUdq005066@svn.freebsd.org> From: Eitan Adler Date: Wed, 10 Oct 2012 21:27:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241426 - stable/9/sys/kern X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 21:27:31 -0000 Author: eadler Date: Wed Oct 10 21:27:30 2012 New Revision: 241426 URL: http://svn.freebsd.org/changeset/base/241426 Log: MFC r241119: Provide a generic way to disable devices at boot time PR: kern/119202 Approved by: cperciva (implicit) Modified: stable/9/sys/kern/subr_bus.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/kern/subr_bus.c ============================================================================== --- stable/9/sys/kern/subr_bus.c Wed Oct 10 21:27:29 2012 (r241425) +++ stable/9/sys/kern/subr_bus.c Wed Oct 10 21:27:30 2012 (r241426) @@ -2752,6 +2752,13 @@ device_attach(device_t dev) { int error; + if (resource_disabled(dev->driver->name, dev->unit)) { + device_disable(dev); + if (bootverbose) + device_printf(dev, "disabled via hints entry\n"); + return (ENXIO); + } + device_sysctl_init(dev); if (!device_is_quiet(dev)) device_print_child(dev->parent, dev); From owner-svn-src-stable-9@FreeBSD.ORG Wed Oct 10 21:30:26 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 95F1EE54; Wed, 10 Oct 2012 21:30:26 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7DA188FC17; Wed, 10 Oct 2012 21:30:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9ALUQgi005551; Wed, 10 Oct 2012 21:30:26 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9ALUQaT005548; Wed, 10 Oct 2012 21:30:26 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201210102130.q9ALUQaT005548@svn.freebsd.org> From: Eitan Adler Date: Wed, 10 Oct 2012 21:30:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241428 - stable/9/usr.sbin/ip6addrctl X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 10 Oct 2012 21:30:26 -0000 Author: eadler Date: Wed Oct 10 21:30:26 2012 New Revision: 241428 URL: http://svn.freebsd.org/changeset/base/241428 Log: MFC r241134: Fix alignment related warnings reported by gcc Switch from old style arguments to modern C remove WARNS as a result tested with "make universe" Approved by: cperciva (implicit) Modified: stable/9/usr.sbin/ip6addrctl/Makefile stable/9/usr.sbin/ip6addrctl/ip6addrctl.c Directory Properties: stable/9/usr.sbin/ip6addrctl/ (props changed) Modified: stable/9/usr.sbin/ip6addrctl/Makefile ============================================================================== --- stable/9/usr.sbin/ip6addrctl/Makefile Wed Oct 10 21:29:00 2012 (r241427) +++ stable/9/usr.sbin/ip6addrctl/Makefile Wed Oct 10 21:30:26 2012 (r241428) @@ -3,6 +3,4 @@ PROG= ip6addrctl MAN= ip6addrctl.8 -WARNS?= 2 - .include Modified: stable/9/usr.sbin/ip6addrctl/ip6addrctl.c ============================================================================== --- stable/9/usr.sbin/ip6addrctl/ip6addrctl.c Wed Oct 10 21:29:00 2012 (r241427) +++ stable/9/usr.sbin/ip6addrctl/ip6addrctl.c Wed Oct 10 21:30:26 2012 (r241428) @@ -71,12 +71,10 @@ static void plen2mask(struct sockaddr_in static void set_policy(void); static void add_policy(char *, char *, char *); static void delete_policy(char *); -static void flush_policy(); +static void flush_policy(void); int -main(argc, argv) - int argc; - char *argv[]; +main(int argc, char *argv[]) { TAILQ_INIT(&policyhead); @@ -107,11 +105,11 @@ main(argc, argv) } static void -get_policy() +get_policy(void) { int mib[] = { CTL_NET, PF_INET6, IPPROTO_IPV6, IPV6CTL_ADDRCTLPOLICY }; size_t l; - char *buf; + struct in6_addrpolicy *buf; struct in6_addrpolicy *pol, *ep; if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), NULL, &l, NULL, 0) < 0) { @@ -131,8 +129,8 @@ get_policy() /* NOTREACHED */ } - ep = (struct in6_addrpolicy *)(buf + l); - for (pol = (struct in6_addrpolicy *)buf; pol + 1 <= ep; pol++) { + ep = buf + l/sizeof(*buf); + for (pol = buf; pol + 1 <= ep; pol++) { struct policyqueue *new; if ((new = malloc(sizeof(*new))) == NULL) @@ -145,7 +143,7 @@ get_policy() } static void -dump_policy() +dump_policy(void) { size_t addrlen; char addrbuf[NI_MAXHOST]; @@ -201,8 +199,7 @@ dump_policy() } while (0); static void -make_policy_fromfile(conf) - char *conf; +make_policy_fromfile(char *conf) { char line[_POSIX2_LINE_MAX], *cp; char *addrstr; @@ -257,9 +254,7 @@ make_policy_fromfile(conf) } static int -parse_prefix(prefix0, pol) - const char *prefix0; - struct in6_addrpolicy *pol; +parse_prefix(const char *prefix0, struct in6_addrpolicy *pol) { int e = 0, plen; char *prefix, *plenstr; @@ -299,11 +294,9 @@ parse_prefix(prefix0, pol) } static void -plen2mask(mask, plen) - struct sockaddr_in6 *mask; - int plen; +plen2mask(struct sockaddr_in6 *mask, int plen) { - u_char *cp = (char *)&mask->sin6_addr; + u_char *cp = (unsigned char *)&mask->sin6_addr; memset(mask, 0, sizeof(*mask)); mask->sin6_family = AF_INET6; /* just in case */ @@ -316,7 +309,7 @@ plen2mask(mask, plen) } static void -set_policy() +set_policy(void) { struct policyqueue *ent; int s; @@ -334,8 +327,7 @@ set_policy() } static int -mask2plen(mask) - struct sockaddr_in6 *mask; +mask2plen(struct sockaddr_in6 *mask) { int masklen, final = 0; u_char *p, *lim; @@ -394,8 +386,7 @@ mask2plen(mask) } static void -add_policy(prefix, prec, label) - char *prefix, *prec, *label; +add_policy(char *prefix, char *prec, char *label) { struct in6_addrpolicy p; int s; @@ -416,8 +407,7 @@ add_policy(prefix, prec, label) } static void -delete_policy(prefix) - char *prefix; +delete_policy(char *prefix) { struct in6_addrpolicy p; int s; @@ -436,7 +426,7 @@ delete_policy(prefix) } static void -flush_policy() +flush_policy(void) { struct policyqueue *ent; int s; @@ -454,7 +444,7 @@ flush_policy() } static void -usage() +usage(void) { fprintf(stderr, "usage: ip6addrctl [show]\n"); fprintf(stderr, " ip6addrctl add " From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 01:32:52 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6A2833CD; Thu, 11 Oct 2012 01:32:52 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 51A658FC12; Thu, 11 Oct 2012 01:32:52 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9B1Wq7n036212; Thu, 11 Oct 2012 01:32:52 GMT (envelope-from glebius@svn.freebsd.org) Received: (from glebius@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9B1WqP0036209; Thu, 11 Oct 2012 01:32:52 GMT (envelope-from glebius@svn.freebsd.org) Message-Id: <201210110132.q9B1WqP0036209@svn.freebsd.org> From: Gleb Smirnoff Date: Thu, 11 Oct 2012 01:32:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241435 - stable/9/sys/netinet X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 01:32:52 -0000 Author: glebius Date: Thu Oct 11 01:32:51 2012 New Revision: 241435 URL: http://svn.freebsd.org/changeset/base/241435 Log: Merge r241129: There is a complex race in in_pcblookup_hash() and in_pcblookup_group(). Both functions need to obtain lock on the found PCB, and they can't do classic inter-lock with the PCB hash lock, due to lock order reversal. To keep the PCB stable, these functions put a reference on it and after PCB lock is acquired drop it. If the reference was the last one, this means we've raced with in_pcbfree() and the PCB is no longer valid. This approach works okay only if we are acquiring writer-lock on the PCB. In case of reader-lock, the following scenario can happen: - 2 threads locate pcb, and do in_pcbref() on it. - These 2 threads drop the inp hash lock. - Another thread comes to delete pcb via in_pcbfree(), it obtains hash lock, does in_pcbremlists(), drops hash lock, and runs in_pcbrele_wlocked(), which doesn't free the pcb due to two references on it. Then it unlocks the pcb. - 2 aforementioned threads acquire reader lock on the pcb and run in_pcbrele_rlocked(). One gets 1 from in_pcbrele_rlocked() and continues, second gets 0 and considers pcb freed, returns. - The thread that got 1 continutes working with detached pcb, which later leads to panic in the underlying protocol level. To plumb that problem an additional INPCB flag introduced - INP_FREED. We check for that flag in the in_pcbrele_rlocked() and if it is set, we pretend that that was the last reference. Discussed with: rwatson, jhb Reported by: Vladimir Medvedkin Modified: stable/9/sys/netinet/in_pcb.c stable/9/sys/netinet/in_pcb.h Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/netinet/in_pcb.c ============================================================================== --- stable/9/sys/netinet/in_pcb.c Wed Oct 10 23:35:16 2012 (r241434) +++ stable/9/sys/netinet/in_pcb.c Thu Oct 11 01:32:51 2012 (r241435) @@ -1104,8 +1104,17 @@ in_pcbrele_rlocked(struct inpcb *inp) INP_RLOCK_ASSERT(inp); - if (refcount_release(&inp->inp_refcount) == 0) + if (refcount_release(&inp->inp_refcount) == 0) { + /* + * If the inpcb has been freed, let the caller know, even if + * this isn't the last reference. + */ + if (inp->inp_flags2 & INP_FREED) { + INP_RUNLOCK(inp); + return (1); + } return (0); + } KASSERT(inp->inp_socket == NULL, ("%s: inp_socket != NULL", __func__)); @@ -1185,6 +1194,7 @@ in_pcbfree(struct inpcb *inp) inp_freemoptions(inp->inp_moptions); #endif inp->inp_vflag = 0; + inp->inp_flags2 |= INP_FREED; crfree(inp->inp_cred); #ifdef MAC mac_inpcb_destroy(inp); Modified: stable/9/sys/netinet/in_pcb.h ============================================================================== --- stable/9/sys/netinet/in_pcb.h Wed Oct 10 23:35:16 2012 (r241434) +++ stable/9/sys/netinet/in_pcb.h Thu Oct 11 01:32:51 2012 (r241435) @@ -542,6 +542,7 @@ void inp_4tuple_get(struct inpcb *inp, #define INP_RT_VALID 0x00000002 /* cached rtentry is valid */ #define INP_PCBGROUPWILD 0x00000004 /* in pcbgroup wildcard list */ #define INP_REUSEPORT 0x00000008 /* SO_REUSEPORT option is set */ +#define INP_FREED 0x00000010 /* inp itself is not valid */ /* * Flags passed to in_pcblookup*() functions. From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 20:48:46 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 5AABFF18; Thu, 11 Oct 2012 20:48:46 +0000 (UTC) (envelope-from peter@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 429678FC16; Thu, 11 Oct 2012 20:48:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9BKmkUM083597; Thu, 11 Oct 2012 20:48:46 GMT (envelope-from peter@svn.freebsd.org) Received: (from peter@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9BKmk6o083595; Thu, 11 Oct 2012 20:48:46 GMT (envelope-from peter@svn.freebsd.org) Message-Id: <201210112048.q9BKmk6o083595@svn.freebsd.org> From: Peter Wemm Date: Thu, 11 Oct 2012 20:48:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241458 - stable/9/etc/sendmail X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 20:48:46 -0000 Author: peter Date: Thu Oct 11 20:48:45 2012 New Revision: 241458 URL: http://svn.freebsd.org/changeset/base/241458 Log: Point freebsd.org nullclient cluster machines to mx1 Modified: stable/9/etc/sendmail/freefall.mc Modified: stable/9/etc/sendmail/freefall.mc ============================================================================== --- stable/9/etc/sendmail/freefall.mc Thu Oct 11 20:46:04 2012 (r241457) +++ stable/9/etc/sendmail/freefall.mc Thu Oct 11 20:48:45 2012 (r241458) @@ -43,5 +43,5 @@ divert(0)dnl VERSIONID(`$FreeBSD$') OSTYPE(freebsd6) -FEATURE(nullclient, hub.$m) +FEATURE(nullclient, mx1.$m) MASQUERADE_AS(FreeBSD.org) From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 21:15:55 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 24DFECDF; Thu, 11 Oct 2012 21:15:55 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0CE538FC19; Thu, 11 Oct 2012 21:15:55 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9BLFs1i086932; Thu, 11 Oct 2012 21:15:54 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9BLFsg2086930; Thu, 11 Oct 2012 21:15:54 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201210112115.q9BLFsg2086930@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 11 Oct 2012 21:15:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241462 - stable/9/sys/kern X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 21:15:55 -0000 Author: np Date: Thu Oct 11 21:15:54 2012 New Revision: 241462 URL: http://svn.freebsd.org/changeset/base/241462 Log: MFC r233850: - Remove redundant call to pr_ctloutput from code that handles SO_SETFIB. - Add a check for errors during copyin while here. Modified: stable/9/sys/kern/uipc_socket.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/kern/uipc_socket.c ============================================================================== --- stable/9/sys/kern/uipc_socket.c Thu Oct 11 20:53:11 2012 (r241461) +++ stable/9/sys/kern/uipc_socket.c Thu Oct 11 21:15:54 2012 (r241462) @@ -2498,20 +2498,19 @@ sosetopt(struct socket *so, struct socko case SO_SETFIB: error = sooptcopyin(sopt, &optval, sizeof optval, sizeof optval); + if (error) + goto bad; + if (optval < 0 || optval >= rt_numfibs) { error = EINVAL; goto bad; } if (((so->so_proto->pr_domain->dom_family == PF_INET) || (so->so_proto->pr_domain->dom_family == PF_INET6) || - (so->so_proto->pr_domain->dom_family == PF_ROUTE))) { + (so->so_proto->pr_domain->dom_family == PF_ROUTE))) so->so_fibnum = optval; - /* Note: ignore error */ - if (so->so_proto->pr_ctloutput) - (*so->so_proto->pr_ctloutput)(so, sopt); - } else { + else so->so_fibnum = 0; - } break; case SO_USER_COOKIE: From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 21:29:12 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 60BC63E4; Thu, 11 Oct 2012 21:29:12 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 45EA88FC17; Thu, 11 Oct 2012 21:29:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9BLTCGn089066; Thu, 11 Oct 2012 21:29:12 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9BLTCUw089062; Thu, 11 Oct 2012 21:29:12 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201210112129.q9BLTCUw089062@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 11 Oct 2012 21:29:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241465 - in stable/9/sys: dev/cxgbe/common dev/cxgbe/firmware modules/cxgbe/firmware X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 21:29:12 -0000 Author: np Date: Thu Oct 11 21:29:11 2012 New Revision: 241465 URL: http://svn.freebsd.org/changeset/base/241465 Log: MFC r240443: Update interface to firmware 1.6.2 and include the firmware in the driver. Added: stable/9/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu - copied unchanged from r240443, head/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu Modified: stable/9/sys/dev/cxgbe/common/common.h stable/9/sys/dev/cxgbe/firmware/t4fw_interface.h stable/9/sys/modules/cxgbe/firmware/Makefile Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) stable/9/sys/modules/ (props changed) Modified: stable/9/sys/dev/cxgbe/common/common.h ============================================================================== --- stable/9/sys/dev/cxgbe/common/common.h Thu Oct 11 21:24:07 2012 (r241464) +++ stable/9/sys/dev/cxgbe/common/common.h Thu Oct 11 21:29:11 2012 (r241465) @@ -64,7 +64,7 @@ enum { }; #define FW_VERSION_MAJOR 1 -#define FW_VERSION_MINOR 5 +#define FW_VERSION_MINOR 6 #define FW_VERSION_MICRO 2 struct port_stats { Copied: stable/9/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu (from r240443, head/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/9/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu Thu Oct 11 21:29:11 2012 (r241465, copy of r240443, head/sys/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu) @@ -0,0 +1,7600 @@ +/*- + * Copyright (c) 2012 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 +AAADSwEGAgAAAQkBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAzADPwNGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAENoZWxzaW8gRlcgUlVOTUVNIERFQlVHPTAgKEJ1aWx0IE1vbiBBdWcgMTMgMTM6 +MjU6MDYgUERUIDIwMTIgb24gY2xlb3BhdHJhLmFzaWNkZXNpZ25lcnMuY29tOi9ob21lL2ZlbGl4 +L3cvdDRmdy1yZWxlYXNlKSwgVmVyc2lvbiBUNHh4IDAxLjA2LjAyLjAwAAAAAAAAAAAAAGp9qktg +ALwAH/zhQIAAAAHhAHtwAAAQAB//9fjhAGAQ4QGUcCAAAADhAZwE4QB5AAACAEDhAHmAAAYAQAAC +AAoABgAK4QB5BAAKAACAAAEA4QB7POEAe0ThAHvk4gAAAAABAADhAHuQIAAAAAAAgADhAHsAAABA +AeEAe5wAAEAAREREQuAAAADjAARjREREQOMACAAgAAJcAAAAAB//ixAAAAAAH/+LFAAAAAAf/4sY +AAAAAB//ixwf/8AAAAAAAAAAAADAABH/0BL/0JIQEf/QEv/QkhAR/9AB9DER/9CQEBH/zyIK/5IQ +AOQxAAUxAQIAEv/MAucxAhYAEf/LgRABAV/AIQIRAckREf/IEv/IkhAR/8gS/8iSEGAADxH/wxL/ +x5IQEf/DEv/GkhCBEBH/xcAgkhES/8SSEsAgkhMS/8OSEIIQAvJQZS/3Ef/Bxy+SEBH/wJIQEv/A +E//AkyDAMpMhE/+/kyKCIhL/vhP/vpMgIyIhFP+9BDMByTgT/7yDMAODFAgzERT/uqQzkyET/66T +ImAACMIwkyET/6uTIhL/tZAgkCGQIpAjkCSQJZAmkCeQKJApkCqQK5AskC2QLpAvICYQICYRgiIS +/6jAMC03MC03NC03OC03PCM9AXIz7QACABL/pSMKAC83AC83EC83IC83MCM9AXIz7QACABL/msAw +KDcwKDc0KDc4KDc8Iz0BcjPtAwIAEv+YwDAnNwAnNxAnNyAnNzAjPQFyM+0DAgAS/5IV/5MW/5PA +MNcgBWYBYAAeAAAAAAAAAAAAAAAABDYFAAIA0w/TDwUzDG47FAdHFAcEQ3Yx5gQ2BQUzDG877QAC +ABL/hBX/giMKAAInAgcEQwQ+BQUzDAdHFG878AMCABL/fskugyCEIYUivCJ0Ow6GULRVljC0M3Qz +9GP/5gBlP+JlX98S/3LAMgMuBQMCABL/acAwKDdAKDdEKDdIKDdMIz0BcjPtAwIAAAIAEv9sLScA +wBEBSTEASDEBAgDAABT/aATSMRX/Z5RQFP9nBNMxFf9nlFAU/2YE1DEV/2aUUBT/ZgTVMRX/ZZRQ +EP9lAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf/AAA +H/wAAOMACfgf/AAAH/wAAOMACfgf/AAAH/wAAOMACfgf/4AAH/+F4OMACfgf/4XgH/+F4OMAD9gf +/4XgH/+F4OMAD9gf/4XgH/+HFOMAD9gf/4cUH/+LEOMAEQwf/4sQH/+gNOMAFQgf/6A0H/+gNOMA +Kiwf/8AAH//29eMAKiwgAAAAIAABauMAYSQgAAF4IAABfOMAYpAgAAF8IAABheMAYpQgAAGYIAAB +nOMAYqAgAAGcIAABpeMAYqQgAAG4IAABvOMAYrAgAAG8IAABxeMAYrQgAAHYIAAB2OMAYsAgAAHc +IAAB4uMAYsAgAAH4IAAB+OMAYsggAAH8IAAB/OMAYsggAAIYIAACGOMAYsggAAIcIAACHOMAYsgg +AAI4IAACOOMAYsggAAI8IAACPOMAYsggAAJYIAACWOMAYsggAAJcIAACYuMAYsggAAJ4IAACeOMA +YtAgAAJ8IAACguMAYtAgAAKYIAEewOMAYtggAoAAIAKTUOMBfwAgApNQIAKTUOMBklAgApNQIAYW +sOMBklAgBhawIAYbIOMFFbAgBoAAIAaNQOMFGiAgBo1AIAdScOMFJ2AgB1JwIAdTPOMF7JAgCMAA +IAjAAOMF7VwgCMAAIAjAAOMF7VwgCMAAIAkyJeMF7VwAAAAAAAAAAAAAAAAgAA8nIAAPGCAAEz0g +AA8YIAASqCAADxggAA/RIAASQiAAEcIgAA8YIAARbSAAERwgABCxIAAPBSAAEFwgAA8YIAAPGCAA +DxggAA/yAAAAACAAHk4gACCkIAAglSAAIIUgACB1IAAfpyAAH5ggAB47IAAeOyAAHjsgAB47IAAe +OyAAHjsgAB47IAAeOyAAHjsgAB47IAAe+CAAHukgAB47IAAeOyAAHjsgAB47IAAeOyAAHjsgAB47 +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 +H//ziB//84gf//OIH//ziB//7zAf//G0H//wYB//8GAf//BgIAXwAAAAAAAAAAAAAAAAAAAAAAAg +BfJoIAXyaAAAAAAAAAAAAAAAAAAAAAAgAQdgIAXwAB//8rQf//K0H//ytB//8rQf//K0H//ytAAA +AAAf/+84AAAAAAAAAAAAAAAAAAAAAAIBAAAAAAAAAAAAAAAAAAAEAAAAAAAAAIGAAAAAAAAQBQAA +AAAAAAQAAAAAAAAAAAAAAAAAAAAAgQAAAAAAABgFAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAQAAAAAAAACgQAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgCgAR8XcT8XfTDwPmMQECABbxdRfxdndrBpBgtGZ3Y/hU +DRVVlXsPFABj//kAAABsEAYpIAUqIAf4YKQVoBtFAPsgCt1hqgEAiyIuIBQc8WjxcjwN4AeVAAym +EaxmLWKe96AKW+IAnQAtYp3r1AAGilGAACnCrmSRFS3CrWTRD6TuDg5HLiQU9cALpdIAnQAf8Vku +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 *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 22:30:10 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id EE817251; Thu, 11 Oct 2012 22:30:10 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BBA598FC18; Thu, 11 Oct 2012 22:30:10 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9BMUAlf096485; Thu, 11 Oct 2012 22:30:10 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9BMUA9l096481; Thu, 11 Oct 2012 22:30:10 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201210112230.q9BMUA9l096481@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 11 Oct 2012 22:30:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241466 - stable/9/sys/conf X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 22:30:11 -0000 Author: np Date: Thu Oct 11 22:30:10 2012 New Revision: 241466 URL: http://svn.freebsd.org/changeset/base/241466 Log: MFC r240451: Allow cxgbe to be built into a kernel with "device cxgbe." Modified: stable/9/sys/conf/files stable/9/sys/conf/kern.pre.mk Directory Properties: stable/9/sys/ (props changed) stable/9/sys/conf/ (props changed) Modified: stable/9/sys/conf/files ============================================================================== --- stable/9/sys/conf/files Thu Oct 11 21:29:11 2012 (r241465) +++ stable/9/sys/conf/files Thu Oct 11 22:30:10 2012 (r241466) @@ -923,6 +923,40 @@ dev/cxgbe/t4_l2t.c optional cxgbe pci \ compile-with "${NORMAL_C} -I$S/dev/cxgbe" dev/cxgbe/common/t4_hw.c optional cxgbe pci \ compile-with "${NORMAL_C} -I$S/dev/cxgbe" +t4fw_cfg.c optional cxgbe \ + compile-with "${AWK} -f $S/tools/fw_stub.awk t4fw_cfg.fw:t4fw_cfg t4fw_cfg_uwire.fw:t4fw_cfg_uwire t4fw.fw:t4fw -mt4fw_cfg -c${.TARGET}" \ + no-implicit-rule before-depend local \ + clean "t4fw_cfg.c" +t4fw_cfg.fwo optional cxgbe \ + dependency "t4fw_cfg.fw" \ + compile-with "${NORMAL_FWO}" \ + no-implicit-rule \ + clean "t4fw_cfg.fwo" +t4fw_cfg.fw optional cxgbe \ + dependency "$S/dev/cxgbe/firmware/t4fw_cfg.txt" \ + compile-with "${CP} ${.ALLSRC} ${.TARGET}" \ + no-obj no-implicit-rule \ + clean "t4fw_cfg.fw" +t4fw_cfg_uwire.fwo optional cxgbe \ + dependency "t4fw_cfg_uwire.fw" \ + compile-with "${NORMAL_FWO}" \ + no-implicit-rule \ + clean "t4fw_cfg_uwire.fwo" +t4fw_cfg_uwire.fw optional cxgbe \ + dependency "$S/dev/cxgbe/firmware/t4fw_cfg_uwire.txt" \ + compile-with "${CP} ${.ALLSRC} ${.TARGET}" \ + no-obj no-implicit-rule \ + clean "t4fw_cfg_uwire.fw" +t4fw.fwo optional cxgbe \ + dependency "t4fw.fw" \ + compile-with "${NORMAL_FWO}" \ + no-implicit-rule \ + clean "t4fw.fwo" +t4fw.fw optional cxgbe \ + dependency "$S/dev/cxgbe/firmware/t4fw-1.6.2.0.bin.uu" \ + compile-with "${NORMAL_FW}" \ + no-obj no-implicit-rule \ + clean "t4fw.fw" dev/cy/cy.c optional cy dev/cy/cy_isa.c optional cy isa dev/cy/cy_pci.c optional cy pci Modified: stable/9/sys/conf/kern.pre.mk ============================================================================== --- stable/9/sys/conf/kern.pre.mk Thu Oct 11 21:29:11 2012 (r241465) +++ stable/9/sys/conf/kern.pre.mk Thu Oct 11 22:30:10 2012 (r241466) @@ -18,6 +18,7 @@ LDSCRIPT?= $S/conf/${LDSCRIPT_NAME} M= ${MACHINE_CPUARCH} AWK?= awk +CP?= cp LINT?= lint NM?= nm OBJCOPY?= objcopy From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 22:46:21 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6CCFACAF; Thu, 11 Oct 2012 22:46:21 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4A0E38FC0A; Thu, 11 Oct 2012 22:46:21 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9BMkLEv098409; Thu, 11 Oct 2012 22:46:21 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9BMkL6U098404; Thu, 11 Oct 2012 22:46:21 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201210112246.q9BMkL6U098404@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 11 Oct 2012 22:46:21 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241467 - in stable/9/sys/dev/cxgbe: . tom X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 22:46:21 -0000 Author: np Date: Thu Oct 11 22:46:20 2012 New Revision: 241467 URL: http://svn.freebsd.org/changeset/base/241467 Log: MFC r240452-240453. r240452: Use native FreeBSD facilities everywhere except the shared code in common/ r240453: Install interrupt handlers early, during attach, for the reason explained in r239913 by jhb. Modified: stable/9/sys/dev/cxgbe/osdep.h stable/9/sys/dev/cxgbe/t4_l2t.h stable/9/sys/dev/cxgbe/t4_main.c stable/9/sys/dev/cxgbe/tom/t4_ddp.c Directory Properties: stable/9/sys/ (props changed) stable/9/sys/dev/ (props changed) Modified: stable/9/sys/dev/cxgbe/osdep.h ============================================================================== --- stable/9/sys/dev/cxgbe/osdep.h Thu Oct 11 22:30:10 2012 (r241466) +++ stable/9/sys/dev/cxgbe/osdep.h Thu Oct 11 22:46:20 2012 (r241467) @@ -83,7 +83,7 @@ typedef boolean_t bool; #define simple_strtoul strtoul #define DIV_ROUND_UP(x, y) howmany(x, y) -#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) +#define ARRAY_SIZE(x) nitems(x) #define container_of(p, s, f) ((s *)(((uint8_t *)(p)) - offsetof(s, f))) #define swab16(x) bswap16(x) Modified: stable/9/sys/dev/cxgbe/t4_l2t.h ============================================================================== --- stable/9/sys/dev/cxgbe/t4_l2t.h Thu Oct 11 22:30:10 2012 (r241466) +++ stable/9/sys/dev/cxgbe/t4_l2t.h Thu Oct 11 22:46:20 2012 (r241467) @@ -94,7 +94,7 @@ int do_l2t_write_rpl(struct sge_iq *, co static inline void t4_l2t_release(struct l2t_entry *e) { - struct l2t_data *d = container_of(e, struct l2t_data, l2tab[e->idx]); + struct l2t_data *d = member2struct(l2t_data, l2tab[e->idx], e); if (atomic_fetchadd_int(&e->refcnt, -1) == 1) atomic_add_int(&d->nfree, 1); Modified: stable/9/sys/dev/cxgbe/t4_main.c ============================================================================== --- stable/9/sys/dev/cxgbe/t4_main.c Thu Oct 11 22:30:10 2012 (r241466) +++ stable/9/sys/dev/cxgbe/t4_main.c Thu Oct 11 22:46:20 2012 (r241467) @@ -288,6 +288,7 @@ static int cxgbe_init_locked(struct port static int cxgbe_init_synchronized(struct port_info *); static int cxgbe_uninit_locked(struct port_info *); static int cxgbe_uninit_synchronized(struct port_info *); +static int setup_intr_handlers(struct adapter *); static int adapter_full_init(struct adapter *); static int adapter_full_uninit(struct adapter *); static int port_full_init(struct port_info *); @@ -381,8 +382,8 @@ CTASSERT(offsetof(struct sge_ofld_rxq, f #endif /* No easy way to include t4_msg.h before adapter.h so we check this way */ -CTASSERT(ARRAY_SIZE(((struct adapter *)0)->cpl_handler) == NUM_CPL_CMDS); -CTASSERT(ARRAY_SIZE(((struct adapter *)0)->fw_msg_handler) == NUM_FW6_TYPES); +CTASSERT(nitems(((struct adapter *)0)->cpl_handler) == NUM_CPL_CMDS); +CTASSERT(nitems(((struct adapter *)0)->fw_msg_handler) == NUM_FW6_TYPES); static int t4_probe(device_t dev) @@ -399,7 +400,7 @@ t4_probe(device_t dev) if (d == 0xa000 && f != 0) return (ENXIO); - for (i = 0; i < ARRAY_SIZE(t4_pciids); i++) { + for (i = 0; i < nitems(t4_pciids); i++) { if (d == t4_pciids[i].device) { device_set_desc(dev, t4_pciids[i].desc); return (BUS_PROBE_DEFAULT); @@ -459,9 +460,9 @@ t4_attach(device_t dev) memset(sc->chan_map, 0xff, sizeof(sc->chan_map)); sc->an_handler = an_not_handled; - for (i = 0; i < ARRAY_SIZE(sc->cpl_handler); i++) + for (i = 0; i < nitems(sc->cpl_handler); i++) sc->cpl_handler[i] = cpl_not_handled; - for (i = 0; i < ARRAY_SIZE(sc->fw_msg_handler); i++) + for (i = 0; i < nitems(sc->fw_msg_handler); i++) sc->fw_msg_handler[i] = fw_msg_not_handled; t4_register_cpl_handler(sc, CPL_SET_TCB_RPL, t4_filter_rpl); @@ -701,6 +702,13 @@ t4_attach(device_t dev) #endif } + rc = setup_intr_handlers(sc); + if (rc != 0) { + device_printf(dev, + "failed to setup interrupt handlers: %d\n", rc); + goto done; + } + rc = bus_generic_attach(dev); if (rc != 0) { device_printf(dev, @@ -760,6 +768,9 @@ t4_detach(device_t dev) return (rc); } + for (i = 0; i < sc->intr_count; i++) + t4_free_irq(sc, &sc->irq[i]); + for (i = 0; i < MAX_NPORTS; i++) { pi = sc->port[i]; if (pi) { @@ -1839,12 +1850,7 @@ get_params__pre_init(struct adapter *sc) } sc->params.portvec = val[0]; - sc->params.nports = 0; - while (val[0]) { - sc->params.nports++; - val[0] &= val[0] - 1; - } - + sc->params.nports = bitcount32(val[0]); sc->params.vpd.cclk = val[1]; /* Read device log parameters. */ @@ -2365,16 +2371,14 @@ cxgbe_uninit_synchronized(struct port_in return (0); } -#define T4_ALLOC_IRQ(sc, irq, rid, handler, arg, name) do { \ - rc = t4_alloc_irq(sc, irq, rid, handler, arg, name); \ - if (rc != 0) \ - goto done; \ -} while (0) - +/* + * It is ok for this function to fail midway and return right away. t4_detach + * will walk the entire sc->irq list and clean up whatever is valid. + */ static int -adapter_full_init(struct adapter *sc) +setup_intr_handlers(struct adapter *sc) { - int rc, i, rid, p, q; + int rc, rid, p, q; char s[8]; struct irq *irq; struct port_info *pi; @@ -2383,30 +2387,6 @@ adapter_full_init(struct adapter *sc) struct sge_ofld_rxq *ofld_rxq; #endif - ADAPTER_LOCK_ASSERT_NOTOWNED(sc); - KASSERT((sc->flags & FULL_INIT_DONE) == 0, - ("%s: FULL_INIT_DONE already", __func__)); - - /* - * queues that belong to the adapter (not any particular port). - */ - rc = t4_setup_adapter_queues(sc); - if (rc != 0) - goto done; - - for (i = 0; i < ARRAY_SIZE(sc->tq); i++) { - sc->tq[i] = taskqueue_create("t4 taskq", M_NOWAIT, - taskqueue_thread_enqueue, &sc->tq[i]); - if (sc->tq[i] == NULL) { - device_printf(sc->dev, - "failed to allocate task queue %d\n", i); - rc = ENOMEM; - goto done; - } - taskqueue_start_threads(&sc->tq[i], 1, PI_NET, "%s tq%d", - device_get_nameunit(sc->dev), i); - } - /* * Setup interrupts. */ @@ -2416,19 +2396,26 @@ adapter_full_init(struct adapter *sc) KASSERT(!(sc->flags & INTR_DIRECT), ("%s: single interrupt && INTR_DIRECT?", __func__)); - T4_ALLOC_IRQ(sc, irq, rid, t4_intr_all, sc, "all"); + rc = t4_alloc_irq(sc, irq, rid, t4_intr_all, sc, "all"); + if (rc != 0) + return (rc); } else { /* Multiple interrupts. */ KASSERT(sc->intr_count >= T4_EXTRA_INTR + sc->params.nports, ("%s: too few intr.", __func__)); /* The first one is always error intr */ - T4_ALLOC_IRQ(sc, irq, rid, t4_intr_err, sc, "err"); + rc = t4_alloc_irq(sc, irq, rid, t4_intr_err, sc, "err"); + if (rc != 0) + return (rc); irq++; rid++; /* The second one is always the firmware event queue */ - T4_ALLOC_IRQ(sc, irq, rid, t4_intr_evt, &sc->sge.fwq, "evt"); + rc = t4_alloc_irq(sc, irq, rid, t4_intr_evt, &sc->sge.fwq, + "evt"); + if (rc != 0) + return (rc); irq++; rid++; @@ -2455,7 +2442,10 @@ adapter_full_init(struct adapter *sc) rxq = &sc->sge.rxq[pi->first_rxq]; for (q = 0; q < pi->nrxq; q++, rxq++) { snprintf(s, sizeof(s), "%d.%d", p, q); - T4_ALLOC_IRQ(sc, irq, rid, t4_intr, rxq, s); + rc = t4_alloc_irq(sc, irq, rid, t4_intr, rxq, + s); + if (rc != 0) + return (rc); irq++; rid++; } @@ -2471,7 +2461,10 @@ ofld_queues: ofld_rxq = &sc->sge.ofld_rxq[pi->first_ofld_rxq]; for (q = 0; q < pi->nofldrxq; q++, ofld_rxq++) { snprintf(s, sizeof(s), "%d,%d", p, q); - T4_ALLOC_IRQ(sc, irq, rid, t4_intr, ofld_rxq, s); + rc = t4_alloc_irq(sc, irq, rid, t4_intr, + ofld_rxq, s); + if (rc != 0) + return (rc); irq++; rid++; } @@ -2479,6 +2472,38 @@ ofld_queues: } } + return (0); +} + +static int +adapter_full_init(struct adapter *sc) +{ + int rc, i; + + ADAPTER_LOCK_ASSERT_NOTOWNED(sc); + KASSERT((sc->flags & FULL_INIT_DONE) == 0, + ("%s: FULL_INIT_DONE already", __func__)); + + /* + * queues that belong to the adapter (not any particular port). + */ + rc = t4_setup_adapter_queues(sc); + if (rc != 0) + goto done; + + for (i = 0; i < nitems(sc->tq); i++) { + sc->tq[i] = taskqueue_create("t4 taskq", M_NOWAIT, + taskqueue_thread_enqueue, &sc->tq[i]); + if (sc->tq[i] == NULL) { + device_printf(sc->dev, + "failed to allocate task queue %d\n", i); + rc = ENOMEM; + goto done; + } + taskqueue_start_threads(&sc->tq[i], 1, PI_NET, "%s tq%d", + device_get_nameunit(sc->dev), i); + } + t4_intr_enable(sc); sc->flags |= FULL_INIT_DONE; done: @@ -2487,7 +2512,6 @@ done: return (rc); } -#undef T4_ALLOC_IRQ static int adapter_full_uninit(struct adapter *sc) @@ -2498,10 +2522,7 @@ adapter_full_uninit(struct adapter *sc) t4_teardown_adapter_queues(sc); - for (i = 0; i < sc->intr_count; i++) - t4_free_irq(sc, &sc->irq[i]); - - for (i = 0; i < ARRAY_SIZE(sc->tq) && sc->tq[i]; i++) { + for (i = 0; i < nitems(sc->tq) && sc->tq[i]; i++) { taskqueue_free(sc->tq[i]); sc->tq[i] = NULL; } @@ -2925,7 +2946,7 @@ t4_get_regs(struct adapter *sc, struct t }; regs->version = 4 | (sc->params.rev << 10); - for (i = 0; i < ARRAY_SIZE(reg_ranges); i += 2) + for (i = 0; i < nitems(reg_ranges); i += 2) reg_block_dump(sc, buf, reg_ranges[i], reg_ranges[i + 1]); } @@ -3001,7 +3022,7 @@ t4_register_cpl_handler(struct adapter * { uintptr_t *loc, new; - if (opcode >= ARRAY_SIZE(sc->cpl_handler)) + if (opcode >= nitems(sc->cpl_handler)) return (EINVAL); new = h ? (uintptr_t)h : (uintptr_t)cpl_not_handled; @@ -3055,7 +3076,7 @@ t4_register_fw_msg_handler(struct adapte { uintptr_t *loc, new; - if (type >= ARRAY_SIZE(sc->fw_msg_handler)) + if (type >= nitems(sc->fw_msg_handler)) return (EINVAL); new = h ? (uintptr_t)h : (uintptr_t)fw_msg_not_handled; @@ -3829,9 +3850,9 @@ sysctl_devlog(SYSCTL_HANDLER_ARGS) sbuf_printf(sb, "%10d %15ju %8s %8s ", e->seqno, e->timestamp, - (e->level < ARRAY_SIZE(devlog_level_strings) ? + (e->level < nitems(devlog_level_strings) ? devlog_level_strings[e->level] : "UNKNOWN"), - (e->facility < ARRAY_SIZE(devlog_facility_strings) ? + (e->facility < nitems(devlog_facility_strings) ? devlog_facility_strings[e->facility] : "UNKNOWN")); sbuf_printf(sb, e->fmt, e->params[0], e->params[1], e->params[2], e->params[3], e->params[4], @@ -3973,7 +3994,7 @@ sysctl_lb_stats(SYSCTL_HANDLER_ARGS) sbuf_printf(sb, "%s Loopback %u" " Loopback %u", i == 0 ? "" : "\n", i, i + 1); - for (j = 0; j < ARRAY_SIZE(stat_name); j++) + for (j = 0; j < nitems(stat_name); j++) sbuf_printf(sb, "\n%-17s %20ju %20ju", stat_name[j], *p0++, *p1++); } @@ -4028,7 +4049,7 @@ sysctl_meminfo(SYSCTL_HANDLER_ARGS) "ULPTX state:", "On-chip queues:" }; struct mem_desc avail[3]; - struct mem_desc mem[ARRAY_SIZE(region) + 3]; /* up to 3 holes */ + struct mem_desc mem[nitems(region) + 3]; /* up to 3 holes */ struct mem_desc *md = mem; rc = sysctl_wire_old_buffer(req, 0); @@ -4039,7 +4060,7 @@ sysctl_meminfo(SYSCTL_HANDLER_ARGS) if (sb == NULL) return (ENOMEM); - for (i = 0; i < ARRAY_SIZE(mem); i++) { + for (i = 0; i < nitems(mem); i++) { mem[i].limit = 0; mem[i].idx = i; } @@ -4101,7 +4122,7 @@ sysctl_meminfo(SYSCTL_HANDLER_ARGS) md->limit = (sc->tids.ntids - hi) * 16 + md->base - 1; } else { md->base = 0; - md->idx = ARRAY_SIZE(region); /* hide it */ + md->idx = nitems(region); /* hide it */ } md++; @@ -4130,7 +4151,7 @@ sysctl_meminfo(SYSCTL_HANDLER_ARGS) if (sc->vres.ocq.size) md->limit = md->base + sc->vres.ocq.size - 1; else - md->idx = ARRAY_SIZE(region); /* hide it */ + md->idx = nitems(region); /* hide it */ md++; /* add any address-space holes, there can be up to 3 */ @@ -4149,7 +4170,7 @@ sysctl_meminfo(SYSCTL_HANDLER_ARGS) sbuf_printf(sb, "\n"); for (i = 0; i < n; i++) { - if (mem[i].idx >= ARRAY_SIZE(region)) + if (mem[i].idx >= nitems(region)) continue; /* skip holes */ if (!mem[i].limit) mem[i].limit = i < n - 1 ? mem[i + 1].base - 1 : ~0; @@ -5197,7 +5218,7 @@ t4_os_portmod_changed(const struct adapt if_printf(pi->ifp, "unknown transceiver inserted.\n"); else if (pi->mod_type == FW_PORT_MOD_TYPE_NOTSUPPORTED) if_printf(pi->ifp, "unsupported transceiver inserted.\n"); - else if (pi->mod_type > 0 && pi->mod_type < ARRAY_SIZE(mod_str)) { + else if (pi->mod_type > 0 && pi->mod_type < nitems(mod_str)) { if_printf(pi->ifp, "%s transceiver inserted.\n", mod_str[pi->mod_type]); } else { Modified: stable/9/sys/dev/cxgbe/tom/t4_ddp.c ============================================================================== --- stable/9/sys/dev/cxgbe/tom/t4_ddp.c Thu Oct 11 22:30:10 2012 (r241466) +++ stable/9/sys/dev/cxgbe/tom/t4_ddp.c Thu Oct 11 22:46:20 2012 (r241467) @@ -197,7 +197,7 @@ release_ddp_resources(struct toepcb *toe { int i; - for (i = 0; i < ARRAY_SIZE(toep->db); i++) { + for (i = 0; i < nitems(toep->db); i++) { if (toep->db[i] != NULL) { free_ddp_buffer(toep->td, toep->db[i]); toep->db[i] = NULL; @@ -662,7 +662,7 @@ alloc_ddp_buffer(struct tom_data *td, vm return (NULL); } - for (idx = ARRAY_SIZE(t4_ddp_pgsz) - 1; idx > 0; idx--) { + for (idx = nitems(t4_ddp_pgsz) - 1; idx > 0; idx--) { if (hcf % t4_ddp_pgsz[idx] == 0) break; } @@ -745,7 +745,7 @@ write_page_pods(struct adapter *sc, stru V_PPOD_OFST(db->offset)); ppod->rsvd = 0; idx = i * PPOD_PAGES * (ddp_pgsz / PAGE_SIZE); - for (k = 0; k < ARRAY_SIZE(ppod->addr); k++) { + for (k = 0; k < nitems(ppod->addr); k++) { if (idx < db->npages) { ppod->addr[k] = htobe64(db->pages[idx]->phys_addr); @@ -782,7 +782,7 @@ select_ddp_buffer(struct adapter *sc, st int i, empty_slot = -1; /* Try to reuse */ - for (i = 0; i < ARRAY_SIZE(toep->db); i++) { + for (i = 0; i < nitems(toep->db); i++) { if (bufcmp(toep->db[i], pages, npages, db_off, db_len) == 0) { free(pages, M_CXGBE); return (i); /* pages still held */ @@ -805,7 +805,7 @@ select_ddp_buffer(struct adapter *sc, st i = empty_slot; if (i < 0) { - i = arc4random() % ARRAY_SIZE(toep->db); + i = arc4random() % nitems(toep->db); free_ddp_buffer(td, toep->db[i]); } toep->db[i] = db; From owner-svn-src-stable-9@FreeBSD.ORG Thu Oct 11 23:02:35 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DAA95981; Thu, 11 Oct 2012 23:02:35 +0000 (UTC) (envelope-from np@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C22A78FC08; Thu, 11 Oct 2012 23:02:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9BN2Z4S000464; Thu, 11 Oct 2012 23:02:35 GMT (envelope-from np@svn.freebsd.org) Received: (from np@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9BN2Zik000462; Thu, 11 Oct 2012 23:02:35 GMT (envelope-from np@svn.freebsd.org) Message-Id: <201210112302.q9BN2Zik000462@svn.freebsd.org> From: Navdeep Parhar Date: Thu, 11 Oct 2012 23:02:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241468 - stable/9/sys/kern X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Oct 2012 23:02:35 -0000 Author: np Date: Thu Oct 11 23:02:35 2012 New Revision: 241468 URL: http://svn.freebsd.org/changeset/base/241468 Log: MFC r239624: Allow nmbjumbop, nmbjumbo9, and nmbjumbo16 to be set directly via loader tunables. Modified: stable/9/sys/kern/kern_mbuf.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/kern/kern_mbuf.c ============================================================================== --- stable/9/sys/kern/kern_mbuf.c Thu Oct 11 22:46:20 2012 (r241467) +++ stable/9/sys/kern/kern_mbuf.c Thu Oct 11 23:02:35 2012 (r241468) @@ -110,14 +110,23 @@ struct mbstat mbstat; static void tunable_mbinit(void *dummy) { - TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters); /* This has to be done before VM init. */ + TUNABLE_INT_FETCH("kern.ipc.nmbclusters", &nmbclusters); if (nmbclusters == 0) nmbclusters = 1024 + maxusers * 64; - nmbjumbop = nmbclusters / 2; - nmbjumbo9 = nmbjumbop / 2; - nmbjumbo16 = nmbjumbo9 / 2; + + TUNABLE_INT_FETCH("kern.ipc.nmbjumbop", &nmbjumbop); + if (nmbjumbop == 0) + nmbjumbop = nmbclusters / 2; + + TUNABLE_INT_FETCH("kern.ipc.nmbjumbo9", &nmbjumbo9); + if (nmbjumbo9 == 0) + nmbjumbo9 = nmbclusters / 4; + + TUNABLE_INT_FETCH("kern.ipc.nmbjumbo16", &nmbjumbo16); + if (nmbjumbo16 == 0) + nmbjumbo16 = nmbclusters / 8; } SYSINIT(tunable_mbinit, SI_SUB_TUNABLES, SI_ORDER_MIDDLE, tunable_mbinit, NULL); From owner-svn-src-stable-9@FreeBSD.ORG Fri Oct 12 02:10:27 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id C1BD1DD4; Fri, 12 Oct 2012 02:10:27 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 90E6C8FC0A; Fri, 12 Oct 2012 02:10:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9C2ARtb023552; Fri, 12 Oct 2012 02:10:27 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9C2AR5h023548; Fri, 12 Oct 2012 02:10:27 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201210120210.q9C2AR5h023548@svn.freebsd.org> From: Eitan Adler Date: Fri, 12 Oct 2012 02:10:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241473 - stable/9/usr.sbin/syslogd X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Oct 2012 02:10:27 -0000 Author: eadler Date: Fri Oct 12 02:10:27 2012 New Revision: 241473 URL: http://svn.freebsd.org/changeset/base/241473 Log: MFC r240389,r240409: - Add support for ipv6 addresses as destination - Add documentation for IPv6 support PR: docs/171580 Approved by: cperciva (implicit) Modified: stable/9/usr.sbin/syslogd/syslog.conf.5 stable/9/usr.sbin/syslogd/syslogd.c Directory Properties: stable/9/usr.sbin/syslogd/ (props changed) Modified: stable/9/usr.sbin/syslogd/syslog.conf.5 ============================================================================== --- stable/9/usr.sbin/syslogd/syslog.conf.5 Fri Oct 12 02:10:26 2012 (r241472) +++ stable/9/usr.sbin/syslogd/syslog.conf.5 Fri Oct 12 02:10:27 2012 (r241473) @@ -28,7 +28,7 @@ .\" @(#)syslog.conf.5 8.1 (Berkeley) 6/9/93 .\" $FreeBSD$ .\" -.Dd December 23, 2008 +.Dd September 12, 2012 .Dt SYSLOG.CONF 5 .Os .Sh NAME @@ -347,6 +347,14 @@ If a port number is added after a colon .Pq Ql :\& then that port will be used as the destination port rather than the usual syslog port. +IPv6 addresses can be used +by surrounding the address portion with +square brackets +.Po +.Ql [\& +and +.Ql ]\& +.Pc . .It A comma separated list of users. Selected messages are written to those users Modified: stable/9/usr.sbin/syslogd/syslogd.c ============================================================================== --- stable/9/usr.sbin/syslogd/syslogd.c Fri Oct 12 02:10:26 2012 (r241472) +++ stable/9/usr.sbin/syslogd/syslogd.c Fri Oct 12 02:10:27 2012 (r241473) @@ -1931,6 +1931,7 @@ cfline(const char *line, struct filed *f case '@': { char *tp; + char endkey = ':'; /* * scan forward to see if there is a port defined. * so we can't use strlcpy.. @@ -1939,9 +1940,19 @@ cfline(const char *line, struct filed *f tp = f->f_un.f_forw.f_hname; p++; - while (*p && (*p != ':') && (i-- > 0)) { + /* + * an ipv6 address should start with a '[' in that case + * we should scan for a ']' + */ + if (*p == '[') { + p++; + endkey = ']'; + } + while (*p && (*p != endkey) && (i-- > 0)) { *tp++ = *p++; } + if (endkey == ']' && *p == endkey) + p++; *tp = '\0'; } /* See if we copied a domain and have a port */ From owner-svn-src-stable-9@FreeBSD.ORG Fri Oct 12 02:12:53 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id E49FB53E; Fri, 12 Oct 2012 02:12:53 +0000 (UTC) (envelope-from eadler@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CD3E28FC1A; Fri, 12 Oct 2012 02:12:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9C2CrLs023981; Fri, 12 Oct 2012 02:12:53 GMT (envelope-from eadler@svn.freebsd.org) Received: (from eadler@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9C2Crst023978; Fri, 12 Oct 2012 02:12:53 GMT (envelope-from eadler@svn.freebsd.org) Message-Id: <201210120212.q9C2Crst023978@svn.freebsd.org> From: Eitan Adler Date: Fri, 12 Oct 2012 02:12:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241476 - stable/9/lib/libc/stdlib X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Oct 2012 02:12:54 -0000 Author: eadler Date: Fri Oct 12 02:12:53 2012 New Revision: 241476 URL: http://svn.freebsd.org/changeset/base/241476 Log: MFC r241373: Remove undefined behavior from sranddev() and srandomdev(). This doesn't actually work with any modern C compiler: In particular, both clang and modern gcc verisons silently elide any xor operation with 'junk'. Approved by: cperciva (implicit) Modified: stable/9/lib/libc/stdlib/rand.c stable/9/lib/libc/stdlib/random.c Directory Properties: stable/9/lib/libc/ (props changed) Modified: stable/9/lib/libc/stdlib/rand.c ============================================================================== --- stable/9/lib/libc/stdlib/rand.c Fri Oct 12 02:12:52 2012 (r241475) +++ stable/9/lib/libc/stdlib/rand.c Fri Oct 12 02:12:53 2012 (r241476) @@ -130,10 +130,9 @@ sranddev() if (!done) { struct timeval tv; - unsigned long junk; gettimeofday(&tv, NULL); - srand((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk); + srand((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec); } } Modified: stable/9/lib/libc/stdlib/random.c ============================================================================== --- stable/9/lib/libc/stdlib/random.c Fri Oct 12 02:12:52 2012 (r241475) +++ stable/9/lib/libc/stdlib/random.c Fri Oct 12 02:12:53 2012 (r241476) @@ -315,10 +315,9 @@ srandomdev() if (!done) { struct timeval tv; - volatile unsigned long junk; gettimeofday(&tv, NULL); - srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec ^ junk); + srandom((getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec); return; } From owner-svn-src-stable-9@FreeBSD.ORG Fri Oct 12 03:10:00 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 0E2BF1E9; Fri, 12 Oct 2012 03:10:00 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E91A78FC16; Fri, 12 Oct 2012 03:09:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9C39xc4030818; Fri, 12 Oct 2012 03:09:59 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9C39xSJ030816; Fri, 12 Oct 2012 03:09:59 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201210120309.q9C39xSJ030816@svn.freebsd.org> From: Alan Cox Date: Fri, 12 Oct 2012 03:09:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241478 - stable/9/sys/vm X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Oct 2012 03:10:00 -0000 Author: alc Date: Fri Oct 12 03:09:59 2012 New Revision: 241478 URL: http://svn.freebsd.org/changeset/base/241478 Log: MFC r241155 Update some of the comments. In particular, use "sleep" in preference to "block" where appropriate. Eliminate some unnecessary casts. Make a few whitespace changes for consistency. Modified: stable/9/sys/vm/vm_page.c Modified: stable/9/sys/vm/vm_page.c ============================================================================== --- stable/9/sys/vm/vm_page.c Fri Oct 12 02:12:53 2012 (r241477) +++ stable/9/sys/vm/vm_page.c Fri Oct 12 03:09:59 2012 (r241478) @@ -904,11 +904,10 @@ vm_page_splay(vm_pindex_t pindex, vm_pag * * The pagetables are not updated but will presumably fault the page * in if necessary, or if a kernel page the caller will at some point - * enter the page into the kernel's pmap. We are not allowed to block + * enter the page into the kernel's pmap. We are not allowed to sleep * here so we *can't* do this anyway. * - * The object and page must be locked. - * This routine may not block. + * The object must be locked. */ void vm_page_insert(vm_page_t m, vm_object_t object, vm_pindex_t pindex) @@ -952,14 +951,15 @@ vm_page_insert(vm_page_t m, vm_object_t object->root = m; /* - * show that the object has one more resident page. + * Show that the object has one more resident page. */ object->resident_page_count++; + /* * Hold the vnode until the last page is released. */ if (object->resident_page_count == 1 && object->type == OBJT_VNODE) - vhold((struct vnode *)object->handle); + vhold(object->handle); /* * Since we are inserting a new and possibly dirty page, @@ -971,15 +971,14 @@ vm_page_insert(vm_page_t m, vm_object_t /* * vm_page_remove: - * NOTE: used by device pager as well -wfj * * Removes the given mem entry from the object/offset-page * table and the object page list, but do not invalidate/terminate * the backing store. * - * The object and page must be locked. * The underlying pmap entry (if any) is NOT removed here. - * This routine may not block. + * + * The object must be locked. The page must be locked if it is managed. */ void vm_page_remove(vm_page_t m) @@ -1042,11 +1041,12 @@ vm_page_remove(vm_page_t m) * And show that the object has one fewer resident page. */ object->resident_page_count--; + /* * The vnode may now be recycled. */ if (object->resident_page_count == 0 && object->type == OBJT_VNODE) - vdrop((struct vnode *)object->handle); + vdrop(object->handle); m->object = NULL; } @@ -1058,8 +1058,6 @@ vm_page_remove(vm_page_t m) * pair specified; if none is found, NULL is returned. * * The object must be locked. - * This routine may not block. - * This is a critical path routine */ vm_page_t vm_page_lookup(vm_object_t object, vm_pindex_t pindex) @@ -1082,7 +1080,6 @@ vm_page_lookup(vm_object_t object, vm_pi * greater than or equal to the parameter pindex, or NULL. * * The object must be locked. - * The routine may not block. */ vm_page_t vm_page_find_least(vm_object_t object, vm_pindex_t pindex) @@ -1142,9 +1139,6 @@ vm_page_prev(vm_page_t m) * Move the given memory entry from its * current object to the specified target object/offset. * - * The object must be locked. - * This routine may not block. - * * Note: swap associated with the page must be invalidated by the move. We * have to do this for several reasons: (1) we aren't freeing the * page, (2) we are dirtying the page, (3) the VM system is probably @@ -1156,6 +1150,8 @@ vm_page_prev(vm_page_t m) * swap. If the page is on the cache, we have to deactivate it * or vm_page_dirty() will panic. Dirty pages are not allowed * on the cache. + * + * The objects must be locked. The page must be locked if it is managed. */ void vm_page_rename(vm_page_t m, vm_object_t new_object, vm_pindex_t new_pindex) @@ -1675,7 +1671,7 @@ vm_page_alloc_freelist(int flind, int re /* * vm_wait: (also see VM_WAIT macro) * - * Block until free pages are available for allocation + * Sleep until free pages are available for allocation. * - Called in various places before memory allocations. */ void @@ -1700,7 +1696,7 @@ vm_wait(void) /* * vm_waitpfault: (also see VM_WAITPFAULT macro) * - * Block until free pages are available for allocation + * Sleep until free pages are available for allocation. * - Called only in vm_fault so that processes page faulting * can be easily tracked. * - Sleeps at a lower priority than vm_wait() so that vm_wait()ing @@ -1767,7 +1763,6 @@ vm_page_queue_remove(int queue, vm_page_ * Remove a page from its queue. * * The given page must be locked. - * This routine may not block. */ void vm_pageq_remove(vm_page_t m) @@ -1809,7 +1804,6 @@ vm_page_enqueue(int queue, vm_page_t m) * mess with it. * * The page must be locked. - * This routine may not block. */ void vm_page_activate(vm_page_t m) @@ -1844,7 +1838,6 @@ vm_page_activate(vm_page_t m) * queues. * * The page queues must be locked. - * This routine may not block. */ static inline void vm_page_free_wakeup(void) @@ -1877,10 +1870,8 @@ vm_page_free_wakeup(void) * Returns the given page to the free list, * disassociating it with any VM object. * - * Object and page must be locked prior to entry. - * This routine may not block. + * The object must be locked. The page must be locked if it is managed. */ - void vm_page_free_toq(vm_page_t m) { @@ -1898,7 +1889,7 @@ vm_page_free_toq(vm_page_t m) panic("vm_page_free: freeing busy page %p", m); /* - * unqueue, then remove page. Note that we cannot destroy + * Unqueue, then remove page. Note that we cannot destroy * the page here because we do not want to call the pager's * callback routine until after we've put the page on the * appropriate free queue. @@ -1964,7 +1955,6 @@ vm_page_free_toq(vm_page_t m) * If the page is fictitious, then its wire count must remain one. * * The page must be locked. - * This routine may not block. */ void vm_page_wire(vm_page_t m) @@ -2053,7 +2043,7 @@ vm_page_unwire(vm_page_t m, int activate * to 1 if we want this page to be 'as if it were placed in the cache', * except without unmapping it from the process address space. * - * This routine may not block. + * The page must be locked. */ static inline void _vm_page_deactivate(vm_page_t m, int athead) @@ -2145,7 +2135,7 @@ vm_page_try_to_free(vm_page_t m) * * Put the specified page onto the page cache queue (if appropriate). * - * This routine may not block. + * The object and page must be locked. */ void vm_page_cache(vm_page_t m) @@ -2302,6 +2292,8 @@ vm_page_cache(vm_page_t m) * system to balance the queues, potentially recovering other unrelated * space from active. The idea is to not force this to happen too * often. + * + * The object and page must be locked. */ void vm_page_dontneed(vm_page_t m) @@ -2365,7 +2357,10 @@ vm_page_dontneed(vm_page_t m) * The caller must always specify the VM_ALLOC_RETRY flag. This is intended * to facilitate its eventual removal. * - * This routine may block. + * This routine may sleep. + * + * The object must be locked on entry. The lock will, however, be released + * and reacquired if the routine sleeps. */ vm_page_t vm_page_grab(vm_object_t object, vm_pindex_t pindex, int allocflags) @@ -2413,8 +2408,7 @@ retrylookup: } /* - * Mapping function for valid bits or for dirty bits in - * a page. May not block. + * Mapping function for valid or dirty bits in a page. * * Inputs are required to range within a page. */ @@ -2553,8 +2547,6 @@ vm_page_clear_dirty_mask(vm_page_t m, vm * of any partial chunks touched by the range. The invalid portion of * such chunks will be zero'd. * - * This routine may not block. - * * (base + size) must be less then or equal to PAGE_SIZE. */ void @@ -2647,8 +2639,6 @@ vm_page_clear_dirty(vm_page_t m, int bas * * Invalidates DEV_BSIZE'd chunks within a page. Both the * valid and dirty bits for the effected areas are cleared. - * - * May not block. */ void vm_page_set_invalid(vm_page_t m, int base, int size) @@ -2717,8 +2707,6 @@ vm_page_zero_invalid(vm_page_t m, boolea * Is (partial) page valid? Note that the case where size == 0 * will return FALSE in the degenerate case where the page is * entirely invalid, and TRUE otherwise. - * - * May not block. */ int vm_page_is_valid(vm_page_t m, int base, int size) @@ -2734,7 +2722,7 @@ vm_page_is_valid(vm_page_t m, int base, } /* - * update dirty bits from pmap/mmu. May not block. + * Set the page's dirty bits if the page is modified. */ void vm_page_test_dirty(vm_page_t m) From owner-svn-src-stable-9@FreeBSD.ORG Fri Oct 12 13:17:20 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 666FBDDA; Fri, 12 Oct 2012 13:17:20 +0000 (UTC) (envelope-from ache@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4E2B08FC08; Fri, 12 Oct 2012 13:17:20 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9CDHKGo009412; Fri, 12 Oct 2012 13:17:20 GMT (envelope-from ache@svn.freebsd.org) Received: (from ache@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9CDHKtY009410; Fri, 12 Oct 2012 13:17:20 GMT (envelope-from ache@svn.freebsd.org) Message-Id: <201210121317.q9CDHKtY009410@svn.freebsd.org> From: "Andrey A. Chernov" Date: Fri, 12 Oct 2012 13:17:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241483 - stable/9/lib/libc/stdlib X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 12 Oct 2012 13:17:20 -0000 Author: ache Date: Fri Oct 12 13:17:19 2012 New Revision: 241483 URL: http://svn.freebsd.org/changeset/base/241483 Log: MFC r241137,r241154 Using putenv() and later direct pointer contents modification it is possibe to craft environment variables with similar names like that: a=1 a=2 ... unsetenv("a") should remove them all to make later getenv("a") impossible. Fix it to do so (this is GNU autoconf test #3 failure too). PR: 172273 Modified: stable/9/lib/libc/stdlib/getenv.c Directory Properties: stable/9/lib/libc/ (props changed) Modified: stable/9/lib/libc/stdlib/getenv.c ============================================================================== --- stable/9/lib/libc/stdlib/getenv.c Fri Oct 12 12:27:30 2012 (r241482) +++ stable/9/lib/libc/stdlib/getenv.c Fri Oct 12 13:17:19 2012 (r241483) @@ -662,6 +662,7 @@ unsetenv(const char *name) { int envNdx; size_t nameLen; + int newEnvActive; /* Check for malformed name. */ if (name == NULL || (nameLen = __strleneq(name)) == 0) { @@ -674,13 +675,18 @@ unsetenv(const char *name) return (-1); /* Deactivate specified variable. */ + /* Remove all occurrences. */ envNdx = envVarsTotal - 1; - if (__findenv(name, nameLen, &envNdx, true) != NULL) { + newEnvActive = envActive; + while (__findenv(name, nameLen, &envNdx, true) != NULL) { envVars[envNdx].active = false; if (envVars[envNdx].putenv) __remove_putenv(envNdx); - __rebuild_environ(envActive - 1); + envNdx--; + newEnvActive--; } + if (newEnvActive != envActive) + __rebuild_environ(newEnvActive); return (0); } From owner-svn-src-stable-9@FreeBSD.ORG Sat Oct 13 12:56:05 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6D84A5B4; Sat, 13 Oct 2012 12:56:05 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5504F8FC0A; Sat, 13 Oct 2012 12:56:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9DCu57i016872; Sat, 13 Oct 2012 12:56:05 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9DCu5og016869; Sat, 13 Oct 2012 12:56:05 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201210131256.q9DCu5og016869@svn.freebsd.org> From: Dimitry Andric Date: Sat, 13 Oct 2012 12:56:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241505 - in stable/9/contrib/llvm/lib: Support Target/X86 X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Oct 2012 12:56:05 -0000 Author: dim Date: Sat Oct 13 12:56:04 2012 New Revision: 241505 URL: http://svn.freebsd.org/changeset/base/241505 Log: MFC r241427: Pull in r163710 from upstream llvm trunk: Add support for AMD Geode. Modified: stable/9/contrib/llvm/lib/Support/Host.cpp stable/9/contrib/llvm/lib/Target/X86/X86.td Directory Properties: stable/9/contrib/llvm/ (props changed) Modified: stable/9/contrib/llvm/lib/Support/Host.cpp ============================================================================== --- stable/9/contrib/llvm/lib/Support/Host.cpp Sat Oct 13 11:23:16 2012 (r241504) +++ stable/9/contrib/llvm/lib/Support/Host.cpp Sat Oct 13 12:56:04 2012 (r241505) @@ -284,6 +284,7 @@ std::string sys::getHostCPUName() { case 8: return "k6-2"; case 9: case 13: return "k6-3"; + case 10: return "geode"; default: return "pentium"; } case 6: Modified: stable/9/contrib/llvm/lib/Target/X86/X86.td ============================================================================== --- stable/9/contrib/llvm/lib/Target/X86/X86.td Sat Oct 13 11:23:16 2012 (r241504) +++ stable/9/contrib/llvm/lib/Target/X86/X86.td Sat Oct 13 12:56:04 2012 (r241505) @@ -227,6 +227,7 @@ def : Proc<"bdver2", [FeatureSS FeatureAES, FeatureCLMUL, FeatureXOP, FeatureF16C, FeatureLZCNT, FeaturePOPCNT, FeatureBMI]>; +def : Proc<"geode", [Feature3DNowA]>; def : Proc<"winchip-c6", [FeatureMMX]>; def : Proc<"winchip2", [Feature3DNow]>; From owner-svn-src-stable-9@FreeBSD.ORG Sat Oct 13 13:00:52 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 1D486771; Sat, 13 Oct 2012 13:00:52 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 016FE8FC12; Sat, 13 Oct 2012 13:00:52 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9DD0php017765; Sat, 13 Oct 2012 13:00:51 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9DD0pDY017749; Sat, 13 Oct 2012 13:00:51 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201210131300.q9DD0pDY017749@svn.freebsd.org> From: Dimitry Andric Date: Sat, 13 Oct 2012 13:00:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241506 - in stable/9/contrib/llvm: include/llvm/Support lib/CodeGen lib/Target/ARM/MCTargetDesc lib/Target/MBlaze/MCTargetDesc lib/Target/Mips/MCTargetDesc lib/Target/PowerPC/MCTargetD... X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Oct 2012 13:00:52 -0000 Author: dim Date: Sat Oct 13 13:00:51 2012 New Revision: 241506 URL: http://svn.freebsd.org/changeset/base/241506 Log: MFC r241430: Pull in r164132 from upstream llvm trunk: When creating MCAsmBackend pass the CPU string as well. In X86AsmBackend store this and use it to not emit long nops when the CPU is geode which doesnt support them. Fixes PR11212. Pull in r164133 from upstream clang trunk: Follow up on llvm r164132. This should prevent illegal instructions when building world on Geode CPUs (e.g. Soekris). Modified: stable/9/contrib/llvm/include/llvm/Support/TargetRegistry.h stable/9/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeAsmBackend.cpp stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeMCTargetDesc.h stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h stable/9/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp stable/9/contrib/llvm/tools/llvm-mc/llvm-mc.cpp Directory Properties: stable/9/contrib/llvm/ (props changed) stable/9/contrib/llvm/tools/clang/ (props changed) Modified: stable/9/contrib/llvm/include/llvm/Support/TargetRegistry.h ============================================================================== --- stable/9/contrib/llvm/include/llvm/Support/TargetRegistry.h Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/include/llvm/Support/TargetRegistry.h Sat Oct 13 13:00:51 2012 (r241506) @@ -93,7 +93,9 @@ namespace llvm { CodeGenOpt::Level OL); typedef AsmPrinter *(*AsmPrinterCtorTy)(TargetMachine &TM, MCStreamer &Streamer); - typedef MCAsmBackend *(*MCAsmBackendCtorTy)(const Target &T, StringRef TT); + typedef MCAsmBackend *(*MCAsmBackendCtorTy)(const Target &T, + StringRef TT, + StringRef CPU); typedef MCTargetAsmLexer *(*MCAsmLexerCtorTy)(const Target &T, const MCRegisterInfo &MRI, const MCAsmInfo &MAI); @@ -352,10 +354,10 @@ namespace llvm { /// /// \arg Triple - The target triple string. /// \arg Backend - The target independent assembler object. - MCAsmBackend *createMCAsmBackend(StringRef Triple) const { + MCAsmBackend *createMCAsmBackend(StringRef Triple, StringRef CPU) const { if (!MCAsmBackendCtorFn) return 0; - return MCAsmBackendCtorFn(*this, Triple); + return MCAsmBackendCtorFn(*this, Triple, CPU); } /// createMCAsmLexer - Create a target specific assembly lexer. @@ -1046,8 +1048,9 @@ namespace llvm { } private: - static MCAsmBackend *Allocator(const Target &T, StringRef Triple) { - return new MCAsmBackendImpl(T, Triple); + static MCAsmBackend *Allocator(const Target &T, StringRef Triple, + StringRef CPU) { + return new MCAsmBackendImpl(T, Triple, CPU); } }; Modified: stable/9/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp ============================================================================== --- stable/9/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -181,7 +181,7 @@ bool LLVMTargetMachine::addPassesToEmitF if (ShowMCEncoding) { const MCSubtargetInfo &STI = getSubtarget(); MCE = getTarget().createMCCodeEmitter(*getInstrInfo(), STI, *Context); - MAB = getTarget().createMCAsmBackend(getTargetTriple()); + MAB = getTarget().createMCAsmBackend(getTargetTriple(), TargetCPU); } MCStreamer *S = getTarget().createAsmStreamer(*Context, Out, @@ -200,7 +200,7 @@ bool LLVMTargetMachine::addPassesToEmitF // emission fails. MCCodeEmitter *MCE = getTarget().createMCCodeEmitter(*getInstrInfo(), STI, *Context); - MCAsmBackend *MAB = getTarget().createMCAsmBackend(getTargetTriple()); + MCAsmBackend *MAB = getTarget().createMCAsmBackend(getTargetTriple(), TargetCPU); if (MCE == 0 || MAB == 0) return true; @@ -274,7 +274,7 @@ bool LLVMTargetMachine::addPassesToEmitM const MCSubtargetInfo &STI = getSubtarget(); MCCodeEmitter *MCE = getTarget().createMCCodeEmitter(*getInstrInfo(),STI, *Ctx); - MCAsmBackend *MAB = getTarget().createMCAsmBackend(getTargetTriple()); + MCAsmBackend *MAB = getTarget().createMCAsmBackend(getTargetTriple(), TargetCPU); if (MCE == 0 || MAB == 0) return true; Modified: stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp ============================================================================== --- stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMAsmBackend.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -629,7 +629,7 @@ void DarwinARMAsmBackend::applyFixup(con } // end anonymous namespace -MCAsmBackend *llvm::createARMAsmBackend(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createARMAsmBackend(const Target &T, StringRef TT, StringRef CPU) { Triple TheTriple(TT); if (TheTriple.isOSDarwin()) { Modified: stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h ============================================================================== --- stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/ARM/MCTargetDesc/ARMMCTargetDesc.h Sat Oct 13 13:00:51 2012 (r241506) @@ -44,7 +44,7 @@ MCCodeEmitter *createARMMCCodeEmitter(co const MCSubtargetInfo &STI, MCContext &Ctx); -MCAsmBackend *createARMAsmBackend(const Target &T, StringRef TT); +MCAsmBackend *createARMAsmBackend(const Target &T, StringRef TT, StringRef CPU); /// createARMELFObjectWriter - Construct an ELF Mach-O object writer. MCObjectWriter *createARMELFObjectWriter(raw_ostream &OS, Modified: stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeAsmBackend.cpp ============================================================================== --- stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeAsmBackend.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeAsmBackend.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -156,7 +156,8 @@ void ELFMBlazeAsmBackend::applyFixup(con } } // end anonymous namespace -MCAsmBackend *llvm::createMBlazeAsmBackend(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createMBlazeAsmBackend(const Target &T, StringRef TT, + StringRef CPU) { Triple TheTriple(TT); if (TheTriple.isOSDarwin()) Modified: stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeMCTargetDesc.h ============================================================================== --- stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeMCTargetDesc.h Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/MBlaze/MCTargetDesc/MBlazeMCTargetDesc.h Sat Oct 13 13:00:51 2012 (r241506) @@ -33,7 +33,8 @@ MCCodeEmitter *createMBlazeMCCodeEmitter const MCSubtargetInfo &STI, MCContext &Ctx); -MCAsmBackend *createMBlazeAsmBackend(const Target &T, StringRef TT); +MCAsmBackend *createMBlazeAsmBackend(const Target &T, StringRef TT, + StringRef CPU); MCObjectWriter *createMBlazeELFObjectWriter(raw_ostream &OS, uint8_t OSABI); } // End llvm namespace Modified: stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp ============================================================================== --- stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -213,22 +213,26 @@ public: } // namespace // MCAsmBackend -MCAsmBackend *llvm::createMipsAsmBackendEL32(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createMipsAsmBackendEL32(const Target &T, StringRef TT, + StringRef CPU) { return new MipsAsmBackend(T, Triple(TT).getOS(), /*IsLittle*/true, /*Is64Bit*/false); } -MCAsmBackend *llvm::createMipsAsmBackendEB32(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createMipsAsmBackendEB32(const Target &T, StringRef TT, + StringRef CPU) { return new MipsAsmBackend(T, Triple(TT).getOS(), /*IsLittle*/false, /*Is64Bit*/false); } -MCAsmBackend *llvm::createMipsAsmBackendEL64(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createMipsAsmBackendEL64(const Target &T, StringRef TT, + StringRef CPU) { return new MipsAsmBackend(T, Triple(TT).getOS(), /*IsLittle*/true, /*Is64Bit*/true); } -MCAsmBackend *llvm::createMipsAsmBackendEB64(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createMipsAsmBackendEB64(const Target &T, StringRef TT, + StringRef CPU) { return new MipsAsmBackend(T, Triple(TT).getOS(), /*IsLittle*/false, /*Is64Bit*/true); } Modified: stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h ============================================================================== --- stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/Mips/MCTargetDesc/MipsMCTargetDesc.h Sat Oct 13 13:00:51 2012 (r241506) @@ -39,10 +39,14 @@ MCCodeEmitter *createMipsMCCodeEmitterEL const MCSubtargetInfo &STI, MCContext &Ctx); -MCAsmBackend *createMipsAsmBackendEB32(const Target &T, StringRef TT); -MCAsmBackend *createMipsAsmBackendEL32(const Target &T, StringRef TT); -MCAsmBackend *createMipsAsmBackendEB64(const Target &T, StringRef TT); -MCAsmBackend *createMipsAsmBackendEL64(const Target &T, StringRef TT); +MCAsmBackend *createMipsAsmBackendEB32(const Target &T, StringRef TT, + StringRef CPU); +MCAsmBackend *createMipsAsmBackendEL32(const Target &T, StringRef TT, + StringRef CPU); +MCAsmBackend *createMipsAsmBackendEB64(const Target &T, StringRef TT, + StringRef CPU); +MCAsmBackend *createMipsAsmBackendEL64(const Target &T, StringRef TT, + StringRef CPU); MCObjectWriter *createMipsELFObjectWriter(raw_ostream &OS, uint8_t OSABI, Modified: stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp ============================================================================== --- stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCAsmBackend.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -181,7 +181,7 @@ namespace { -MCAsmBackend *llvm::createPPCAsmBackend(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createPPCAsmBackend(const Target &T, StringRef TT, StringRef CPU) { if (Triple(TT).isOSDarwin()) return new DarwinPPCAsmBackend(T); Modified: stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h ============================================================================== --- stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/PowerPC/MCTargetDesc/PPCMCTargetDesc.h Sat Oct 13 13:00:51 2012 (r241506) @@ -34,7 +34,7 @@ MCCodeEmitter *createPPCMCCodeEmitter(co const MCSubtargetInfo &STI, MCContext &Ctx); -MCAsmBackend *createPPCAsmBackend(const Target &T, StringRef TT); +MCAsmBackend *createPPCAsmBackend(const Target &T, StringRef TT, StringRef CPU); /// createPPCELFObjectWriter - Construct an PPC ELF object writer. MCObjectWriter *createPPCELFObjectWriter(raw_ostream &OS, Modified: stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp ============================================================================== --- stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86AsmBackend.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -66,9 +66,10 @@ public: }; class X86AsmBackend : public MCAsmBackend { + StringRef CPU; public: - X86AsmBackend(const Target &T) - : MCAsmBackend() {} + X86AsmBackend(const Target &T, StringRef _CPU) + : MCAsmBackend(), CPU(_CPU) {} unsigned getNumFixupKinds() const { return X86::NumTargetFixupKinds; @@ -305,6 +306,13 @@ bool X86AsmBackend::writeNopData(uint64_ {0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00}, }; + // This CPU doesnt support long nops. If needed add more. + if (CPU == "geode") { + for (uint64_t i = 0; i < Count; ++i) + OW->Write8(0x90); + return true; + } + // Write an optimal sequence for the first 15 bytes. const uint64_t OptimalCount = (Count < 16) ? Count : 15; const uint64_t Prefixes = OptimalCount <= 10 ? 0 : OptimalCount - 10; @@ -327,8 +335,8 @@ namespace { class ELFX86AsmBackend : public X86AsmBackend { public: uint8_t OSABI; - ELFX86AsmBackend(const Target &T, uint8_t _OSABI) - : X86AsmBackend(T), OSABI(_OSABI) { + ELFX86AsmBackend(const Target &T, uint8_t _OSABI, StringRef CPU) + : X86AsmBackend(T, CPU), OSABI(_OSABI) { HasReliableSymbolDifference = true; } @@ -340,8 +348,8 @@ public: class ELFX86_32AsmBackend : public ELFX86AsmBackend { public: - ELFX86_32AsmBackend(const Target &T, uint8_t OSABI) - : ELFX86AsmBackend(T, OSABI) {} + ELFX86_32AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU) + : ELFX86AsmBackend(T, OSABI, CPU) {} MCObjectWriter *createObjectWriter(raw_ostream &OS) const { return createX86ELFObjectWriter(OS, /*Is64Bit*/ false, OSABI); @@ -350,8 +358,8 @@ public: class ELFX86_64AsmBackend : public ELFX86AsmBackend { public: - ELFX86_64AsmBackend(const Target &T, uint8_t OSABI) - : ELFX86AsmBackend(T, OSABI) {} + ELFX86_64AsmBackend(const Target &T, uint8_t OSABI, StringRef CPU) + : ELFX86AsmBackend(T, OSABI, CPU) {} MCObjectWriter *createObjectWriter(raw_ostream &OS) const { return createX86ELFObjectWriter(OS, /*Is64Bit*/ true, OSABI); @@ -362,8 +370,8 @@ class WindowsX86AsmBackend : public X86A bool Is64Bit; public: - WindowsX86AsmBackend(const Target &T, bool is64Bit) - : X86AsmBackend(T) + WindowsX86AsmBackend(const Target &T, bool is64Bit, StringRef CPU) + : X86AsmBackend(T, CPU) , Is64Bit(is64Bit) { } @@ -374,14 +382,14 @@ public: class DarwinX86AsmBackend : public X86AsmBackend { public: - DarwinX86AsmBackend(const Target &T) - : X86AsmBackend(T) { } + DarwinX86AsmBackend(const Target &T, StringRef CPU) + : X86AsmBackend(T, CPU) { } }; class DarwinX86_32AsmBackend : public DarwinX86AsmBackend { public: - DarwinX86_32AsmBackend(const Target &T) - : DarwinX86AsmBackend(T) {} + DarwinX86_32AsmBackend(const Target &T, StringRef CPU) + : DarwinX86AsmBackend(T, CPU) {} MCObjectWriter *createObjectWriter(raw_ostream &OS) const { return createX86MachObjectWriter(OS, /*Is64Bit=*/false, @@ -392,8 +400,8 @@ public: class DarwinX86_64AsmBackend : public DarwinX86AsmBackend { public: - DarwinX86_64AsmBackend(const Target &T) - : DarwinX86AsmBackend(T) { + DarwinX86_64AsmBackend(const Target &T, StringRef CPU) + : DarwinX86AsmBackend(T, CPU) { HasReliableSymbolDifference = true; } @@ -439,28 +447,28 @@ public: } // end anonymous namespace -MCAsmBackend *llvm::createX86_32AsmBackend(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createX86_32AsmBackend(const Target &T, StringRef TT, StringRef CPU) { Triple TheTriple(TT); if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO) - return new DarwinX86_32AsmBackend(T); + return new DarwinX86_32AsmBackend(T, CPU); if (TheTriple.isOSWindows()) - return new WindowsX86AsmBackend(T, false); + return new WindowsX86AsmBackend(T, false, CPU); uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); - return new ELFX86_32AsmBackend(T, OSABI); + return new ELFX86_32AsmBackend(T, OSABI, CPU); } -MCAsmBackend *llvm::createX86_64AsmBackend(const Target &T, StringRef TT) { +MCAsmBackend *llvm::createX86_64AsmBackend(const Target &T, StringRef TT, StringRef CPU) { Triple TheTriple(TT); if (TheTriple.isOSDarwin() || TheTriple.getEnvironment() == Triple::MachO) - return new DarwinX86_64AsmBackend(T); + return new DarwinX86_64AsmBackend(T, CPU); if (TheTriple.isOSWindows()) - return new WindowsX86AsmBackend(T, true); + return new WindowsX86AsmBackend(T, true, CPU); uint8_t OSABI = MCELFObjectTargetWriter::getOSABI(TheTriple.getOS()); - return new ELFX86_64AsmBackend(T, OSABI); + return new ELFX86_64AsmBackend(T, OSABI, CPU); } Modified: stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h ============================================================================== --- stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/lib/Target/X86/MCTargetDesc/X86MCTargetDesc.h Sat Oct 13 13:00:51 2012 (r241506) @@ -79,8 +79,8 @@ MCCodeEmitter *createX86MCCodeEmitter(co const MCSubtargetInfo &STI, MCContext &Ctx); -MCAsmBackend *createX86_32AsmBackend(const Target &T, StringRef TT); -MCAsmBackend *createX86_64AsmBackend(const Target &T, StringRef TT); +MCAsmBackend *createX86_32AsmBackend(const Target &T, StringRef TT, StringRef CPU); +MCAsmBackend *createX86_64AsmBackend(const Target &T, StringRef TT, StringRef CPU); /// createX86MachObjectWriter - Construct an X86 Mach-O object writer. MCObjectWriter *createX86MachObjectWriter(raw_ostream &OS, Modified: stable/9/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp ============================================================================== --- stable/9/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/tools/clang/tools/driver/cc1as_main.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -329,7 +329,7 @@ static bool ExecuteAssembler(AssemblerIn MCAsmBackend *MAB = 0; if (Opts.ShowEncoding) { CE = TheTarget->createMCCodeEmitter(*MCII, *STI, Ctx); - MAB = TheTarget->createMCAsmBackend(Opts.Triple); + MAB = TheTarget->createMCAsmBackend(Opts.Triple, Opts.CPU); } Str.reset(TheTarget->createAsmStreamer(Ctx, *Out, /*asmverbose*/true, /*useLoc*/ true, @@ -343,7 +343,7 @@ static bool ExecuteAssembler(AssemblerIn assert(Opts.OutputType == AssemblerInvocation::FT_Obj && "Invalid file type!"); MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *STI, Ctx); - MCAsmBackend *MAB = TheTarget->createMCAsmBackend(Opts.Triple); + MCAsmBackend *MAB = TheTarget->createMCAsmBackend(Opts.Triple, Opts.CPU); Str.reset(TheTarget->createMCObjectStreamer(Opts.Triple, Ctx, *MAB, *Out, CE, Opts.RelaxAll, Opts.NoExecStack)); Modified: stable/9/contrib/llvm/tools/llvm-mc/llvm-mc.cpp ============================================================================== --- stable/9/contrib/llvm/tools/llvm-mc/llvm-mc.cpp Sat Oct 13 12:56:04 2012 (r241505) +++ stable/9/contrib/llvm/tools/llvm-mc/llvm-mc.cpp Sat Oct 13 13:00:51 2012 (r241506) @@ -431,7 +431,7 @@ int main(int argc, char **argv) { MCAsmBackend *MAB = 0; if (ShowEncoding) { CE = TheTarget->createMCCodeEmitter(*MCII, *STI, Ctx); - MAB = TheTarget->createMCAsmBackend(TripleName); + MAB = TheTarget->createMCAsmBackend(TripleName, MCPU); } Str.reset(TheTarget->createAsmStreamer(Ctx, FOS, /*asmverbose*/true, /*useLoc*/ true, @@ -444,7 +444,7 @@ int main(int argc, char **argv) { } else { assert(FileType == OFT_ObjectFile && "Invalid file type!"); MCCodeEmitter *CE = TheTarget->createMCCodeEmitter(*MCII, *STI, Ctx); - MCAsmBackend *MAB = TheTarget->createMCAsmBackend(TripleName); + MCAsmBackend *MAB = TheTarget->createMCAsmBackend(TripleName, MCPU); Str.reset(TheTarget->createMCObjectStreamer(TripleName, Ctx, *MAB, FOS, CE, RelaxAll, NoExecStack)); From owner-svn-src-stable-9@FreeBSD.ORG Sat Oct 13 22:22:54 2012 Return-Path: Delivered-To: svn-src-stable-9@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6D413BB6; Sat, 13 Oct 2012 22:22:54 +0000 (UTC) (envelope-from alc@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4AE8B8FC0A; Sat, 13 Oct 2012 22:22:54 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q9DMMsm2020627; Sat, 13 Oct 2012 22:22:54 GMT (envelope-from alc@svn.freebsd.org) Received: (from alc@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q9DMMsql020624; Sat, 13 Oct 2012 22:22:54 GMT (envelope-from alc@svn.freebsd.org) Message-Id: <201210132222.q9DMMsql020624@svn.freebsd.org> From: Alan Cox Date: Sat, 13 Oct 2012 22:22:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r241518 - in stable/9/sys/i386: i386 xen X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable-9@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: SVN commit messages for only the 9-stable src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 13 Oct 2012 22:22:54 -0000 Author: alc Date: Sat Oct 13 22:22:53 2012 New Revision: 241518 URL: http://svn.freebsd.org/changeset/base/241518 Log: MFC r241353, r241356, r241400 To avoid page table page corruption, change pmap_pv_reclaim()'s method of mapping page table pages. Add some assertions that were helpful in debugging the page table page corruption. Modified: stable/9/sys/i386/i386/pmap.c stable/9/sys/i386/xen/pmap.c Directory Properties: stable/9/sys/ (props changed) Modified: stable/9/sys/i386/i386/pmap.c ============================================================================== --- stable/9/sys/i386/i386/pmap.c Sat Oct 13 20:19:43 2012 (r241517) +++ stable/9/sys/i386/i386/pmap.c Sat Oct 13 22:22:53 2012 (r241518) @@ -482,7 +482,8 @@ pmap_bootstrap(vm_paddr_t firstaddr) KPTmap -= i386_btop(KPTDI << PDRSHIFT); /* - * ptemap is used for pmap_pte_quick + * PADDR1 and PADDR2 are used by pmap_pte_quick() and pmap_pte(), + * respectively. */ SYSMAP(pt_entry_t *, PMAP1, PADDR1, 1) SYSMAP(pt_entry_t *, PMAP2, PADDR2, 1) @@ -2235,7 +2236,6 @@ pmap_pv_reclaim(pmap_t locked_pmap) pmap = NULL; free = m_pc = NULL; TAILQ_INIT(&newtail); - sched_pin(); while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && (pv_vafree == 0 || free == NULL)) { TAILQ_REMOVE(&pv_chunks, pc, pc_lru); @@ -2269,10 +2269,16 @@ pmap_pv_reclaim(pmap_t locked_pmap) pde = pmap_pde(pmap, va); if ((*pde & PG_PS) != 0) continue; - pte = pmap_pte_quick(pmap, va); - if ((*pte & PG_W) != 0) + pte = pmap_pte(pmap, va); + tpte = *pte; + if ((tpte & PG_W) == 0) + tpte = pte_load_clear(pte); + pmap_pte_release(pte); + if ((tpte & PG_W) != 0) continue; - tpte = pte_load_clear(pte); + KASSERT(tpte != 0, + ("pmap_pv_reclaim: pmap %p va %x zero pte", + pmap, va)); if ((tpte & PG_G) != 0) pmap_invalidate_page(pmap, va); m = PHYS_TO_VM_PAGE(tpte & PG_FRAME); @@ -2330,7 +2336,6 @@ pmap_pv_reclaim(pmap_t locked_pmap) } } out: - sched_unpin(); TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru); if (pmap != NULL) { pmap_invalidate_all(pmap); @@ -2870,6 +2875,8 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t rw_assert(&pvh_global_lock, RA_WLOCKED); PMAP_LOCK_ASSERT(pmap, MA_OWNED); oldpte = pte_load_clear(ptq); + KASSERT(oldpte != 0, + ("pmap_remove_pte: pmap %p va %x zero pte", pmap, va)); if (oldpte & PG_W) pmap->pm_stats.wired_count -= 1; /* @@ -3074,6 +3081,8 @@ small_mappings: " a 4mpage in page %p's pv list", m)); pte = pmap_pte_quick(pmap, pv->pv_va); tpte = pte_load_clear(pte); + KASSERT(tpte != 0, ("pmap_remove_all: pmap %p va %x zero pte", + pmap, pv->pv_va)); if (tpte & PG_W) pmap->pm_stats.wired_count--; if (tpte & PG_A) @@ -4373,6 +4382,8 @@ pmap_remove_pages(pmap_t pmap) PMAP_LOCK(pmap); sched_pin(); TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) { + KASSERT(pc->pc_pmap == pmap, ("Wrong pmap %p %p", pmap, + pc->pc_pmap)); allfree = 1; for (field = 0; field < _NPCM; field++) { inuse = ~pc->pc_map[field] & pc_freemask[field]; Modified: stable/9/sys/i386/xen/pmap.c ============================================================================== --- stable/9/sys/i386/xen/pmap.c Sat Oct 13 20:19:43 2012 (r241517) +++ stable/9/sys/i386/xen/pmap.c Sat Oct 13 22:22:53 2012 (r241518) @@ -437,7 +437,8 @@ pmap_bootstrap(vm_paddr_t firstaddr) SYSMAP(struct msgbuf *, unused, msgbufp, atop(round_page(msgbufsize))) /* - * ptemap is used for pmap_pte_quick + * PADDR1 and PADDR2 are used by pmap_pte_quick() and pmap_pte(), + * respectively. */ SYSMAP(pt_entry_t *, PMAP1, PADDR1, 1) SYSMAP(pt_entry_t *, PMAP2, PADDR2, 1) @@ -1986,7 +1987,6 @@ pmap_pv_reclaim(pmap_t locked_pmap) pmap = NULL; free = m_pc = NULL; TAILQ_INIT(&newtail); - sched_pin(); while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && (pv_vafree == 0 || free == NULL)) { TAILQ_REMOVE(&pv_chunks, pc, pc_lru); @@ -2017,10 +2017,16 @@ pmap_pv_reclaim(pmap_t locked_pmap) bit = bsfl(inuse); pv = &pc->pc_pventry[field * 32 + bit]; va = pv->pv_va; - pte = pmap_pte_quick(pmap, va); - if ((*pte & PG_W) != 0) + pte = pmap_pte(pmap, va); + tpte = *pte; + if ((tpte & PG_W) == 0) + tpte = pte_load_clear(pte); + pmap_pte_release(pte); + if ((tpte & PG_W) != 0) continue; - tpte = pte_load_clear(pte); + KASSERT(tpte != 0, + ("pmap_pv_reclaim: pmap %p va %x zero pte", + pmap, va)); if ((tpte & PG_G) != 0) pmap_invalidate_page(pmap, va); m = PHYS_TO_VM_PAGE(tpte & PG_FRAME); @@ -2072,7 +2078,6 @@ pmap_pv_reclaim(pmap_t locked_pmap) } } out: - sched_unpin(); TAILQ_CONCAT(&pv_chunks, &newtail, pc_lru); if (pmap != NULL) { pmap_invalidate_all(pmap); @@ -2294,6 +2299,8 @@ pmap_remove_pte(pmap_t pmap, pt_entry_t PMAP_LOCK_ASSERT(pmap, MA_OWNED); oldpte = *ptq; PT_SET_VA_MA(ptq, 0, TRUE); + KASSERT(oldpte != 0, + ("pmap_remove_pte: pmap %p va %x zero pte", pmap, va)); if (oldpte & PG_W) pmap->pm_stats.wired_count -= 1; /* @@ -2478,6 +2485,8 @@ pmap_remove_all(vm_page_t m) pte = pmap_pte_quick(pmap, pv->pv_va); tpte = *pte; PT_SET_VA_MA(pte, 0, TRUE); + KASSERT(tpte != 0, ("pmap_remove_all: pmap %p va %x zero pte", + pmap, pv->pv_va)); if (tpte & PG_W) pmap->pm_stats.wired_count--; if (tpte & PG_A) @@ -3541,6 +3550,8 @@ pmap_remove_pages(pmap_t pmap) PMAP_LOCK(pmap); sched_pin(); TAILQ_FOREACH_SAFE(pc, &pmap->pm_pvchunk, pc_list, npc) { + KASSERT(pc->pc_pmap == pmap, ("Wrong pmap %p %p", pmap, + pc->pc_pmap)); allfree = 1; for (field = 0; field < _NPCM; field++) { inuse = ~pc->pc_map[field] & pc_freemask[field];