From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 04:47:34 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A82611065670; Sun, 9 Jan 2011 04:47:34 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 973FA8FC0C; Sun, 9 Jan 2011 04:47:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p094lYIn027999; Sun, 9 Jan 2011 04:47:34 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p094lYb8027995; Sun, 9 Jan 2011 04:47:34 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101090447.p094lYb8027995@svn.freebsd.org> From: Jeff Roberson Date: Sun, 9 Jan 2011 04:47:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217178 - projects/ofed/head/sys/net X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 04:47:34 -0000 Author: jeff Date: Sun Jan 9 04:47:34 2011 New Revision: 217178 URL: http://svn.freebsd.org/changeset/base/217178 Log: - Add VLAN functions necessary to support ipoib and ofed. Give an abstract way to query the vlan interface about tags and trunks. Add support for drivers to store a cookie in the virtual interface. - Make vlan address size and type agnostic. ether_attach() is still used but much of the ethernet specific changes are overwritten in vlan_attach() which may happen some time after creation. - Change the vlan topology lock to sx so that event handlers can allocate memory. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/net/if.c projects/ofed/head/sys/net/if_vlan.c projects/ofed/head/sys/net/if_vlan_var.h Modified: projects/ofed/head/sys/net/if.c ============================================================================== --- projects/ofed/head/sys/net/if.c Sun Jan 9 04:34:02 2011 (r217177) +++ projects/ofed/head/sys/net/if.c Sun Jan 9 04:47:34 2011 (r217178) @@ -1865,6 +1865,11 @@ if_route(struct ifnet *ifp, int flag, in void (*vlan_link_state_p)(struct ifnet *); /* XXX: private from if_vlan */ void (*vlan_trunk_cap_p)(struct ifnet *); /* XXX: private from if_vlan */ +struct ifnet *(*vlan_trunkdev_p)(struct ifnet *); +struct ifnet *(*vlan_devat_p)(struct ifnet *, uint16_t); +int (*vlan_tag_p)(struct ifnet *, uint16_t *); +int (*vlan_setcookie_p)(struct ifnet *, void *); +void *(*vlan_cookie_p)(struct ifnet *); /* * Handle a change in the interface link state. To avoid LORs Modified: projects/ofed/head/sys/net/if_vlan.c ============================================================================== --- projects/ofed/head/sys/net/if_vlan.c Sun Jan 9 04:34:02 2011 (r217177) +++ projects/ofed/head/sys/net/if_vlan.c Sun Jan 9 04:47:34 2011 (r217178) @@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -90,13 +91,14 @@ struct ifvlantrunk { }; struct vlan_mc_entry { - struct ether_addr mc_addr; + struct sockaddr_dl mc_addr; SLIST_ENTRY(vlan_mc_entry) mc_entries; }; struct ifvlan { struct ifvlantrunk *ifv_trunk; struct ifnet *ifv_ifp; + void *ifv_cookie; #define TRUNK(ifv) ((ifv)->ifv_trunk) #define PARENT(ifv) ((ifv)->ifv_trunk->parent) int ifv_pflags; /* special flags we have set on parent */ @@ -153,12 +155,12 @@ static eventhandler_tag iflladdr_tag; * however on practice it does not. Probably this is because array * is too big to fit into CPU cache. */ -static struct mtx ifv_mtx; -#define VLAN_LOCK_INIT() mtx_init(&ifv_mtx, "vlan_global", NULL, MTX_DEF) -#define VLAN_LOCK_DESTROY() mtx_destroy(&ifv_mtx) -#define VLAN_LOCK_ASSERT() mtx_assert(&ifv_mtx, MA_OWNED) -#define VLAN_LOCK() mtx_lock(&ifv_mtx) -#define VLAN_UNLOCK() mtx_unlock(&ifv_mtx) +static struct sx ifv_lock; +#define VLAN_LOCK_INIT() sx_init(&ifv_lock, "vlan_global") +#define VLAN_LOCK_DESTROY() sx_destroy(&ifv_lock) +#define VLAN_LOCK_ASSERT() sx_assert(&ifv_lock, SA_LOCKED) +#define VLAN_LOCK() sx_xlock(&ifv_lock) +#define VLAN_UNLOCK() sx_xunlock(&ifv_lock) #define TRUNK_LOCK_INIT(trunk) rw_init(&(trunk)->rw, VLANNAME) #define TRUNK_LOCK_DESTROY(trunk) rw_destroy(&(trunk)->rw) #define TRUNK_LOCK(trunk) rw_wlock(&(trunk)->rw) @@ -386,6 +388,47 @@ vlan_dumphash(struct ifvlantrunk *trunk) } } #endif /* 0 */ +#else + +static __inline struct ifvlan * +vlan_gethash(struct ifvlantrunk *trunk, uint16_t tag) +{ + + return trunk->vlans[tag]; +} + +static __inline int +vlan_inshash(struct ifvlantrunk *trunk, struct ifvlan *ifv) +{ + + if (trunk->vlans[ifv->ifv_tag] != NULL) + return EEXIST; + trunk->vlans[ifv->ifv_tag] = ifv; + trunk->refcnt++; + + return (0); +} + +static __inline int +vlan_remhash(struct ifvlantrunk *trunk, struct ifvlan *ifv) +{ + + trunk->vlans[ifv->ifv_tag] = NULL; + trunk->refcnt--; + + return (0); +} + +static __inline void +vlan_freehash(struct ifvlantrunk *trunk) +{ +} + +static __inline void +vlan_inithash(struct ifvlantrunk *trunk) +{ +} + #endif /* !VLAN_ARRAY */ static void @@ -394,9 +437,7 @@ trunk_destroy(struct ifvlantrunk *trunk) VLAN_LOCK_ASSERT(); TRUNK_LOCK(trunk); -#ifndef VLAN_ARRAY vlan_freehash(trunk); -#endif trunk->parent->if_vlantrunk = NULL; TRUNK_UNLOCK(trunk); TRUNK_LOCK_DESTROY(trunk); @@ -421,7 +462,6 @@ vlan_setmulti(struct ifnet *ifp) struct ifmultiaddr *ifma, *rifma = NULL; struct ifvlan *sc; struct vlan_mc_entry *mc; - struct sockaddr_dl sdl; int error; /*VLAN_LOCK_ASSERT();*/ @@ -432,17 +472,9 @@ vlan_setmulti(struct ifnet *ifp) CURVNET_SET_QUIET(ifp_p->if_vnet); - bzero((char *)&sdl, sizeof(sdl)); - sdl.sdl_len = sizeof(sdl); - sdl.sdl_family = AF_LINK; - sdl.sdl_index = ifp_p->if_index; - sdl.sdl_type = IFT_ETHER; - sdl.sdl_alen = ETHER_ADDR_LEN; - /* First, remove any existing filter entries. */ while ((mc = SLIST_FIRST(&sc->vlan_mc_listhead)) != NULL) { - bcopy((char *)&mc->mc_addr, LLADDR(&sdl), ETHER_ADDR_LEN); - error = if_delmulti(ifp_p, (struct sockaddr *)&sdl); + error = if_delmulti(ifp_p, (struct sockaddr *)&mc->mc_addr); if (error) return (error); SLIST_REMOVE_HEAD(&sc->vlan_mc_listhead, mc_entries); @@ -456,12 +488,11 @@ vlan_setmulti(struct ifnet *ifp) mc = malloc(sizeof(struct vlan_mc_entry), M_VLAN, M_NOWAIT); if (mc == NULL) return (ENOMEM); - bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr), - (char *)&mc->mc_addr, ETHER_ADDR_LEN); + bcopy(ifma->ifma_addr, &mc->mc_addr, ifma->ifma_addr->sa_len); + mc->mc_addr.sdl_index = ifp_p->if_index; SLIST_INSERT_HEAD(&sc->vlan_mc_listhead, mc, mc_entries); - bcopy(LLADDR((struct sockaddr_dl *)ifma->ifma_addr), - LLADDR(&sdl), ETHER_ADDR_LEN); - error = if_addmulti(ifp_p, (struct sockaddr *)&sdl, &rifma); + error = if_addmulti(ifp_p, (struct sockaddr *)&mc->mc_addr, + &rifma); if (error) return (error); } @@ -503,7 +534,8 @@ vlan_iflladdr(void *arg __unused, struct LIST_FOREACH_SAFE(ifv, &ifp->if_vlantrunk->hash[i], ifv_list, next) { #endif /* VLAN_ARRAY */ VLAN_UNLOCK(); - if_setlladdr(ifv->ifv_ifp, IF_LLADDR(ifp), ETHER_ADDR_LEN); + if_setlladdr(ifv->ifv_ifp, IF_LLADDR(ifp), + ifp->if_addrlen); VLAN_LOCK(); } VLAN_UNLOCK(); @@ -563,6 +595,75 @@ restart: VLAN_UNLOCK(); } +static struct ifnet * +vlan_trunkdev(struct ifnet *ifp) +{ + struct ifvlan *ifv; + + if (ifp->if_type != IFT_L2VLAN) + return (NULL); + ifv = ifp->if_softc; + ifp = NULL; + VLAN_LOCK(); + if (ifv->ifv_trunk) + ifp = PARENT(ifv); + VLAN_UNLOCK(); + return (ifp); +} + +static int +vlan_tag(struct ifnet *ifp, uint16_t *tagp) +{ + struct ifvlan *ifv; + + if (ifp->if_type != IFT_L2VLAN) + return (EINVAL); + ifv = ifp->if_softc; + *tagp = ifv->ifv_tag; + return (0); +} + +static void * +vlan_cookie(struct ifnet *ifp) +{ + struct ifvlan *ifv; + + if (ifp->if_type != IFT_L2VLAN) + return (NULL); + ifv = ifp->if_softc; + return (ifv->ifv_cookie); +} + +static int +vlan_setcookie(struct ifnet *ifp, void *cookie) +{ + struct ifvlan *ifv; + + if (ifp->if_type != IFT_L2VLAN) + return (EINVAL); + ifv = ifp->if_softc; + ifv->ifv_cookie = cookie; + return (0); +} + +static struct ifnet * +vlan_devat(struct ifnet *ifp, uint16_t tag) +{ + struct ifvlantrunk *trunk; + struct ifvlan *ifv; + + trunk = ifp->if_vlantrunk; + if (trunk == NULL) + return (NULL); + ifp = NULL; + TRUNK_RLOCK(trunk); + ifv = vlan_gethash(trunk, tag); + if (ifv) + ifp = ifv->ifv_ifp; + TRUNK_RUNLOCK(trunk); + return (ifp); +} + /* * VLAN support can be loaded as a module. The only place in the * system that's intimately aware of this is ether_input. We hook @@ -593,6 +694,11 @@ vlan_modevent(module_t mod, int type, vo vlan_input_p = vlan_input; vlan_link_state_p = vlan_link_state; vlan_trunk_cap_p = vlan_trunk_capabilities; + vlan_trunkdev_p = vlan_trunkdev; + vlan_cookie_p = vlan_cookie; + vlan_setcookie_p = vlan_setcookie; + vlan_tag_p = vlan_tag; + vlan_devat_p = vlan_devat; #ifndef VIMAGE if_clone_attach(&vlan_cloner); #endif @@ -615,6 +721,11 @@ vlan_modevent(module_t mod, int type, vo vlan_input_p = NULL; vlan_link_state_p = NULL; vlan_trunk_cap_p = NULL; + vlan_trunkdev_p = NULL; + vlan_tag_p = NULL; + vlan_cookie_p = vlan_cookie; + vlan_setcookie_p = vlan_setcookie; + vlan_devat_p = NULL; VLAN_LOCK_DESTROY(); if (bootverbose) printf("vlan: unloaded\n"); @@ -665,7 +776,12 @@ vlan_clone_match_ethertag(struct if_clon /* Check for . style interface names. */ IFNET_RLOCK_NOSLEEP(); TAILQ_FOREACH(ifp, &V_ifnet, if_link) { - if (ifp->if_type != IFT_ETHER) + /* + * We can handle non-ethernet hardware types as long as + * they handle the tagging and headers themselves. + */ + if (ifp->if_type != IFT_ETHER && + (ifp->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) continue; if (strncmp(ifp->if_xname, name, strlen(ifp->if_xname)) != 0) continue; @@ -916,7 +1032,7 @@ vlan_start(struct ifnet *ifp) * devices that just discard such runts instead or mishandle * them somehow. */ - if (soft_pad) { + if (soft_pad && p->if_type == IFT_ETHER) { static char pad[8]; /* just zeros */ int n; @@ -1020,11 +1136,7 @@ vlan_input(struct ifnet *ifp, struct mbu } TRUNK_RLOCK(trunk); -#ifdef VLAN_ARRAY - ifv = trunk->vlans[tag]; -#else ifv = vlan_gethash(trunk, tag); -#endif if (ifv == NULL || !UP_AND_RUNNING(ifv->ifv_ifp)) { TRUNK_RUNLOCK(trunk); m_freem(m); @@ -1050,7 +1162,8 @@ vlan_config(struct ifvlan *ifv, struct i /* VID numbers 0x0 and 0xFFF are reserved */ if (tag == 0 || tag == 0xFFF) return (EINVAL); - if (p->if_type != IFT_ETHER) + if (p->if_type != IFT_ETHER && + (p->if_capenable & IFCAP_VLAN_HWTAGGING) == 0) return (EPROTONOSUPPORT); if ((p->if_flags & VLAN_IFFLAGS) != VLAN_IFFLAGS) return (EPROTONOSUPPORT); @@ -1060,15 +1173,11 @@ vlan_config(struct ifvlan *ifv, struct i if (p->if_vlantrunk == NULL) { trunk = malloc(sizeof(struct ifvlantrunk), M_VLAN, M_WAITOK | M_ZERO); -#ifndef VLAN_ARRAY vlan_inithash(trunk); -#endif VLAN_LOCK(); if (p->if_vlantrunk != NULL) { /* A race that that is very unlikely to be hit. */ -#ifndef VLAN_ARRAY vlan_freehash(trunk); -#endif free(trunk, M_VLAN); goto exists; } @@ -1084,18 +1193,9 @@ exists: } ifv->ifv_tag = tag; /* must set this before vlan_inshash() */ -#ifdef VLAN_ARRAY - if (trunk->vlans[tag] != NULL) { - error = EEXIST; - goto done; - } - trunk->vlans[tag] = ifv; - trunk->refcnt++; -#else error = vlan_inshash(trunk, ifv); if (error) goto done; -#endif ifv->ifv_proto = ETHERTYPE_VLAN; ifv->ifv_encaplen = ETHER_VLAN_ENCAP_LEN; ifv->ifv_mintu = ETHERMIN; @@ -1125,8 +1225,17 @@ exists: ifv->ifv_trunk = trunk; ifp = ifv->ifv_ifp; + /* + * Initialize fields from our parent. + */ ifp->if_mtu = p->if_mtu - ifv->ifv_mtufudge; ifp->if_baudrate = p->if_baudrate; + ifp->if_output = p->if_output; + ifp->if_input = p->if_input; + ifp->if_resolvemulti = p->if_resolvemulti; + ifp->if_addrlen = p->if_addrlen; + ifp->if_broadcastaddr = p->if_broadcastaddr; + /* * Copy only a selected subset of flags from the parent. * Other flags are none of our business. @@ -1141,10 +1250,12 @@ exists: vlan_capabilities(ifv); /* - * Set up our ``Ethernet address'' to reflect the underlying + * Set up our interface address to reflect the underlying * physical interface's. */ - bcopy(IF_LLADDR(p), IF_LLADDR(ifp), ETHER_ADDR_LEN); + bcopy(IF_LLADDR(p), IF_LLADDR(ifp), p->if_addrlen); + ((struct sockaddr_dl *)ifp->if_addr->ifa_addr)->sdl_alen = + p->if_addrlen; /* * Configure multicast addresses that may already be @@ -1187,7 +1298,6 @@ vlan_unconfig_locked(struct ifnet *ifp) parent = NULL; if (trunk != NULL) { - struct sockaddr_dl sdl; TRUNK_LOCK(trunk); parent = trunk->parent; @@ -1197,17 +1307,7 @@ vlan_unconfig_locked(struct ifnet *ifp) * empty the list of multicast groups that we may have joined * while we were alive from the parent's list. */ - bzero((char *)&sdl, sizeof(sdl)); - sdl.sdl_len = sizeof(sdl); - sdl.sdl_family = AF_LINK; - sdl.sdl_index = parent->if_index; - sdl.sdl_type = IFT_ETHER; - sdl.sdl_alen = ETHER_ADDR_LEN; - while ((mc = SLIST_FIRST(&ifv->vlan_mc_listhead)) != NULL) { - bcopy((char *)&mc->mc_addr, LLADDR(&sdl), - ETHER_ADDR_LEN); - /* * This may fail if the parent interface is * being detached. Regardless, we should do a @@ -1215,18 +1315,14 @@ vlan_unconfig_locked(struct ifnet *ifp) * as possible as all callers expect vlan * destruction to succeed. */ - (void)if_delmulti(parent, (struct sockaddr *)&sdl); + (void)if_delmulti(parent, + (struct sockaddr *)&mc->mc_addr); SLIST_REMOVE_HEAD(&ifv->vlan_mc_listhead, mc_entries); free(mc, M_VLAN); } vlan_setflags(ifp, 0); /* clear special flags on parent */ -#ifdef VLAN_ARRAY - trunk->vlans[ifv->ifv_tag] = NULL; - trunk->refcnt--; -#else vlan_remhash(trunk, ifv); -#endif ifv->ifv_trunk = NULL; /* @@ -1407,14 +1503,31 @@ vlan_ioctl(struct ifnet *ifp, u_long cmd { struct ifnet *p; struct ifreq *ifr; + struct ifaddr *ifa; struct ifvlan *ifv; struct vlanreq vlr; int error = 0; ifr = (struct ifreq *)data; + ifa = (struct ifaddr *) data; ifv = ifp->if_softc; switch (cmd) { + case SIOCSIFADDR: + ifp->if_flags |= IFF_UP; +#ifdef INET + if (ifa->ifa_addr->sa_family == AF_INET) + arp_ifinit(ifp, ifa); +#endif + break; + case SIOCGIFADDR: + { + struct sockaddr *sa; + + sa = (struct sockaddr *)&ifr->ifr_data; + bcopy(IF_LLADDR(ifp), sa->sa_data, ifp->if_addrlen); + } + break; case SIOCGIFMEDIA: VLAN_LOCK(); if (TRUNK(ifv) != NULL) { @@ -1534,7 +1647,8 @@ vlan_ioctl(struct ifnet *ifp, u_long cmd break; default: - error = ether_ioctl(ifp, cmd, data); + error = EINVAL; + break; } return (error); Modified: projects/ofed/head/sys/net/if_vlan_var.h ============================================================================== --- projects/ofed/head/sys/net/if_vlan_var.h Sun Jan 9 04:34:02 2011 (r217177) +++ projects/ofed/head/sys/net/if_vlan_var.h Sun Jan 9 04:47:34 2011 (r217178) @@ -131,7 +131,25 @@ struct vlanreq { (*vlan_trunk_cap_p)(_ifp); \ } while (0) +#define VLAN_TRUNKDEV(_ifp) \ + (_ifp)->if_type == IFT_L2VLAN ? (*vlan_trunkdev_p)((_ifp)) : NULL +#define VLAN_TAG(_ifp, _tag) \ + (_ifp)->if_type == IFT_L2VLAN ? (*vlan_tag_p)((_ifp), (_tag)) : EINVAL +#define VLAN_COOKIE(_ifp) \ + (_ifp)->if_type == IFT_L2VLAN ? (*vlan_cookie_p)((_ifp)) : NULL +#define VLAN_SETCOOKIE(_ifp, _cookie) \ + (_ifp)->if_type == IFT_L2VLAN ? \ + (*vlan_setcookie_p)((_ifp), (_cookie)) : EINVAL +#define VLAN_DEVAT(_ifp, _tag) \ + (_ifp)->if_vlantrunk != NULL ? (*vlan_devat_p)((_ifp), (_tag)) : NULL + extern void (*vlan_trunk_cap_p)(struct ifnet *); +extern struct ifnet *(*vlan_trunkdev_p)(struct ifnet *); +extern struct ifnet *(*vlan_devat_p)(struct ifnet *, uint16_t); +extern int (*vlan_tag_p)(struct ifnet *, uint16_t *); +extern int (*vlan_setcookie_p)(struct ifnet *, void *); +extern void *(*vlan_cookie_p)(struct ifnet *); + #endif /* _KERNEL */ #endif /* _NET_IF_VLAN_VAR_H_ */ From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 04:48:50 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8E76E106564A; Sun, 9 Jan 2011 04:48:50 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7C5188FC0A; Sun, 9 Jan 2011 04:48:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p094mobS028069; Sun, 9 Jan 2011 04:48:50 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p094moND028064; Sun, 9 Jan 2011 04:48:50 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101090448.p094moND028064@svn.freebsd.org> From: Jeff Roberson Date: Sun, 9 Jan 2011 04:48:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217179 - in projects/ofed/head/sys/ofed: drivers/infiniband/hw/mlx4 drivers/infiniband/ulp/ipoib include/linux include/rdma X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 04:48:50 -0000 Author: jeff Date: Sun Jan 9 04:48:50 2011 New Revision: 217179 URL: http://svn.freebsd.org/changeset/base/217179 Log: - Add support for VLANs to ipoib. A seperate softc is allocated for each vlan and cached along with the virtual interface. - Fixup vlan support for IBOE in ib_addr.h. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/drivers/infiniband/hw/mlx4/main.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c projects/ofed/head/sys/ofed/include/linux/if_vlan.h projects/ofed/head/sys/ofed/include/rdma/ib_addr.h Modified: projects/ofed/head/sys/ofed/drivers/infiniband/hw/mlx4/main.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/hw/mlx4/main.c Sun Jan 9 04:47:34 2011 (r217178) +++ projects/ofed/head/sys/ofed/drivers/infiniband/hw/mlx4/main.c Sun Jan 9 04:48:50 2011 (r217179) @@ -1124,15 +1124,14 @@ static int update_ipv6_gids(struct mlx4_ goto out; } - /* XXX vlan */ #ifdef __linux__ read_lock(&dev_base_lock); for_each_netdev(&init_net, tmp) { - if (ndev && (tmp == ndev || rdma_vlan_dev_real_dev(tmp) == ndev)) { #else - tmp = ndev; - if (ndev) { + IFNET_RLOCK(); + TAILQ_FOREACH(tmp, &V_ifnet, if_link) { #endif + if (ndev && (tmp == ndev || rdma_vlan_dev_real_dev(tmp) == ndev)) { gid.global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL); vid = rdma_vlan_dev_vlan_id(tmp); mlx4_addrconf_ifid_eui48(&gid.raw[8], vid, ndev); @@ -1164,6 +1163,9 @@ static int update_ipv6_gids(struct mlx4_ #ifdef __linux__ } read_unlock(&dev_base_lock); +#else + } + IFNET_RUNLOCK(); #endif for (i = 0; i < MLX4_MAX_EFF_VLANS + 1; ++i) Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Sun Jan 9 04:47:34 2011 (r217178) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Sun Jan 9 04:48:50 2011 (r217179) @@ -46,6 +46,7 @@ static int ipoib_resolvemulti(struct ifn #include #include /* For ARPHRD_xxx */ +#include #include #include @@ -115,24 +116,16 @@ ipoib_open(struct ipoib_dev_priv *priv) if (ipoib_ib_dev_up(priv)) goto err_stop; -#if 0 /* XXX */ if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { struct ipoib_dev_priv *cpriv; /* Bring up any child interfaces too */ mutex_lock(&priv->vlan_mutex); - list_for_each_entry(cpriv, &priv->child_intfs, list) { - int flags; - - flags = cpriv->dev->flags; - if (flags & IFF_UP) - continue; - - dev_change_flags(cpriv->dev, flags | IFF_UP); - } + list_for_each_entry(cpriv, &priv->child_intfs, list) + if ((cpriv->dev->if_drv_flags & IFF_DRV_RUNNING) == 0) + ipoib_open(cpriv); mutex_unlock(&priv->vlan_mutex); } -#endif dev->if_drv_flags |= IFF_DRV_RUNNING; dev->if_drv_flags &= ~IFF_DRV_OACTIVE; @@ -175,24 +168,16 @@ ipoib_stop(struct ipoib_dev_priv *priv) ipoib_ib_dev_down(priv, 0); ipoib_ib_dev_stop(priv, 0); -#if 0 /* XXX */ if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { struct ipoib_dev_priv *cpriv; /* Bring down any child interfaces too */ mutex_lock(&priv->vlan_mutex); - list_for_each_entry(cpriv, &priv->child_intfs, list) { - int flags; - - flags = cpriv->dev->if_flags; - if (!(flags & IFF_UP)) - continue; - - dev_change_flags(cpriv->dev, flags & ~IFF_UP); - } + list_for_each_entry(cpriv, &priv->child_intfs, list) + if ((cpriv->dev->if_drv_flags & IFF_DRV_RUNNING) != 0) + ipoib_stop(cpriv); mutex_unlock(&priv->vlan_mutex); } -#endif return 0; } @@ -235,13 +220,6 @@ ipoib_ioctl(struct ifnet *ifp, u_long co struct ifreq *ifr = (struct ifreq *) data; int error = 0; - /* - * We may be called if if_vlan.c doesn't handle something however, - * if_softc is not our softc in this case. - */ - if (ifp->if_type != IFT_INFINIBAND) - return (EINVAL); - switch (command) { case SIOCSIFFLAGS: if (ifp->if_flags & IFF_UP) { @@ -687,30 +665,52 @@ ipoib_send_one(struct ipoib_dev_priv *pr return 0; } + static void -ipoib_start(struct ifnet *dev) +_ipoib_start(struct ifnet *dev, struct ipoib_dev_priv *priv) { - struct ipoib_dev_priv *priv; struct mbuf *mb; if ((dev->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) return; - priv = dev->if_softc; spin_lock(&priv->lock); while (!IFQ_DRV_IS_EMPTY(&dev->if_snd) && (dev->if_drv_flags & IFF_DRV_OACTIVE) == 0) { IFQ_DRV_DEQUEUE(&dev->if_snd, mb); if (mb == NULL) break; - BPF_MTAP(dev, mb); ipoib_send_one(priv, mb); } spin_unlock(&priv->lock); } +static void +ipoib_start(struct ifnet *dev) +{ + _ipoib_start(dev, dev->if_softc); +} + +static void +ipoib_vlan_start(struct ifnet *dev) +{ + struct ipoib_dev_priv *priv; + struct mbuf *mb; + + priv = VLAN_COOKIE(dev); + if (priv != NULL) + return _ipoib_start(dev, priv); + while (!IFQ_DRV_IS_EMPTY(&dev->if_snd)) { + IFQ_DRV_DEQUEUE(&dev->if_snd, mb); + if (mb == NULL) + break; + m_freem(mb); + dev->if_oerrors++; + } +} + int ipoib_dev_init(struct ipoib_dev_priv *priv, struct ib_device *ca, int port) { @@ -750,13 +750,18 @@ out: } static void -ipoib_detach(struct ifnet *dev) +ipoib_detach(struct ipoib_dev_priv *priv) { - struct ipoib_dev_priv *priv = dev->if_softc; + struct ifnet *dev; + + dev = priv->dev; + if (!test_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags)) { + bpfdetach(dev); + if_detach(dev); + if_free(dev); + } else + VLAN_SETCOOKIE(priv->dev, NULL); - bpfdetach(dev); - if_detach(dev); - if_free(dev); free(priv, M_TEMP); } @@ -768,7 +773,7 @@ ipoib_dev_cleanup(struct ipoib_dev_priv /* Delete any child interfaces first */ list_for_each_entry_safe(cpriv, tcpriv, &priv->child_intfs, list) { ipoib_dev_cleanup(cpriv); - ipoib_detach(cpriv->dev); + ipoib_detach(cpriv); } ipoib_ib_dev_cleanup(priv); @@ -821,6 +826,31 @@ static int get_mb_hdr(struct mbuf *mb, v static volatile int ipoib_unit; +static struct ipoib_dev_priv * +ipoib_priv_alloc(void) +{ + struct ipoib_dev_priv *priv; + + priv = malloc(sizeof(struct ipoib_dev_priv), M_TEMP, M_ZERO|M_WAITOK); + spin_lock_init(&priv->lock); + mutex_init(&priv->vlan_mutex); + INIT_LIST_HEAD(&priv->path_list); + INIT_LIST_HEAD(&priv->child_intfs); + INIT_LIST_HEAD(&priv->dead_ahs); + INIT_LIST_HEAD(&priv->multicast_list); + INIT_DELAYED_WORK(&priv->pkey_poll_task, ipoib_pkey_poll); + INIT_DELAYED_WORK(&priv->mcast_task, ipoib_mcast_join_task); + INIT_WORK(&priv->carrier_on_task, ipoib_mcast_carrier_on_task); + INIT_WORK(&priv->flush_light, ipoib_ib_dev_flush_light); + INIT_WORK(&priv->flush_normal, ipoib_ib_dev_flush_normal); + INIT_WORK(&priv->flush_heavy, ipoib_ib_dev_flush_heavy); + INIT_WORK(&priv->restart_task, ipoib_mcast_restart_task); + INIT_DELAYED_WORK(&priv->ah_reap_task, ipoib_reap_ah); + memcpy(priv->broadcastaddr, ipv4_bcast_addr, INFINIBAND_ALEN); + + return (priv); +} + struct ipoib_dev_priv * ipoib_intf_alloc(const char *name) { @@ -828,7 +858,7 @@ ipoib_intf_alloc(const char *name) struct sockaddr_dl *sdl; struct ifnet *dev; - priv = malloc(sizeof(struct ipoib_dev_priv), M_TEMP, M_ZERO|M_WAITOK); + priv = ipoib_priv_alloc(); dev = priv->dev = if_alloc(IFT_INFINIBAND); if (!dev) { free(priv, M_TEMP); @@ -848,35 +878,14 @@ ipoib_intf_alloc(const char *name) dev->if_resolvemulti = ipoib_resolvemulti; dev->if_baudrate = IF_Gbps(10LL); dev->if_broadcastaddr = priv->broadcastaddr; - memcpy(priv->broadcastaddr, ipv4_bcast_addr, INFINIBAND_ALEN); dev->if_snd.ifq_maxlen = ipoib_sendq_size * 2; sdl = (struct sockaddr_dl *)dev->if_addr->ifa_addr; sdl->sdl_type = IFT_INFINIBAND; sdl->sdl_alen = dev->if_addrlen; priv->dev = dev; if_link_state_change(dev, LINK_STATE_DOWN); - bpfattach(dev, DLT_EN10MB, IPOIB_HEADER_LEN); - spin_lock_init(&priv->lock); - - mutex_init(&priv->vlan_mutex); - - INIT_LIST_HEAD(&priv->path_list); - INIT_LIST_HEAD(&priv->child_intfs); - INIT_LIST_HEAD(&priv->dead_ahs); - INIT_LIST_HEAD(&priv->multicast_list); - - INIT_DELAYED_WORK(&priv->pkey_poll_task, ipoib_pkey_poll); - INIT_DELAYED_WORK(&priv->mcast_task, ipoib_mcast_join_task); - INIT_WORK(&priv->carrier_on_task, ipoib_mcast_carrier_on_task); - INIT_WORK(&priv->flush_light, ipoib_ib_dev_flush_light); - INIT_WORK(&priv->flush_normal, ipoib_ib_dev_flush_normal); - INIT_WORK(&priv->flush_heavy, ipoib_ib_dev_flush_heavy); - INIT_WORK(&priv->restart_task, ipoib_mcast_restart_task); - INIT_DELAYED_WORK(&priv->ah_reap_task, ipoib_reap_ah); - - return dev->if_softc; } @@ -999,7 +1008,7 @@ event_failed: ipoib_dev_cleanup(priv); device_init_failed: - ipoib_detach(priv->dev); + ipoib_detach(priv); alloc_mem_failed: return ERR_PTR(result); @@ -1065,12 +1074,110 @@ ipoib_remove_one(struct ib_device *devic flush_workqueue(ipoib_workqueue); ipoib_dev_cleanup(priv); - ipoib_detach(priv->dev); + ipoib_detach(priv); } kfree(dev_list); } +static void +ipoib_config_vlan(void *arg, struct ifnet *ifp, u_int16_t vtag) +{ + struct ipoib_dev_priv *parent; + struct ipoib_dev_priv *priv; + struct ifnet *dev; + uint16_t pkey; + int error; + + if (ifp->if_type != IFT_INFINIBAND) + return; + dev = VLAN_DEVAT(ifp, vtag); + if (dev == NULL) + return; + priv = NULL; + error = 0; + parent = ifp->if_softc; + /* We only support 15 bits of pkey. */ + if (vtag & 0x8000) + return; + pkey = vtag | 0x8000; /* Set full membership bit. */ + if (pkey == parent->pkey) + return; + /* Check for dups */ + mutex_lock(&parent->vlan_mutex); + list_for_each_entry(priv, &parent->child_intfs, list) { + if (priv->pkey == pkey) { + priv = NULL; + error = EBUSY; + goto out; + } + } + priv = ipoib_priv_alloc(); + priv->dev = dev; + priv->max_ib_mtu = parent->max_ib_mtu; + priv->mcast_mtu = priv->admin_mtu = parent->dev->if_mtu; + set_bit(IPOIB_FLAG_SUBINTERFACE, &priv->flags); + error = ipoib_set_dev_features(priv, parent->ca); + if (error) + goto out; + priv->pkey = pkey; + priv->broadcastaddr[8] = pkey >> 8; + priv->broadcastaddr[9] = pkey & 0xff; + dev->if_broadcastaddr = priv->broadcastaddr; + error = ipoib_dev_init(priv, parent->ca, parent->port); + if (error) + goto out; + priv->parent = parent->dev; + list_add_tail(&priv->list, &parent->child_intfs); + VLAN_SETCOOKIE(dev, priv); + dev->if_start = ipoib_vlan_start; + dev->if_drv_flags &= ~IFF_DRV_RUNNING; + dev->if_hdrlen = IPOIB_HEADER_LEN; + if (ifp->if_drv_flags & IFF_DRV_RUNNING) + ipoib_open(priv); + mutex_unlock(&parent->vlan_mutex); + return; +out: + mutex_unlock(&parent->vlan_mutex); + if (priv) + free(priv, M_TEMP); + if (error) + ipoib_warn(parent, + "failed to initialize subinterface: device %s, port %d vtag 0x%X", + parent->ca->name, parent->port, vtag); + return; +} + +static void +ipoib_unconfig_vlan(void *arg, struct ifnet *ifp, u_int16_t vtag) +{ + struct ipoib_dev_priv *parent; + struct ipoib_dev_priv *priv; + struct ifnet *dev; + uint16_t pkey; + + if (ifp->if_type != IFT_INFINIBAND) + return; + + dev = VLAN_DEVAT(ifp, vtag); + if (dev) + VLAN_SETCOOKIE(dev, NULL); + pkey = vtag | 0x8000; + parent = ifp->if_softc; + mutex_lock(&parent->vlan_mutex); + list_for_each_entry(priv, &parent->child_intfs, list) { + if (priv->pkey == pkey) { + ipoib_dev_cleanup(priv); + list_del(&priv->list); + break; + } + } + mutex_unlock(&parent->vlan_mutex); +} + +eventhandler_tag ipoib_vlan_attach; +eventhandler_tag ipoib_vlan_detach; + static int __init ipoib_init_module(void) { @@ -1088,6 +1195,11 @@ ipoib_init_module(void) ipoib_max_conn_qp = min(ipoib_max_conn_qp, IPOIB_CM_MAX_CONN_QP); #endif + ipoib_vlan_attach = EVENTHANDLER_REGISTER(vlan_config, + ipoib_config_vlan, NULL, EVENTHANDLER_PRI_FIRST); + ipoib_vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig, + ipoib_unconfig_vlan, NULL, EVENTHANDLER_PRI_FIRST); + /* * We create our own workqueue mainly because we want to be * able to flush it when devices are being removed. We can't @@ -1121,6 +1233,9 @@ err_fs: static void __exit ipoib_cleanup_module(void) { + + EVENTHANDLER_DEREGISTER(vlan_config, ipoib_vlan_attach); + EVENTHANDLER_DEREGISTER(vlan_unconfig, ipoib_vlan_detach); ib_unregister_client(&ipoib_client); ib_sa_unregister_client(&ipoib_sa_client); destroy_workqueue(ipoib_workqueue); Modified: projects/ofed/head/sys/ofed/include/linux/if_vlan.h ============================================================================== --- projects/ofed/head/sys/ofed/include/linux/if_vlan.h Sun Jan 9 04:47:34 2011 (r217178) +++ projects/ofed/head/sys/ofed/include/linux/if_vlan.h Sun Jan 9 04:48:50 2011 (r217179) @@ -28,4 +28,8 @@ #ifndef _LINUX_IF_VLAN_H_ #define _LINUX_IF_VLAN_H_ + +#include +#include + #endif /* _LINUX_IF_VLAN_H_ */ Modified: projects/ofed/head/sys/ofed/include/rdma/ib_addr.h ============================================================================== --- projects/ofed/head/sys/ofed/include/rdma/ib_addr.h Sun Jan 9 04:47:34 2011 (r217178) +++ projects/ofed/head/sys/ofed/include/rdma/ib_addr.h Sun Jan 9 04:48:50 2011 (r217179) @@ -154,8 +154,11 @@ static inline u16 rdma_vlan_dev_vlan_id( return dev->priv_flags & IFF_802_1Q_VLAN ? vlan_dev_vlan_id(dev) : 0xffff; #else - /* XXX vlan */ - return 0xffff; + int tag; + + if (VLAN_TAG(__DECONST(struct ifnet *, dev), &tag) != 0) + return 0xffff; + return tag; #endif } @@ -302,7 +305,7 @@ static inline struct net_device *rdma_vl return dev->priv_flags & IFF_802_1Q_VLAN ? vlan_dev_real_dev(dev) : 0; #else - return __DECONST(struct net_device *, dev); + return VLAN_TRUNKDEV(__DECONST(struct ifnet *, dev)); #endif } From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 08:07:58 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6F94A106564A; Sun, 9 Jan 2011 08:07:58 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5E7D38FC14; Sun, 9 Jan 2011 08:07:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0987wLN034602; Sun, 9 Jan 2011 08:07:58 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0987wbt034598; Sun, 9 Jan 2011 08:07:58 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101090807.p0987wbt034598@svn.freebsd.org> From: Jeff Roberson Date: Sun, 9 Jan 2011 08:07:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217185 - projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 08:07:58 -0000 Author: jeff Date: Sun Jan 9 08:07:58 2011 New Revision: 217185 URL: http://svn.freebsd.org/changeset/base/217185 Log: - Support bpf/tcpdump by pretending to have an ethernet header. Only the destination mac address and proto are filled in. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h Sun Jan 9 06:17:46 2011 (r217184) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h Sun Jan 9 08:07:58 2011 (r217185) @@ -421,8 +421,16 @@ struct ipoib_path { extern struct workqueue_struct *ipoib_workqueue; -/* functions */ +#define IPOIB_MTAP_PROTO(_ifp, _m, _proto) \ +do { \ + if (bpf_peers_present((_ifp)->if_bpf)) { \ + M_ASSERTVALID(_m); \ + ipoib_mtap_proto((_ifp), (_m), (_proto)); \ + } \ +} while (0) +/* functions */ +void ipoib_mtap_proto(struct ifnet *ifp, struct mbuf *mb, uint16_t proto); void ipoib_ib_completion(struct ib_cq *cq, void *dev_ptr); void ipoib_send_comp_handler(struct ib_cq *cq, void *dev_ptr); Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c Sun Jan 9 06:17:46 2011 (r217184) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c Sun Jan 9 08:07:58 2011 (r217185) @@ -575,10 +575,11 @@ void ipoib_cm_handle_rx_wc(struct ipoib_ dev->if_obytes += mb->m_pkthdr.len; mb->m_pkthdr.rcvif = dev; - proto = ntohs(*mtod(mb, uint16_t *)); + proto = *mtod(mb, uint16_t *); m_adj(mb, IPOIB_ENCAP_LEN); + IPOIB_MTAP_PROTO(dev, mb, proto); spin_unlock(&priv->lock); - ipoib_demux(dev, mb, proto); + ipoib_demux(dev, mb, ntohs(proto)); spin_lock(&priv->lock); repost: Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Sun Jan 9 06:17:46 2011 (r217184) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c Sun Jan 9 08:07:58 2011 (r217185) @@ -92,6 +92,45 @@ static int ipoib_output(struct ifnet *if static int ipoib_ioctl(struct ifnet *ifp, u_long command, caddr_t data); static void ipoib_input(struct ifnet *ifp, struct mbuf *m); +#define IPOIB_MTAP(_ifp, _m) \ +do { \ + if (bpf_peers_present((_ifp)->if_bpf)) { \ + M_ASSERTVALID(_m); \ + ipoib_mtap_mb((_ifp), (_m)); \ + } \ +} while (0) + +/* + * This is for clients that have an ipoib_header in the mbuf. + */ +static void +ipoib_mtap_mb(struct ifnet *ifp, struct mbuf *mb) +{ + struct ipoib_header *ih; + struct ether_header eh; + + ih = mtod(mb, struct ipoib_header *); + eh.ether_type = ih->proto; + bcopy(ih->hwaddr, &eh.ether_dhost, ETHER_ADDR_LEN); + bzero(&eh.ether_shost, ETHER_ADDR_LEN); + mb->m_data += sizeof(struct ipoib_header); + mb->m_len -= sizeof(struct ipoib_header); + bpf_mtap2(ifp->if_bpf, &eh, sizeof(eh), mb); + mb->m_data -= sizeof(struct ipoib_header); + mb->m_len += sizeof(struct ipoib_header); +} + +void +ipoib_mtap_proto(struct ifnet *ifp, struct mbuf *mb, uint16_t proto) +{ + struct ether_header eh; + + eh.ether_type = proto; + bzero(&eh.ether_shost, ETHER_ADDR_LEN); + bzero(&eh.ether_dhost, ETHER_ADDR_LEN); + bpf_mtap2(ifp->if_bpf, &eh, sizeof(eh), mb); +} + static struct ib_client ipoib_client = { .name = "ipoib", .add = ipoib_add_one, @@ -681,7 +720,7 @@ _ipoib_start(struct ifnet *dev, struct i IFQ_DRV_DEQUEUE(&dev->if_snd, mb); if (mb == NULL) break; - BPF_MTAP(dev, mb); + IPOIB_MTAP(dev, mb); ipoib_send_one(priv, mb); } spin_unlock(&priv->lock); @@ -884,7 +923,7 @@ ipoib_intf_alloc(const char *name) sdl->sdl_alen = dev->if_addrlen; priv->dev = dev; if_link_state_change(dev, LINK_STATE_DOWN); - bpfattach(dev, DLT_EN10MB, IPOIB_HEADER_LEN); + bpfattach(dev, DLT_EN10MB, ETHER_HDR_LEN); return dev->if_softc; } @@ -1375,12 +1414,6 @@ ipoib_demux(struct ifnet *ifp, struct mb */ mac_ifnet_create_mbuf(ifp, m); #endif - - /* - * Give bpf a chance at the packet. - */ - BPF_MTAP(ifp, m); - /* Allow monitor mode to claim this frame, after stats are updated. */ if (ifp->if_flags & IFF_MONITOR) { if_printf(ifp, "discard frame at IFF_MONITOR\n"); @@ -1434,6 +1467,8 @@ ipoib_input(struct ifnet *ifp, struct mb } CURVNET_SET_QUIET(ifp->if_vnet); + /* Let BPF have it before we strip the header. */ + IPOIB_MTAP(ifp, m); eh = mtod(m, struct ipoib_header *); /* * Reset layer specific mbuf flags to avoid confusing upper layers. From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 08:54:58 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 53B05106566C; Sun, 9 Jan 2011 08:54:58 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 42E968FC08; Sun, 9 Jan 2011 08:54:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p098swOQ035828; Sun, 9 Jan 2011 08:54:58 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p098swUk035822; Sun, 9 Jan 2011 08:54:58 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101090854.p098swUk035822@svn.freebsd.org> From: Jeff Roberson Date: Sun, 9 Jan 2011 08:54:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217186 - in projects/ofed/head: . etc/defaults etc/rc.d share/mk X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 08:54:58 -0000 Author: jeff Date: Sun Jan 9 08:54:57 2011 New Revision: 217186 URL: http://svn.freebsd.org/changeset/base/217186 Log: - Add an rc script for opensm that starts a copy on all ports. - Fix the MK_OFED rc option using the proper mechanism. Sponsored by: Isilon Systems, iX Systems, and Panasas. Added: projects/ofed/head/etc/rc.d/opensm (contents, props changed) Modified: projects/ofed/head/Makefile.inc1 projects/ofed/head/etc/defaults/rc.conf projects/ofed/head/etc/rc.d/Makefile projects/ofed/head/share/mk/bsd.own.mk Modified: projects/ofed/head/Makefile.inc1 ============================================================================== --- projects/ofed/head/Makefile.inc1 Sun Jan 9 08:07:58 2011 (r217185) +++ projects/ofed/head/Makefile.inc1 Sun Jan 9 08:54:57 2011 (r217186) @@ -65,7 +65,7 @@ SUBDIR+=secure SUBDIR+=share .endif SUBDIR+=sys usr.bin usr.sbin -.if !defined(MK_OFED) || ${MK_OFED} != "no" +.if ${MK_OFED} != "no" SUBDIR+=contrib/ofed .endif # @@ -1180,7 +1180,7 @@ _prebuild_libs= ${_kerberos5_lib_libasn1 _lib_libthr= lib/libthr .endif -.if !defined(MK_OFED) || ${MK_OFED} != "no" +.if ${MK_OFED} != "no" _ofed_lib= contrib/ofed/usr.lib/ .endif Modified: projects/ofed/head/etc/defaults/rc.conf ============================================================================== --- projects/ofed/head/etc/defaults/rc.conf Sun Jan 9 08:07:58 2011 (r217185) +++ projects/ofed/head/etc/defaults/rc.conf Sun Jan 9 08:54:57 2011 (r217186) @@ -647,6 +647,7 @@ bsdextended_script="/etc/rc.bsdextended" newsyslog_enable="YES" # Run newsyslog at startup. newsyslog_flags="-CN" # Newsyslog flags to create marked files mixer_enable="YES" # Run the sound mixer. +opensm_enable="NO" # Opensm(8) for infiniband devices defaults to off ############################################################## ### Jail Configuration ####################################### Modified: projects/ofed/head/etc/rc.d/Makefile ============================================================================== --- projects/ofed/head/etc/rc.d/Makefile Sun Jan 9 08:07:58 2011 (r217185) +++ projects/ofed/head/etc/rc.d/Makefile Sun Jan 9 08:54:57 2011 (r217186) @@ -42,6 +42,10 @@ FILES= DAEMON FILESYSTEMS LOGIN NETWORKI ypset ypupdated ypxfrd \ zfs zvol +.if ${MK_OFED} != "no" +FILES+= opensm +.endif + .if ${MK_OPENSSH} != "no" FILES+= sshd .endif Added: projects/ofed/head/etc/rc.d/opensm ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/head/etc/rc.d/opensm Sun Jan 9 08:54:57 2011 (r217186) @@ -0,0 +1,28 @@ +#!/bin/sh +# +# $FreeBSD$ +# + +# PROVIDE: opensm +# BEFORE: netif +# REQUIRE: FILESYSTEMS + +. /etc/rc.subr + +name="opensm" +start_cmd="opensm_start" +rcvar="opensm_enable" + +command=/usr/bin/opensm +command_args="-B" + +opensm_start() +{ + for guid in `ibstat | grep "Port GUID" | cut -d ':' -f2`; do + [ -z "${rc_quiet}" ] && echo "Starting ${guid} opensm." + ${command} ${command_args} -g ${guid} >> /dev/null + done +} + +load_rc_config $name +run_rc_command $* Modified: projects/ofed/head/share/mk/bsd.own.mk ============================================================================== --- projects/ofed/head/share/mk/bsd.own.mk Sun Jan 9 08:07:58 2011 (r217185) +++ projects/ofed/head/share/mk/bsd.own.mk Sun Jan 9 08:54:57 2011 (r217186) @@ -368,6 +368,7 @@ _clang_no=CLANG NS_CACHING \ NTP \ OBJC \ + OFED \ OPENSSH \ OPENSSL \ PAM \ From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 09:56:43 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7F76F106564A; Sun, 9 Jan 2011 09:56:43 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6F4508FC17; Sun, 9 Jan 2011 09:56:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p099uhUG037406; Sun, 9 Jan 2011 09:56:43 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p099uhS3037404; Sun, 9 Jan 2011 09:56:43 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101090956.p099uhS3037404@svn.freebsd.org> From: Alexander Motin Date: Sun, 9 Jan 2011 09:56:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217188 - projects/graid/head/sys/cam/ata X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 09:56:43 -0000 Author: mav Date: Sun Jan 9 09:56:43 2011 New Revision: 217188 URL: http://svn.freebsd.org/changeset/base/217188 Log: Fix panic when built without ADA_TEST_FAILURE. Modified: projects/graid/head/sys/cam/ata/ata_da.c Modified: projects/graid/head/sys/cam/ata/ata_da.c ============================================================================== --- projects/graid/head/sys/cam/ata/ata_da.c Sun Jan 9 09:21:11 2011 (r217187) +++ projects/graid/head/sys/cam/ata/ata_da.c Sun Jan 9 09:56:43 2011 (r217188) @@ -855,12 +855,14 @@ adaregister(struct cam_periph *periph, v dp->secsize, dp->heads, dp->secs_per_track, dp->cylinders); xpt_announce_periph(periph, announce_buf); +#ifdef ADA_TEST_FAILURE /* * Create our sysctl variables, now that we know * we have successfully attached. * XXX: da code does a cam_periph_acquire(periph) here -- why?. */ taskqueue_enqueue(taskqueue_thread, &softc->sysctl_task); +#endif /* * Add async callbacks for bus reset and * bus device reset calls. I don't bother From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 11:27:06 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 98374106564A; Sun, 9 Jan 2011 11:27:06 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 882208FC12; Sun, 9 Jan 2011 11:27:06 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p09BR6dD040750; Sun, 9 Jan 2011 11:27:06 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p09BR6Zu040748; Sun, 9 Jan 2011 11:27:06 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101091127.p09BR6Zu040748@svn.freebsd.org> From: Alexander Motin Date: Sun, 9 Jan 2011 11:27:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217189 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 11:27:06 -0000 Author: mav Date: Sun Jan 9 11:27:06 2011 New Revision: 217189 URL: http://svn.freebsd.org/changeset/base/217189 Log: g_io_getattr() doesn't returns real length of obtained string. Calculate it explicitly. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Sun Jan 9 09:56:43 2011 (r217188) +++ projects/graid/head/sys/geom/raid/md_intel.c Sun Jan 9 11:27:06 2011 (r217189) @@ -622,6 +622,7 @@ g_raid_md_get_label(struct g_consumer *c error = g_io_getattr("GEOM::ident", cp, &len, serial_buffer); if (error != 0) return (error); + len = strlen(serial_buffer); if (len > serlen) len -= serlen; else From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 11:52:24 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 72710106564A; Sun, 9 Jan 2011 11:52:24 +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 5E0348FC0C; Sun, 9 Jan 2011 11:52:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p09BqOYV041455; Sun, 9 Jan 2011 11:52:24 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p09BqN09041419; Sun, 9 Jan 2011 11:52:23 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101091152.p09BqN09041419@svn.freebsd.org> From: Dimitry Andric Date: Sun, 9 Jan 2011 11:52:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217190 - in projects/binutils-2.17: . bin/sh contrib/top etc/defaults gnu/lib/libgcc gnu/lib/libgomp gnu/usr.bin/binutils gnu/usr.bin/binutils/ld gnu/usr.bin/binutils/libbfd gnu/usr.bi... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 11:52:24 -0000 Author: dim Date: Sun Jan 9 11:52:23 2011 New Revision: 217190 URL: http://svn.freebsd.org/changeset/base/217190 Log: Sync: merge r217119 through r217189 from ^/head. Added: projects/binutils-2.17/sys/x86/include/_inttypes.h - copied unchanged from r217189, head/sys/x86/include/_inttypes.h projects/binutils-2.17/tools/regression/bin/sh/builtins/exit2.8 - copied unchanged from r217189, head/tools/regression/bin/sh/builtins/exit2.8 projects/binutils-2.17/tools/regression/bin/sh/builtins/exit3.0 - copied unchanged from r217189, head/tools/regression/bin/sh/builtins/exit3.0 projects/binutils-2.17/tools/regression/usr.bin/sed/inplace_race.t - copied unchanged from r217189, head/tools/regression/usr.bin/sed/inplace_race.t Modified: projects/binutils-2.17/Makefile projects/binutils-2.17/Makefile.inc1 projects/binutils-2.17/Makefile.mips projects/binutils-2.17/bin/sh/main.c projects/binutils-2.17/bin/sh/trap.c projects/binutils-2.17/bin/sh/trap.h projects/binutils-2.17/etc/defaults/rc.conf projects/binutils-2.17/gnu/lib/libgcc/Makefile projects/binutils-2.17/gnu/lib/libgomp/Makefile projects/binutils-2.17/gnu/usr.bin/binutils/Makefile.inc0 projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.mips projects/binutils-2.17/gnu/usr.bin/binutils/libbfd/Makefile.mips projects/binutils-2.17/gnu/usr.bin/cc/Makefile.inc projects/binutils-2.17/gnu/usr.bin/cc/Makefile.tgt projects/binutils-2.17/gnu/usr.bin/gdb/Makefile.inc projects/binutils-2.17/gnu/usr.bin/gdb/libgdb/Makefile projects/binutils-2.17/lib/libc/Makefile projects/binutils-2.17/lib/libc/gen/Symbol.map projects/binutils-2.17/lib/libc/gen/dlfcn.c projects/binutils-2.17/lib/libc/gen/elf_utils.c projects/binutils-2.17/lib/libc/net/hesiod.c projects/binutils-2.17/lib/libc/stdlib/realpath.c projects/binutils-2.17/libexec/rtld-elf/Symbol.map projects/binutils-2.17/libexec/rtld-elf/map_object.c projects/binutils-2.17/libexec/rtld-elf/rtld.c projects/binutils-2.17/libexec/rtld-elf/rtld.h projects/binutils-2.17/share/man/man4/tcp.4 projects/binutils-2.17/share/man/man5/rc.conf.5 projects/binutils-2.17/share/mk/bsd.endian.mk projects/binutils-2.17/share/mk/sys.mk projects/binutils-2.17/sys/amd64/amd64/elf_machdep.c projects/binutils-2.17/sys/amd64/amd64/machdep.c projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c projects/binutils-2.17/sys/amd64/include/_inttypes.h projects/binutils-2.17/sys/amd64/include/_limits.h projects/binutils-2.17/sys/amd64/include/_stdint.h projects/binutils-2.17/sys/amd64/include/vmparam.h projects/binutils-2.17/sys/arm/include/_limits.h projects/binutils-2.17/sys/arm/include/_stdint.h projects/binutils-2.17/sys/arm/include/_types.h projects/binutils-2.17/sys/compat/freebsd32/freebsd32_misc.c projects/binutils-2.17/sys/compat/ia32/ia32_sysvec.c projects/binutils-2.17/sys/compat/ia32/ia32_util.h projects/binutils-2.17/sys/dev/ixgbe/ixgbe.c projects/binutils-2.17/sys/dev/ixgbe/ixgbe.h projects/binutils-2.17/sys/dev/ixgbe/ixv.h projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdport.c projects/binutils-2.17/sys/i386/include/_inttypes.h projects/binutils-2.17/sys/i386/include/_limits.h projects/binutils-2.17/sys/i386/include/_stdint.h projects/binutils-2.17/sys/i386/include/_types.h projects/binutils-2.17/sys/ia64/include/_limits.h projects/binutils-2.17/sys/ia64/include/_stdint.h projects/binutils-2.17/sys/ia64/include/float.h projects/binutils-2.17/sys/kern/imgact_elf.c projects/binutils-2.17/sys/kern/kern_exec.c projects/binutils-2.17/sys/kern/kern_timeout.c projects/binutils-2.17/sys/kern/vfs_mountroot.c projects/binutils-2.17/sys/mips/atheros/ar91xxreg.h projects/binutils-2.17/sys/mips/include/_inttypes.h projects/binutils-2.17/sys/mips/include/_limits.h projects/binutils-2.17/sys/mips/include/_stdint.h projects/binutils-2.17/sys/mips/include/_types.h projects/binutils-2.17/sys/netinet/if_ether.c projects/binutils-2.17/sys/netinet/in_pcb.c projects/binutils-2.17/sys/netinet/tcp_input.c projects/binutils-2.17/sys/netinet/tcp_lro.c projects/binutils-2.17/sys/netinet/tcp_lro.h projects/binutils-2.17/sys/netinet/tcp_reass.c projects/binutils-2.17/sys/netinet/tcp_syncache.h projects/binutils-2.17/sys/netinet/tcp_timer.c projects/binutils-2.17/sys/netinet/tcp_usrreq.c projects/binutils-2.17/sys/netinet/tcp_var.h projects/binutils-2.17/sys/netinet/udp.h projects/binutils-2.17/sys/netinet/udp_var.h projects/binutils-2.17/sys/netsmb/smb_dev.h projects/binutils-2.17/sys/netsmb/smb_subr.c projects/binutils-2.17/sys/netsmb/smb_subr.h projects/binutils-2.17/sys/pc98/include/_inttypes.h projects/binutils-2.17/sys/powerpc/include/_inttypes.h projects/binutils-2.17/sys/powerpc/include/_limits.h projects/binutils-2.17/sys/powerpc/include/_stdint.h projects/binutils-2.17/sys/powerpc/include/_types.h projects/binutils-2.17/sys/powerpc/include/float.h projects/binutils-2.17/sys/sparc64/include/_limits.h projects/binutils-2.17/sys/sparc64/include/_stdint.h projects/binutils-2.17/sys/sparc64/include/float.h projects/binutils-2.17/sys/sun4v/include/_limits.h projects/binutils-2.17/sys/sun4v/include/_stdint.h projects/binutils-2.17/sys/sun4v/include/float.h projects/binutils-2.17/sys/sys/cdefs.h projects/binutils-2.17/sys/sys/imgact.h projects/binutils-2.17/sys/sys/link_elf.h projects/binutils-2.17/sys/sys/sysent.h projects/binutils-2.17/sys/vm/vm_page.c projects/binutils-2.17/tools/regression/usr.bin/sed/Makefile projects/binutils-2.17/usr.bin/sed/main.c projects/binutils-2.17/usr.bin/xlint/Makefile.inc projects/binutils-2.17/usr.sbin/Makefile.mips projects/binutils-2.17/usr.sbin/cpucontrol/cpucontrol.c projects/binutils-2.17/usr.sbin/ndp/ndp.c projects/binutils-2.17/usr.sbin/pc-sysinstall/backend-query/disk-part.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend-query/send-logs.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-cleanup.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-disk.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-networking.sh Directory Properties: projects/binutils-2.17/ (props changed) projects/binutils-2.17/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/contrib/bind9/ (props changed) projects/binutils-2.17/contrib/binutils/ (props changed) projects/binutils-2.17/contrib/bzip2/ (props changed) projects/binutils-2.17/contrib/ee/ (props changed) projects/binutils-2.17/contrib/expat/ (props changed) projects/binutils-2.17/contrib/file/ (props changed) projects/binutils-2.17/contrib/gdb/ (props changed) projects/binutils-2.17/contrib/gdtoa/ (props changed) projects/binutils-2.17/contrib/gnu-sort/ (props changed) projects/binutils-2.17/contrib/groff/ (props changed) projects/binutils-2.17/contrib/less/ (props changed) projects/binutils-2.17/contrib/libpcap/ (props changed) projects/binutils-2.17/contrib/llvm/ (props changed) projects/binutils-2.17/contrib/llvm/tools/clang/ (props changed) projects/binutils-2.17/contrib/ncurses/ (props changed) projects/binutils-2.17/contrib/netcat/ (props changed) projects/binutils-2.17/contrib/ntp/ (props changed) projects/binutils-2.17/contrib/one-true-awk/ (props changed) projects/binutils-2.17/contrib/openbsm/ (props changed) projects/binutils-2.17/contrib/openpam/ (props changed) projects/binutils-2.17/contrib/pf/ (props changed) projects/binutils-2.17/contrib/sendmail/ (props changed) projects/binutils-2.17/contrib/tcpdump/ (props changed) projects/binutils-2.17/contrib/tcsh/ (props changed) projects/binutils-2.17/contrib/top/ (props changed) projects/binutils-2.17/contrib/top/install-sh (props changed) projects/binutils-2.17/contrib/tzcode/stdtime/ (props changed) projects/binutils-2.17/contrib/tzcode/zic/ (props changed) projects/binutils-2.17/contrib/tzdata/ (props changed) projects/binutils-2.17/contrib/wpa/ (props changed) projects/binutils-2.17/contrib/xz/ (props changed) projects/binutils-2.17/crypto/openssh/ (props changed) projects/binutils-2.17/crypto/openssl/ (props changed) projects/binutils-2.17/lib/libc/ (props changed) projects/binutils-2.17/lib/libc/stdtime/ (props changed) projects/binutils-2.17/lib/libutil/ (props changed) projects/binutils-2.17/lib/libz/ (props changed) projects/binutils-2.17/sbin/ (props changed) projects/binutils-2.17/sbin/ipfw/ (props changed) projects/binutils-2.17/share/mk/bsd.arch.inc.mk (props changed) projects/binutils-2.17/share/zoneinfo/ (props changed) projects/binutils-2.17/sys/ (props changed) projects/binutils-2.17/sys/amd64/include/xen/ (props changed) projects/binutils-2.17/sys/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/sys/contrib/dev/acpica/ (props changed) projects/binutils-2.17/sys/contrib/octeon-sdk/ (props changed) projects/binutils-2.17/sys/contrib/pf/ (props changed) projects/binutils-2.17/sys/contrib/x86emu/ (props changed) projects/binutils-2.17/usr.bin/calendar/ (props changed) projects/binutils-2.17/usr.bin/csup/ (props changed) projects/binutils-2.17/usr.bin/procstat/ (props changed) projects/binutils-2.17/usr.sbin/zic/ (props changed) Modified: projects/binutils-2.17/Makefile ============================================================================== --- projects/binutils-2.17/Makefile Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/Makefile Sun Jan 9 11:52:23 2011 (r217190) @@ -26,6 +26,7 @@ # delete-old-dirs - Delete obsolete directories. # delete-old-files - Delete obsolete files. # delete-old-libs - Delete obsolete libraries. +# targets - Print a list of supported TARGET/TARGET_ARCH pairs. # # This makefile is simple by design. The FreeBSD make automatically reads # the /usr/share/mk/sys.mk unless the -m argument is specified on the @@ -280,10 +281,10 @@ tinderbox: # with a reasonable chance of success, regardless of how old your # existing system is. # -.if make(universe) || make(universe_kernels) || make(tinderbox) +.if make(universe) || make(universe_kernels) || make(tinderbox) || make(targets) TARGETS?=amd64 arm i386 ia64 mips pc98 powerpc sparc64 sun4v TARGET_ARCHES_arm?= arm armeb -TARGET_ARCHES_mips?= mipsel mipseb +TARGET_ARCHES_mips?= mipsel mipseb mips64el mips64eb TARGET_ARCHES_powerpc?= powerpc powerpc64 TARGET_ARCHES_pc98?= i386 TARGET_ARCHES_sun4v?= sparc64 @@ -291,6 +292,14 @@ TARGET_ARCHES_sun4v?= sparc64 TARGET_ARCHES_${target}?= ${target} .endfor +targets: + @echo "Supported TARGET/TARGET_ARCH pairs" +.for target in ${TARGETS} +.for target_arch in ${TARGET_ARCHES_${target}} + @echo " ${target}/${target_arch}" +.endfor +.endfor + .if defined(DOING_TINDERBOX) FAILFILE=tinderbox.failed MAKEFAIL=tee -a ${FAILFILE} Modified: projects/binutils-2.17/Makefile.inc1 ============================================================================== --- projects/binutils-2.17/Makefile.inc1 Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/Makefile.inc1 Sun Jan 9 11:52:23 2011 (r217190) @@ -121,7 +121,7 @@ VERSION+= ${OSRELDATE} TARGET_ARCH= ${TARGET:S/pc98/i386/:S/sun4v/sparc64/:S/mips/mipsel/} .elif !defined(TARGET) && defined(TARGET_ARCH) && \ ${TARGET_ARCH} != ${MACHINE_ARCH} -TARGET= ${TARGET_ARCH:C/mipse[lb]/mips/:C/armeb/arm/} +TARGET= ${TARGET_ARCH:C/mips.*e[lb]/mips/:C/armeb/arm/} .endif # Legacy names, for a transition period mips:mips -> mipsel:mips .if defined(TARGET) && defined(TARGET_ARCH) && \ @@ -142,7 +142,7 @@ TARGET_ARCH=armeb TARGET?= ${MACHINE} TARGET_ARCH?= ${MACHINE_ARCH} -KNOWN_ARCHES?= amd64 arm armeb/arm i386 i386/pc98 ia64 mipsel/mips mipseb/mips powerpc powerpc64/powerpc sparc64 sparc64/sun4v +KNOWN_ARCHES?= amd64 arm armeb/arm i386 i386/pc98 ia64 mipsel/mips mipseb/mips mips64el/mips mips64eb/mips mipsn32el/mips mipsn32eb/mips powerpc powerpc64/powerpc sparc64 sparc64/sun4v .if ${TARGET} == ${TARGET_ARCH} _t= ${TARGET} .else Modified: projects/binutils-2.17/Makefile.mips ============================================================================== --- projects/binutils-2.17/Makefile.mips Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/Makefile.mips Sun Jan 9 11:52:23 2011 (r217190) @@ -1,5 +1,5 @@ # $FreeBSD$ -.if defined(TARGET_ABI) && ${TARGET_ABI} == "n64" +.if ${MACHINE_ARCH} != "mipsel" && ${MACHINE_ARCH} != "mipseb" MK_RESCUE=no .endif Modified: projects/binutils-2.17/bin/sh/main.c ============================================================================== --- projects/binutils-2.17/bin/sh/main.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/bin/sh/main.c Sun Jan 9 11:52:23 2011 (r217190) @@ -341,10 +341,7 @@ exitcmd(int argc, char **argv) if (stoppedjobs()) return 0; if (argc > 1) - exitstatus = number(argv[1]); + exitshell(number(argv[1])); else - exitstatus = oexitstatus; - exitshell(exitstatus); - /*NOTREACHED*/ - return 0; + exitshell_savedstatus(); } Modified: projects/binutils-2.17/bin/sh/trap.c ============================================================================== --- projects/binutils-2.17/bin/sh/trap.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/bin/sh/trap.c Sun Jan 9 11:52:23 2011 (r217190) @@ -80,6 +80,9 @@ static volatile sig_atomic_t gotsig[NSIG static int ignore_sigchld; /* Used while handling SIGCHLD traps. */ volatile sig_atomic_t gotwinch; +static int exiting; /* exitshell() has been called */ +static int exiting_exitstatus; /* value passed to exitshell() */ + static int getsigaction(int, sig_t *); @@ -478,10 +481,21 @@ setinteractive(int on) void exitshell(int status) { + TRACE(("exitshell(%d) pid=%d\n", status, getpid())); + exiting = 1; + exiting_exitstatus = status; + exitshell_savedstatus(); +} + +void +exitshell_savedstatus(void) +{ struct jmploc loc1, loc2; char *p; - TRACE(("exitshell(%d) pid=%d\n", status, getpid())); + if (!exiting) + exiting_exitstatus = oexitstatus; + exitstatus = oexitstatus = exiting_exitstatus; if (setjmp(loc1.loc)) { goto l1; } @@ -498,5 +512,5 @@ l1: handler = &loc2; /* probably unn #if JOBS setjobctl(0); #endif -l2: _exit(status); +l2: _exit(exiting_exitstatus); } Modified: projects/binutils-2.17/bin/sh/trap.h ============================================================================== --- projects/binutils-2.17/bin/sh/trap.h Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/bin/sh/trap.h Sun Jan 9 11:52:23 2011 (r217190) @@ -46,3 +46,4 @@ void onsig(int); void dotrap(void); void setinteractive(int); void exitshell(int) __dead2; +void exitshell_savedstatus(void) __dead2; Modified: projects/binutils-2.17/etc/defaults/rc.conf ============================================================================== --- projects/binutils-2.17/etc/defaults/rc.conf Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/etc/defaults/rc.conf Sun Jan 9 11:52:23 2011 (r217190) @@ -89,7 +89,7 @@ fsck_y_enable="NO" # Set to YES to do fs fsck_y_flags="" # Additional flags for fsck -y background_fsck="YES" # Attempt to run fsck in the background where possible. background_fsck_delay="60" # Time to wait (seconds) before starting the fsck. -netfs_types="nfs:NFS nfs4:NFS4 smbfs:SMB portalfs:PORTAL nwfs:NWFS" # Net filesystems. +netfs_types="nfs:NFS newnfs:NEWNFS smbfs:SMB portalfs:PORTAL nwfs:NWFS" # Net filesystems. extra_netfs_types="NO" # List of network extra filesystem types for delayed # mount at startup (or NO). Modified: projects/binutils-2.17/gnu/lib/libgcc/Makefile ============================================================================== --- projects/binutils-2.17/gnu/lib/libgcc/Makefile Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/lib/libgcc/Makefile Sun Jan 9 11:52:23 2011 (r217190) @@ -119,9 +119,10 @@ LIB2FUNCS_EXTRA = floatunsidf.c floatuns # _fixsfsi _fixunssfsi _floatdidf _floatdisf .endif -.if ${TARGET_CPUARCH} == "mips" +.if ${TARGET_CPUARCH} == mips LIB2FUNCS_EXTRA = floatunsidf.c floatunsisf.c -.if defined(TARGET_ABI) && ${TARGET_ABI} != "o32" +# XXX do we need n32 here? +.if ${TARGET_ARCH:Mmips64*} != "" LIB2FUNCS_EXTRA+= floatdidf.c fixunsdfsi.c LIB2FUNCS_EXTRA+= floatdisf.c floatundidf.c LIB2FUNCS_EXTRA+= fixsfdi.c floatundisf.c Modified: projects/binutils-2.17/gnu/lib/libgomp/Makefile ============================================================================== --- projects/binutils-2.17/gnu/lib/libgomp/Makefile Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/lib/libgomp/Makefile Sun Jan 9 11:52:23 2011 (r217190) @@ -25,8 +25,7 @@ VERSION_MAP= ${SRCDIR}/libgomp.map # Target-specific OpenMP configuration .if ${MACHINE_CPUARCH} == arm || ${MACHINE_CPUARCH} == i386 || \ ${MACHINE_ARCH} == powerpc || \ - (${MACHINE_CPUARCH} == mips && \ - (!defined(TARGET_ABI) || ${TARGET_ABI} != "n64")) + ${MACHINE_ARCH} == mipsel || ${MACHINE_ARCH} == mipseb OMP_LOCK_ALIGN = 4 OMP_LOCK_KIND= 4 OMP_LOCK_SIZE= 4 Modified: projects/binutils-2.17/gnu/usr.bin/binutils/Makefile.inc0 ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/binutils/Makefile.inc0 Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/binutils/Makefile.inc0 Sun Jan 9 11:52:23 2011 (r217190) @@ -7,7 +7,7 @@ VERSION= "2.17.50 [FreeBSD] 2007-07-03" .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mipse[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips.*e[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif @@ -16,7 +16,7 @@ TARGET_VENDOR?= unknown TARGET_OS?= freebsd BINUTILS_ARCH=${TARGET_ARCH:C/amd64/x86_64/} TARGET_TUPLE?= ${BINUTILS_ARCH}-${TARGET_VENDOR}-${TARGET_OS} -.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "mipseb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH:Mmips*eb} != "" TARGET_BIG_ENDIAN=t .endif @@ -30,8 +30,7 @@ SRCDIR= ${.CURDIR}/${RELSRC} .if ${TARGET_CPUARCH} == "arm" || ${TARGET_CPUARCH} == "i386" || \ ${TARGET_ARCH} == "powerpc" || \ - (${TARGET_CPUARCH} == "mips" && \ - (!defined(TARGET_ABI) || ${TARGET_ABI} != "n64")) + ${TARGET_ARCH} == "mipsel" || ${TARGET_ARCH} == "mipseb" CFLAGS+= -DBFD_DEFAULT_TARGET_SIZE=32 .else CFLAGS+= -DBFD_DEFAULT_TARGET_SIZE=64 Modified: projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.mips ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.mips Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/binutils/ld/Makefile.mips Sun Jan 9 11:52:23 2011 (r217190) @@ -1,19 +1,18 @@ # $FreeBSD$ -.if ${TARGET_ARCH} == "mipsel" +.if ${TARGET_ARCH:Mmips*el} != "" _EMULATION_ENDIAN=l .else _EMULATION_ENDIAN=b .endif -.if defined(TARGET_ABI) && ${TARGET_ABI} != "o32" -.if ${TARGET_ABI} == "n32" -NATIVE_EMULATION=elf32${_EMULATION_ENDIAN}tsmipn32_fbsd -.elif ${TARGET_ABI} == "n64" +.if ${TARGET_ARCH:Mmips64*} != "" NATIVE_EMULATION=elf64${_EMULATION_ENDIAN}tsmip_fbsd -.endif -.endif +.elif ${TARGET_ARCH:Mmipsn32*} != "" +NATIVE_EMULATION=elf32${_EMULATION_ENDIAN}tsmipn32_fbsd +.else NATIVE_EMULATION?=elf32${_EMULATION_ENDIAN}tsmip_fbsd +.endif MIPS_ABIS=elf32btsmip_fbsd elf32ltsmip_fbsd elf64btsmip_fbsd elf64ltsmip_fbsd \ elf32btsmipn32_fbsd elf32ltsmipn32_fbsd Modified: projects/binutils-2.17/gnu/usr.bin/binutils/libbfd/Makefile.mips ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/binutils/libbfd/Makefile.mips Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/binutils/libbfd/Makefile.mips Sun Jan 9 11:52:23 2011 (r217190) @@ -1,19 +1,18 @@ # $FreeBSD$ -.if ${TARGET_ARCH} == "mipsel" +.if ${TARGET_ARCH:Mmips*el} != "" _EMULATION_ENDIAN=little .else _EMULATION_ENDIAN=big .endif -.if defined(TARGET_ABI) && ${TARGET_ABI} != "o32" -.if ${TARGET_ABI} == "n32" -DEFAULT_VECTOR= bfd_elf32_ntrad${_EMULATION_ENDIAN}mips_vec -.elif ${TARGET_ABI} == "n64" +.if ${TARGET_ARCH:Mmips64*} != "" DEFAULT_VECTOR= bfd_elf64_trad${_EMULATION_ENDIAN}mips_vec +.elif ${TARGET_ARCH:Mmipsn32*} != "" +DEFAULT_VECTOR= bfd_elf32_ntrad${_EMULATION_ENDIAN}mips_vec +.else +DEFAULT_VECTOR=bfd_elf32_trad${_EMULATION_ENDIAN}mips_vec .endif -.endif -DEFAULT_VECTOR?=bfd_elf32_trad${_EMULATION_ENDIAN}mips_vec SRCS+= coff-mips.c \ cpu-mips.c \ Modified: projects/binutils-2.17/gnu/usr.bin/cc/Makefile.inc ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/cc/Makefile.inc Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/cc/Makefile.inc Sun Jan 9 11:52:23 2011 (r217190) @@ -22,12 +22,6 @@ CFLAGS+= -DPREFIX=\"${TOOLS_PREFIX}/usr\ #CFLAGS+= -DWANT_COMPILER_INVARIANTS CSTD?= gnu89 -# If building 64-bit longs for the i386, "_LARGE_LONG" should also be defined -# to get the proper sizes in limits.h -.if defined(LONG_TYPE_SIZE) -CFLAGS+= -DLONG_TYPE_SIZE=${LONG_TYPE_SIZE} -.endif - .if ${TARGET_ARCH} != ${MACHINE_ARCH} CFLAGS+= -DCROSS_COMPILE .endif @@ -36,21 +30,18 @@ CFLAGS+= -DCROSS_COMPILE CFLAGS += -DTARGET_ENDIAN_DEFAULT=MASK_BIG_END .endif - .if ${TARGET_CPUARCH} == "mips" -.if ${TARGET_ARCH} == "mipsel" +.if ${TARGET_ARCH:Mmips*el} != "" CFLAGS += -DTARGET_ENDIAN_DEFAULT=0 .endif -.if defined(TARGET_ABI) && ${TARGET_ABI} != "o32" -.if ${TARGET_ABI} == "n32" -MIPS_ABI_DEFAULT=ABI_N32 -.elif ${TARGET_ABI} == "n64" +.if ${TARGET_ARCH:Mmips64*} != "" MIPS_ABI_DEFAULT=ABI_64 +.elif ${TARGET_ARCH:Mmipsn32*} != "" +MIPS_ABI_DEFAULT=ABI_N32 +.else +MIPS_ABI_DEFAULT=ABI_32 .endif -.endif - -MIPS_ABI_DEFAULT?=ABI_32 CFLAGS += -DMIPS_ABI_DEFAULT=${MIPS_ABI_DEFAULT} # If we are compiling for the O32 ABI, we need to default to MIPS-III rather Modified: projects/binutils-2.17/gnu/usr.bin/cc/Makefile.tgt ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/cc/Makefile.tgt Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/cc/Makefile.tgt Sun Jan 9 11:52:23 2011 (r217190) @@ -4,7 +4,7 @@ # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mipse[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips.*e[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif @@ -17,7 +17,7 @@ TARGET_CPU_DEFAULT= MASK_GNU_AS|MASK_GNU .if ${TARGET_ARCH} == "sparc64" TARGET_CPU_DEFAULT= TARGET_CPU_ultrasparc .endif -.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH} == "mipseb" || ${TARGET_ARCH} == "mips64eb" +.if ${TARGET_ARCH} == "armeb" || ${TARGET_ARCH:Mmips*eb} != "" TARGET_BIG_ENDIAN=t .endif .if ${TARGET_ARCH} == "powerpc64" Modified: projects/binutils-2.17/gnu/usr.bin/gdb/Makefile.inc ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/gdb/Makefile.inc Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/gdb/Makefile.inc Sun Jan 9 11:52:23 2011 (r217190) @@ -20,7 +20,7 @@ OBJ_GDB= ${OBJ_ROOT}/gdb # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mipse[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips.*e[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif Modified: projects/binutils-2.17/gnu/usr.bin/gdb/libgdb/Makefile ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/gdb/libgdb/Makefile Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/gnu/usr.bin/gdb/libgdb/Makefile Sun Jan 9 11:52:23 2011 (r217190) @@ -4,7 +4,7 @@ # MACHINE_CPUARCH, but there's no easy way to export make functions... .if defined(TARGET_ARCH) -TARGET_CPUARCH=${TARGET_ARCH:C/mipse[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +TARGET_CPUARCH=${TARGET_ARCH:C/mips.*e[bl]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} .else TARGET_CPUARCH=${MACHINE_CPUARCH} .endif Modified: projects/binutils-2.17/lib/libc/Makefile ============================================================================== --- projects/binutils-2.17/lib/libc/Makefile Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/lib/libc/Makefile Sun Jan 9 11:52:23 2011 (r217190) @@ -68,11 +68,7 @@ NOASM= ${LIBC_ARCH} != "ia64" && \ ${LIBC_ARCH} != "powerpc64" && \ ${LIBC_ARCH} != "sparc64" && \ - ${LIBC_ARCH} != "mips" -.include "${.CURDIR}/quad/Makefile.inc" -.endif -.if ${LIBC_ARCH} == "mips" && \ - (!defined(TARGET_ABI) || ${TARGET_ABI} == "o32") + ${MACHINE_ARCH:Mmips64*} == "" .include "${.CURDIR}/quad/Makefile.inc" .endif .include "${.CURDIR}/regex/Makefile.inc" Modified: projects/binutils-2.17/lib/libc/gen/Symbol.map ============================================================================== --- projects/binutils-2.17/lib/libc/gen/Symbol.map Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/lib/libc/gen/Symbol.map Sun Jan 9 11:52:23 2011 (r217190) @@ -453,6 +453,7 @@ FBSDprivate_1.0 { _rtld_atfork_pre; _rtld_atfork_post; _rtld_error; /* for private use */ + _rtld_get_stack_prot; _rtld_thread_init; /* for private use */ __elf_phdr_match_addr; _err; @@ -499,4 +500,5 @@ FBSDprivate_1.0 { _libc_sem_getvalue_compat; __elf_aux_vector; + __pthread_map_stacks_exec; }; Modified: projects/binutils-2.17/lib/libc/gen/dlfcn.c ============================================================================== --- projects/binutils-2.17/lib/libc/gen/dlfcn.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/lib/libc/gen/dlfcn.c Sun Jan 9 11:52:23 2011 (r217190) @@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$"); /* * Linkage to services provided by the dynamic linker. */ +#include #include #include #include @@ -165,3 +166,12 @@ _rtld_addr_phdr(const void *addr, struct return (0); } + +#pragma weak _rtld_get_stack_prot +int +_rtld_get_stack_prot(void) +{ + + return (PROT_EXEC | PROT_READ | PROT_WRITE); +} + Modified: projects/binutils-2.17/lib/libc/gen/elf_utils.c ============================================================================== --- projects/binutils-2.17/lib/libc/gen/elf_utils.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/lib/libc/gen/elf_utils.c Sun Jan 9 11:52:23 2011 (r217190) @@ -26,7 +26,12 @@ * $FreeBSD$ */ +#include +#include +#include +#include #include +#include int __elf_phdr_match_addr(struct dl_phdr_info *phdr_info, void *addr) @@ -45,3 +50,25 @@ __elf_phdr_match_addr(struct dl_phdr_inf } return (i != phdr_info->dlpi_phnum); } + +#pragma weak __pthread_map_stacks_exec +void +__pthread_map_stacks_exec(void) +{ + int mib[2]; + struct rlimit rlim; + u_long usrstack; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_USRSTACK; + len = sizeof(usrstack); + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), &usrstack, &len, NULL, 0) + == -1) + return; + if (getrlimit(RLIMIT_STACK, &rlim) == -1) + return; + mprotect((void *)(uintptr_t)(usrstack - rlim.rlim_cur), + rlim.rlim_cur, _rtld_get_stack_prot()); +} + Modified: projects/binutils-2.17/lib/libc/net/hesiod.c ============================================================================== --- projects/binutils-2.17/lib/libc/net/hesiod.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/lib/libc/net/hesiod.c Sun Jan 9 11:52:23 2011 (r217190) @@ -324,6 +324,7 @@ read_config_file(ctx, filename) ? &ctx->lhs : &ctx->rhs; *which = strdup(data); if (!*which) { + fclose(fp); errno = ENOMEM; return -1; } Modified: projects/binutils-2.17/lib/libc/stdlib/realpath.c ============================================================================== --- projects/binutils-2.17/lib/libc/stdlib/realpath.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/lib/libc/stdlib/realpath.c Sun Jan 9 11:52:23 2011 (r217190) @@ -54,7 +54,7 @@ realpath(const char * __restrict path, c char *p, *q, *s; size_t left_len, resolved_len; unsigned symlinks; - int serrno, slen, m; + int m, serrno, slen; char left[PATH_MAX], next_token[PATH_MAX], symlink[PATH_MAX]; if (path == NULL) { @@ -73,7 +73,6 @@ realpath(const char * __restrict path, c m = 1; } else m = 0; - symlinks = 0; if (path[0] == '/') { resolved[0] = '/'; @@ -86,8 +85,10 @@ realpath(const char * __restrict path, c if (getcwd(resolved, PATH_MAX) == NULL) { if (m) free(resolved); - else - strlcpy(resolved, ".", PATH_MAX); + else { + resolved[0] = '.'; + resolved[1] = '\0'; + } return (NULL); } resolved_len = strlen(resolved); Modified: projects/binutils-2.17/libexec/rtld-elf/Symbol.map ============================================================================== --- projects/binutils-2.17/libexec/rtld-elf/Symbol.map Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/libexec/rtld-elf/Symbol.map Sun Jan 9 11:52:23 2011 (r217190) @@ -28,4 +28,5 @@ FBSDprivate_1.0 { _rtld_atfork_pre; _rtld_atfork_post; _rtld_addr_phdr; + _rtld_get_stack_prot; }; Modified: projects/binutils-2.17/libexec/rtld-elf/map_object.c ============================================================================== --- projects/binutils-2.17/libexec/rtld-elf/map_object.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/libexec/rtld-elf/map_object.c Sun Jan 9 11:52:23 2011 (r217190) @@ -83,6 +83,7 @@ map_object(int fd, const char *path, con Elf_Addr bss_vaddr; Elf_Addr bss_vlimit; caddr_t bss_addr; + Elf_Word stack_flags; hdr = get_elf_header(fd, path); if (hdr == NULL) @@ -100,6 +101,7 @@ map_object(int fd, const char *path, con phdyn = phinterp = phtls = NULL; phdr_vaddr = 0; segs = alloca(sizeof(segs[0]) * hdr->e_phnum); + stack_flags = PF_X | PF_R | PF_W; while (phdr < phlimit) { switch (phdr->p_type) { @@ -128,6 +130,10 @@ map_object(int fd, const char *path, con case PT_TLS: phtls = phdr; break; + + case PT_GNU_STACK: + stack_flags = phdr->p_flags; + break; } ++phdr; @@ -261,6 +267,7 @@ map_object(int fd, const char *path, con obj->tlsinitsize = phtls->p_filesz; obj->tlsinit = mapbase + phtls->p_vaddr; } + obj->stack_flags = stack_flags; return obj; } Modified: projects/binutils-2.17/libexec/rtld-elf/rtld.c ============================================================================== --- projects/binutils-2.17/libexec/rtld-elf/rtld.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/libexec/rtld-elf/rtld.c Sun Jan 9 11:52:23 2011 (r217190) @@ -103,6 +103,7 @@ static void unload_filtees(Obj_Entry *); static int load_needed_objects(Obj_Entry *, int); static int load_preload_objects(void); static Obj_Entry *load_object(const char *, const Obj_Entry *, int); +static void map_stacks_exec(void); static Obj_Entry *obj_from_addr(const void *); static void objlist_call_fini(Objlist *, Obj_Entry *, RtldLockState *); static void objlist_call_init(Objlist *, RtldLockState *); @@ -188,6 +189,9 @@ extern Elf_Dyn _DYNAMIC; int osreldate, pagesize; +static int stack_prot = PROT_READ | PROT_WRITE | PROT_EXEC; +static int max_stack_flags; + /* * Global declarations normally provided by crt1. The dynamic linker is * not built with crt1, so we have to provide them ourselves. @@ -382,6 +386,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ close(fd); if (obj_main == NULL) die(); + max_stack_flags = obj->stack_flags; } else { /* Main program already loaded. */ const Elf_Phdr *phdr; int phnum; @@ -421,6 +426,10 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ dbg("obj_main path %s", obj_main->path); obj_main->mainprog = true; + if (aux_info[AT_STACKPROT] != NULL && + aux_info[AT_STACKPROT]->a_un.a_val != 0) + stack_prot = aux_info[AT_STACKPROT]->a_un.a_val; + /* * Get the actual dynamic linker pathname from the executable if * possible. (It should always be possible.) That ensures that @@ -519,6 +528,8 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_ r_debug_state(NULL, &obj_main->linkmap); /* say hello to gdb! */ + map_stacks_exec(); + wlock_acquire(rtld_bind_lock, &lockstate); objlist_call_init(&initlist, &lockstate); objlist_clear(&initlist); @@ -1031,6 +1042,8 @@ digest_phdr(const Elf_Phdr *phdr, int ph break; } + obj->stack_flags = PF_X | PF_R | PF_W; + for (ph = phdr; ph < phlimit; ph++) { switch (ph->p_type) { @@ -1062,6 +1075,10 @@ digest_phdr(const Elf_Phdr *phdr, int ph obj->tlsinitsize = ph->p_filesz; obj->tlsinit = (void*)(ph->p_vaddr + obj->relocbase); break; + + case PT_GNU_STACK: + obj->stack_flags = ph->p_flags; + break; } } if (nsegs < 1) { @@ -1679,6 +1696,7 @@ do_load_object(int fd, const char *name, obj_count++; obj_loads++; linkmap_add(obj); /* for GDB & dlinfo() */ + max_stack_flags |= obj->stack_flags; dbg(" %p .. %p: %s", obj->mapbase, obj->mapbase + obj->mapsize - 1, obj->path); @@ -2202,6 +2220,8 @@ dlopen_object(const char *name, Obj_Entr name); GDB_STATE(RT_CONSISTENT,obj ? &obj->linkmap : NULL); + map_stacks_exec(); + /* Call the init functions. */ objlist_call_init(&initlist, &lockstate); objlist_clear(&initlist); @@ -3872,6 +3892,28 @@ fetch_ventry(const Obj_Entry *obj, unsig return NULL; } +int +_rtld_get_stack_prot(void) +{ + + return (stack_prot); +} + +static void +map_stacks_exec(void) +{ + void (*thr_map_stacks_exec)(void); + + if ((max_stack_flags & PF_X) == 0 || (stack_prot & PROT_EXEC) != 0) + return; + thr_map_stacks_exec = (void (*)(void))(uintptr_t) + get_program_var_addr("__pthread_map_stacks_exec"); + if (thr_map_stacks_exec != NULL) { + stack_prot |= PROT_EXEC; + thr_map_stacks_exec(); + } +} + void symlook_init(SymLook *dst, const char *name) { Modified: projects/binutils-2.17/libexec/rtld-elf/rtld.h ============================================================================== --- projects/binutils-2.17/libexec/rtld-elf/rtld.h Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/libexec/rtld-elf/rtld.h Sun Jan 9 11:52:23 2011 (r217190) @@ -157,6 +157,7 @@ typedef struct Struct_Obj_Entry { const Elf_Phdr *phdr; /* Program header if it is mapped, else NULL */ size_t phsize; /* Size of program header in bytes */ const char *interp; /* Pathname of the interpreter, if any */ + Elf_Word stack_flags; /* TLS information */ int tlsindex; /* Index in DTV for this module */ Modified: projects/binutils-2.17/share/man/man4/tcp.4 ============================================================================== --- projects/binutils-2.17/share/man/man4/tcp.4 Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/share/man/man4/tcp.4 Sun Jan 9 11:52:23 2011 (r217190) @@ -32,7 +32,7 @@ .\" From: @(#)tcp.4 8.1 (Berkeley) 6/5/93 .\" $FreeBSD$ .\" -.Dd September 16, 2010 +.Dd January 8, 2011 .Dt TCP 4 .Os .Sh NAME @@ -289,7 +289,9 @@ Amount of time, in milliseconds, that th before keepalive probes (if enabled) are sent. .It Va keepintvl The interval, in milliseconds, between keepalive probes sent to remote -machines. +machines, when no response is received on a +.Va keepidle +probe. After .Dv TCPTV_KEEPCNT (default 8) probes are sent, with no response, the connection is dropped. Modified: projects/binutils-2.17/share/man/man5/rc.conf.5 ============================================================================== --- projects/binutils-2.17/share/man/man5/rc.conf.5 Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/share/man/man5/rc.conf.5 Sun Jan 9 11:52:23 2011 (r217190) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd November 24, 2010 +.Dd January 7, 2011 .Dt RC.CONF 5 .Os .Sh NAME @@ -64,7 +64,19 @@ The file is used to override settings in .Pa /etc/rc.conf for historical reasons. -See the +In addition to +.Pa /etc/rc.conf.local +you can also place smaller configuration files for each +.Xr rc +script in the +.Pa /etc/rc.conf.d +directory, which will be included by the +.Va load_rc_config +function. +For jail configurations you could use the file +.Pa /etc/rc.conf.d/jail +to store jail specific configuration options. +Also see the .Va rc_conf_files variable below. .Pp Modified: projects/binutils-2.17/share/mk/bsd.endian.mk ============================================================================== --- projects/binutils-2.17/share/mk/bsd.endian.mk Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/share/mk/bsd.endian.mk Sun Jan 9 11:52:23 2011 (r217190) @@ -4,12 +4,12 @@ ${MACHINE_ARCH} == "i386" || \ ${MACHINE_ARCH} == "ia64" || \ ${MACHINE_ARCH} == "arm" || \ - ${MACHINE_ARCH} == "mipsel" + ${MACHINE_ARCH:Mmips*el} != "" TARGET_ENDIANNESS= 1234 .elif ${MACHINE_ARCH} == "powerpc" || \ ${MACHINE_ARCH} == "powerpc64" || \ ${MACHINE_ARCH} == "sparc64" || \ ${MACHINE_ARCH} == "armeb" || \ - ${MACHINE_ARCH} == "mipseb" + ${MACHINE_ARCH:Mmips*eb} != "" TARGET_ENDIANNESS= 4321 .endif Modified: projects/binutils-2.17/share/mk/sys.mk ============================================================================== --- projects/binutils-2.17/share/mk/sys.mk Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/share/mk/sys.mk Sun Jan 9 11:52:23 2011 (r217190) @@ -13,7 +13,7 @@ unix ?= We run FreeBSD, not UNIX. # and/or endian. This is called MACHINE_CPU in NetBSD, but that's used # for something different in FreeBSD. # -MACHINE_CPUARCH=${MACHINE_ARCH:C/mipse[lb]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} +MACHINE_CPUARCH=${MACHINE_ARCH:C/mips.*e[lb]/mips/:C/armeb/arm/:C/powerpc64/powerpc/} .endif # If the special target .POSIX appears (without prerequisites or Modified: projects/binutils-2.17/sys/amd64/amd64/elf_machdep.c ============================================================================== --- projects/binutils-2.17/sys/amd64/amd64/elf_machdep.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/sys/amd64/amd64/elf_machdep.c Sun Jan 9 11:52:23 2011 (r217190) @@ -75,11 +75,14 @@ struct sysentvec elf64_freebsd_sysvec = .sv_setregs = exec_setregs, .sv_fixlimit = NULL, .sv_maxssiz = NULL, - .sv_flags = SV_ABI_FREEBSD | SV_LP64, + .sv_flags = SV_ABI_FREEBSD | SV_LP64 | SV_SHP, .sv_set_syscall_retval = cpu_set_syscall_retval, .sv_fetch_syscall_args = cpu_fetch_syscall_args, .sv_syscallnames = syscallnames, + .sv_shared_page_base = SHAREDPAGE, + .sv_shared_page_len = PAGE_SIZE, }; +INIT_SYSENTVEC(elf64_sysvec, &elf64_freebsd_sysvec); static Elf64_Brandinfo freebsd_brand_info = { .brand = ELFOSABI_FREEBSD, @@ -129,7 +132,6 @@ SYSINIT(kelf64, SI_SUB_EXEC, SI_ORDER_AN (sysinit_cfunc_t) elf64_insert_brand_entry, &kfreebsd_brand_info); - void elf64_dump_thread(struct thread *td __unused, void *dst __unused, size_t *off __unused) Modified: projects/binutils-2.17/sys/amd64/amd64/machdep.c ============================================================================== --- projects/binutils-2.17/sys/amd64/amd64/machdep.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/sys/amd64/amd64/machdep.c Sun Jan 9 11:52:23 2011 (r217190) @@ -386,7 +386,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, } regs->tf_rsp = (long)sfp; - regs->tf_rip = PS_STRINGS - *(p->p_sysent->sv_szsigcode); + regs->tf_rip = p->p_sysent->sv_sigcode_base; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucodesel; regs->tf_ds = _udatasel; Modified: projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c ============================================================================== --- projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c Sun Jan 9 11:52:23 2011 (r217190) @@ -393,7 +393,8 @@ freebsd4_ia32_sendsig(sig_t catcher, ksi } regs->tf_rsp = (uintptr_t)sfp; - regs->tf_rip = p->p_sysent->sv_psstrings - sz_freebsd4_ia32_sigcode; + regs->tf_rip = p->p_sysent->sv_sigcode_base + sz_ia32_sigcode - + sz_freebsd4_ia32_sigcode; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucode32sel; regs->tf_ss = _udatasel; @@ -514,7 +515,7 @@ ia32_sendsig(sig_t catcher, ksiginfo_t * } regs->tf_rsp = (uintptr_t)sfp; - regs->tf_rip = p->p_sysent->sv_psstrings - *(p->p_sysent->sv_szsigcode); + regs->tf_rip = p->p_sysent->sv_sigcode_base; regs->tf_rflags &= ~(PSL_T | PSL_D); regs->tf_cs = _ucode32sel; regs->tf_ss = _udatasel; Modified: projects/binutils-2.17/sys/amd64/include/_inttypes.h ============================================================================== --- projects/binutils-2.17/sys/amd64/include/_inttypes.h Sun Jan 9 11:27:06 2011 (r217189) +++ projects/binutils-2.17/sys/amd64/include/_inttypes.h Sun Jan 9 11:52:23 2011 (r217190) @@ -1,213 +1,6 @@ /*- - * Copyright (c) 2001 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Klaus Klein. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * From: $NetBSD: int_fmtio.h,v 1.2 2001/04/26 16:25:21 kleink Exp $ - * $FreeBSD$ + * This file is in the public domain. */ +/* $FreeBSD$ */ -#ifndef _MACHINE_INTTYPES_H_ -#define _MACHINE_INTTYPES_H_ - -/* - * Macros for format specifiers. - */ - -/* fprintf(3) macros for signed integers. */ - -#define PRId8 "d" /* int8_t */ -#define PRId16 "d" /* int16_t */ -#define PRId32 "d" /* int32_t */ -#define PRId64 "ld" /* int64_t */ -#define PRIdLEAST8 "d" /* int_least8_t */ -#define PRIdLEAST16 "d" /* int_least16_t */ -#define PRIdLEAST32 "d" /* int_least32_t */ -#define PRIdLEAST64 "ld" /* int_least64_t */ -#define PRIdFAST8 "d" /* int_fast8_t */ -#define PRIdFAST16 "d" /* int_fast16_t */ -#define PRIdFAST32 "d" /* int_fast32_t */ -#define PRIdFAST64 "ld" /* int_fast64_t */ -#define PRIdMAX "jd" /* intmax_t */ -#define PRIdPTR "ld" /* intptr_t */ - -#define PRIi8 "i" /* int8_t */ -#define PRIi16 "i" /* int16_t */ -#define PRIi32 "i" /* int32_t */ -#define PRIi64 "li" /* int64_t */ -#define PRIiLEAST8 "i" /* int_least8_t */ -#define PRIiLEAST16 "i" /* int_least16_t */ -#define PRIiLEAST32 "i" /* int_least32_t */ -#define PRIiLEAST64 "li" /* int_least64_t */ -#define PRIiFAST8 "i" /* int_fast8_t */ -#define PRIiFAST16 "i" /* int_fast16_t */ -#define PRIiFAST32 "i" /* int_fast32_t */ -#define PRIiFAST64 "li" /* int_fast64_t */ -#define PRIiMAX "ji" /* intmax_t */ -#define PRIiPTR "li" /* intptr_t */ - -/* fprintf(3) macros for unsigned integers. */ - -#define PRIo8 "o" /* uint8_t */ -#define PRIo16 "o" /* uint16_t */ -#define PRIo32 "o" /* uint32_t */ -#define PRIo64 "lo" /* uint64_t */ -#define PRIoLEAST8 "o" /* uint_least8_t */ -#define PRIoLEAST16 "o" /* uint_least16_t */ -#define PRIoLEAST32 "o" /* uint_least32_t */ -#define PRIoLEAST64 "lo" /* uint_least64_t */ -#define PRIoFAST8 "o" /* uint_fast8_t */ -#define PRIoFAST16 "o" /* uint_fast16_t */ -#define PRIoFAST32 "o" /* uint_fast32_t */ -#define PRIoFAST64 "lo" /* uint_fast64_t */ -#define PRIoMAX "jo" /* uintmax_t */ -#define PRIoPTR "lo" /* uintptr_t */ - -#define PRIu8 "u" /* uint8_t */ -#define PRIu16 "u" /* uint16_t */ -#define PRIu32 "u" /* uint32_t */ -#define PRIu64 "lu" /* uint64_t */ -#define PRIuLEAST8 "u" /* uint_least8_t */ -#define PRIuLEAST16 "u" /* uint_least16_t */ -#define PRIuLEAST32 "u" /* uint_least32_t */ -#define PRIuLEAST64 "lu" /* uint_least64_t */ -#define PRIuFAST8 "u" /* uint_fast8_t */ -#define PRIuFAST16 "u" /* uint_fast16_t */ -#define PRIuFAST32 "u" /* uint_fast32_t */ -#define PRIuFAST64 "lu" /* uint_fast64_t */ -#define PRIuMAX "ju" /* uintmax_t */ -#define PRIuPTR "lu" /* uintptr_t */ - -#define PRIx8 "x" /* uint8_t */ -#define PRIx16 "x" /* uint16_t */ -#define PRIx32 "x" /* uint32_t */ -#define PRIx64 "lx" /* uint64_t */ -#define PRIxLEAST8 "x" /* uint_least8_t */ -#define PRIxLEAST16 "x" /* uint_least16_t */ -#define PRIxLEAST32 "x" /* uint_least32_t */ -#define PRIxLEAST64 "lx" /* uint_least64_t */ -#define PRIxFAST8 "x" /* uint_fast8_t */ -#define PRIxFAST16 "x" /* uint_fast16_t */ -#define PRIxFAST32 "x" /* uint_fast32_t */ -#define PRIxFAST64 "lx" /* uint_fast64_t */ -#define PRIxMAX "jx" /* uintmax_t */ -#define PRIxPTR "lx" /* uintptr_t */ - -#define PRIX8 "X" /* uint8_t */ -#define PRIX16 "X" /* uint16_t */ -#define PRIX32 "X" /* uint32_t */ -#define PRIX64 "lX" /* uint64_t */ -#define PRIXLEAST8 "X" /* uint_least8_t */ -#define PRIXLEAST16 "X" /* uint_least16_t */ -#define PRIXLEAST32 "X" /* uint_least32_t */ -#define PRIXLEAST64 "lX" /* uint_least64_t */ -#define PRIXFAST8 "X" /* uint_fast8_t */ -#define PRIXFAST16 "X" /* uint_fast16_t */ -#define PRIXFAST32 "X" /* uint_fast32_t */ -#define PRIXFAST64 "lX" /* uint_fast64_t */ -#define PRIXMAX "jX" /* uintmax_t */ -#define PRIXPTR "lX" /* uintptr_t */ - -/* fscanf(3) macros for signed integers. */ - -#define SCNd8 "hhd" /* int8_t */ -#define SCNd16 "hd" /* int16_t */ -#define SCNd32 "d" /* int32_t */ -#define SCNd64 "ld" /* int64_t */ -#define SCNdLEAST8 "hhd" /* int_least8_t */ -#define SCNdLEAST16 "hd" /* int_least16_t */ -#define SCNdLEAST32 "d" /* int_least32_t */ -#define SCNdLEAST64 "ld" /* int_least64_t */ -#define SCNdFAST8 "d" /* int_fast8_t */ -#define SCNdFAST16 "d" /* int_fast16_t */ -#define SCNdFAST32 "d" /* int_fast32_t */ -#define SCNdFAST64 "ld" /* int_fast64_t */ -#define SCNdMAX "jd" /* intmax_t */ -#define SCNdPTR "ld" /* intptr_t */ - -#define SCNi8 "hhi" /* int8_t */ -#define SCNi16 "hi" /* int16_t */ -#define SCNi32 "i" /* int32_t */ -#define SCNi64 "li" /* int64_t */ -#define SCNiLEAST8 "hhi" /* int_least8_t */ -#define SCNiLEAST16 "hi" /* int_least16_t */ -#define SCNiLEAST32 "i" /* int_least32_t */ -#define SCNiLEAST64 "li" /* int_least64_t */ -#define SCNiFAST8 "i" /* int_fast8_t */ -#define SCNiFAST16 "i" /* int_fast16_t */ -#define SCNiFAST32 "i" /* int_fast32_t */ -#define SCNiFAST64 "li" /* int_fast64_t */ -#define SCNiMAX "ji" /* intmax_t */ -#define SCNiPTR "li" /* intptr_t */ - -/* fscanf(3) macros for unsigned integers. */ - -#define SCNo8 "hho" /* uint8_t */ -#define SCNo16 "ho" /* uint16_t */ -#define SCNo32 "o" /* uint32_t */ -#define SCNo64 "lo" /* uint64_t */ -#define SCNoLEAST8 "hho" /* uint_least8_t */ -#define SCNoLEAST16 "ho" /* uint_least16_t */ -#define SCNoLEAST32 "o" /* uint_least32_t */ -#define SCNoLEAST64 "lo" /* uint_least64_t */ -#define SCNoFAST8 "o" /* uint_fast8_t */ -#define SCNoFAST16 "o" /* uint_fast16_t */ -#define SCNoFAST32 "o" /* uint_fast32_t */ -#define SCNoFAST64 "lo" /* uint_fast64_t */ -#define SCNoMAX "jo" /* uintmax_t */ -#define SCNoPTR "lo" /* uintptr_t */ - -#define SCNu8 "hhu" /* uint8_t */ -#define SCNu16 "hu" /* uint16_t */ -#define SCNu32 "u" /* uint32_t */ -#define SCNu64 "lu" /* uint64_t */ -#define SCNuLEAST8 "hhu" /* uint_least8_t */ -#define SCNuLEAST16 "hu" /* uint_least16_t */ -#define SCNuLEAST32 "u" /* uint_least32_t */ -#define SCNuLEAST64 "lu" /* uint_least64_t */ -#define SCNuFAST8 "u" /* uint_fast8_t */ -#define SCNuFAST16 "u" /* uint_fast16_t */ -#define SCNuFAST32 "u" /* uint_fast32_t */ -#define SCNuFAST64 "lu" /* uint_fast64_t */ -#define SCNuMAX "ju" /* uintmax_t */ -#define SCNuPTR "lu" /* uintptr_t */ - -#define SCNx8 "hhx" /* uint8_t */ -#define SCNx16 "hx" /* uint16_t */ -#define SCNx32 "x" /* uint32_t */ -#define SCNx64 "lx" /* uint64_t */ -#define SCNxLEAST8 "hhx" /* uint_least8_t */ -#define SCNxLEAST16 "hx" /* uint_least16_t */ -#define SCNxLEAST32 "x" /* uint_least32_t */ -#define SCNxLEAST64 "lx" /* uint_least64_t */ -#define SCNxFAST8 "x" /* uint_fast8_t */ -#define SCNxFAST16 "x" /* uint_fast16_t */ -#define SCNxFAST32 "x" /* uint_fast32_t */ -#define SCNxFAST64 "lx" /* uint_fast64_t */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 13:23:45 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 895DA1065670; Sun, 9 Jan 2011 13:23:45 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6DFCD8FC1E; Sun, 9 Jan 2011 13:23:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p09DNjLx044099; Sun, 9 Jan 2011 13:23:45 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p09DNjMh044096; Sun, 9 Jan 2011 13:23:45 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101091323.p09DNjMh044096@svn.freebsd.org> From: Alexander Motin Date: Sun, 9 Jan 2011 13:23:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217193 - in projects/graid/head: sbin/geom/class/raid sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 13:23:45 -0000 Author: mav Date: Sun Jan 9 13:23:45 2011 New Revision: 217193 URL: http://svn.freebsd.org/changeset/base/217193 Log: Add options to specify volume and strip sizes. Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c ============================================================================== --- projects/graid/head/sbin/geom/class/raid/geom_raid.c Sun Jan 9 12:50:44 2011 (r217192) +++ projects/graid/head/sbin/geom/class/raid/geom_raid.c Sun Jan 9 13:23:45 2011 (r217193) @@ -51,8 +51,13 @@ uint32_t version = G_RAID_VERSION; //static void raid_main(struct gctl_req *req, unsigned flags); struct g_command class_commands[] = { - { "label", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, - "format name level prov ..." + { "label", G_FLAG_VERBOSE, NULL, + { + { 'S', "size", G_VAL_OPTIONAL, G_TYPE_NUMBER }, + { 's', "strip", G_VAL_OPTIONAL, G_TYPE_NUMBER }, + G_OPT_SENTINEL + }, + "[-S size] [-s stripsize] format name level prov ..." }, { "stop", G_FLAG_VERBOSE, NULL, { Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Sun Jan 9 12:50:44 2011 (r217192) +++ projects/graid/head/sys/geom/raid/md_intel.c Sun Jan 9 13:23:45 2011 (r217193) @@ -793,8 +793,9 @@ g_raid_md_ctl_intel(struct g_raid_md_obj char arg[16]; const char *verb, *volname, *levelname, *diskname; int *nargs; - uint64_t size, sectorsize; - int numdisks, i, level, qual; + uint64_t size, sectorsize, strip; + intmax_t *sizearg, *striparg; + int numdisks, i, len, level, qual; int error; sc = md->mdo_softc; @@ -912,7 +913,36 @@ g_raid_md_ctl_intel(struct g_raid_md_obj /* Reserve some space for metadata. */ size -= (4096 + sectorsize - 1) / sectorsize + 1; - size &= ~127; /* Assume stripe size 64K */ + len = sizeof(*sizearg); + sizearg = gctl_get_param(req, "size", &len); + if (sizearg != NULL && len == sizeof(*sizearg)) { + if (*sizearg / sectorsize > size) { + gctl_error(req, "Size too big."); + return (-9); + } + size = *sizearg / sectorsize; + } + + strip = 256; + len = sizeof(*striparg); + striparg = gctl_get_param(req, "strip", &len); + if (striparg != NULL && len == sizeof(*striparg)) { + if (*striparg < sectorsize) { + gctl_error(req, "Strip size too small."); + return (-10); + } + if (*striparg % sectorsize != 0) { + gctl_error(req, "Incorrect strip size."); + return (-11); + } + strip = *striparg / sectorsize; + if (strip >= 65536) { + gctl_error(req, "Strip size too big."); + return (-12); + } + } + + size -= (size % strip); mvol = intel_get_volume(meta, 0); strlcpy(&mvol->name[0], volname, sizeof(mvol->name)); if (level == G_RAID_VOLUME_RL_RAID0) @@ -924,8 +954,8 @@ g_raid_md_ctl_intel(struct g_raid_md_obj mmap = intel_get_map(mvol, 0); mmap->offset = 0; mmap->disk_sectors = size; - mmap->stripe_count = size / 128; - mmap->stripe_sectors = 128; + mmap->stripe_count = size / strip; + mmap->stripe_sectors = strip; mmap->status = INTEL_S_READY; if (level == G_RAID_VOLUME_RL_RAID0) mmap->type = INTEL_T_RAID0; From owner-svn-src-projects@FreeBSD.ORG Sun Jan 9 14:18:17 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 614B8106564A; Sun, 9 Jan 2011 14:18:17 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 370CA8FC17; Sun, 9 Jan 2011 14:18:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p09EIHSY045410; Sun, 9 Jan 2011 14:18:17 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p09EIHHf045408; Sun, 9 Jan 2011 14:18:17 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101091418.p09EIHHf045408@svn.freebsd.org> From: Alexander Motin Date: Sun, 9 Jan 2011 14:18:17 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217194 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 09 Jan 2011 14:18:17 -0000 Author: mav Date: Sun Jan 9 14:18:16 2011 New Revision: 217194 URL: http://svn.freebsd.org/changeset/base/217194 Log: Make provider names format configurable via kern.geom.raid.name_format sysctl/tunable: 0 - raid/rX, 1 - raid/{volume name}. Modified: projects/graid/head/sys/geom/raid/g_raid.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Sun Jan 9 13:23:45 2011 (r217193) +++ projects/graid/head/sys/geom/raid/g_raid.c Sun Jan 9 14:18:16 2011 (r217194) @@ -68,6 +68,10 @@ TUNABLE_INT("kern.geom.raid.disconnect_o &g_raid_disconnect_on_failure); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, disconnect_on_failure, CTLFLAG_RW, &g_raid_disconnect_on_failure, 0, "Disconnect component on I/O failure."); +static u_int g_raid_name_format = 0; +TUNABLE_INT("kern.geom.raid.name_format", &g_raid_name_format); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, name_format, CTLFLAG_RW, + &g_raid_name_format, 0, "Providers name format."); #define MSLEEP(ident, mtx, priority, wmesg, timeout) do { \ G_RAID_DEBUG(4, "%s: Sleeping %p.", __func__, (ident)); \ @@ -943,12 +947,25 @@ g_raid_launch_provider(struct g_raid_vol // struct g_raid_disk *disk; struct g_raid_softc *sc; struct g_provider *pp; + char name[G_RAID_MAX_VOLUMENAME]; + int i; sc = vol->v_softc; sx_assert(&sc->sc_lock, SX_LOCKED); g_topology_lock(); - pp = g_new_providerf(sc->sc_geom, "raid/%s", vol->v_name); + /* Try to name provider with volume name. */ + snprintf(name, sizeof(name), "raid/%s", vol->v_name); + if (g_raid_name_format == 0 || vol->v_name[0] == 0 || + g_provider_by_name(name) != NULL) { + /* Otherwise find first free name. */ + for (i = 0; ; i++) { + snprintf(name, sizeof(name), "raid/r%d", i); + if (g_provider_by_name(name) == NULL) + break; + } + } + pp = g_new_providerf(sc->sc_geom, "%s", name); pp->private = vol; pp->mediasize = vol->v_mediasize; pp->sectorsize = vol->v_sectorsize; @@ -1521,6 +1538,8 @@ g_raid_dumpconf(struct sbuf *sb, const c vol = pp->private; g_topology_unlock(); sx_xlock(&sc->sc_lock); + sbuf_printf(sb, "%s%s\n", indent, + vol->v_name); sbuf_printf(sb, "%s%s\n", indent, g_raid_volume_level2str(vol->v_raid_level, vol->v_raid_level_qualifier)); From owner-svn-src-projects@FreeBSD.ORG Mon Jan 10 03:55:46 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 25D54106564A; Mon, 10 Jan 2011 03:55:46 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 150838FC1A; Mon, 10 Jan 2011 03:55:46 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0A3tjga066230; Mon, 10 Jan 2011 03:55:45 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0A3tj0F066226; Mon, 10 Jan 2011 03:55:45 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101100355.p0A3tj0F066226@svn.freebsd.org> From: Jeff Roberson Date: Mon, 10 Jan 2011 03:55:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217215 - projects/ofed/head/usr.bin/netstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jan 2011 03:55:46 -0000 Author: jeff Date: Mon Jan 10 03:55:45 2011 New Revision: 217215 URL: http://svn.freebsd.org/changeset/base/217215 Log: - Treat SDP like TCP as it uses the same states and most of the same pcb variables. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/usr.bin/netstat/Makefile projects/ofed/head/usr.bin/netstat/inet.c projects/ofed/head/usr.bin/netstat/main.c Modified: projects/ofed/head/usr.bin/netstat/Makefile ============================================================================== --- projects/ofed/head/usr.bin/netstat/Makefile Mon Jan 10 03:48:41 2011 (r217214) +++ projects/ofed/head/usr.bin/netstat/Makefile Mon Jan 10 03:55:45 2011 (r217215) @@ -18,6 +18,10 @@ SRCS+= inet6.c CFLAGS+=-DINET6 .endif +.if ${MK_OFED} != "no" +CFLAGS+=-DSDP +.endif + BINGRP= kmem BINMODE=2555 DPADD= ${LIBKVM} ${LIBMEMSTAT} ${LIBUTIL} Modified: projects/ofed/head/usr.bin/netstat/inet.c ============================================================================== --- projects/ofed/head/usr.bin/netstat/inet.c Mon Jan 10 03:48:41 2011 (r217214) +++ projects/ofed/head/usr.bin/netstat/inet.c Mon Jan 10 03:55:45 2011 (r217215) @@ -85,11 +85,11 @@ __FBSDID("$FreeBSD$"); char *inetname(struct in_addr *); void inetprint(struct in_addr *, int, const char *, int); #ifdef INET6 -static int udp_done, tcp_done; +static int udp_done, tcp_done, sdp_done; #endif /* INET6 */ static int -pcblist_sysctl(int proto, char **bufp, int istcp) +pcblist_sysctl(int proto, const char *name, char **bufp, int istcp) { const char *mibvar; char *buf; @@ -109,7 +109,8 @@ pcblist_sysctl(int proto, char **bufp, i mibvar = "net.inet.raw.pcblist"; break; } - + if (strncmp(name, "sdp", 3) == 0) + mibvar = "net.inet.sdp.pcblist"; len = 0; if (sysctlbyname(mibvar, 0, &len, 0, 0) < 0) { if (errno != ENOENT) @@ -315,10 +316,17 @@ protopr(u_long off, const char *name, in switch (proto) { case IPPROTO_TCP: #ifdef INET6 - if (tcp_done != 0) - return; - else - tcp_done = 1; + if (strncmp(name, "sdp", 3) != 0) { + if (tcp_done != 0) + return; + else + tcp_done = 1; + } else { + if (sdp_done != 0) + return; + else + sdp_done = 1; + } #endif istcp = 1; break; @@ -332,7 +340,7 @@ protopr(u_long off, const char *name, in break; } if (live) { - if (!pcblist_sysctl(proto, &buf, istcp)) + if (!pcblist_sysctl(proto, name, &buf, istcp)) return; } else { if (!pcblist_kvm(off, &buf, istcp)) @@ -355,12 +363,18 @@ protopr(u_long off, const char *name, in } /* Ignore sockets for protocols other than the desired one. */ - if (so->xso_protocol != proto) + if (so->xso_protocol != proto) { + printf("%s proto %d, proto %d\n", + name, so->xso_protocol, proto); continue; + } /* Ignore PCBs which were freed during copyout. */ - if (inp->inp_gencnt > oxig->xig_gen) + if (inp->inp_gencnt > oxig->xig_gen) { + printf("%s gencnt %jd, xig gen %jd\n", + name, inp->inp_gencnt, oxig->xig_gen); continue; + } if ((af1 == AF_INET && (inp->inp_vflag & INP_IPV4) == 0) #ifdef INET6 Modified: projects/ofed/head/usr.bin/netstat/main.c ============================================================================== --- projects/ofed/head/usr.bin/netstat/main.c Mon Jan 10 03:48:41 2011 (r217214) +++ projects/ofed/head/usr.bin/netstat/main.c Mon Jan 10 03:55:45 2011 (r217215) @@ -208,6 +208,10 @@ struct protox { { -1, N_SCTPSTAT, 1, sctp_protopr, sctp_stats, NULL, "sctp", 1, IPPROTO_SCTP }, #endif +#ifdef SDP + { -1, -1, 1, protopr, + NULL, NULL, "sdp", 1, IPPROTO_TCP }, +#endif { N_DIVCBINFO, -1, 1, protopr, NULL, NULL, "divert", 1, IPPROTO_DIVERT }, { N_RIPCBINFO, N_IPSTAT, 1, protopr, @@ -248,6 +252,10 @@ struct protox ip6protox[] = { ip6_stats, ip6_ifstats, "ip6", 1, IPPROTO_RAW }, { N_RIPCBINFO, N_ICMP6STAT, 1, protopr, icmp6_stats, icmp6_ifstats, "icmp6", 1, IPPROTO_ICMPV6 }, +#ifdef SDP + { -1, -1, 1, protopr, + NULL, NULL, "sdp", 1, IPPROTO_TCP }, +#endif #ifdef IPSEC { -1, N_IPSEC6STAT, 1, NULL, ipsec_stats, NULL, "ipsec6", 0, 0 }, From owner-svn-src-projects@FreeBSD.ORG Mon Jan 10 03:56:59 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 305CF106566C; Mon, 10 Jan 2011 03:56:59 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1E9FC8FC08; Mon, 10 Jan 2011 03:56:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0A3uxan066298; Mon, 10 Jan 2011 03:56:59 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0A3uw5P066293; Mon, 10 Jan 2011 03:56:58 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101100356.p0A3uw5P066293@svn.freebsd.org> From: Jeff Roberson Date: Mon, 10 Jan 2011 03:56:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217216 - projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jan 2011 03:56:59 -0000 Author: jeff Date: Mon Jan 10 03:56:58 2011 New Revision: 217216 URL: http://svn.freebsd.org/changeset/base/217216 Log: - Always store lport in network byte order. - Always initialize lport from an accepted socket. - Provide a pcbinfo sysctl so netstat can display sdp sockets alongside tcp and udp. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_cma.c projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h Mon Jan 10 03:55:45 2011 (r217215) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h Mon Jan 10 03:56:58 2011 (r217216) @@ -30,9 +30,11 @@ #include #include #include +#include #include #include #include +#include #include #include Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_cma.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_cma.c Mon Jan 10 03:55:45 2011 (r217215) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_cma.c Mon Jan 10 03:56:58 2011 (r217216) @@ -136,6 +136,7 @@ static int sdp_connect_handler(struct socket *sk, struct rdma_cm_id *id, struct rdma_cm_event *event) { + struct sockaddr_in *src_addr; struct sockaddr_in *dst_addr; struct socket *child; const struct sdp_hh *h; @@ -164,8 +165,10 @@ sdp_connect_handler(struct socket *sk, s ssk->socket = child; ssk->cred = crhold(child->so_cred); dst_addr = (struct sockaddr_in *)&id->route.addr.dst_addr; + src_addr = (struct sockaddr_in *)&id->route.addr.src_addr; ssk->fport = dst_addr->sin_port; ssk->faddr = dst_addr->sin_addr.s_addr; + ssk->lport = src_addr->sin_port; ssk->max_bufs = ntohs(h->bsdh.bufs); atomic_set(&ssk->tx_ring.credits, ssk->max_bufs); ssk->min_bufs = tx_credits(ssk) / 4; Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h Mon Jan 10 03:55:45 2011 (r217215) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h Mon Jan 10 03:56:58 2011 (r217216) @@ -10,7 +10,7 @@ do { \ printk(level "%s:%d %p sdp_sock(%d:%d %d:%d): " format "\n", \ func, line, sk ? sdp_sk(sk) : NULL, \ curproc->p_pid, PCPU_GET(cpuid), \ - (sk) && sdp_sk(sk) ? sdp_sk(sk)->lport : -1, \ + (sk) && sdp_sk(sk) ? ntohs(sdp_sk(sk)->lport) : -1, \ (sk) && sdp_sk(sk) ? ntohs(sdp_sk(sk)->fport) : -1, ## arg); \ } while (0) #define sdp_printk(level, sk, format, arg...) \ Modified: projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c ============================================================================== --- projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Mon Jan 10 03:55:45 2011 (r217215) +++ projects/ofed/head/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c Mon Jan 10 03:56:58 2011 (r217216) @@ -97,6 +97,8 @@ MALLOC_DEFINE(M_SDP, "sdp", "Socket Dire u_long sdp_sendspace = 1024*32; u_long sdp_recvspace = 1024*64; +static int sdp_count; + static int sdp_pcbbind(struct sdp_sock *ssk, struct sockaddr *nam, struct ucred *cred) { @@ -132,7 +134,7 @@ sdp_pcbbind(struct sdp_sock *ssk, struct } else { sin = (struct sockaddr_in *)&ssk->id->route.addr.src_addr; ssk->laddr = sin->sin_addr.s_addr; - ssk->lport = ntohs(sin->sin_port); + ssk->lport = sin->sin_port; } return (error); } @@ -160,6 +162,7 @@ sdp_pcbfree(struct sdp_sock *ssk) ssk->flags |= SDP_DESTROY; SDP_WUNLOCK(ssk); SDP_LIST_WLOCK(); + sdp_count--; LIST_REMOVE(ssk, list); SDP_LIST_WUNLOCK(); crfree(ssk->cred); @@ -384,6 +387,7 @@ sdp_attach(struct socket *so, int proto, ssk->state = TCPS_CLOSED; SDP_LIST_WLOCK(); LIST_INSERT_HEAD(&sdp_list, ssk, list); + sdp_count++; SDP_LIST_WUNLOCK(); if ((so->so_options & SO_LINGER) && so->so_linger == 0) so->so_linger = TCP_LINGERTIME; @@ -498,7 +502,7 @@ sdp_start_connect(struct sdp_sock *ssk, src.sin_family = AF_INET; src.sin_len = sizeof(src); bzero(&src.sin_zero, sizeof(src.sin_zero)); - src.sin_port = htons(ssk->lport); + src.sin_port = ssk->lport; src.sin_addr.s_addr = ssk->laddr; soisconnecting(so); SDP_WUNLOCK(ssk); @@ -1693,6 +1697,111 @@ sdp_dev_rem(struct ib_device *device) struct ib_client sdp_client = { .name = "sdp", .add = sdp_dev_add, .remove = sdp_dev_rem }; + +static int +sdp_pcblist(SYSCTL_HANDLER_ARGS) +{ + int error, n, i; + struct sdp_sock *ssk; + struct xinpgen xig; + + /* + * The process of preparing the TCB list is too time-consuming and + * resource-intensive to repeat twice on every request. + */ + if (req->oldptr == NULL) { + n = sdp_count; + n += imax(n / 8, 10); + req->oldidx = 2 * (sizeof xig) + n * sizeof(struct xtcpcb); + return (0); + } + + if (req->newptr != NULL) + return (EPERM); + + /* + * OK, now we're committed to doing something. + */ + SDP_LIST_RLOCK(); + n = sdp_count; + SDP_LIST_RUNLOCK(); + + error = sysctl_wire_old_buffer(req, 2 * (sizeof xig) + + n * sizeof(struct xtcpcb)); + if (error != 0) + return (error); + + xig.xig_len = sizeof xig; + xig.xig_count = n; + xig.xig_gen = 0; + xig.xig_sogen = so_gencnt; + error = SYSCTL_OUT(req, &xig, sizeof xig); + if (error) + return (error); + + SDP_LIST_RLOCK(); + for (ssk = LIST_FIRST(&sdp_list), i = 0; + ssk != NULL && i < n; ssk = LIST_NEXT(ssk, list)) { + struct xtcpcb xt; + + SDP_RLOCK(ssk); + if (ssk->flags & SDP_TIMEWAIT) { + if (ssk->cred != NULL) + error = cr_cansee(req->td->td_ucred, + ssk->cred); + else + error = EINVAL; /* Skip this inp. */ + } else if (ssk->socket) + error = cr_canseesocket(req->td->td_ucred, + ssk->socket); + else + error = EINVAL; + if (error) + goto next; + + bzero(&xt, sizeof(xt)); + xt.xt_len = sizeof xt; + xt.xt_inp.inp_gencnt = 0; + xt.xt_inp.inp_vflag = INP_IPV4; + memcpy(&xt.xt_inp.inp_laddr, &ssk->laddr, sizeof(ssk->laddr)); + xt.xt_inp.inp_lport = ssk->lport; + memcpy(&xt.xt_inp.inp_faddr, &ssk->faddr, sizeof(ssk->faddr)); + xt.xt_inp.inp_fport = ssk->fport; + xt.xt_tp.t_state = ssk->state; + if (ssk->socket != NULL) + sotoxsocket(ssk->socket, &xt.xt_socket); + else + bzero(&xt.xt_socket, sizeof xt.xt_socket); + xt.xt_socket.xso_protocol = IPPROTO_TCP; + SDP_RUNLOCK(ssk); + error = SYSCTL_OUT(req, &xt, sizeof xt); + i++; + continue; +next: + SDP_RUNLOCK(ssk); + } + if (!error) { + /* + * Give the user an updated idea of our state. + * If the generation differs from what we told + * her before, she knows that something happened + * while we were processing this request, and it + * might be necessary to retry. + */ + xig.xig_gen = 0; + xig.xig_sogen = so_gencnt; + xig.xig_count = sdp_count; + error = SYSCTL_OUT(req, &xig, sizeof xig); + } + SDP_LIST_RUNLOCK(); + return (error); +} + +SYSCTL_NODE(_net_inet, -1, sdp, CTLFLAG_RW, 0, "SDP"); + +SYSCTL_PROC(_net_inet_sdp, TCPCTL_PCBLIST, pcblist, CTLFLAG_RD, 0, 0, + sdp_pcblist, "S,xtcpcb", "List of active SDP connections"); + static void sdp_zone_change(void *tag) { From owner-svn-src-projects@FreeBSD.ORG Mon Jan 10 03:57:28 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4DAEA1065674; Mon, 10 Jan 2011 03:57:28 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C2B148FC0C; Mon, 10 Jan 2011 03:57:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0A3vR3f066344; Mon, 10 Jan 2011 03:57:27 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0A3vREa066342; Mon, 10 Jan 2011 03:57:27 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101100357.p0A3vREa066342@svn.freebsd.org> From: Jeff Roberson Date: Mon, 10 Jan 2011 03:57:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217217 - projects/ofed/head/sys/ofed/include/rdma X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jan 2011 03:57:28 -0000 Author: jeff Date: Mon Jan 10 03:57:27 2011 New Revision: 217217 URL: http://svn.freebsd.org/changeset/base/217217 Log: - Correct the type of 'tag' Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/ofed/include/rdma/ib_addr.h Modified: projects/ofed/head/sys/ofed/include/rdma/ib_addr.h ============================================================================== --- projects/ofed/head/sys/ofed/include/rdma/ib_addr.h Mon Jan 10 03:56:58 2011 (r217216) +++ projects/ofed/head/sys/ofed/include/rdma/ib_addr.h Mon Jan 10 03:57:27 2011 (r217217) @@ -154,7 +154,7 @@ static inline u16 rdma_vlan_dev_vlan_id( return dev->priv_flags & IFF_802_1Q_VLAN ? vlan_dev_vlan_id(dev) : 0xffff; #else - int tag; + uint16_t tag; if (VLAN_TAG(__DECONST(struct ifnet *, dev), &tag) != 0) return 0xffff; From owner-svn-src-projects@FreeBSD.ORG Mon Jan 10 03:59:05 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 59FCD106564A; Mon, 10 Jan 2011 03:59:05 +0000 (UTC) (envelope-from jeff@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 488F58FC08; Mon, 10 Jan 2011 03:59:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0A3x5Ln066412; Mon, 10 Jan 2011 03:59:05 GMT (envelope-from jeff@svn.freebsd.org) Received: (from jeff@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0A3x5JB066405; Mon, 10 Jan 2011 03:59:05 GMT (envelope-from jeff@svn.freebsd.org) Message-Id: <201101100359.p0A3x5JB066405@svn.freebsd.org> From: Jeff Roberson Date: Mon, 10 Jan 2011 03:59:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217218 - in projects/ofed/head/sys: amd64/include conf i386/include net netinet vm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jan 2011 03:59:05 -0000 Author: jeff Date: Mon Jan 10 03:59:04 2011 New Revision: 217218 URL: http://svn.freebsd.org/changeset/base/217218 Log: - Eliminate extraneous diffs as found by an audit of diffs to current. Sponsored by: Isilon Systems, iX Systems, and Panasas. Modified: projects/ofed/head/sys/amd64/include/endian.h projects/ofed/head/sys/conf/kern.pre.mk projects/ofed/head/sys/i386/include/endian.h projects/ofed/head/sys/net/if_arp.h projects/ofed/head/sys/netinet/ip_var.h projects/ofed/head/sys/vm/vm_map.h Modified: projects/ofed/head/sys/amd64/include/endian.h ============================================================================== --- projects/ofed/head/sys/amd64/include/endian.h Mon Jan 10 03:57:27 2011 (r217217) +++ projects/ofed/head/sys/amd64/include/endian.h Mon Jan 10 03:59:04 2011 (r217218) @@ -74,14 +74,11 @@ __byte_swap_int_var(__uint32_t x) { register __uint32_t _x; - _x = x; __asm ("bswap %0" : "+r" (_x)); return (_x); } -#if 1 /* def __OPTIMIZE__ */ - #define __byte_swap_int_const(x) \ (__uint32_t)((((x) & 0xff000000) >> 24) | \ (((x) & 0x00ff0000) >> 8) | \ @@ -90,12 +87,6 @@ __byte_swap_int_var(__uint32_t x) #define __bswap32(x) (__builtin_constant_p(x) ? \ __byte_swap_int_const(x) : __byte_swap_int_var(x)) -#else /* __OPTIMIZE__ */ - -#define __bswap32(x) __byte_swap_int_var(x) - -#endif /* __OPTIMIZE__ */ - static __inline __uint64_t __byte_swap_long_var(__uint64_t x) { @@ -106,8 +97,6 @@ __byte_swap_long_var(__uint64_t x) return (_x); } -#if 1 /* def __OPTIMIZE__ */ - #define __byte_swap_long_const(x) \ (__uint64_t)((((__uint64_t)x >> 56) | \ (((__uint64_t)x >> 40) & 0xff00) | \ @@ -121,12 +110,6 @@ __byte_swap_long_var(__uint64_t x) #define __bswap64(x) (__builtin_constant_p(x) ? \ __byte_swap_long_const(x) : __byte_swap_long_var(x)) -#else /* __OPTIMIZE__ */ - -#define __bswap64(x) __byte_swap_long_var(x) - -#endif /* __OPTIMIZE__ */ - #define __byte_swap_short_const(_x) (__uint16_t)((_x) << 8 | (_x) >> 8) static __inline __uint16_t Modified: projects/ofed/head/sys/conf/kern.pre.mk ============================================================================== --- projects/ofed/head/sys/conf/kern.pre.mk Mon Jan 10 03:57:27 2011 (r217217) +++ projects/ofed/head/sys/conf/kern.pre.mk Mon Jan 10 03:59:04 2011 (r217218) @@ -30,10 +30,10 @@ COPTFLAGS?= -O _MINUS_O= -O CTFFLAGS+= -g . else -_MINUS_O= -O +_MINUS_O= -O2 . endif . if ${MACHINE_CPUARCH} == "amd64" -COPTFLAGS?=-O -frename-registers -pipe +COPTFLAGS?=-O2 -frename-registers -pipe . else COPTFLAGS?=${_MINUS_O} -pipe . endif Modified: projects/ofed/head/sys/i386/include/endian.h ============================================================================== --- projects/ofed/head/sys/i386/include/endian.h Mon Jan 10 03:57:27 2011 (r217217) +++ projects/ofed/head/sys/i386/include/endian.h Mon Jan 10 03:59:04 2011 (r217218) @@ -69,50 +69,47 @@ extern "C" { #if defined(__GNUCLIKE_ASM) && defined(__GNUCLIKE_BUILTIN_CONSTANT_P) -#define __byte_swap_int_var(x) \ -__extension__ ({ register __uint32_t __X = (x); \ - __asm ("bswap %0" : "+r" (__X)); \ - __X; }) +static __inline __uint32_t +__byte_swap_int_var(__uint32_t x) +{ + register __uint32_t _x; -#ifdef __OPTIMIZE__ + _x = x; + __asm ("bswap %0" : "+r" (_x)); + return (_x); +} #define __byte_swap_int_const(x) \ - ((((x) & 0xff000000) >> 24) | \ + (__uint32_t)((((x) & 0xff000000) >> 24) | \ (((x) & 0x00ff0000) >> 8) | \ (((x) & 0x0000ff00) << 8) | \ (((x) & 0x000000ff) << 24)) -#define __byte_swap_int(x) (__builtin_constant_p(x) ? \ +#define __bswap32(x) (__builtin_constant_p(x) ? \ __byte_swap_int_const(x) : __byte_swap_int_var(x)) -#else /* __OPTIMIZE__ */ - -#define __byte_swap_int(x) __byte_swap_int_var(x) +#define __byte_swap_64_const(x) \ + (__uint64_t)((((__uint64_t)x >> 56) | \ + (((__uint64_t)x >> 40) & 0xff00) | \ + (((__uint64_t)x >> 24) & 0xff0000) | \ + (((__uint64_t)x >> 8) & 0xff000000) | \ + (((__uint64_t)x << 8) & (0xfful << 32)) | \ + (((__uint64_t)x << 24) & (0xfful << 40)) | \ + (((__uint64_t)x << 40) & (0xfful << 48)) | \ + (((__uint64_t)x << 56)))) -#endif /* __OPTIMIZE__ */ +#define __bswap64(x) __byte_swap_64_const(x) -static __inline __uint64_t -__bswap64(__uint64_t _x) -{ - - return ((_x >> 56) | ((_x >> 40) & 0xff00) | ((_x >> 24) & 0xff0000) | - ((_x >> 8) & 0xff000000) | ((_x << 8) & ((__uint64_t)0xff << 32)) | - ((_x << 24) & ((__uint64_t)0xff << 40)) | - ((_x << 40) & ((__uint64_t)0xff << 48)) | ((_x << 56))); -} - -static __inline __uint32_t -__bswap32(__uint32_t _x) -{ - - return (__byte_swap_int(_x)); -} +#define __byte_swap_short_const(_x) (__uint16_t)((_x) << 8 | (_x) >> 8) static __inline __uint16_t -__bswap16(__uint16_t _x) +__byte_swap_short_var(__uint16_t x) { - return (_x << 8 | _x >> 8); + return __byte_swap_short_const(x); } +#define __bswap16(x) (__builtin_constant_p(x) ? \ + __byte_swap_short_const(x) : __byte_swap_short_var(x)) + #define __htonl(x) __bswap32(x) #define __htons(x) __bswap16(x) #define __ntohl(x) __bswap32(x) Modified: projects/ofed/head/sys/net/if_arp.h ============================================================================== --- projects/ofed/head/sys/net/if_arp.h Mon Jan 10 03:57:27 2011 (r217217) +++ projects/ofed/head/sys/net/if_arp.h Mon Jan 10 03:59:04 2011 (r217218) @@ -50,7 +50,7 @@ struct arphdr { #define ARPHRD_ARCNET 7 /* arcnet hardware format */ #define ARPHRD_FRELAY 15 /* frame relay hardware format */ #define ARPHRD_IEEE1394 24 /* firewire hardware format */ -#define ARPHRD_INFINIBAND 32 /* infiniband hardware format */ +#define ARPHRD_INFINIBAND 32 /* infiniband hardware format */ u_short ar_pro; /* format of protocol address */ u_char ar_hln; /* length of hardware address */ u_char ar_pln; /* length of protocol address */ Modified: projects/ofed/head/sys/netinet/ip_var.h ============================================================================== --- projects/ofed/head/sys/netinet/ip_var.h Mon Jan 10 03:57:27 2011 (r217217) +++ projects/ofed/head/sys/netinet/ip_var.h Mon Jan 10 03:59:04 2011 (r217218) @@ -307,7 +307,8 @@ extern int (*ip_dn_io_ptr)(struct mbuf * VNET_DECLARE(int, ip_do_randomid); #define V_ip_do_randomid VNET(ip_do_randomid) -#define ip_newid() ip_randomid() +#define ip_newid() ((V_ip_do_randomid != 0) ? ip_randomid() : \ + htons(V_ip_id++)) #endif /* _KERNEL */ Modified: projects/ofed/head/sys/vm/vm_map.h ============================================================================== --- projects/ofed/head/sys/vm/vm_map.h Mon Jan 10 03:57:27 2011 (r217217) +++ projects/ofed/head/sys/vm/vm_map.h Mon Jan 10 03:59:04 2011 (r217218) @@ -346,7 +346,7 @@ long vmspace_wired_count(struct vmspace #define VM_MAP_WIRE_NOHOLES 0 /* region must not have holes */ #define VM_MAP_WIRE_HOLESOK 2 /* region may have holes */ -#define VM_MAP_WIRE_WRITE 4 /* Validate writable. */ +#define VM_MAP_WIRE_WRITE 4 /* Validate writable. */ #ifdef _KERNEL boolean_t vm_map_check_protection (vm_map_t, vm_offset_t, vm_offset_t, vm_prot_t); From owner-svn-src-projects@FreeBSD.ORG Mon Jan 10 19:49:18 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7E42D106566B; Mon, 10 Jan 2011 19:49:18 +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 6C9AF8FC16; Mon, 10 Jan 2011 19:49:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0AJnILa091248; Mon, 10 Jan 2011 19:49:18 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0AJnIms091239; Mon, 10 Jan 2011 19:49:18 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101101949.p0AJnIms091239@svn.freebsd.org> From: Dimitry Andric Date: Mon, 10 Jan 2011 19:49:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217232 - projects/binutils-2.17/contrib/binutils/bfd X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 Jan 2011 19:49:18 -0000 Author: dim Date: Mon Jan 10 19:49:18 2011 New Revision: 217232 URL: http://svn.freebsd.org/changeset/base/217232 Log: Apply fix for binutils PR ld/4424, which can occur while linking certain .so files from the VirtualBox port, resulting in: internal error, aborting at bfd/elf64-x86-64.c line 2735 in elf64_x86_64_relocate_section Original diff (relicensed under GPLv2 by author, with permission): http://sourceware.org/git/?p=binutils.git;a=commit;h=07eca6f55f5ca048bad21e36f5a7e6d45682535f Modified: projects/binutils-2.17/contrib/binutils/bfd/config.bfd projects/binutils-2.17/contrib/binutils/bfd/elf-bfd.h projects/binutils-2.17/contrib/binutils/bfd/elf32-i386.c projects/binutils-2.17/contrib/binutils/bfd/elf64-alpha.c projects/binutils-2.17/contrib/binutils/bfd/elf64-sparc.c projects/binutils-2.17/contrib/binutils/bfd/elf64-x86-64.c projects/binutils-2.17/contrib/binutils/bfd/elflink.c projects/binutils-2.17/contrib/binutils/bfd/elfxx-target.h Modified: projects/binutils-2.17/contrib/binutils/bfd/config.bfd ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/config.bfd Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/config.bfd Mon Jan 10 19:49:18 2011 (r217232) @@ -140,7 +140,7 @@ case "${targ}" in #ifdef BFD64 alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu) targ_defvec=bfd_elf64_alpha_freebsd_vec - targ_selvecs=ecoffalpha_little_vec + targ_selvecs="bfd_elf64_alpha_vec ecoffalpha_little_vec" want64=true # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling. case "${targ}" in @@ -188,7 +188,7 @@ case "${targ}" in ;; sparc64-*-freebsd* | sparc64-*-kfreebsd*-gnu) targ_defvec=bfd_elf64_sparc_freebsd_vec - targ_selvecs="bfd_elf32_sparc_vec sunos_big_vec" + targ_selvecs="bfd_elf64_sparc_vec bfd_elf32_sparc_vec sunos_big_vec" ;; sparc64-*-netbsd* | sparc64-*-openbsd*) targ_defvec=bfd_elf64_sparc_vec @@ -539,7 +539,8 @@ case "${targ}" in ;; i[3-7]86-*-freebsd* | i[3-7]86-*-kfreebsd*-gnu) targ_defvec=bfd_elf32_i386_freebsd_vec - targ_selvecs=i386coff_vec + targ_selvecs="bfd_elf32_i386_vec bfd_efi_app_ia32_vec i386coff_vec" + targ64_selvecs="bfd_elf64_x86_64_freebsd_vec bfd_elf64_x86_64_vec bfd_efi_app_x86_64_vec" # FreeBSD <= 4.0 supports only the old nonstandard way of ABI labelling. case "${targ}" in i[3-7]86-*-freebsd3* | i[3-7]86-*-freebsd4 | i[3-7]86-*-freebsd4.0*) Modified: projects/binutils-2.17/contrib/binutils/bfd/elf-bfd.h ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elf-bfd.h Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elf-bfd.h Mon Jan 10 19:49:18 2011 (r217232) @@ -697,6 +697,10 @@ struct elf_backend_data bfd_boolean (*elf_backend_omit_section_dynsym) (bfd *output_bfd, struct bfd_link_info *info, asection *osec); + /* Return TRUE if relocations of targets are compatible to the extent + that CHECK_RELOCS will properly process them. PR 4424. */ + bfd_boolean (*relocs_compatible) (const bfd_target *, const bfd_target *); + /* The CHECK_RELOCS function is called by the add_symbols phase of the ELF backend linker. It is called once for each section with relocs of an object file, just after the symbols for the object @@ -1915,6 +1919,12 @@ extern void bfd_elf64_write_relocs extern bfd_boolean bfd_elf64_slurp_reloc_table (bfd *, asection *, asymbol **, bfd_boolean); +extern bfd_boolean _bfd_elf_default_relocs_compatible + (const bfd_target *, const bfd_target *); + +extern bfd_boolean _bfd_elf_relocs_compatible + (const bfd_target *, const bfd_target *); + extern struct elf_link_hash_entry *_bfd_elf_archive_symbol_lookup (bfd *, struct bfd_link_info *, const char *); extern bfd_boolean bfd_elf_link_add_symbols Modified: projects/binutils-2.17/contrib/binutils/bfd/elf32-i386.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elf32-i386.c Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elf32-i386.c Mon Jan 10 19:49:18 2011 (r217232) @@ -3811,9 +3811,10 @@ elf_i386_hash_symbol (struct elf_link_ha #define bfd_elf32_bfd_is_local_label_name elf_i386_is_local_label_name #define bfd_elf32_bfd_link_hash_table_create elf_i386_link_hash_table_create #define bfd_elf32_bfd_reloc_type_lookup elf_i386_reloc_type_lookup -#define bfd_elf32_bfd_reloc_name_lookup elf_i386_reloc_name_lookup +#define bfd_elf32_bfd_reloc_name_lookup elf_i386_reloc_name_lookup #define elf_backend_adjust_dynamic_symbol elf_i386_adjust_dynamic_symbol +#define elf_backend_relocs_compatible _bfd_elf_relocs_compatible #define elf_backend_check_relocs elf_i386_check_relocs #define elf_backend_copy_indirect_symbol elf_i386_copy_indirect_symbol #define elf_backend_create_dynamic_sections elf_i386_create_dynamic_sections @@ -3899,7 +3900,8 @@ elf_i386_vxworks_link_hash_table_create } -#undef elf_backend_post_process_headers +#undef elf_backend_relocs_compatible +#undef elf_backend_post_process_headers #undef bfd_elf32_bfd_link_hash_table_create #define bfd_elf32_bfd_link_hash_table_create \ elf_i386_vxworks_link_hash_table_create Modified: projects/binutils-2.17/contrib/binutils/bfd/elf64-alpha.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elf64-alpha.c Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elf64-alpha.c Mon Jan 10 19:49:18 2011 (r217232) @@ -5326,6 +5326,8 @@ static const struct elf_size_info alpha_ #define elf_backend_add_symbol_hook \ elf64_alpha_add_symbol_hook +#define elf_backend_relocs_compatible \ + _bfd_elf_relocs_compatible #define elf_backend_check_relocs \ elf64_alpha_check_relocs #define elf_backend_create_dynamic_sections \ Modified: projects/binutils-2.17/contrib/binutils/bfd/elf64-sparc.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elf64-sparc.c Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elf64-sparc.c Mon Jan 10 19:49:18 2011 (r217232) @@ -868,6 +868,8 @@ const struct elf_size_info elf64_sparc_s #define elf_backend_create_dynamic_sections \ _bfd_sparc_elf_create_dynamic_sections +#define elf_backend_relocs_compatible \ + _bfd_elf_relocs_compatible #define elf_backend_check_relocs \ _bfd_sparc_elf_check_relocs #define elf_backend_adjust_dynamic_symbol \ Modified: projects/binutils-2.17/contrib/binutils/bfd/elf64-x86-64.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elf64-x86-64.c Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elf64-x86-64.c Mon Jan 10 19:49:18 2011 (r217232) @@ -3657,6 +3657,7 @@ static const struct bfd_elf_special_sect elf64_x86_64_reloc_name_lookup #define elf_backend_adjust_dynamic_symbol elf64_x86_64_adjust_dynamic_symbol +#define elf_backend_relocs_compatible _bfd_elf_relocs_compatible #define elf_backend_check_relocs elf64_x86_64_check_relocs #define elf_backend_copy_indirect_symbol elf64_x86_64_copy_indirect_symbol #define elf_backend_create_dynamic_sections elf64_x86_64_create_dynamic_sections Modified: projects/binutils-2.17/contrib/binutils/bfd/elflink.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elflink.c Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elflink.c Mon Jan 10 19:49:18 2011 (r217232) @@ -3226,6 +3226,40 @@ elf_finalize_dynstr (bfd *output_bfd, st return TRUE; } +/* Return TRUE iff relocations for INPUT are compatible with OUTPUT. + The default is to only match when the INPUT and OUTPUT are exactly + the same target. */ + +bfd_boolean +_bfd_elf_default_relocs_compatible (const bfd_target *input, + const bfd_target *output) +{ + return input == output; +} + +/* Return TRUE iff relocations for INPUT are compatible with OUTPUT. + This version is used when different targets for the same architecture + are virtually identical. */ + +bfd_boolean +_bfd_elf_relocs_compatible (const bfd_target *input, + const bfd_target *output) +{ + const struct elf_backend_data *obed, *ibed; + + if (input == output) + return TRUE; + + ibed = xvec_get_elf_backend_data (input); + obed = xvec_get_elf_backend_data (output); + + if (ibed->arch != obed->arch) + return FALSE; + + /* If both backends are using this function, deem them compatible. */ + return ibed->relocs_compatible == obed->relocs_compatible; +} + /* Add symbols from an ELF object file to the linker hash table. */ static bfd_boolean @@ -4610,8 +4644,8 @@ elf_link_add_object_symbols (bfd *abfd, different format. It probably can't be done. */ if (! dynamic && is_elf_hash_table (htab) - && htab->root.creator == abfd->xvec - && bed->check_relocs != NULL) + && bed->check_relocs != NULL + && (*bed->relocs_compatible) (abfd->xvec, htab->root.creator)) { asection *o; Modified: projects/binutils-2.17/contrib/binutils/bfd/elfxx-target.h ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elfxx-target.h Mon Jan 10 19:48:24 2011 (r217231) +++ projects/binutils-2.17/contrib/binutils/bfd/elfxx-target.h Mon Jan 10 19:49:18 2011 (r217232) @@ -376,6 +376,9 @@ #ifndef elf_backend_omit_section_dynsym #define elf_backend_omit_section_dynsym _bfd_elf_link_omit_section_dynsym #endif +#ifndef elf_backend_relocs_compatible +#define elf_backend_relocs_compatible _bfd_elf_default_relocs_compatible +#endif #ifndef elf_backend_check_relocs #define elf_backend_check_relocs 0 #endif @@ -634,6 +637,7 @@ static struct elf_backend_data elfNN_bed elf_backend_link_output_symbol_hook, elf_backend_create_dynamic_sections, elf_backend_omit_section_dynsym, + elf_backend_relocs_compatible, elf_backend_check_relocs, elf_backend_check_directives, elf_backend_as_needed_cleanup, From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 10:48:50 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C8EC0106566C; Tue, 11 Jan 2011 10:48:50 +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 B8AC38FC0A; Tue, 11 Jan 2011 10:48:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BAmo0P017939; Tue, 11 Jan 2011 10:48:50 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BAmowJ017937; Tue, 11 Jan 2011 10:48:50 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101111048.p0BAmowJ017937@svn.freebsd.org> From: Dimitry Andric Date: Tue, 11 Jan 2011 10:48:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217260 - projects/binutils-2.17/contrib/binutils/ld/emultempl X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 10:48:50 -0000 Author: dim Date: Tue Jan 11 10:48:50 2011 New Revision: 217260 URL: http://svn.freebsd.org/changeset/base/217260 Log: Put in a temporary kludge to force ld to put .note sections just after .interp sections. This seems to have been broken by binutils commit 7f55fa5745fbe04b91e1fbd668d102f3166e03d8, but the specific reasons are still unclear. For now, this fix is needed to make sure .note.ABI-tag sections always end up in the first page of the resulting executable. Modified: projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Modified: projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em ============================================================================== --- projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Tue Jan 11 06:07:36 2011 (r217259) +++ projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Tue Jan 11 10:48:50 2011 (r217260) @@ -1540,8 +1540,7 @@ gld${EMULATION_NAME}_place_orphan (asect if ((s->flags & SEC_ALLOC) == 0) ; else if ((s->flags & SEC_LOAD) != 0 - && ((iself && sh_type == SHT_NOTE) - || (!iself && CONST_STRNEQ (secname, ".note")))) + && CONST_STRNEQ (secname, ".note")) place = &hold[orphan_interp]; else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0) place = &hold[orphan_bss]; From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 11:01:29 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 643761065670; Tue, 11 Jan 2011 11:01:29 +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 536B28FC08; Tue, 11 Jan 2011 11:01:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BB1ToV018253; Tue, 11 Jan 2011 11:01:29 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BB1TP4018251; Tue, 11 Jan 2011 11:01:29 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101111101.p0BB1TP4018251@svn.freebsd.org> From: Dimitry Andric Date: Tue, 11 Jan 2011 11:01:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217261 - projects/binutils-2.17/contrib/binutils/bfd X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 11:01:29 -0000 Author: dim Date: Tue Jan 11 11:01:29 2011 New Revision: 217261 URL: http://svn.freebsd.org/changeset/base/217261 Log: Make sure PT_NOTE sections always get the correct type (SHT_NOTE). Modified: projects/binutils-2.17/contrib/binutils/bfd/elf.c Modified: projects/binutils-2.17/contrib/binutils/bfd/elf.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elf.c Tue Jan 11 10:48:50 2011 (r217260) +++ projects/binutils-2.17/contrib/binutils/bfd/elf.c Tue Jan 11 11:01:29 2011 (r217261) @@ -4403,7 +4403,12 @@ assign_file_positions_for_load_sections no_contents = FALSE; off_adjust = 0; - if (p->p_type == PT_LOAD + if (p->p_type == PT_NOTE) + { + for (i = 0; i < m->count; i++) + elf_section_type (m->sections[i]) = SHT_NOTE; + } + else if (p->p_type == PT_LOAD && m->count > 0) { bfd_size_type align; From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 11:58:27 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6EBDB106564A; Tue, 11 Jan 2011 11:58:27 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from tensor.andric.com (cl-327.ede-01.nl.sixxs.net [IPv6:2001:7b8:2ff:146::2]) by mx1.freebsd.org (Postfix) with ESMTP id 2F0048FC0C; Tue, 11 Jan 2011 11:58:27 +0000 (UTC) Received: from [IPv6:2001:7b8:3a7:0:d1be:d464:96f6:3328] (unknown [IPv6:2001:7b8:3a7:0:d1be:d464:96f6:3328]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 5FD355C5A; Tue, 11 Jan 2011 12:58:26 +0100 (CET) Message-ID: <4D2C45EC.8080305@FreeBSD.org> Date: Tue, 11 Jan 2011 12:58:36 +0100 From: Dimitry Andric Organization: The FreeBSD Project User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.2.14pre) Gecko/20110109 Lanikai/3.1.8pre MIME-Version: 1.0 To: Kostik Belousov References: <201101111048.p0BAmowJ017937@svn.freebsd.org> <20110111114940.GG2518@deviant.kiev.zoral.com.ua> In-Reply-To: <20110111114940.GG2518@deviant.kiev.zoral.com.ua> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r217260 - projects/binutils-2.17/contrib/binutils/ld/emultempl X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 11:58:27 -0000 On 2011-01-11 12:49, Kostik Belousov wrote: >> - && ((iself&& sh_type == SHT_NOTE) >> - || (!iself&& CONST_STRNEQ (secname, ".note")))) >> + && CONST_STRNEQ (secname, ".note")) > I am not sure, but it looks likely that (iself&& sh_type == SHT_NOTE) > part of condition better be kept. Well, this specific test is what causes the .note section to end up somewhere else than behind .interp. I arrived at this by bisecting, but the precise mechanism behind this failure is not clear to me yet. For some reason, at that point, iself is always nonzero, but sh_type is *not* SHT_NOTE, even for .note sections. So then ld decides to put the .note section somewhere far down the list of sections, increasing the chance it will fall out of the first page of the executable. This particular test was changed to fix binutils PR ld/1467, in commit: http://sourceware.org/git/?p=binutils.git;a=commit;h=7f55fa5745fbe04b91e1fbd668d102f3166e03d8 However, the PR seems to be fixing a rather hypothetical situation, which we seem to have never encountered, as the 'issue' had always been in our binutils before. From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 12:20:29 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id ADD941065675 for ; Tue, 11 Jan 2011 12:20:29 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from mail.zoral.com.ua (mx0.zoral.com.ua [91.193.166.200]) by mx1.freebsd.org (Postfix) with ESMTP id 2E80F8FC1D for ; Tue, 11 Jan 2011 12:20:28 +0000 (UTC) Received: from deviant.kiev.zoral.com.ua (root@deviant.kiev.zoral.com.ua [10.1.1.148]) by mail.zoral.com.ua (8.14.2/8.14.2) with ESMTP id p0BBnfI5091617 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 11 Jan 2011 13:49:41 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: from deviant.kiev.zoral.com.ua (kostik@localhost [127.0.0.1]) by deviant.kiev.zoral.com.ua (8.14.4/8.14.4) with ESMTP id p0BBneTs011948; Tue, 11 Jan 2011 13:49:40 +0200 (EET) (envelope-from kostikbel@gmail.com) Received: (from kostik@localhost) by deviant.kiev.zoral.com.ua (8.14.4/8.14.4/Submit) id p0BBnexg011947; Tue, 11 Jan 2011 13:49:40 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: deviant.kiev.zoral.com.ua: kostik set sender to kostikbel@gmail.com using -f Date: Tue, 11 Jan 2011 13:49:40 +0200 From: Kostik Belousov To: Dimitry Andric Message-ID: <20110111114940.GG2518@deviant.kiev.zoral.com.ua> References: <201101111048.p0BAmowJ017937@svn.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="+sHJum3is6Tsg7/J" Content-Disposition: inline In-Reply-To: <201101111048.p0BAmowJ017937@svn.freebsd.org> User-Agent: Mutt/1.4.2.3i X-Virus-Scanned: clamav-milter 0.95.2 at skuns.kiev.zoral.com.ua X-Virus-Status: Clean X-Spam-Status: No, score=-3.4 required=5.0 tests=ALL_TRUSTED,AWL,BAYES_00, DNS_FROM_OPENWHOIS autolearn=no version=3.2.5 X-Spam-Checker-Version: SpamAssassin 3.2.5 (2008-06-10) on skuns.kiev.zoral.com.ua Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r217260 - projects/binutils-2.17/contrib/binutils/ld/emultempl X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 12:20:29 -0000 --+sHJum3is6Tsg7/J Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jan 11, 2011 at 10:48:50AM +0000, Dimitry Andric wrote: > Author: dim > Date: Tue Jan 11 10:48:50 2011 > New Revision: 217260 > URL: http://svn.freebsd.org/changeset/base/217260 >=20 > Log: > Put in a temporary kludge to force ld to put .note sections just after > .interp sections. This seems to have been broken by binutils commit > 7f55fa5745fbe04b91e1fbd668d102f3166e03d8, but the specific reasons are > still unclear. > =20 > For now, this fix is needed to make sure .note.ABI-tag sections always > end up in the first page of the resulting executable. >=20 > Modified: > projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em >=20 > Modified: projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Tue Jan= 11 06:07:36 2011 (r217259) > +++ projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Tue Jan= 11 10:48:50 2011 (r217260) > @@ -1540,8 +1540,7 @@ gld${EMULATION_NAME}_place_orphan (asect > if ((s->flags & SEC_ALLOC) =3D=3D 0) > ; > else if ((s->flags & SEC_LOAD) !=3D 0 > - && ((iself && sh_type =3D=3D SHT_NOTE) > - || (!iself && CONST_STRNEQ (secname, ".note")))) > + && CONST_STRNEQ (secname, ".note")) I am not sure, but it looks likely that (iself && sh_type =3D=3D SHT_NOTE) part of condition better be kept. > place =3D &hold[orphan_interp]; > else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) =3D=3D 0) > place =3D &hold[orphan_bss]; --+sHJum3is6Tsg7/J Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (FreeBSD) iEYEARECAAYFAk0sQ9QACgkQC3+MBN1Mb4jR8ACg4c8WuAO40cULeyqrT0SUQ7SO 0qIAoPOH8YheoZwY3UBrEXVeGp4vAfBH =XlrW -----END PGP SIGNATURE----- --+sHJum3is6Tsg7/J-- From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 17:02:24 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F0D84106564A; Tue, 11 Jan 2011 17:02:24 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DFEBE8FC16; Tue, 11 Jan 2011 17:02:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BH2OLg026868; Tue, 11 Jan 2011 17:02:24 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BH2Ogd026864; Tue, 11 Jan 2011 17:02:24 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101111702.p0BH2Ogd026864@svn.freebsd.org> From: Alexander Motin Date: Tue, 11 Jan 2011 17:02:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217267 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 17:02:25 -0000 Author: mav Date: Tue Jan 11 17:02:24 2011 New Revision: 217267 URL: http://svn.freebsd.org/changeset/base/217267 Log: Implement method writing metadata from existing volumes/subdisks/disks. Refactor array creation upside-down -- instead of writing metadata and processing it, create all stuff and then run metadata writing from it. This way seems more perspective, as we any way definitely need writing. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid_md_if.m projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Tue Jan 11 14:33:10 2011 (r217266) +++ projects/graid/head/sys/geom/raid/g_raid.c Tue Jan 11 17:02:24 2011 (r217267) @@ -51,7 +51,7 @@ static MALLOC_DEFINE(M_RAID, "raid_data" SYSCTL_DECL(_kern_geom); SYSCTL_NODE(_kern_geom, OID_AUTO, raid, CTLFLAG_RW, 0, "GEOM_RAID stuff"); -u_int g_raid_debug = 1000; +u_int g_raid_debug = 3; TUNABLE_INT("kern.geom.raid.debug", &g_raid_debug); SYSCTL_UINT(_kern_geom_raid, OID_AUTO, debug, CTLFLAG_RW, &g_raid_debug, 0, "Debug level"); Modified: projects/graid/head/sys/geom/raid/g_raid_md_if.m ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_md_if.m Tue Jan 11 14:33:10 2011 (r217266) +++ projects/graid/head/sys/geom/raid/g_raid_md_if.m Tue Jan 11 17:02:24 2011 (r217267) @@ -95,7 +95,6 @@ METHOD int event { # write() - metadata write method. METHOD int write { struct g_raid_md_object *md; - struct g_raid_disk *disk; }; # free_disk() - disk destructor. Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Tue Jan 11 14:33:10 2011 (r217266) +++ projects/graid/head/sys/geom/raid/md_intel.c Tue Jan 11 17:02:24 2011 (r217267) @@ -119,17 +119,32 @@ struct intel_raid_conf { #define INTEL_MAGIC "Intel Raid ISM Cfg Sig. " uint8_t version[6]; -#define INTEL_VERSION_1100 "1.1.00" -#define INTEL_VERSION_1200 "1.2.00" -#define INTEL_VERSION_1201 "1.2.01" -#define INTEL_VERSION_1202 "1.2.02" +#define INTEL_VERSION_1000 "1.0.00" /* RAID0 */ +#define INTEL_VERSION_1100 "1.1.00" /* RAID1 */ +#define INTEL_VERSION_1200 "1.2.00" /* Many volumes */ +#define INTEL_VERSION_1201 "1.2.01" /* 3 or 4 disks */ +#define INTEL_VERSION_1202 "1.2.02" /* RAID5 */ +#define INTEL_VERSION_1204 "1.2.04" /* 5 or 6 disks */ +#define INTEL_VERSION_1206 "1.2.06" /* CNG */ +#define INTEL_VERSION_1300 "1.3.00" /* Attributes */ uint8_t dummy_0[2]; uint32_t checksum; uint32_t config_size; uint32_t config_id; uint32_t generation; - uint32_t dummy_1[2]; + uint32_t error_log_size; + uint32_t attributes; +#define INTEL_ATTR_RAID0 0x00000001 +#define INTEL_ATTR_RAID1 0x00000002 +#define INTEL_ATTR_RAID10 0x00000004 +#define INTEL_ATTR_RAID1E 0x00000008 +#define INTEL_ATTR_RAID5 0x00000010 +#define INTEL_ATTR_RAIDCNG 0x00000020 +#define INTEL_ATTR_2TB 0x20000000 +#define INTEL_ATTR_PM 0x40000000 +#define INTEL_ATTR_CHECKSUM 0x80000000 + uint8_t total_disks; uint8_t total_volumes; uint8_t dummy_2[2]; @@ -148,11 +163,13 @@ struct intel_raid_conf { struct g_raid_md_intel_perdisk { struct intel_raid_conf *pd_meta; int pd_disk_pos; + struct intel_raid_disk pd_disk_meta; }; struct g_raid_md_intel_object { struct g_raid_md_object mdio_base; uint32_t mdio_config_id; + uint32_t mdio_generation; struct intel_raid_conf *mdio_meta; struct callout mdio_start_co; /* STARTING state timer. */ int mdio_disks_present; @@ -233,6 +250,7 @@ g_raid_md_intel_print(struct intel_raid_ printf("config_size 0x%08x\n", meta->config_size); printf("config_id 0x%08x\n", meta->config_id); printf("generation 0x%08x\n", meta->generation); + printf("attributes 0x%08x\n", meta->attributes); printf("total_disks %u\n", meta->total_disks); printf("total_volumes %u\n", meta->total_volumes); printf("DISK# serial disk_sectors disk_id flags\n"); @@ -740,6 +758,7 @@ g_raid_md_taste_intel(struct g_raid_md_o pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_meta = meta; pd->pd_disk_pos = disk_pos; + pd->pd_disk_meta = meta->disk[disk_pos]; disk = g_raid_create_disk(sc); disk->d_md_data = (void *)pd; disk->d_consumer = rcp; @@ -782,14 +801,13 @@ g_raid_md_ctl_intel(struct g_raid_md_obj struct gctl_req *req) { struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; struct g_raid_disk *disk; struct g_raid_md_intel_object *mdi; struct g_raid_md_intel_perdisk *pd; struct g_consumer *cp; struct g_provider *pp; - struct intel_raid_conf *meta; - struct intel_raid_vol *mvol; - struct intel_raid_map *mmap; char arg[16]; const char *verb, *volname, *levelname, *diskname; int *nargs; @@ -830,16 +848,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj return (-5); } numdisks = *nargs - 3; - meta = mdi->mdio_meta = malloc(INTEL_MAX_MD_SIZE(numdisks), - M_MD_INTEL, M_WAITOK | M_ZERO); - memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC)); - memcpy(&meta->version[0], INTEL_VERSION_1200, - sizeof(INTEL_VERSION_1200)); - meta->config_size = INTEL_MAX_MD_SIZE(numdisks); - meta->config_id = mdi->mdio_config_id; - meta->generation = 1; - meta->total_disks = numdisks; - meta->total_volumes = 1; + mdi->mdio_generation = 1; error = 0; size = 0xffffffffffffffffllu; sectorsize = 0; @@ -891,7 +900,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_topology_unlock(); error = g_raid_md_get_label(cp, - &meta->disk[i].serial[0], INTEL_SERIAL_LEN); + &pd->pd_disk_meta.serial[0], INTEL_SERIAL_LEN); if (error != 0) { gctl_error(req, "Can't get serial for provider '%s'.", @@ -899,31 +908,31 @@ g_raid_md_ctl_intel(struct g_raid_md_obj error = -8; break; } - meta->disk[i].sectors = pp->mediasize / pp->sectorsize; - if (size > meta->disk[i].sectors) - size = meta->disk[i].sectors; + pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + if (size > pp->mediasize) + size = pp->mediasize; if (sectorsize < pp->sectorsize) sectorsize = pp->sectorsize; - meta->disk[i].id = 0xffffffff; - meta->disk[i].flags = INTEL_F_ASSIGNED | INTEL_F_ONLINE; + pd->pd_disk_meta.id = 0xffffffff; + pd->pd_disk_meta.flags = INTEL_F_ASSIGNED | INTEL_F_ONLINE; } if (error != 0) return (error); /* Reserve some space for metadata. */ - size -= (4096 + sectorsize - 1) / sectorsize + 1; + size -= ((4096 + sectorsize - 1) / sectorsize) * sectorsize; len = sizeof(*sizearg); sizearg = gctl_get_param(req, "size", &len); if (sizearg != NULL && len == sizeof(*sizearg)) { - if (*sizearg / sectorsize > size) { + if (*sizearg > size) { gctl_error(req, "Size too big."); return (-9); } - size = *sizearg / sectorsize; + size = *sizearg; } - strip = 256; + strip = 131072; len = sizeof(*striparg); striparg = gctl_get_param(req, "strip", &len); if (striparg != NULL && len == sizeof(*striparg)) { @@ -935,63 +944,188 @@ g_raid_md_ctl_intel(struct g_raid_md_obj gctl_error(req, "Incorrect strip size."); return (-11); } - strip = *striparg / sectorsize; - if (strip >= 65536) { + if (strip > 65535 * sectorsize) { gctl_error(req, "Strip size too big."); return (-12); } + strip = *striparg; } size -= (size % strip); - mvol = intel_get_volume(meta, 0); - strlcpy(&mvol->name[0], volname, sizeof(mvol->name)); + vol = g_raid_create_volume(sc, volname); + vol->v_md_data = (void *)(intptr_t)0; + vol->v_raid_level = level; + vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; + vol->v_strip_size = strip; + vol->v_disks_count = numdisks; if (level == G_RAID_VOLUME_RL_RAID0) - mvol->total_sectors = size * numdisks; + vol->v_mediasize = size * numdisks; else if (level == G_RAID_VOLUME_RL_RAID5) - mvol->total_sectors = size * (numdisks - 1); + vol->v_mediasize = size * (numdisks - 1); else - mvol->total_sectors = size * (numdisks / 2); + vol->v_mediasize = size * (numdisks / 2); + vol->v_sectorsize = sectorsize; + g_raid_start_volume(vol); + + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + sd = &vol->v_subdisks[pd->pd_disk_pos]; + sd->sd_disk = disk; + sd->sd_offset = 0; + sd->sd_size = size; + LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); + g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, + G_RAID_EVENT_SUBDISK); + } + g_raid_md_write_intel(md); + return (0); + } + return (-100); +} + +static int +g_raid_md_write_intel(struct g_raid_md_object *md) +{ + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct g_raid_disk *disk; + struct g_raid_md_intel_object *mdi; + struct g_raid_md_intel_perdisk *pd; + struct intel_raid_conf *meta; + struct intel_raid_vol *mvol; + struct intel_raid_map *mmap; + off_t sectorsize = 512; + const char *version, *cv; + int i, vi, sdi, numdisks; + + sc = md->mdo_softc; + mdi = (struct g_raid_md_intel_object *)md; + + /* Count number of disks. */ + numdisks = 0; + i = 0; + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + if (pd->pd_disk_meta.flags & INTEL_F_ASSIGNED) { + numdisks++; + pd->pd_disk_pos = i++; + } + } + + /* Fill anchor and disks. */ + meta = malloc(INTEL_MAX_MD_SIZE(numdisks), + M_MD_INTEL, M_WAITOK | M_ZERO); + memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC)); + memcpy(&meta->version[0], INTEL_VERSION_1200, + sizeof(INTEL_VERSION_1200)); + meta->config_size = INTEL_MAX_MD_SIZE(numdisks); + meta->config_id = mdi->mdio_config_id; + meta->generation = mdi->mdio_generation; + meta->attributes = INTEL_ATTR_CHECKSUM; + meta->total_disks = numdisks; + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + if ((pd->pd_disk_meta.flags & INTEL_F_ASSIGNED) == 0) + continue; + meta->disk[pd->pd_disk_pos] = pd->pd_disk_meta; + } + + /* Fill volumes and maps. */ + vi = 0; + version = INTEL_VERSION_1000; + LIST_FOREACH(vol, &sc->sc_volumes, v_next) { + mvol = intel_get_volume(meta, vi); mmap = intel_get_map(mvol, 0); - mmap->offset = 0; - mmap->disk_sectors = size; - mmap->stripe_count = size / strip; - mmap->stripe_sectors = strip; + + for (sdi = 0; sdi < vol->v_disks_count; sdi++) { + sd = &vol->v_subdisks[sdi]; + if (sd->sd_disk != NULL) + break; + } + if (sdi >= vol->v_disks_count) + panic("No any filled subdisk in volume"); + if (vol->v_mediasize >= 0x20000000000llu) + meta->attributes |= INTEL_ATTR_2TB; + if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) + meta->attributes |= INTEL_ATTR_RAID0; + else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) + meta->attributes |= INTEL_ATTR_RAID1; + else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID5) + meta->attributes |= INTEL_ATTR_RAID5; + else + meta->attributes |= INTEL_ATTR_RAID10; + + if (meta->attributes & INTEL_ATTR_2TB) + cv = INTEL_VERSION_1300; +// else if (dev->status == DEV_CLONE_N_GO) +// cv = INTEL_VERSION_1206; + else if (vol->v_disks_count > 4) + cv = INTEL_VERSION_1204; + else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID5) + cv = INTEL_VERSION_1202; + else if (vol->v_disks_count > 2) + cv = INTEL_VERSION_1201; + else if (vi > 0) + cv = INTEL_VERSION_1200; + else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) + cv = INTEL_VERSION_1100; + else + cv = INTEL_VERSION_1000; + if (strcmp(cv, version) > 0) + version = cv; + + strlcpy(&mvol->name[0], vol->v_name, sizeof(mvol->name)); + mvol->total_sectors = vol->v_mediasize / sectorsize; + mmap->offset = sd->sd_offset / sectorsize; + mmap->disk_sectors = sd->sd_size / sectorsize; + mmap->stripe_count = sd->sd_size / vol->v_strip_size; + mmap->stripe_sectors = vol->v_strip_size / sectorsize; mmap->status = INTEL_S_READY; - if (level == G_RAID_VOLUME_RL_RAID0) + if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) mmap->type = INTEL_T_RAID0; - else if (level == G_RAID_VOLUME_RL_RAID1 || - level == G_RAID_VOLUME_RL_RAID10) + else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 || + vol->v_raid_level == G_RAID_VOLUME_RL_RAID10) mmap->type = INTEL_T_RAID1; else mmap->type = INTEL_T_RAID5; - mmap->total_disks = numdisks; - if (level == G_RAID_VOLUME_RL_RAID10) - mmap->total_domains = numdisks / 2; - else if (level == G_RAID_VOLUME_RL_RAID1) - mmap->total_domains = numdisks; + mmap->total_disks = vol->v_disks_count; + if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID10) + mmap->total_domains = vol->v_disks_count / 2; + else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) + mmap->total_domains = vol->v_disks_count; else mmap->total_domains = 1; mmap->failed_disk_num = ~0; mmap->ddf = 1; - for (i = 0; i < numdisks; i++) - mmap->disk_idx[i] = i; - g_raid_md_intel_print(meta); - LIST_FOREACH(disk, &sc->sc_disks, d_next) { - pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; - pd->pd_meta = intel_meta_copy(meta); - intel_meta_write(disk->d_consumer, meta); + for (sdi = 0; sdi < vol->v_disks_count; sdi++) { + sd = &vol->v_subdisks[sdi]; + pd = (struct g_raid_md_intel_perdisk *) + sd->sd_disk->d_md_data; + mmap->disk_idx[sdi] = pd->pd_disk_pos; } - g_raid_md_intel_start(sc); - return (0); + vi++; } - return (-100); -} - -static int -g_raid_md_write_intel(struct g_raid_md_object *md, - struct g_raid_disk *disk) -{ + meta->total_volumes = vi; + if (strcmp(version, INTEL_VERSION_1300) != 0) + meta->attributes &= INTEL_ATTR_CHECKSUM; + memcpy(&meta->version[0], version, sizeof(INTEL_VERSION_1000)); + /* We are done. Print meta data and store them to disks. */ + g_raid_md_intel_print(meta); + if (mdi->mdio_meta != NULL) + free(mdi->mdio_meta, M_MD_INTEL); + mdi->mdio_meta = meta; + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + if (pd->pd_meta != NULL) { + free(pd->pd_meta, M_MD_INTEL); + pd->pd_meta = NULL; + } + pd->pd_meta = intel_meta_copy(meta); + intel_meta_write(disk->d_consumer, meta); + } return (0); } From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 20:52:35 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id F33CE1065670; Tue, 11 Jan 2011 20:52:34 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E17CD8FC13; Tue, 11 Jan 2011 20:52:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BKqYZO035226; Tue, 11 Jan 2011 20:52:34 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BKqYig035221; Tue, 11 Jan 2011 20:52:34 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101112052.p0BKqYig035221@svn.freebsd.org> From: Warner Losh Date: Tue, 11 Jan 2011 20:52:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217284 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 20:52:35 -0000 Author: imp Date: Tue Jan 11 20:52:34 2011 New Revision: 217284 URL: http://svn.freebsd.org/changeset/base/217284 Log: Implement range locking. When a range of a volume is locked, any writes to that range will be deferred. Range locking either succeeds right away, or is deferred until all the in-flight writes complete. Once a range is locked, write requests are queued. These requests are resumed when the range is unlocked. This is intended to be used while rebuilding a drive, or when doing bad-sector recovery via writing disk sectors that fail to read properly. Writes to areas of the volume that aren't locked are unaffected. Users of this facility should ensure that they lock small ranges for short periods to keep too many requests from queueing up (possiblely forcing a resource shortage that may prevent the range from being unlocked). I'm not sure how to trigger this problem, nor what remediation is necessary to prevent/reduce this problem. All the hooks are in place. Nothing that I'm checking in uses this facility yet, but in testing so far it doesn't affect anything by it being there unused. Also, create a callback for the RAID1 transform so I can start using it for bad sector recovery and then rebuilds. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/g_raid_tr_if.m projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Tue Jan 11 20:08:34 2011 (r217283) +++ projects/graid/head/sys/geom/raid/g_raid.c Tue Jan 11 20:52:34 2011 (r217284) @@ -103,7 +103,6 @@ struct g_class g_raid_class = { .fini = g_raid_fini }; - static void g_raid_destroy_provider(struct g_raid_volume *vol); static int g_raid_update_disk(struct g_raid_disk *disk, u_int state); static int g_raid_update_subdisk(struct g_raid_subdisk *subdisk, u_int state); @@ -737,6 +736,46 @@ g_raid_start(struct bio *bp) wakeup(sc); } +static int +g_raid_bio_overlaps(const struct bio *bp, off_t off, off_t len) +{ + /* + * 5 cases: + * (1) bp entirely below NO + * (2) bp entirely above NO + * (3) bp start below, but end in range YES + * (4) bp entirely within YES + * (5) bp starts within, ends above YES + * + * lock range 10-19 (offset 10 length 10) + * (1) 1-5: first if kicks it out + * (2) 30-35: second if kicks it out + * (3) 5-15: passes both ifs + * (4) 12-14: passes both ifs + * (5) 19-20: passes both + */ + + if (bp->bio_offset + bp->bio_length - 1 < off) + return (0); + if (bp->bio_offset < off + len - 1) + return (0); + return (1); +} + +static int +g_raid_is_in_locked_range(struct g_raid_volume *vol, const struct bio *bp) +{ + struct g_raid_lock *lp; + + sx_assert(&vol->v_softc->sc_lock, SX_LOCKED); + + LIST_FOREACH(lp, &vol->v_locks, l_next) { + if (g_raid_bio_overlaps(bp, lp->l_offset, lp->l_length)) + return (1); + } + return (0); +} + static void g_raid_start_request(struct bio *bp) { @@ -744,6 +783,7 @@ g_raid_start_request(struct bio *bp) struct g_raid_volume *vol; sc = bp->bio_to->geom->softc; + sx_assert(&sc->sc_lock, SX_LOCKED); vol = bp->bio_to->private; if (bp->bio_cmd == BIO_WRITE || bp->bio_cmd == BIO_DELETE) { if (vol->v_idle) @@ -752,6 +792,16 @@ g_raid_start_request(struct bio *bp) vol->v_last_write = time_uptime; } /* + * Check to see if this item is in a locked range. If so, + * queue it to our locked queue and return. We'll requeue + * it when the range is unlocked. + */ + if (g_raid_is_in_locked_range(vol, bp)) { + bioq_insert_tail(&vol->v_locked, bp); + return; + } + + /* * Put request onto inflight queue, so we can check if new * synchronization requests don't collide with it. */ @@ -764,14 +814,100 @@ g_raid_iodone(struct bio *bp, int error) { struct g_raid_softc *sc; struct g_raid_volume *vol; + struct g_raid_lock *lp; sc = bp->bio_to->geom->softc; + sx_assert(&sc->sc_lock, SX_LOCKED); + vol = bp->bio_to->private; G_RAID_LOGREQ(3, bp, "Request done: %d.", error); bioq_remove(&vol->v_inflight, bp); + if (bp->bio_cmd == BIO_WRITE && vol->v_pending_lock && + g_raid_is_in_locked_range(vol, bp)) { + /* + * XXX this structure forces serialization of all + * XXX pending requests before any are allowed through. + */ + G_RAID_LOGREQ(3, bp, + "Write to locking zone complete: %d writes outstanding", + vol->v_pending_lock); + if (--vol->v_pending_lock == 0) { + G_RAID_LOGREQ(3, bp, + "Last write done, calling pending callbacks."); + LIST_FOREACH(lp, &vol->v_locks,l_next) { + if (lp->l_flags & G_RAID_LOCK_PENDING) { + G_RAID_TR_LOCKED(vol->v_tr, + lp->l_callback_arg); + lp->l_flags &= ~G_RAID_LOCK_PENDING; + } + } + } + } g_io_deliver(bp, error); } +int +g_raid_lock_range(struct g_raid_volume *vol, off_t off, off_t len, void *argp) +{ + struct g_raid_softc *sc; + struct g_raid_lock *lp; + struct bio *bp; + int pending; + + sc = vol->v_softc; + lp = malloc(sizeof(*lp), M_RAID, M_WAITOK | M_ZERO); + LIST_INSERT_HEAD(&vol->v_locks, lp, l_next); + lp->l_flags |= G_RAID_LOCK_PENDING; + lp->l_offset = off; + lp->l_length = len; + lp->l_callback_arg = argp; + + /* XXX lock in-flight queue? -- not done elsewhere, but should it be? */ + pending = 0; + TAILQ_FOREACH(bp, &vol->v_inflight.queue, bio_queue) { + if (g_raid_bio_overlaps(bp, off, len)) + pending++; + } + /* + * If there are any writes that are pending, we return EBUSY. All + * callers will have to wait until all pending writes clear. + */ + if (pending > 0) { + vol->v_pending_lock += pending; + return (EBUSY); + } + lp->l_flags &= ~G_RAID_LOCK_PENDING; + return (0); +} + +int +g_raid_unlock_range(struct g_raid_volume *vol, off_t off, off_t len) +{ + struct g_raid_lock *lp, *tmp; + struct g_raid_softc *sc; + struct bio *bp; + + sc = vol->v_softc; + LIST_FOREACH_SAFE(lp, &vol->v_locks, l_next, tmp) { + if (lp->l_offset == off && lp->l_length == len) { + LIST_REMOVE(lp, l_next); + /* XXX + * Right now we just put them all back on the queue + * and hope for the best. We hope this because any + * locked ranges will go right back on this list + * when the worker thread runs. + */ + mtx_lock(&sc->sc_queue_mtx); + while ((bp = bioq_takefirst(&sc->sc_queue)) != NULL) + bioq_disksort(&sc->sc_queue, bp); + mtx_unlock(&sc->sc_queue_mtx); + free(lp, M_RAID); + return (0); + } + } + return (EINVAL); +} + void g_raid_subdisk_iostart(struct g_raid_subdisk *sd, struct bio *bp) { Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Tue Jan 11 20:08:34 2011 (r217283) +++ projects/graid/head/sys/geom/raid/g_raid.h Tue Jan 11 20:52:34 2011 (r217284) @@ -86,6 +86,15 @@ extern u_int g_raid_start_timeout; #define G_RAID_BIO_FLAG_REGULAR 0x01 #define G_RAID_BIO_FLAG_SYNC 0x02 +#define G_RAID_LOCK_PENDING 0x1 +struct g_raid_lock { + off_t l_offset; + off_t l_length; + void *l_callback_arg; + int l_flags; + LIST_ENTRY(g_raid_lock) l_next; +}; + #define G_RAID_EVENT_WAIT 0x01 #define G_RAID_EVENT_VOLUME 0x02 #define G_RAID_EVENT_SUBDISK 0x04 @@ -196,7 +205,8 @@ struct g_raid_volume { off_t v_mediasize; /* Volume media size. */ struct bio_queue_head v_inflight; /* In-flight write requests. */ struct bio_queue_head v_locked; /* Blocked I/O requests. */ - LIST_HEAD(, g_raid_lock) v_locks; /* List of locked regions. */ + LIST_HEAD(, g_raid_lock) v_locks; /* List of locked regions. */ + int v_pending_lock; /* writes to locked region */ int v_idle; /* DIRTY flags removed. */ time_t v_last_write; /* Time of the last write. */ u_int v_writes; /* Number of active writes. */ @@ -311,6 +321,8 @@ u_int g_raid_nsubdisks(struct g_raid_vol #define G_RAID_DESTROY_HARD 2 int g_raid_destroy(struct g_raid_softc *sc, int how); int g_raid_event_send(void *arg, int event, int flags); +int g_raid_lock_range(struct g_raid_volume *vol, off_t off, off_t len, void *argp); +int g_raid_unlock_range(struct g_raid_volume *vol, off_t off, off_t len); g_ctl_req_t g_raid_ctl; #endif /* _KERNEL */ Modified: projects/graid/head/sys/geom/raid/g_raid_tr_if.m ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_tr_if.m Tue Jan 11 20:08:34 2011 (r217283) +++ projects/graid/head/sys/geom/raid/g_raid_tr_if.m Tue Jan 11 20:52:34 2011 (r217284) @@ -43,7 +43,7 @@ INTERFACE g_raid_tr; # Default implementations of methods. CODE { static int - g_raid_tr_locked_default(struct g_raid_tr_object *tr) + g_raid_tr_locked_default(struct g_raid_tr_object *tr, void *argp) { return (0); @@ -94,6 +94,7 @@ METHOD void iodone { # locked() - callback method for lock(). METHOD int locked { struct g_raid_tr_object *tr; + void *argp; } DEFAULT g_raid_tr_locked_default; # free() - destructor. Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Tue Jan 11 20:08:34 2011 (r217283) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Tue Jan 11 20:52:34 2011 (r217284) @@ -54,6 +54,7 @@ static g_raid_tr_start_t g_raid_tr_start static g_raid_tr_stop_t g_raid_tr_stop_raid1; static g_raid_tr_iostart_t g_raid_tr_iostart_raid1; static g_raid_tr_iodone_t g_raid_tr_iodone_raid1; +static g_raid_tr_locked_t g_raid_tr_locked_raid1; static g_raid_tr_free_t g_raid_tr_free_raid1; static kobj_method_t g_raid_tr_raid1_methods[] = { @@ -63,6 +64,7 @@ static kobj_method_t g_raid_tr_raid1_met KOBJMETHOD(g_raid_tr_stop, g_raid_tr_stop_raid1), KOBJMETHOD(g_raid_tr_iostart, g_raid_tr_iostart_raid1), KOBJMETHOD(g_raid_tr_iodone, g_raid_tr_iodone_raid1), + KOBJMETHOD(g_raid_tr_locked, g_raid_tr_locked_raid1), KOBJMETHOD(g_raid_tr_free, g_raid_tr_free_raid1), { 0, 0 } }; @@ -347,6 +349,12 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ } static int +g_raid_tr_locked_raid1(struct g_raid_tr_object *tr, void *argp) +{ + return (0); +} + +static int g_raid_tr_free_raid1(struct g_raid_tr_object *tr) { struct g_raid_tr_raid1_object *trs; From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 21:05:22 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 3A43F106564A; Tue, 11 Jan 2011 21:05:22 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 29B0D8FC1B; Tue, 11 Jan 2011 21:05:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BL5MaI035707; Tue, 11 Jan 2011 21:05:22 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BL5MQm035705; Tue, 11 Jan 2011 21:05:22 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101112105.p0BL5MQm035705@svn.freebsd.org> From: Warner Losh Date: Tue, 11 Jan 2011 21:05:22 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217285 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 21:05:22 -0000 Author: imp Date: Tue Jan 11 21:05:21 2011 New Revision: 217285 URL: http://svn.freebsd.org/changeset/base/217285 Log: Minor whitespace nit. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Tue Jan 11 20:52:34 2011 (r217284) +++ projects/graid/head/sys/geom/raid/md_intel.c Tue Jan 11 21:05:21 2011 (r217285) @@ -629,7 +629,6 @@ g_raid_md_create_intel(struct g_raid_md_ * and up 251 characters for SAS drives. Since intel controllers don't * support SAS drives, just stick with the SATA limits for stack friendliness. */ - static int g_raid_md_get_label(struct g_consumer *cp, char *serial, int serlen) { From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 21:43:35 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5E310106566B; Tue, 11 Jan 2011 21:43:35 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4D54A8FC0C; Tue, 11 Jan 2011 21:43:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BLhZWp036739; Tue, 11 Jan 2011 21:43:35 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BLhZEY036737; Tue, 11 Jan 2011 21:43:35 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101112143.p0BLhZEY036737@svn.freebsd.org> From: Warner Losh Date: Tue, 11 Jan 2011 21:43:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217287 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 21:43:35 -0000 Author: imp Date: Tue Jan 11 21:43:35 2011 New Revision: 217287 URL: http://svn.freebsd.org/changeset/base/217287 Log: Fix a few problems with read error recovery: o We need to check the bp we're given in *done() not pbp since that's where the error is. o Just check bio_error and forget the BIO_ERROR flag. o bump the inbed count a little later in the processing. o Start to do write-remapping, but only detect when we need to, rather than actually doing anything (yet). o minor style cleanup o improve mirror breaking/degrading notes and add one. With these changes I can survive at a 10% error rate both raw operations, as well as file system operations... Modified: projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Tue Jan 11 21:18:29 2011 (r217286) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Tue Jan 11 21:43:35 2011 (r217287) @@ -291,21 +291,18 @@ static void g_raid_tr_iodone_raid1(struct g_raid_tr_object *tr, struct g_raid_subdisk *sd, struct bio *bp) { + struct bio *cbp; + struct g_raid_subdisk *nsd; + struct g_raid_volume *vol; struct bio *pbp; + int i; pbp = bp->bio_parent; - pbp->bio_inbed++; - if ((pbp->bio_flags & BIO_ERROR) && pbp->bio_cmd == BIO_READ && + if (bp->bio_error != 0 && bp->bio_cmd == BIO_READ && pbp->bio_children == 1) { - struct bio *cbp; - struct g_raid_subdisk *nsd; - struct g_raid_volume *vol; - int i; - /* - * Retry the error on the other disk drive, if available, - * before erroring out the read. Do we need to mark the - * 'sd' disk as degraded somehow? + * Retry the read error on the other disk drive, if + * available, before erroring out the read. */ vol = tr->tro_volume; sd->sd_read_errs++; @@ -323,25 +320,31 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ if (cbp == NULL) break; g_raid_subdisk_iostart(nsd, cbp); + pbp->bio_inbed++; return; } /* * something happened, so we can't retry. Return the * original error by falling through. + * + * XXX degrade/break the mirror? + */ + } + pbp->bio_inbed++; + if (pbp->bio_cmd == BIO_READ && pbp->bio_children == 2) { + /* + * If it was a read, and bio_children is 2, then we just + * recovered the data from the second drive. We should try to + * write that data to the first drive if sector remapping is + * enabled. A write should put the data in a new place on the + * disk, remapping the bad sector. Do we need to do that by + * queueing a request to the main worker thread? It doesn't + * affect the return code of this current read, and can be + * done at our liesure. + * + * XXX TODO */ } - /* - * If it was a read, and bio_children is 2, then we just - * recovered the data from the second drive. We should try to - * write that data to the first drive if sector remapping is - * enabled. A write should put the data in a new place on the - * disk, remapping the bad sector. Do we need to do that by - * queueing a request to the main worker thread? It doesn't - * affect the return code of this current read, and can be - * done at our liesure. - * - * XXX TODO - */ if (pbp->bio_children == pbp->bio_inbed) { pbp->bio_completed = pbp->bio_length; g_raid_iodone(pbp, bp->bio_error); From owner-svn-src-projects@FreeBSD.ORG Tue Jan 11 22:40:18 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8F2DF106566B; Tue, 11 Jan 2011 22:40:18 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7E8008FC15; Tue, 11 Jan 2011 22:40:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0BMeIVN040437; Tue, 11 Jan 2011 22:40:18 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0BMeIve040435; Tue, 11 Jan 2011 22:40:18 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101112240.p0BMeIve040435@svn.freebsd.org> From: Warner Losh Date: Tue, 11 Jan 2011 22:40:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217293 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 11 Jan 2011 22:40:18 -0000 Author: imp Date: Tue Jan 11 22:40:18 2011 New Revision: 217293 URL: http://svn.freebsd.org/changeset/base/217293 Log: Go ahead and log read recovery operations now that I grok the G_RAID_LOGREQ macro. Modified: projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Tue Jan 11 22:15:30 2011 (r217292) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Tue Jan 11 22:40:18 2011 (r217293) @@ -300,12 +300,17 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ pbp = bp->bio_parent; if (bp->bio_error != 0 && bp->bio_cmd == BIO_READ && pbp->bio_children == 1) { + /* * Retry the read error on the other disk drive, if * available, before erroring out the read. */ vol = tr->tro_volume; sd->sd_read_errs++; + G_RAID_LOGREQ(3, bp, + "Read failure, attempting recovery. %d total read errs", + sd->sd_read_errs); + /* * XXX Check threshold of sd_read_errs here to declare * this subdisk bad? @@ -319,6 +324,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ cbp = g_clone_bio(pbp); if (cbp == NULL) break; + G_RAID_LOGREQ(3, cbp, "Retrying read"); g_raid_subdisk_iostart(nsd, cbp); pbp->bio_inbed++; return; @@ -329,6 +335,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ * * XXX degrade/break the mirror? */ + G_RAID_LOGREQ(3, bp, "Couldn't retry read, failing it"); } pbp->bio_inbed++; if (pbp->bio_cmd == BIO_READ && pbp->bio_children == 2) { @@ -344,6 +351,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ * * XXX TODO */ + G_RAID_LOGREQ(3, bp, "Recovered data from other drive"); } if (pbp->bio_children == pbp->bio_inbed) { pbp->bio_completed = pbp->bio_length; From owner-svn-src-projects@FreeBSD.ORG Wed Jan 12 08:05:55 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 83F4B106564A; Wed, 12 Jan 2011 08:05:55 +0000 (UTC) (envelope-from pawel@dawidek.net) Received: from mail.garage.freebsd.pl (60.wheelsystems.com [83.12.187.60]) by mx1.freebsd.org (Postfix) with ESMTP id B60748FC08; Wed, 12 Jan 2011 08:05:54 +0000 (UTC) Received: by mail.garage.freebsd.pl (Postfix, from userid 65534) id 79D4145C89; Wed, 12 Jan 2011 09:05:53 +0100 (CET) Received: from localhost (89-73-192-49.dynamic.chello.pl [89.73.192.49]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mail.garage.freebsd.pl (Postfix) with ESMTP id 623E945683; Wed, 12 Jan 2011 09:05:47 +0100 (CET) Date: Wed, 12 Jan 2011 09:05:38 +0100 From: Pawel Jakub Dawidek To: Warner Losh Message-ID: <20110112080538.GI1812@garage.freebsd.pl> References: <201101112052.p0BKqYig035221@svn.freebsd.org> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="JSkcQAAxhB1h8DcT" Content-Disposition: inline In-Reply-To: <201101112052.p0BKqYig035221@svn.freebsd.org> User-Agent: Mutt/1.4.2.3i X-PGP-Key-URL: http://people.freebsd.org/~pjd/pjd.asc X-OS: FreeBSD 9.0-CURRENT amd64 X-Spam-Checker-Version: SpamAssassin 3.0.4 (2005-06-05) on mail.garage.freebsd.pl X-Spam-Level: X-Spam-Status: No, score=-0.6 required=4.5 tests=BAYES_00,RCVD_IN_SORBS_DUL autolearn=no version=3.0.4 Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r217284 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Jan 2011 08:05:55 -0000 --JSkcQAAxhB1h8DcT Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Tue, Jan 11, 2011 at 08:52:34PM +0000, Warner Losh wrote: > Author: imp > Date: Tue Jan 11 20:52:34 2011 > New Revision: 217284 > URL: http://svn.freebsd.org/changeset/base/217284 >=20 > Log: > Implement range locking. When a range of a volume is locked, any > writes to that range will be deferred. Range locking either succeeds > right away, or is deferred until all the in-flight writes complete. > Once a range is locked, write requests are queued. These requests are > resumed when the range is unlocked. This is intended to be used while > rebuilding a drive, or when doing bad-sector recovery via writing disk > sectors that fail to read properly. Writes to areas of the volume > that aren't locked are unaffected. > =20 > Users of this facility should ensure that they lock small ranges for > short periods to keep too many requests from queueing up (possiblely > forcing a resource shortage that may prevent the range from being > unlocked). I'm not sure how to trigger this problem, nor what > remediation is necessary to prevent/reduce this problem. IIRC UFS with SU can generate big I/O flood under load. > All the hooks are in place. Nothing that I'm checking in uses this > facility yet, but in testing so far it doesn't affect anything by it > being there unused. > =20 > Also, create a callback for the RAID1 transform so I can start using > it for bad sector recovery and then rebuilds. [...] > +static int > +g_raid_bio_overlaps(const struct bio *bp, off_t off, off_t len) > +{ > + /* > + * 5 cases: > + * (1) bp entirely below NO > + * (2) bp entirely above NO > + * (3) bp start below, but end in range YES > + * (4) bp entirely within YES > + * (5) bp starts within, ends above YES > + * > + * lock range 10-19 (offset 10 length 10) > + * (1) 1-5: first if kicks it out > + * (2) 30-35: second if kicks it out > + * (3) 5-15: passes both ifs > + * (4) 12-14: passes both ifs > + * (5) 19-20: passes both > + */ > + > + if (bp->bio_offset + bp->bio_length - 1 < off) > + return (0); > + if (bp->bio_offset < off + len - 1) > + return (0); > + return (1); > +} I think the second if should be: if (bp->bio_offset > off + len - 1) (greater than, not less than) or to make it more consistent with the first if: if (off + len - 1 < bp->bio_offset) or to simplify it a bit further, but it probably looks less obvious: static int g_raid_bio_overlaps(const struct bio *bp, off_t lstart, off_t lend) { off_t bstart, bend; bstart =3D bp->bio_offset; bend =3D bstart + bp->bio_length; return (bend > lstart && bstart < lend); } if (g_raid_bio_overlaps(bp, lp->l_offset, lp->l_offset + lp->l_length)=20 /* do something */ > +int > +g_raid_unlock_range(struct g_raid_volume *vol, off_t off, off_t len) > +{ > + struct g_raid_lock *lp, *tmp; > + struct g_raid_softc *sc; > + struct bio *bp; > + > + sc =3D vol->v_softc; > + LIST_FOREACH_SAFE(lp, &vol->v_locks, l_next, tmp) { No need to use LIST_FOREACH_SAFE() here, as after LIST_REMOVE() you never continue the loop. > + if (lp->l_offset =3D=3D off && lp->l_length =3D=3D len) { > + LIST_REMOVE(lp, l_next); > + /* XXX > + * Right now we just put them all back on the queue > + * and hope for the best. We hope this because any > + * locked ranges will go right back on this list > + * when the worker thread runs. > + */ > + mtx_lock(&sc->sc_queue_mtx); > + while ((bp =3D bioq_takefirst(&sc->sc_queue)) !=3D NULL) > + bioq_disksort(&sc->sc_queue, bp); Look out for bioq_disksort() as this can mess up your ordering in some cases. File system should never send two overlapping writes and then bioq_disksort() is safe, but in your case imagine sync write or "healing" write to overlap with regular write: regular write: offset=3D2048, length=3D2048 sync write: offset=3D0, length=3D131072 The bioq_disksort() will change the order based on offset. Not sure if it affects you, as when syncing you should lock range before you read and unlock after write is done, but something to keep in mind. > + free(lp, M_RAID); Because you will use range locking all the time (not only during sync, because of "healing" writes that might occur at any time), you may consider using UMA. I'm sure you know that, also that keeping range locks on a list won't scale and you will need probably a faster stucture to impelemnt it in the end. I can just warn you that I implemented range locking on a list as well with intention to optimize it later, but it never happend:) Although in my case range locking happens only during synchronization, as I don't implement "I/O healing". --=20 Pawel Jakub Dawidek http://www.wheelsystems.com pjd@FreeBSD.org http://www.FreeBSD.org FreeBSD committer Am I Evil? Yes, I Am! --JSkcQAAxhB1h8DcT Content-Type: application/pgp-signature Content-Disposition: inline -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.14 (FreeBSD) iEYEARECAAYFAk0tYNIACgkQForvXbEpPzSn8gCdFl9b/Hs0gVc2SkCtXsSOxFb/ b28AnjNaLrCaE2NAZU1lFpctVHO2rxgX =T27k -----END PGP SIGNATURE----- --JSkcQAAxhB1h8DcT-- From owner-svn-src-projects@FreeBSD.ORG Wed Jan 12 08:09:29 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C2BD4106564A; Wed, 12 Jan 2011 08:09:29 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B1F3B8FC0C; Wed, 12 Jan 2011 08:09:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0C89TWP062981; Wed, 12 Jan 2011 08:09:29 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0C89T4R062979; Wed, 12 Jan 2011 08:09:29 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101120809.p0C89T4R062979@svn.freebsd.org> From: Warner Losh Date: Wed, 12 Jan 2011 08:09:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217301 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Jan 2011 08:09:29 -0000 Author: imp Date: Wed Jan 12 08:09:29 2011 New Revision: 217301 URL: http://svn.freebsd.org/changeset/base/217301 Log: Document ugly race mav@ pointed out, fix bug I noticed at the same time in moving blocked bios back to sc_queue. Modified: projects/graid/head/sys/geom/raid/g_raid.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Wed Jan 12 07:38:48 2011 (r217300) +++ projects/graid/head/sys/geom/raid/g_raid.c Wed Jan 12 08:09:29 2011 (r217301) @@ -827,6 +827,16 @@ g_raid_iodone(struct bio *bp, int error) /* * XXX this structure forces serialization of all * XXX pending requests before any are allowed through. + * + * XXX Also, if there is a pending request that overlaps one + * XXX locked area and another locked area comes along that also + * XXX overlaps that area, we wind up double counting it, but + * XXX not double uncounting it, so we hit deadlock. Ouch. + * Most likely, we should add pending counts to struct + * g_raid_lock and recompute v_pending_lock in lock_range() + * and here, which would eliminate the doubel counting. Heck, + * if we wanted to burn the cylces here, we could look at the + * inflight queue and the v_locks and just recompute here. */ G_RAID_LOGREQ(3, bp, "Write to locking zone complete: %d writes outstanding", @@ -896,9 +906,12 @@ g_raid_unlock_range(struct g_raid_volume * and hope for the best. We hope this because any * locked ranges will go right back on this list * when the worker thread runs. + * XXX + * Also, see note above about deadlock and how it + * doth sucketh... */ mtx_lock(&sc->sc_queue_mtx); - while ((bp = bioq_takefirst(&sc->sc_queue)) != NULL) + while ((bp = bioq_takefirst(&vol->v_locked)) != NULL) bioq_disksort(&sc->sc_queue, bp); mtx_unlock(&sc->sc_queue_mtx); free(lp, M_RAID); From owner-svn-src-projects@FreeBSD.ORG Wed Jan 12 16:00:49 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 67C081065672; Wed, 12 Jan 2011 16:00:49 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 55DD78FC0C; Wed, 12 Jan 2011 16:00:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0CG0nEv094240; Wed, 12 Jan 2011 16:00:49 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0CG0nuV094238; Wed, 12 Jan 2011 16:00:49 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101121600.p0CG0nuV094238@svn.freebsd.org> From: Alexander Motin Date: Wed, 12 Jan 2011 16:00:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217311 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 12 Jan 2011 16:00:49 -0000 Author: mav Date: Wed Jan 12 16:00:49 2011 New Revision: 217311 URL: http://svn.freebsd.org/changeset/base/217311 Log: Create all disks and subdisks as described by metadata during array startup even if real disks are absent. Objects created for absent disks are used to store information required to write metadata when array is degraded. Check drive for being stale based on it's status in most fresh metadata version found, not just by comparing generations. Generations can get out of sync during some emergancy shutdown during metadata write, but it doesn't mean that disk should be dropped. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Jan 12 15:05:31 2011 (r217310) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Jan 12 16:00:49 2011 (r217311) @@ -304,6 +304,19 @@ intel_meta_copy(struct intel_raid_conf * return (nmeta); } +static int +intel_meta_find_disk(struct intel_raid_conf *meta, char *serial) +{ + int pos; + + for (pos = 0; pos < meta->total_disks; pos++) { + if (strncmp(meta->disk[pos].serial, + serial, INTEL_SERIAL_LEN) == 0) + return (pos); + } + return (-1); +} + static struct intel_raid_conf * intel_meta_read(struct g_consumer *cp) { @@ -413,19 +426,19 @@ intel_meta_write(struct g_consumer *cp, return (error); } -#if 0 static struct g_raid_disk * g_raid_md_intel_get_disk(struct g_raid_softc *sc, int id) { struct g_raid_disk *disk; + struct g_raid_md_intel_perdisk *pd; LIST_FOREACH(disk, &sc->sc_disks, d_next) { - if ((intptr_t)(disk->d_md_data) == id) + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + if (pd->pd_disk_pos == id) break; } return (disk); } -#endif static struct g_raid_volume * g_raid_md_intel_get_volume(struct g_raid_softc *sc, int id) @@ -443,51 +456,53 @@ static void g_raid_md_intel_start_disk(struct g_raid_disk *disk) { struct g_raid_softc *sc; - struct g_raid_volume *vol; struct g_raid_subdisk *sd; + struct g_raid_disk *olddisk; struct g_raid_md_object *md; struct g_raid_md_intel_object *mdi; - struct g_raid_md_intel_perdisk *pd; - struct intel_raid_conf *meta, *pdmeta; - struct intel_raid_vol *mvol; - struct intel_raid_map *mmap; - int i, j; + struct g_raid_md_intel_perdisk *pd, *oldpd; + struct intel_raid_conf *meta; + int disk_pos; sc = disk->d_softc; md = sc->sc_md; mdi = (struct g_raid_md_intel_object *)md; meta = mdi->mdio_meta; pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; - pdmeta = pd->pd_meta; - if (pdmeta->generation != meta->generation) { + /* Find disk position in metadata by it's serial. */ + disk_pos = intel_meta_find_disk(meta, pd->pd_disk_meta.serial); + if (disk_pos < 0) { + G_RAID_DEBUG(1, "Unknown, probably stale disk"); g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); return; } - /* Update disk state. */ - g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + /* Find placeholder by position. */ + olddisk = g_raid_md_intel_get_disk(sc, disk_pos); + if (olddisk == NULL) + panic("No disk at position %d!", disk_pos); + if (olddisk->d_state != G_RAID_DISK_S_OFFLINE) { + G_RAID_DEBUG(1, "More then one disk for pos %d", disk_pos); + return; + } + oldpd = (struct g_raid_md_intel_perdisk *)olddisk->d_md_data; - /* Create subdisks. */ - for (i = 0; i < meta->total_volumes; i++) { - mvol = intel_get_volume(meta, i); - mmap = intel_get_map(mvol, 0); - for (j = 0; j < mmap->total_disks; j++) { - if ((mmap->disk_idx[j] & INTEL_DI_IDX) == pd->pd_disk_pos) - break; - } - if (j == mmap->total_disks) - continue; - vol = g_raid_md_intel_get_volume(sc, i); - sd = &vol->v_subdisks[j]; - sd->sd_disk = disk; - sd->sd_offset = mmap->offset * 512; //ZZZ - sd->sd_size = mmap->disk_sectors; - LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); + /* Merge real disk and placeholder and destroy one of them. */ + disk->d_consumer->private = olddisk; + olddisk->d_consumer = disk->d_consumer; + disk->d_consumer = NULL; + oldpd->pd_meta = pd->pd_meta; + pd->pd_meta = NULL; + g_raid_destroy_disk(disk); + disk = olddisk; + + /* Welcome the "new" disk. */ + g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } - } static void @@ -495,18 +510,20 @@ g_raid_md_intel_start(struct g_raid_soft { struct g_raid_md_object *md; struct g_raid_md_intel_object *mdi; + struct g_raid_md_intel_perdisk *pd; struct intel_raid_conf *meta; struct intel_raid_vol *mvol; struct intel_raid_map *mmap; struct g_raid_volume *vol; - struct g_raid_disk *disk; - int i; + struct g_raid_subdisk *sd; + struct g_raid_disk *disk, *tmpdisk; + int i, j, disk_pos; md = sc->sc_md; mdi = (struct g_raid_md_intel_object *)md; meta = mdi->mdio_meta; - /* Create volumes */ + /* Create volumes and subdisks. */ for (i = 0; i < meta->total_volumes; i++) { mvol = intel_get_volume(meta, i); mmap = intel_get_map(mvol, 0); @@ -528,10 +545,43 @@ g_raid_md_intel_start(struct g_raid_soft vol->v_disks_count = mmap->total_disks; vol->v_mediasize = mvol->total_sectors * 512; //ZZZ vol->v_sectorsize = 512; //ZZZ + for (j = 0; j < vol->v_disks_count; j++) { + sd = &vol->v_subdisks[j]; + sd->sd_offset = mmap->offset * 512; //ZZZ + sd->sd_size = mmap->disk_sectors; + } g_raid_start_volume(vol); } - LIST_FOREACH(disk, &sc->sc_disks, d_next) - g_raid_md_intel_start_disk(disk); + + /* Create disk placeholders to store data for later writing. */ + for (disk_pos = 0; disk_pos < meta->total_disks; disk_pos++) { + pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); + pd->pd_disk_pos = disk_pos; + pd->pd_disk_meta = meta->disk[disk_pos]; + disk = g_raid_create_disk(sc); + disk->d_md_data = (void *)pd; + g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); + for (i = 0; i < meta->total_volumes; i++) { + mvol = intel_get_volume(meta, i); + mmap = intel_get_map(mvol, 0); + for (j = 0; j < mmap->total_disks; j++) { + if ((mmap->disk_idx[j] & INTEL_DI_IDX) == disk_pos) + break; + } + if (j == mmap->total_disks) + continue; + vol = g_raid_md_intel_get_volume(sc, i); + sd = &vol->v_subdisks[j]; + sd->sd_disk = disk; + LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); + } + } + + /* Make existing disks take their places. */ + LIST_FOREACH_SAFE(disk, &sc->sc_disks, d_next, tmpdisk) { + if (disk->d_state == G_RAID_DISK_S_NONE) + g_raid_md_intel_start_disk(disk); + } mdi->mdio_started = 1; callout_stop(&mdi->mdio_start_co); @@ -546,7 +596,7 @@ g_raid_md_intel_new_disk(struct g_raid_d struct g_raid_softc *sc; struct g_raid_md_object *md; struct g_raid_md_intel_object *mdi; - struct intel_raid_conf *meta, *pdmeta; + struct intel_raid_conf *pdmeta; struct g_raid_md_intel_perdisk *pd; sc = disk->d_softc; @@ -555,30 +605,27 @@ g_raid_md_intel_new_disk(struct g_raid_d pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; pdmeta = pd->pd_meta; - if (mdi->mdio_meta == NULL || - pdmeta->generation > mdi->mdio_meta->generation) { - if (mdi->mdio_started) { - G_RAID_DEBUG(1, "Newer disk, but already started"); - } else { + if (mdi->mdio_started) { + g_raid_md_intel_start_disk(disk); + } else { + /* If we haven't started yet - check metadata freshness. */ + if (mdi->mdio_meta == NULL || + pdmeta->generation > mdi->mdio_generation) { G_RAID_DEBUG(1, "Newer disk"); if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_INTEL); mdi->mdio_meta = intel_meta_copy(pdmeta); + mdi->mdio_generation = mdi->mdio_meta->generation; mdi->mdio_disks_present = 1; + } else if (pdmeta->generation == mdi->mdio_generation) { + mdi->mdio_disks_present++; + G_RAID_DEBUG(1, "Matching disk (%d up)", + mdi->mdio_disks_present); + } else { + G_RAID_DEBUG(1, "Older disk"); } - } else if (pdmeta->generation == mdi->mdio_meta->generation) { - mdi->mdio_disks_present++; - G_RAID_DEBUG(1, "Matching disk (%d up)", - mdi->mdio_disks_present); - } else { - G_RAID_DEBUG(1, "Stale disk"); - } - - meta = mdi->mdio_meta; - if (mdi->mdio_started) { - g_raid_md_intel_start_disk(disk); - } else { - if (mdi->mdio_disks_present == meta->total_disks) + /* If we collected all needed disks - start array. */ + if (mdi->mdio_disks_present == mdi->mdio_meta->total_disks) g_raid_md_intel_start(sc); } } @@ -611,6 +658,7 @@ g_raid_md_create_intel(struct g_raid_md_ mdi = (struct g_raid_md_intel_object *)md; mdi->mdio_config_id = arc4random(); + mdi->mdio_generation = 0; snprintf(name, sizeof(name), "Intel-%08x", mdi->mdio_config_id); sc = g_raid_create_node(mp, name, md); if (sc == NULL) @@ -686,22 +734,16 @@ g_raid_md_taste_intel(struct g_raid_md_o return (G_RAID_MD_TASTE_FAIL); /* Check this disk position in obtained metadata. */ - for (disk_pos = 0; disk_pos < meta->total_disks; disk_pos++) { - if (strncmp(meta->disk[disk_pos].serial, serial, sizeof(serial))) { - G_RAID_DEBUG(1, "Intel serial mismatch '%s' '%s'", - meta->disk[disk_pos].serial, serial); - continue; - } - if (meta->disk[disk_pos].sectors != - (pp->mediasize / pp->sectorsize)) { - G_RAID_DEBUG(1, "Intel size mismatch '%u' '%u'", - meta->disk[disk_pos].sectors, (u_int)(pp->mediasize / pp->sectorsize)); - continue; - } - break; + disk_pos = intel_meta_find_disk(meta, serial); + if (disk_pos < 0) { + G_RAID_DEBUG(1, "Intel serial '%s' not found", serial); + goto fail1; } - if (disk_pos >= meta->total_disks) { - G_RAID_DEBUG(1, "Intel disk params check failed on %s", pp->name); + if (meta->disk[disk_pos].sectors != + (pp->mediasize / pp->sectorsize)) { + G_RAID_DEBUG(1, "Intel size mismatch %u != %u", + meta->disk[disk_pos].sectors, + (u_int)(pp->mediasize / pp->sectorsize)); goto fail1; } @@ -756,7 +798,7 @@ g_raid_md_taste_intel(struct g_raid_md_o pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_meta = meta; - pd->pd_disk_pos = disk_pos; + pd->pd_disk_pos = -1; pd->pd_disk_meta = meta->disk[disk_pos]; disk = g_raid_create_disk(sc); disk->d_md_data = (void *)pd; @@ -782,13 +824,33 @@ g_raid_md_event_intel(struct g_raid_md_o struct g_raid_disk *disk, u_int event) { struct g_raid_softc *sc; + struct g_raid_subdisk *sd; + struct g_raid_md_intel_perdisk *pd; sc = md->mdo_softc; + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; switch (event) { case G_RAID_DISK_E_DISCONNECTED: - g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); - g_raid_destroy_disk(disk); - if (g_raid_ndisks(sc, -1) == 0) + /* If disk was assigned, just update statuses. */ + if (pd->pd_disk_pos >= 0) { + g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); + if (disk->d_consumer) { + g_topology_lock(); + g_raid_kill_consumer(sc, disk->d_consumer); + g_topology_unlock(); + disk->d_consumer = NULL; + } + LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, + G_RAID_EVENT_SUBDISK); + } + } else { + /* Otherwise -- delete. */ + g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); + g_raid_destroy_disk(disk); + } + if (g_raid_ndisks(sc, G_RAID_DISK_S_NONE) == 0 && + g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) == 0) g_raid_destroy_node(sc, 0); break; } @@ -846,8 +908,9 @@ g_raid_md_ctl_intel(struct g_raid_md_obj gctl_error(req, "Unsupported RAID level."); return (-5); } + + /* Search for disks, connect them and probe. */ numdisks = *nargs - 3; - mdi->mdio_generation = 1; error = 0; size = 0xffffffffffffffffllu; sectorsize = 0; @@ -921,6 +984,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj /* Reserve some space for metadata. */ size -= ((4096 + sectorsize - 1) / sectorsize) * sectorsize; + /* Handle size argument. */ len = sizeof(*sizearg); sizearg = gctl_get_param(req, "size", &len); if (sizearg != NULL && len == sizeof(*sizearg)) { @@ -931,6 +995,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj size = *sizearg; } + /* Handle strip argument. */ strip = 131072; len = sizeof(*striparg); striparg = gctl_get_param(req, "strip", &len); @@ -949,8 +1014,10 @@ g_raid_md_ctl_intel(struct g_raid_md_obj } strip = *striparg; } - size -= (size % strip); + + /* We have all we need, create things: volume, ... */ + mdi->mdio_started = 1; vol = g_raid_create_volume(sc, volname); vol->v_md_data = (void *)(intptr_t)0; vol->v_raid_level = level; @@ -966,6 +1033,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj vol->v_sectorsize = sectorsize; g_raid_start_volume(vol); + /* , and subdisks. */ LIST_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; sd = &vol->v_subdisks[pd->pd_disk_pos]; @@ -977,6 +1045,8 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } + + /* Write metadata based on created entities. */ g_raid_md_write_intel(md); return (0); } @@ -1002,12 +1072,15 @@ g_raid_md_write_intel(struct g_raid_md_o sc = md->mdo_softc; mdi = (struct g_raid_md_intel_object *)md; + /* Bump generation, as written metadata may differ from previous. */ + mdi->mdio_generation++; + /* Count number of disks. */ numdisks = 0; i = 0; LIST_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; - if (pd->pd_disk_meta.flags & INTEL_F_ASSIGNED) { + if (pd->pd_disk_pos >= 0) { numdisks++; pd->pd_disk_pos = i++; } @@ -1017,8 +1090,6 @@ g_raid_md_write_intel(struct g_raid_md_o meta = malloc(INTEL_MAX_MD_SIZE(numdisks), M_MD_INTEL, M_WAITOK | M_ZERO); memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC)); - memcpy(&meta->version[0], INTEL_VERSION_1200, - sizeof(INTEL_VERSION_1200)); meta->config_size = INTEL_MAX_MD_SIZE(numdisks); meta->config_id = mdi->mdio_config_id; meta->generation = mdi->mdio_generation; @@ -1038,6 +1109,9 @@ g_raid_md_write_intel(struct g_raid_md_o mvol = intel_get_volume(meta, vi); mmap = intel_get_map(mvol, 0); + /* New metadata may have different volumes order. */ + vol->v_md_data = (void *)(intptr_t)vi; + for (sdi = 0; sdi < vol->v_disks_count; sdi++) { sd = &vol->v_subdisks[sdi]; if (sd->sd_disk != NULL) From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 17:29:05 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B1AC5106566C; Thu, 13 Jan 2011 17:29:05 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9F99A8FC0A; Thu, 13 Jan 2011 17:29:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DHT5iH058014; Thu, 13 Jan 2011 17:29:05 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DHT5n5058009; Thu, 13 Jan 2011 17:29:05 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101131729.p0DHT5n5058009@svn.freebsd.org> From: Alexander Motin Date: Thu, 13 Jan 2011 17:29:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217363 - in projects/graid/head: sbin/geom/class/raid sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 17:29:05 -0000 Author: mav Date: Thu Jan 13 17:29:05 2011 New Revision: 217363 URL: http://svn.freebsd.org/changeset/base/217363 Log: Implement `graid remove` command that drops specified disk from array. Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sbin/geom/class/raid/geom_raid.c ============================================================================== --- projects/graid/head/sbin/geom/class/raid/geom_raid.c Thu Jan 13 17:04:02 2011 (r217362) +++ projects/graid/head/sbin/geom/class/raid/geom_raid.c Thu Jan 13 17:29:05 2011 (r217363) @@ -59,6 +59,12 @@ struct g_command class_commands[] = { }, "[-S size] [-s stripsize] format name level prov ..." }, + { "insert", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, + "[-v] name prov" + }, + { "remove", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, + "[-v] name prov" + }, { "stop", G_FLAG_VERBOSE, NULL, { { 'f', "force", NULL, G_TYPE_BOOL }, Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 13 17:04:02 2011 (r217362) +++ projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 13 17:29:05 2011 (r217363) @@ -159,10 +159,6 @@ g_raid_subdisk_state2str(int state) return ("STALE"); case G_RAID_SUBDISK_S_SYNCHRONIZING: return ("SYNCHRONIZING"); - case G_RAID_SUBDISK_S_DISCONNECTED: - return ("DISCONNECTED"); - case G_RAID_SUBDISK_S_DESTROY: - return ("DESTROY"); default: return ("INVALID"); } Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Thu Jan 13 17:04:02 2011 (r217362) +++ projects/graid/head/sys/geom/raid/g_raid.h Thu Jan 13 17:29:05 2011 (r217363) @@ -112,6 +112,7 @@ struct g_raid_event { #define G_RAID_DISK_S_SPARE 0x02 #define G_RAID_DISK_S_OFFLINE 0x03 #define G_RAID_DISK_S_STALE 0x04 +#define G_RAID_DISK_S_FAILED 0x05 #define G_RAID_DISK_E_DISCONNECTED 0x01 @@ -132,8 +133,6 @@ struct g_raid_disk { #define G_RAID_SUBDISK_S_ACTIVE 0x02 #define G_RAID_SUBDISK_S_STALE 0x03 #define G_RAID_SUBDISK_S_SYNCHRONIZING 0x04 -#define G_RAID_SUBDISK_S_DISCONNECTED 0x05 -#define G_RAID_SUBDISK_S_DESTROY 0x06 #define G_RAID_SUBDISK_E_NEW 0x01 #define G_RAID_SUBDISK_E_DISCONNECTED 0x02 Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Jan 13 17:04:02 2011 (r217362) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Jan 13 17:29:05 2011 (r217363) @@ -426,6 +426,26 @@ intel_meta_write(struct g_consumer *cp, return (error); } +static int +intel_meta_erase(struct g_consumer *cp) +{ + struct g_provider *pp; + char *buf; + int error; + + pp = cp->provider; + buf = malloc(pp->sectorsize, M_MD_INTEL, M_WAITOK | M_ZERO); + error = g_write_data(cp, + pp->mediasize - 2 * pp->sectorsize, + buf, pp->sectorsize); + if (error != 0) { + G_RAID_DEBUG(1, "Cannot erase metadata on %s (error=%d).", + pp->name, error); + } + free(buf, M_MD_INTEL); + return (error); +} + static struct g_raid_disk * g_raid_md_intel_get_disk(struct g_raid_softc *sc, int id) { @@ -881,6 +901,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj mdi = (struct g_raid_md_intel_object *)md; verb = gctl_get_param(req, "verb", NULL); nargs = gctl_get_paraml(req, "nargs", sizeof(*nargs)); + error = 0; if (strcmp(verb, "label") == 0) { if (*nargs < 4) { @@ -911,7 +932,6 @@ g_raid_md_ctl_intel(struct g_raid_md_obj /* Search for disks, connect them and probe. */ numdisks = *nargs - 3; - error = 0; size = 0xffffffffffffffffllu; sectorsize = 0; for (i = 0; i < numdisks; i++) { @@ -1050,6 +1070,69 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_raid_md_write_intel(md); return (0); } + if (strcmp(verb, "remove") == 0) { + if (*nargs < 2) { + gctl_error(req, "Invalid number of arguments."); + return (-1); + } + for (i = 1; i < *nargs; i++) { + snprintf(arg, sizeof(arg), "arg%d", i); + diskname = gctl_get_asciiparam(req, arg); + if (diskname == NULL) { + gctl_error(req, "No disk name (%s).", arg); + error = -2; + break; + } + if (strncmp(diskname, "/dev/", 5) == 0) + diskname += 5; + + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + if (disk->d_consumer != NULL && + disk->d_consumer->provider != NULL && + strcmp(disk->d_consumer->provider->name, + diskname) == 0) + break; + } + if (disk == NULL) { + gctl_error(req, "Disk '%s' not found.", + diskname); + error = -3; + break; + } + pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + + /* Erase metadata on deleting disk. */ + intel_meta_erase(disk->d_consumer); + + /* If disk was assigned, just update statuses. */ + if (pd->pd_disk_pos >= 0) { + g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); + if (disk->d_consumer) { + g_topology_lock(); + g_raid_kill_consumer(sc, disk->d_consumer); + g_topology_unlock(); + disk->d_consumer = NULL; + } + LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, + G_RAID_EVENT_SUBDISK); + } + } else { + /* Otherwise -- delete. */ + g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); + g_raid_destroy_disk(disk); + } + } + + /* Write updated metadata to remaining disks. */ + g_raid_md_write_intel(md); + + /* Check if anything left. */ + if (g_raid_ndisks(sc, G_RAID_DISK_S_NONE) == 0 && + g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) == 0) + g_raid_destroy_node(sc, 0); + return (error); + } return (-100); } @@ -1067,7 +1150,7 @@ g_raid_md_write_intel(struct g_raid_md_o struct intel_raid_map *mmap; off_t sectorsize = 512; const char *version, *cv; - int i, vi, sdi, numdisks; + int vi, sdi, numdisks, len; sc = md->mdo_softc; mdi = (struct g_raid_md_intel_object *)md; @@ -1077,12 +1160,25 @@ g_raid_md_write_intel(struct g_raid_md_o /* Count number of disks. */ numdisks = 0; - i = 0; LIST_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; - if (pd->pd_disk_pos >= 0) { - numdisks++; - pd->pd_disk_pos = i++; + if (pd->pd_disk_pos < 0) + continue; + numdisks++; + if (disk->d_state == G_RAID_DISK_S_ACTIVE) { + pd->pd_disk_meta.flags |= INTEL_F_ASSIGNED; + pd->pd_disk_meta.flags |= INTEL_F_ONLINE; + } else if (disk->d_state == G_RAID_DISK_S_FAILED) { + pd->pd_disk_meta.flags &= ~INTEL_F_ASSIGNED; + pd->pd_disk_meta.flags |= INTEL_F_DOWN; + } else { + pd->pd_disk_meta.flags &= ~INTEL_F_ONLINE; + if (pd->pd_disk_meta.id != 0xffffffff) { + pd->pd_disk_meta.id = 0xffffffff; + len = strlen(pd->pd_disk_meta.serial); + len = min(len, INTEL_SERIAL_LEN - 3); + strcpy(pd->pd_disk_meta.serial + len, ":0"); + } } } @@ -1097,7 +1193,7 @@ g_raid_md_write_intel(struct g_raid_md_o meta->total_disks = numdisks; LIST_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; - if ((pd->pd_disk_meta.flags & INTEL_F_ASSIGNED) == 0) + if (pd->pd_disk_pos < 0) continue; meta->disk[pd->pd_disk_pos] = pd->pd_disk_meta; } @@ -1170,13 +1266,18 @@ g_raid_md_write_intel(struct g_raid_md_o mmap->total_domains = vol->v_disks_count; else mmap->total_domains = 1; - mmap->failed_disk_num = ~0; + mmap->failed_disk_num = 0xff; mmap->ddf = 1; for (sdi = 0; sdi < vol->v_disks_count; sdi++) { sd = &vol->v_subdisks[sdi]; pd = (struct g_raid_md_intel_perdisk *) sd->sd_disk->d_md_data; mmap->disk_idx[sdi] = pd->pd_disk_pos; +// if (sd->sd_state == G_RAID_SUBDISK_S_NONE) { +// mmap->disk_idx[sdi] |= INTEL_DI_RBLD; +// if (mmap->failed_disk_num == 0xff) +// mmap->failed_disk_num = sdi; +// } } vi++; } @@ -1192,6 +1293,8 @@ g_raid_md_write_intel(struct g_raid_md_o mdi->mdio_meta = meta; LIST_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; + if (disk->d_state != G_RAID_DISK_S_ACTIVE) + continue; if (pd->pd_meta != NULL) { free(pd->pd_meta, M_MD_INTEL); pd->pd_meta = NULL; From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 18:53:31 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2E447106564A; Thu, 13 Jan 2011 18:53:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1D6118FC16; Thu, 13 Jan 2011 18:53:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DIrVl6060317; Thu, 13 Jan 2011 18:53:31 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DIrVX6060315; Thu, 13 Jan 2011 18:53:31 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101131853.p0DIrVX6060315@svn.freebsd.org> From: Alexander Motin Date: Thu, 13 Jan 2011 18:53:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217372 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 18:53:31 -0000 Author: mav Date: Thu Jan 13 18:53:30 2011 New Revision: 217372 URL: http://svn.freebsd.org/changeset/base/217372 Log: Add initial implementation for `graid insert`. It adds specified disks to the array instead of missing ones. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Jan 13 18:52:13 2011 (r217371) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Jan 13 18:53:30 2011 (r217372) @@ -995,7 +995,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj size = pp->mediasize; if (sectorsize < pp->sectorsize) sectorsize = pp->sectorsize; - pd->pd_disk_meta.id = 0xffffffff; + pd->pd_disk_meta.id = 0; pd->pd_disk_meta.flags = INTEL_F_ASSIGNED | INTEL_F_ONLINE; } if (error != 0) @@ -1133,6 +1133,119 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_raid_destroy_node(sc, 0); return (error); } + if (strcmp(verb, "insert") == 0) { + if (*nargs < 2) { + gctl_error(req, "Invalid number of arguments."); + return (-1); + } + for (i = 1; i < *nargs; i++) { + /* Look for empty disk slot. */ + LIST_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_intel_perdisk *) + disk->d_md_data; + if (pd->pd_disk_pos < 0) + continue; + if (disk->d_state == G_RAID_DISK_S_OFFLINE) + break; + } + if (disk == NULL) { + gctl_error(req, "No missing disks."); + error = -2; + break; + } + + /* Get disk name. */ + snprintf(arg, sizeof(arg), "arg%d", i); + diskname = gctl_get_asciiparam(req, arg); + if (diskname == NULL) { + gctl_error(req, "No disk name (%s).", arg); + error = -3; + break; + } + if (strncmp(diskname, "/dev/", 5) == 0) + diskname += 5; + + /* Try to find provider with specified name. */ + g_topology_lock(); + pp = g_provider_by_name(diskname); + if (pp == NULL) { + gctl_error(req, "Provider '%s' not found.", + diskname); + g_topology_unlock(); + error = -4; + break; + } + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + gctl_error(req, "Can't attach provider '%s'.", + diskname); + g_destroy_consumer(cp); + g_topology_unlock(); + error = -5; + break; + } + if (g_access(cp, 1, 1, 1) != 0) { + gctl_error(req, "Can't open provider '%s'.", + diskname); + g_detach(cp); + g_destroy_consumer(cp); + g_topology_unlock(); + error = -6; + break; + } + g_topology_unlock(); + + /* Make sure disk is big enough. */ + LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + if (sd->sd_offset + sd->sd_size + 4096 > + pp->mediasize) { + gctl_error(req, + "Disk '%s' too small.", + diskname); + g_topology_lock(); + g_raid_kill_consumer(sc, cp); + g_topology_unlock(); + error = -7; + break; + } + } + + /* Read disk metadata. */ + error = g_raid_md_get_label(cp, + &pd->pd_disk_meta.serial[0], INTEL_SERIAL_LEN); + if (error != 0) { + gctl_error(req, + "Can't get serial for provider '%s'.", + diskname); + g_topology_lock(); + g_raid_kill_consumer(sc, cp); + g_topology_unlock(); + error = -8; + break; + } + + cp->private = disk; + disk->d_consumer = cp; + pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + if (size > pp->mediasize) + size = pp->mediasize; + if (sectorsize < pp->sectorsize) + sectorsize = pp->sectorsize; + pd->pd_disk_meta.id = 0; + pd->pd_disk_meta.flags = INTEL_F_ASSIGNED | INTEL_F_ONLINE; + + /* Welcome the "new" disk. */ + g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, + G_RAID_EVENT_SUBDISK); + } + } + + /* Write updated metadata to all disks. */ + g_raid_md_write_intel(md); + return (error); + } return (-100); } From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 19:25:15 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 709A11065673; Thu, 13 Jan 2011 19:25:15 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5FCDB8FC1B; Thu, 13 Jan 2011 19:25:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DJPFxa061065; Thu, 13 Jan 2011 19:25:15 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DJPFFk061062; Thu, 13 Jan 2011 19:25:15 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101131925.p0DJPFFk061062@svn.freebsd.org> From: Alexander Motin Date: Thu, 13 Jan 2011 19:25:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217373 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 19:25:15 -0000 Author: mav Date: Thu Jan 13 19:25:15 2011 New Revision: 217373 URL: http://svn.freebsd.org/changeset/base/217373 Log: Make `graid status` report subdisks statuses together with disk status. Remove unused (not applicable) G_RAID_DISK_FLAG_XXX constands. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 13 18:53:30 2011 (r217372) +++ projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 13 19:25:15 2011 (r217373) @@ -667,7 +667,7 @@ g_raid_idle(struct g_raid_volume *vol, i continue; G_RAID_DEBUG(1, "Disk %s (device %s) marked as clean.", g_raid_get_diskname(disk), sc->sc_name); - disk->d_flags &= ~G_RAID_DISK_FLAG_DIRTY; +// disk->d_flags &= ~G_RAID_DISK_FLAG_DIRTY; // g_raid_update_metadata(disk); } return (0); @@ -693,7 +693,7 @@ g_raid_unidle(struct g_raid_volume *vol) continue; G_RAID_DEBUG(1, "Disk %s (device %s) marked as dirty.", g_raid_get_diskname(disk), sc->sc_name); - disk->d_flags |= G_RAID_DISK_FLAG_DIRTY; +// disk->d_flags |= G_RAID_DISK_FLAG_DIRTY; // g_raid_update_metadata(disk); } } @@ -1672,6 +1672,8 @@ g_raid_dumpconf(struct sbuf *sb, const c { struct g_raid_softc *sc; struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct g_raid_disk *disk; int s; g_topology_assert(); @@ -1700,38 +1702,24 @@ g_raid_dumpconf(struct sbuf *sb, const c sx_xunlock(&sc->sc_lock); g_topology_lock(); } else if (cp != NULL) { - struct g_raid_disk *disk; - disk = cp->private; if (disk == NULL) return; g_topology_unlock(); sx_xlock(&sc->sc_lock); - sbuf_printf(sb, "%s", indent); - if (disk->d_flags == 0) - sbuf_printf(sb, "NONE"); - else { - int first = 1; - -#define ADD_FLAG(flag, name) do { \ - if ((disk->d_flags & (flag)) != 0) { \ - if (!first) \ - sbuf_printf(sb, ", "); \ - else \ - first = 0; \ - sbuf_printf(sb, name); \ - } \ -} while (0) - ADD_FLAG(G_RAID_DISK_FLAG_DIRTY, "DIRTY"); - ADD_FLAG(G_RAID_DISK_FLAG_INACTIVE, "INACTIVE"); - ADD_FLAG(G_RAID_DISK_FLAG_SYNCHRONIZING, - "SYNCHRONIZING"); - ADD_FLAG(G_RAID_DISK_FLAG_FORCE_SYNC, "FORCE_SYNC"); -#undef ADD_FLAG - } - sbuf_printf(sb, "\n"); - sbuf_printf(sb, "%s%s\n", indent, + sbuf_printf(sb, "%s%s", indent, g_raid_disk_state2str(disk->d_state)); + if (!LIST_EMPTY(&disk->d_subdisks)) { + sbuf_printf(sb, " ("); + LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + sbuf_printf(sb, "%s", + g_raid_subdisk_state2str(sd->sd_state)); + if (LIST_NEXT(sd, sd_next)) + sbuf_printf(sb, ", "); + } + sbuf_printf(sb, ")"); + } + sbuf_printf(sb, "\n"); sx_xunlock(&sc->sc_lock); g_topology_lock(); } else { Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Thu Jan 13 18:53:30 2011 (r217372) +++ projects/graid/head/sys/geom/raid/g_raid.h Thu Jan 13 19:25:15 2011 (r217373) @@ -42,15 +42,6 @@ struct g_raid_md_object; struct g_raid_tr_object; -#define G_RAID_DISK_FLAG_DIRTY 0x0000000000000001ULL -#define G_RAID_DISK_FLAG_SYNCHRONIZING 0x0000000000000002ULL -#define G_RAID_DISK_FLAG_FORCE_SYNC 0x0000000000000004ULL -#define G_RAID_DISK_FLAG_INACTIVE 0x0000000000000008ULL -#define G_RAID_DISK_FLAG_MASK (G_RAID_DISK_FLAG_DIRTY | \ - G_RAID_DISK_FLAG_SYNCHRONIZING | \ - G_RAID_DISK_FLAG_FORCE_SYNC | \ - G_RAID_DISK_FLAG_INACTIVE) - #define G_RAID_DEVICE_FLAG_NOAUTOSYNC 0x0000000000000001ULL #define G_RAID_DEVICE_FLAG_NOFAILSYNC 0x0000000000000002ULL #define G_RAID_DEVICE_FLAG_MASK (G_RAID_DEVICE_FLAG_NOAUTOSYNC | \ From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 21:06:31 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6DB5F106566B; Thu, 13 Jan 2011 21:06:31 +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 5812B8FC0A; Thu, 13 Jan 2011 21:06:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DL6Vwm063557; Thu, 13 Jan 2011 21:06:31 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DL6UBd063526; Thu, 13 Jan 2011 21:06:30 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101132106.p0DL6UBd063526@svn.freebsd.org> From: Dimitry Andric Date: Thu, 13 Jan 2011 21:06:30 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217376 - in projects/binutils-2.17: . bin/ps bin/sh cddl/contrib/opensolaris/lib/libzpool/common/sys contrib/top etc/mtree gnu/lib gnu/lib/libdialog gnu/lib/libdialog/TESTS gnu/lib/lib... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 21:06:31 -0000 Author: dim Date: Thu Jan 13 21:06:30 2011 New Revision: 217376 URL: http://svn.freebsd.org/changeset/base/217376 Log: Sync: merge r217190 through r217375 from ^/head. Added: - copied from r217375, head/contrib/dialog/ projects/binutils-2.17/gnu/lib/libdialog/dlg_config.h - copied unchanged from r217375, head/gnu/lib/libdialog/dlg_config.h projects/binutils-2.17/gnu/lib/libodialog/ - copied from r217375, head/gnu/lib/libodialog/ projects/binutils-2.17/share/man/man4/runfw.4 - copied unchanged from r217375, head/share/man/man4/runfw.4 projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asluuid.c - copied unchanged from r217375, head/sys/contrib/dev/acpica/compiler/asluuid.c projects/binutils-2.17/sys/mips/cavium/if_octm.c - copied unchanged from r217375, head/sys/mips/cavium/if_octm.c projects/binutils-2.17/tools/regression/bin/sh/execution/path1.0 - copied unchanged from r217375, head/tools/regression/bin/sh/execution/path1.0 Directory Properties: projects/binutils-2.17/contrib/dialog/ (props changed) Deleted: projects/binutils-2.17/gnu/lib/libdialog/CHANGES projects/binutils-2.17/gnu/lib/libdialog/COPYING projects/binutils-2.17/gnu/lib/libdialog/README projects/binutils-2.17/gnu/lib/libdialog/TESTS/ projects/binutils-2.17/gnu/lib/libdialog/TODO projects/binutils-2.17/gnu/lib/libdialog/checklist.c projects/binutils-2.17/gnu/lib/libdialog/colors.h projects/binutils-2.17/gnu/lib/libdialog/dialog.3 projects/binutils-2.17/gnu/lib/libdialog/dialog.h projects/binutils-2.17/gnu/lib/libdialog/dialog.priv.h projects/binutils-2.17/gnu/lib/libdialog/dir.c projects/binutils-2.17/gnu/lib/libdialog/dir.h projects/binutils-2.17/gnu/lib/libdialog/fselect.c projects/binutils-2.17/gnu/lib/libdialog/gauge.c projects/binutils-2.17/gnu/lib/libdialog/help.c projects/binutils-2.17/gnu/lib/libdialog/inputbox.c projects/binutils-2.17/gnu/lib/libdialog/kernel.c projects/binutils-2.17/gnu/lib/libdialog/lineedit.c projects/binutils-2.17/gnu/lib/libdialog/menubox.c projects/binutils-2.17/gnu/lib/libdialog/msgbox.c projects/binutils-2.17/gnu/lib/libdialog/notify.c projects/binutils-2.17/gnu/lib/libdialog/prgbox.c projects/binutils-2.17/gnu/lib/libdialog/radiolist.c projects/binutils-2.17/gnu/lib/libdialog/raw_popen.c projects/binutils-2.17/gnu/lib/libdialog/rc.c projects/binutils-2.17/gnu/lib/libdialog/rc.h projects/binutils-2.17/gnu/lib/libdialog/textbox.c projects/binutils-2.17/gnu/lib/libdialog/tree.c projects/binutils-2.17/gnu/lib/libdialog/ui_objects.c projects/binutils-2.17/gnu/lib/libdialog/ui_objects.h projects/binutils-2.17/gnu/lib/libdialog/yesno.c projects/binutils-2.17/gnu/usr.bin/dialog/COPYING projects/binutils-2.17/gnu/usr.bin/dialog/README projects/binutils-2.17/gnu/usr.bin/dialog/README.lib projects/binutils-2.17/gnu/usr.bin/dialog/TESTS/ projects/binutils-2.17/gnu/usr.bin/dialog/dialog.1 projects/binutils-2.17/gnu/usr.bin/dialog/dialog.c Modified: projects/binutils-2.17/Makefile projects/binutils-2.17/ObsoleteFiles.inc projects/binutils-2.17/UPDATING projects/binutils-2.17/bin/ps/print.c projects/binutils-2.17/bin/sh/exec.c projects/binutils-2.17/bin/sh/memalloc.c projects/binutils-2.17/bin/sh/memalloc.h projects/binutils-2.17/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h projects/binutils-2.17/etc/mtree/BSD.usr.dist projects/binutils-2.17/gnu/lib/Makefile projects/binutils-2.17/gnu/lib/libdialog/Makefile projects/binutils-2.17/gnu/usr.bin/dialog/Makefile projects/binutils-2.17/include/assert.h projects/binutils-2.17/lib/bind/config.mk projects/binutils-2.17/lib/csu/amd64/Makefile projects/binutils-2.17/lib/csu/arm/Makefile projects/binutils-2.17/lib/csu/common/crtbrand.c projects/binutils-2.17/lib/csu/i386-elf/Makefile projects/binutils-2.17/lib/csu/ia64/Makefile projects/binutils-2.17/lib/csu/mips/Makefile projects/binutils-2.17/lib/csu/powerpc/Makefile projects/binutils-2.17/lib/csu/powerpc64/Makefile projects/binutils-2.17/lib/libthr/pthread.map projects/binutils-2.17/lib/libthr/thread/thr_create.c projects/binutils-2.17/lib/libthr/thread/thr_private.h projects/binutils-2.17/lib/libthr/thread/thr_rtld.c projects/binutils-2.17/lib/libthr/thread/thr_sig.c projects/binutils-2.17/lib/libthr/thread/thr_stack.c projects/binutils-2.17/libexec/rtld-elf/rtld.c projects/binutils-2.17/sbin/geom/class/part/gpart.8 projects/binutils-2.17/sbin/geom/class/raid3/geom_raid3.c projects/binutils-2.17/sbin/geom/class/raid3/graid3.8 projects/binutils-2.17/sbin/hastd/hastd.c projects/binutils-2.17/sbin/hastd/hooks.c projects/binutils-2.17/share/man/man3/queue.3 projects/binutils-2.17/share/man/man4/Makefile projects/binutils-2.17/share/man/man4/run.4 projects/binutils-2.17/share/man/man4/uplcom.4 projects/binutils-2.17/share/mk/bsd.libnames.mk projects/binutils-2.17/sys/amd64/acpica/acpi_machdep.c projects/binutils-2.17/sys/amd64/amd64/apic_vector.S projects/binutils-2.17/sys/amd64/amd64/mp_machdep.c projects/binutils-2.17/sys/amd64/include/vmparam.h projects/binutils-2.17/sys/arm/econa/ehci_ebus.c projects/binutils-2.17/sys/arm/econa/ohci_ec.c projects/binutils-2.17/sys/arm/include/metadata.h projects/binutils-2.17/sys/arm/include/vmparam.h projects/binutils-2.17/sys/cam/cam_periph.c projects/binutils-2.17/sys/cam/cam_xpt.c projects/binutils-2.17/sys/cam/scsi/scsi_da.c projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c projects/binutils-2.17/sys/conf/Makefile.mips projects/binutils-2.17/sys/conf/files projects/binutils-2.17/sys/contrib/dev/acpica/acpica_prep.sh projects/binutils-2.17/sys/contrib/dev/acpica/changes.txt (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/adfile.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/adisasm.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/adwalk.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/dmextern.c projects/binutils-2.17/sys/contrib/dev/acpica/common/dmrestag.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/dmtable.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/dmtbdump.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/dmtbinfo.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/common/getopt.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslanalyze.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcodegen.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompile.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompiler.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompiler.l (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompiler.y (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asldefine.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslerror.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslfiles.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslfold.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslglobal.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asllength.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asllisting.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslload.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asllookup.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslmain.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslmap.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslmessages.h projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslopcodes.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asloperands.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslopt.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslpredef.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslresource.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype1.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype1i.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype2.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype2d.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype2e.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype2q.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslrestype2w.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslstartup.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslstubs.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asltransform.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asltree.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asltypes.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtcompile.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtcompiler.h projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtfield.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtio.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtsubtable.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dttable.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dttemplate.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dttemplate.h projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtutils.c projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbcmds.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbdisply.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbexec.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbfileio.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbhistry.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbinput.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbstats.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbxface.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmbuffer.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmnames.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmobject.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmopcode.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmresrc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmresrcl.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmresrcs.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/disassembler/dmwalk.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsfield.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsinit.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsmethod.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsmthdat.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsobject.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsopcode.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dswexec.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dswload.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dswscope.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dswstate.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evevent.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evgpe.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evgpeblk.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evgpeinit.c projects/binutils-2.17/sys/contrib/dev/acpica/events/evgpeutil.c projects/binutils-2.17/sys/contrib/dev/acpica/events/evmisc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evregion.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evrgnini.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evsci.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evxface.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evxfevnt.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/events/evxfgpe.c projects/binutils-2.17/sys/contrib/dev/acpica/events/evxfregn.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exconfig.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exconvrt.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/excreate.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exdebug.c projects/binutils-2.17/sys/contrib/dev/acpica/executer/exdump.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exfield.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exfldio.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exmisc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exmutex.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exnames.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exoparg1.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exoparg2.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exoparg3.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exoparg6.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exprep.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exregion.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exresnte.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exresolv.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exresop.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exstore.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exstoren.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exstorob.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exsystem.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/executer/exutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwacpi.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwgpe.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwpci.c projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwregs.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwsleep.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwtimer.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwvalid.c projects/binutils-2.17/sys/contrib/dev/acpica/hardware/hwxface.c projects/binutils-2.17/sys/contrib/dev/acpica/include/acapps.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/accommon.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acconfig.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acdebug.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acdisasm.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acdispat.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acevents.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acexcep.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acglobal.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/achware.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acinterp.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/aclocal.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acmacros.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acnames.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acnamesp.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acobject.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acopcode.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acoutput.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acparser.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acpi.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acpiosxf.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acpixf.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acpredef.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acresrc.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acrestyp.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acstruct.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/actables.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/actbl.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/actbl1.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/actbl2.h projects/binutils-2.17/sys/contrib/dev/acpica/include/actypes.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/acutils.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/amlcode.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/amlresrc.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/platform/acenv.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/platform/acfreebsd.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/include/platform/acgcc.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsaccess.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsalloc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsdump.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsdumpdv.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nseval.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsinit.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsload.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsnames.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsobject.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsparse.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nspredef.c projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsrepair.c projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsrepair2.c projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nssearch.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nswalk.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsxfeval.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsxfname.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/namespace/nsxfobj.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/osunixxf.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psargs.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psloop.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psopcode.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psparse.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psscope.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/pstree.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/pswalk.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/parser/psxface.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsaddr.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rscalc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rscreate.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsdump.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsinfo.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsio.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsirq.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rslist.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsmemory.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsmisc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/resources/rsxface.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbfadt.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbfind.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbinstal.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbutils.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbxface.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbxfroot.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utalloc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utcache.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utcopy.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utdebug.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utdelete.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/uteval.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utglobal.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utids.c projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utinit.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utlock.c projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utmath.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utmisc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utmutex.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utobject.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utosi.c projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utresrc.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utstate.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/uttrack.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utxface.c (contents, props changed) projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utxferror.c projects/binutils-2.17/sys/contrib/octeon-sdk/cvmx-helper-board.c projects/binutils-2.17/sys/contrib/octeon-sdk/cvmx-mgmt-port.c projects/binutils-2.17/sys/contrib/octeon-sdk/cvmx-mgmt-port.h projects/binutils-2.17/sys/ddb/db_capture.c projects/binutils-2.17/sys/dev/acpi_support/acpi_ibm.c projects/binutils-2.17/sys/dev/acpica/Osd/OsdInterrupt.c projects/binutils-2.17/sys/dev/acpica/Osd/OsdSchedule.c projects/binutils-2.17/sys/dev/acpica/acpi.c projects/binutils-2.17/sys/dev/acpica/acpivar.h projects/binutils-2.17/sys/dev/ae/if_ae.c projects/binutils-2.17/sys/dev/age/if_age.c projects/binutils-2.17/sys/dev/ahci/ahci.c projects/binutils-2.17/sys/dev/alc/if_alc.c projects/binutils-2.17/sys/dev/ale/if_ale.c projects/binutils-2.17/sys/dev/ath/if_ath.c projects/binutils-2.17/sys/dev/bce/if_bce.c projects/binutils-2.17/sys/dev/bge/if_bge.c projects/binutils-2.17/sys/dev/bwi/if_bwi.c projects/binutils-2.17/sys/dev/bwn/if_bwn.c projects/binutils-2.17/sys/dev/cxgb/cxgb_main.c projects/binutils-2.17/sys/dev/cxgb/cxgb_sge.c projects/binutils-2.17/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c projects/binutils-2.17/sys/dev/e1000/if_em.c projects/binutils-2.17/sys/dev/e1000/if_igb.c projects/binutils-2.17/sys/dev/e1000/if_lem.c projects/binutils-2.17/sys/dev/ed/if_ed.c projects/binutils-2.17/sys/dev/iscsi/initiator/iscsi.c projects/binutils-2.17/sys/dev/iwi/if_iwi.c projects/binutils-2.17/sys/dev/ixgbe/ixgbe.c projects/binutils-2.17/sys/dev/jme/if_jme.c projects/binutils-2.17/sys/dev/jme/if_jmevar.h projects/binutils-2.17/sys/dev/mps/mps.c projects/binutils-2.17/sys/dev/mpt/mpt.c projects/binutils-2.17/sys/dev/mpt/mpt_raid.c projects/binutils-2.17/sys/dev/nfe/if_nfe.c projects/binutils-2.17/sys/dev/pccbb/pccbb.c projects/binutils-2.17/sys/dev/re/if_re.c projects/binutils-2.17/sys/dev/sound/pcm/buffer.c projects/binutils-2.17/sys/dev/sound/pcm/sound.c projects/binutils-2.17/sys/dev/sound/usb/uaudio.c projects/binutils-2.17/sys/dev/ste/if_ste.c projects/binutils-2.17/sys/dev/txp/if_txp.c projects/binutils-2.17/sys/dev/usb/controller/at91dci.c projects/binutils-2.17/sys/dev/usb/controller/at91dci_atmelarm.c projects/binutils-2.17/sys/dev/usb/controller/atmegadci.c projects/binutils-2.17/sys/dev/usb/controller/atmegadci_atmelarm.c projects/binutils-2.17/sys/dev/usb/controller/avr32dci.c projects/binutils-2.17/sys/dev/usb/controller/ehci.c projects/binutils-2.17/sys/dev/usb/controller/ehci_ixp4xx.c projects/binutils-2.17/sys/dev/usb/controller/ehci_mv.c projects/binutils-2.17/sys/dev/usb/controller/ehci_pci.c projects/binutils-2.17/sys/dev/usb/controller/musb_otg.c projects/binutils-2.17/sys/dev/usb/controller/musb_otg_atmelarm.c projects/binutils-2.17/sys/dev/usb/controller/ohci.c projects/binutils-2.17/sys/dev/usb/controller/ohci_atmelarm.c projects/binutils-2.17/sys/dev/usb/controller/ohci_pci.c projects/binutils-2.17/sys/dev/usb/controller/ohci_s3c24x0.c projects/binutils-2.17/sys/dev/usb/controller/uhci.c projects/binutils-2.17/sys/dev/usb/controller/uhci_pci.c projects/binutils-2.17/sys/dev/usb/controller/usb_controller.c projects/binutils-2.17/sys/dev/usb/controller/uss820dci.c projects/binutils-2.17/sys/dev/usb/controller/uss820dci_atmelarm.c projects/binutils-2.17/sys/dev/usb/controller/xhci.c projects/binutils-2.17/sys/dev/usb/controller/xhci.h projects/binutils-2.17/sys/dev/usb/controller/xhci_pci.c projects/binutils-2.17/sys/dev/usb/input/atp.c projects/binutils-2.17/sys/dev/usb/input/uhid.c projects/binutils-2.17/sys/dev/usb/input/ukbd.c projects/binutils-2.17/sys/dev/usb/input/ums.c projects/binutils-2.17/sys/dev/usb/misc/udbp.c projects/binutils-2.17/sys/dev/usb/misc/ufm.c projects/binutils-2.17/sys/dev/usb/net/if_aue.c projects/binutils-2.17/sys/dev/usb/net/if_axe.c projects/binutils-2.17/sys/dev/usb/net/if_cdce.c projects/binutils-2.17/sys/dev/usb/net/if_cue.c projects/binutils-2.17/sys/dev/usb/net/if_ipheth.c projects/binutils-2.17/sys/dev/usb/net/if_kue.c projects/binutils-2.17/sys/dev/usb/net/if_rue.c projects/binutils-2.17/sys/dev/usb/net/if_udav.c projects/binutils-2.17/sys/dev/usb/net/usb_ethernet.c projects/binutils-2.17/sys/dev/usb/quirk/usb_quirk.c projects/binutils-2.17/sys/dev/usb/serial/u3g.c projects/binutils-2.17/sys/dev/usb/serial/uark.c projects/binutils-2.17/sys/dev/usb/serial/ubsa.c projects/binutils-2.17/sys/dev/usb/serial/ubser.c projects/binutils-2.17/sys/dev/usb/serial/uchcom.c projects/binutils-2.17/sys/dev/usb/serial/ucycom.c projects/binutils-2.17/sys/dev/usb/serial/ufoma.c projects/binutils-2.17/sys/dev/usb/serial/uftdi.c projects/binutils-2.17/sys/dev/usb/serial/ugensa.c projects/binutils-2.17/sys/dev/usb/serial/uipaq.c projects/binutils-2.17/sys/dev/usb/serial/ulpt.c projects/binutils-2.17/sys/dev/usb/serial/umct.c projects/binutils-2.17/sys/dev/usb/serial/umodem.c projects/binutils-2.17/sys/dev/usb/serial/umoscom.c projects/binutils-2.17/sys/dev/usb/serial/uplcom.c projects/binutils-2.17/sys/dev/usb/serial/usb_serial.c projects/binutils-2.17/sys/dev/usb/serial/uslcom.c projects/binutils-2.17/sys/dev/usb/serial/uvisor.c projects/binutils-2.17/sys/dev/usb/serial/uvscom.c projects/binutils-2.17/sys/dev/usb/storage/umass.c projects/binutils-2.17/sys/dev/usb/storage/urio.c projects/binutils-2.17/sys/dev/usb/storage/ustorage_fs.c projects/binutils-2.17/sys/dev/usb/template/usb_template.c projects/binutils-2.17/sys/dev/usb/template/usb_template_cdce.c projects/binutils-2.17/sys/dev/usb/template/usb_template_msc.c projects/binutils-2.17/sys/dev/usb/template/usb_template_mtp.c projects/binutils-2.17/sys/dev/usb/usb_busdma.c projects/binutils-2.17/sys/dev/usb/usb_compat_linux.c projects/binutils-2.17/sys/dev/usb/usb_core.c projects/binutils-2.17/sys/dev/usb/usb_debug.c projects/binutils-2.17/sys/dev/usb/usb_dev.c projects/binutils-2.17/sys/dev/usb/usb_device.c projects/binutils-2.17/sys/dev/usb/usb_dynamic.c projects/binutils-2.17/sys/dev/usb/usb_error.c projects/binutils-2.17/sys/dev/usb/usb_generic.c projects/binutils-2.17/sys/dev/usb/usb_handle_request.c projects/binutils-2.17/sys/dev/usb/usb_hid.c projects/binutils-2.17/sys/dev/usb/usb_hub.c projects/binutils-2.17/sys/dev/usb/usb_lookup.c projects/binutils-2.17/sys/dev/usb/usb_mbuf.c projects/binutils-2.17/sys/dev/usb/usb_msctest.c projects/binutils-2.17/sys/dev/usb/usb_parse.c projects/binutils-2.17/sys/dev/usb/usb_process.c projects/binutils-2.17/sys/dev/usb/usb_process.h projects/binutils-2.17/sys/dev/usb/usb_request.c projects/binutils-2.17/sys/dev/usb/usb_transfer.c projects/binutils-2.17/sys/dev/usb/usb_util.c projects/binutils-2.17/sys/dev/usb/usbdevs projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdcache.c projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdport.c projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdstate.c projects/binutils-2.17/sys/geom/nop/g_nop.c projects/binutils-2.17/sys/geom/raid3/g_raid3.c projects/binutils-2.17/sys/geom/sched/g_sched.c projects/binutils-2.17/sys/geom/sched/gs_rr.c projects/binutils-2.17/sys/i386/i386/apic_vector.s projects/binutils-2.17/sys/i386/include/vmparam.h projects/binutils-2.17/sys/ia64/acpica/OsdEnvironment.c projects/binutils-2.17/sys/ia64/include/vmparam.h projects/binutils-2.17/sys/kern/kern_clocksource.c projects/binutils-2.17/sys/kern/kern_et.c projects/binutils-2.17/sys/kern/kern_hhook.c projects/binutils-2.17/sys/kern/kern_intr.c projects/binutils-2.17/sys/kern/kern_lock.c projects/binutils-2.17/sys/kern/kern_mib.c projects/binutils-2.17/sys/kern/kern_ntptime.c projects/binutils-2.17/sys/kern/kern_sx.c projects/binutils-2.17/sys/kern/sched_4bsd.c projects/binutils-2.17/sys/kern/sched_ule.c projects/binutils-2.17/sys/kern/subr_clock.c projects/binutils-2.17/sys/kern/subr_kobj.c projects/binutils-2.17/sys/kern/subr_lock.c projects/binutils-2.17/sys/kern/subr_pcpu.c projects/binutils-2.17/sys/kern/subr_smp.c projects/binutils-2.17/sys/kern/vfs_subr.c projects/binutils-2.17/sys/mips/cavium/ciu.c projects/binutils-2.17/sys/mips/cavium/cvmx_config.h projects/binutils-2.17/sys/mips/cavium/files.octeon1 projects/binutils-2.17/sys/mips/cavium/octe/ethernet-defines.h projects/binutils-2.17/sys/mips/cavium/octe/ethernet-rx.c projects/binutils-2.17/sys/mips/cavium/octe/ethernet-tx.c projects/binutils-2.17/sys/mips/cavium/octe/ethernet.c projects/binutils-2.17/sys/mips/cavium/octeon_wdog.c projects/binutils-2.17/sys/mips/cavium/octopci.c projects/binutils-2.17/sys/mips/cavium/usb/octusb.c projects/binutils-2.17/sys/mips/cavium/usb/octusb_octeon.c projects/binutils-2.17/sys/mips/conf/OCTEON1 projects/binutils-2.17/sys/mips/include/_types.h projects/binutils-2.17/sys/mips/include/cpufunc.h projects/binutils-2.17/sys/mips/include/md_var.h projects/binutils-2.17/sys/mips/include/param.h projects/binutils-2.17/sys/mips/include/pmap.h projects/binutils-2.17/sys/mips/include/proc.h projects/binutils-2.17/sys/mips/include/pte.h projects/binutils-2.17/sys/mips/include/vmparam.h projects/binutils-2.17/sys/mips/mips/dump_machdep.c projects/binutils-2.17/sys/mips/mips/exception.S projects/binutils-2.17/sys/mips/mips/machdep.c projects/binutils-2.17/sys/mips/mips/pmap.c projects/binutils-2.17/sys/mips/mips/swtch.S projects/binutils-2.17/sys/mips/mips/trap.c projects/binutils-2.17/sys/mips/rmi/xlr_machdep.c projects/binutils-2.17/sys/mips/rmi/xls_ehci.c projects/binutils-2.17/sys/net/if.c projects/binutils-2.17/sys/net/netisr.c projects/binutils-2.17/sys/net/route.c projects/binutils-2.17/sys/net/vnet.c projects/binutils-2.17/sys/net80211/ieee80211_amrr.c projects/binutils-2.17/sys/net80211/ieee80211_freebsd.c projects/binutils-2.17/sys/netgraph/bluetooth/common/ng_bluetooth.c projects/binutils-2.17/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c projects/binutils-2.17/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c projects/binutils-2.17/sys/netgraph/bluetooth/socket/ng_btsocket_hci_raw.c projects/binutils-2.17/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c projects/binutils-2.17/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap_raw.c projects/binutils-2.17/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c projects/binutils-2.17/sys/netgraph/bluetooth/socket/ng_btsocket_sco.c projects/binutils-2.17/sys/netgraph/ng_socket.c projects/binutils-2.17/sys/netinet/cc/cc_htcp.c projects/binutils-2.17/sys/netinet/if_ether.c projects/binutils-2.17/sys/netinet/ipfw/ip_dn_io.c projects/binutils-2.17/sys/netinet/ipfw/ip_dummynet.c projects/binutils-2.17/sys/netinet/ipfw/ip_fw_dynamic.c projects/binutils-2.17/sys/netinet/tcp_hostcache.c projects/binutils-2.17/sys/netinet/tcp_input.c projects/binutils-2.17/sys/netinet/tcp_subr.c projects/binutils-2.17/sys/netinet/tcp_syncache.c projects/binutils-2.17/sys/netinet/tcp_var.h projects/binutils-2.17/sys/nlm/nlm_prot_impl.c projects/binutils-2.17/sys/pci/if_rlreg.h projects/binutils-2.17/sys/powerpc/aim/mmu_oea64.c projects/binutils-2.17/sys/powerpc/aim/trap.c projects/binutils-2.17/sys/powerpc/include/spr.h projects/binutils-2.17/sys/powerpc/include/vmparam.h projects/binutils-2.17/sys/powerpc/powermac/fcu.c projects/binutils-2.17/sys/powerpc/ps3/ehci_ps3.c projects/binutils-2.17/sys/rpc/clnt_dg.c projects/binutils-2.17/sys/rpc/clnt_vc.c projects/binutils-2.17/sys/rpc/svc.c projects/binutils-2.17/sys/rpc/svc_vc.c projects/binutils-2.17/sys/security/mac/mac_framework.c projects/binutils-2.17/sys/security/mac_seeotheruids/mac_seeotheruids.c projects/binutils-2.17/sys/sparc64/include/vmparam.h projects/binutils-2.17/sys/sparc64/sparc64/db_trace.c projects/binutils-2.17/sys/sparc64/sparc64/tlb.c projects/binutils-2.17/sys/sparc64/sparc64/tsb.c projects/binutils-2.17/sys/sparc64/sparc64/vm_machdep.c projects/binutils-2.17/sys/sun4v/include/vmparam.h projects/binutils-2.17/sys/sun4v/sun4v/db_interface.c projects/binutils-2.17/sys/sun4v/sun4v/db_trace.c projects/binutils-2.17/sys/sun4v/sun4v/vm_machdep.c projects/binutils-2.17/sys/sys/param.h projects/binutils-2.17/sys/sys/priority.h projects/binutils-2.17/sys/sys/sysctl.h projects/binutils-2.17/sys/sys/vmmeter.h projects/binutils-2.17/sys/ufs/ffs/ffs_softdep.c projects/binutils-2.17/sys/ufs/ufs/ufs_quota.c projects/binutils-2.17/sys/vm/phys_pager.c projects/binutils-2.17/sys/vm/vm_contig.c projects/binutils-2.17/sys/vm/vm_glue.c projects/binutils-2.17/sys/vm/vm_meter.c projects/binutils-2.17/sys/x86/acpica/OsdEnvironment.c projects/binutils-2.17/sys/x86/x86/busdma_machdep.c projects/binutils-2.17/sys/x86/x86/local_apic.c projects/binutils-2.17/tools/regression/bin/date/regress.sh projects/binutils-2.17/usr.sbin/acpi/iasl/Makefile projects/binutils-2.17/usr.sbin/kbdmap/kbdmap.c projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-bsdlabel.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-cleanup.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-disk.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-users.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/examples/README projects/binutils-2.17/usr.sbin/sade/Makefile projects/binutils-2.17/usr.sbin/spkrtest/spkrtest.sh projects/binutils-2.17/usr.sbin/sysinstall/Makefile projects/binutils-2.17/usr.sbin/tzsetup/Makefile projects/binutils-2.17/usr.sbin/usbdump/usbdump.8 Directory Properties: projects/binutils-2.17/ (props changed) projects/binutils-2.17/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/contrib/bind9/ (props changed) projects/binutils-2.17/contrib/binutils/ (props changed) projects/binutils-2.17/contrib/bzip2/ (props changed) projects/binutils-2.17/contrib/ee/ (props changed) projects/binutils-2.17/contrib/expat/ (props changed) projects/binutils-2.17/contrib/file/ (props changed) projects/binutils-2.17/contrib/gdb/ (props changed) projects/binutils-2.17/contrib/gdtoa/ (props changed) projects/binutils-2.17/contrib/gnu-sort/ (props changed) projects/binutils-2.17/contrib/groff/ (props changed) projects/binutils-2.17/contrib/less/ (props changed) projects/binutils-2.17/contrib/libpcap/ (props changed) projects/binutils-2.17/contrib/llvm/ (props changed) projects/binutils-2.17/contrib/llvm/tools/clang/ (props changed) projects/binutils-2.17/contrib/ncurses/ (props changed) projects/binutils-2.17/contrib/netcat/ (props changed) projects/binutils-2.17/contrib/ntp/ (props changed) projects/binutils-2.17/contrib/one-true-awk/ (props changed) projects/binutils-2.17/contrib/openbsm/ (props changed) projects/binutils-2.17/contrib/openpam/ (props changed) projects/binutils-2.17/contrib/pf/ (props changed) projects/binutils-2.17/contrib/sendmail/ (props changed) projects/binutils-2.17/contrib/tcpdump/ (props changed) projects/binutils-2.17/contrib/tcsh/ (props changed) projects/binutils-2.17/contrib/top/ (props changed) projects/binutils-2.17/contrib/top/install-sh (props changed) projects/binutils-2.17/contrib/tzcode/stdtime/ (props changed) projects/binutils-2.17/contrib/tzcode/zic/ (props changed) projects/binutils-2.17/contrib/tzdata/ (props changed) projects/binutils-2.17/contrib/wpa/ (props changed) projects/binutils-2.17/contrib/xz/ (props changed) projects/binutils-2.17/crypto/openssh/ (props changed) projects/binutils-2.17/crypto/openssl/ (props changed) projects/binutils-2.17/lib/libc/ (props changed) projects/binutils-2.17/lib/libc/stdtime/ (props changed) projects/binutils-2.17/lib/libutil/ (props changed) projects/binutils-2.17/lib/libz/ (props changed) projects/binutils-2.17/sbin/ (props changed) projects/binutils-2.17/sbin/ipfw/ (props changed) projects/binutils-2.17/share/mk/bsd.arch.inc.mk (props changed) projects/binutils-2.17/share/zoneinfo/ (props changed) projects/binutils-2.17/sys/ (props changed) projects/binutils-2.17/sys/amd64/include/xen/ (props changed) projects/binutils-2.17/sys/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/sys/contrib/dev/acpica/ (props changed) projects/binutils-2.17/sys/contrib/octeon-sdk/ (props changed) projects/binutils-2.17/sys/contrib/pf/ (props changed) projects/binutils-2.17/sys/contrib/x86emu/ (props changed) projects/binutils-2.17/usr.bin/calendar/ (props changed) projects/binutils-2.17/usr.bin/csup/ (props changed) projects/binutils-2.17/usr.bin/procstat/ (props changed) projects/binutils-2.17/usr.sbin/zic/ (props changed) Modified: projects/binutils-2.17/Makefile ============================================================================== --- projects/binutils-2.17/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -5,6 +5,7 @@ # # universe - *Really* build *everything* (buildworld and # all kernels on all architectures). +# tinderbox - Same as universe, but stop on first failure. # buildworld - Rebuild *everything*, including glue to help do # upgrades. # installworld - Install everything built by "buildworld". @@ -35,10 +36,12 @@ # tree. This makefile executes a child make process, forcing it to use # the mk files from the source tree which are supposed to DTRT. # -# The user-driven targets (as listed above) are implemented in Makefile.inc1. +# Most of the user-driven targets (as listed above) are implemented in +# Makefile.inc1. The exceptions are universe, tinderbox and targets. # # If you want to build your system from source be sure that /usr/obj has -# at least 800MB of diskspace available. +# at least 1GB of diskspace available. A complete 'universe' build requires +# about 15GB of space. # # For individuals wanting to build from the sources currently on their # system, the simple instructions are: Modified: projects/binutils-2.17/ObsoleteFiles.inc ============================================================================== --- projects/binutils-2.17/ObsoleteFiles.inc Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/ObsoleteFiles.inc Thu Jan 13 21:06:30 2011 (r217376) @@ -38,6 +38,51 @@ # xargs -n1 | sort | uniq -d; # done +# 20110112: Update dialog to new version, rename old libdialog to libodialog, +# removing associated man pages and header files. +OLD_FILES+=usr/share/man/man3/draw_shadow.3.gz \ + usr/share/man/man3/draw_box.3.gz usr/share/man/man3/line_edit.3.gz \ + usr/share/man/man3/strheight.3.gz usr/share/man/man3/strwidth.3.gz \ + usr/share/man/man3/dialog_create_rc.3.gz \ + usr/share/man/man3/dialog_yesno.3.gz usr/share/man/man3/dialog_noyes.3.gz \ + usr/share/man/man3/dialog_prgbox.3.gz \ + usr/share/man/man3/dialog_textbox.3.gz usr/share/man/man3/dialog_menu.3.gz \ + usr/share/man/man3/dialog_checklist.3.gz \ + usr/share/man/man3/dialog_radiolist.3.gz \ + usr/share/man/man3/dialog_inputbox.3.gz \ + usr/share/man/man3/dialog_clear_norefresh.3.gz \ + usr/share/man/man3/dialog_clear.3.gz usr/share/man/man3/dialog_update.3.gz \ + usr/share/man/man3/dialog_fselect.3.gz \ + usr/share/man/man3/dialog_notify.3.gz \ + usr/share/man/man3/dialog_mesgbox.3.gz \ + usr/share/man/man3/dialog_gauge.3.gz usr/share/man/man3/init_dialog.3.gz \ + usr/share/man/man3/end_dialog.3.gz usr/share/man/man3/use_helpfile.3.gz \ + usr/share/man/man3/use_helpline.3.gz usr/share/man/man3/get_helpline.3.gz \ + usr/share/man/man3/restore_helpline.3.gz \ + usr/share/man/man3/dialog_msgbox.3.gz \ + usr/share/man/man3/dialog_ftree.3.gz usr/share/man/man3/dialog_tree.3.gz \ + usr/share/examples/dialog/README usr/share/examples/dialog/checklist \ + usr/share/examples/dialog/ftreebox usr/share/examples/dialog/infobox \ + usr/share/examples/dialog/inputbox usr/share/examples/dialog/menubox \ + usr/share/examples/dialog/msgbox usr/share/examples/dialog/prgbox \ + usr/share/examples/dialog/radiolist usr/share/examples/dialog/textbox \ + usr/share/examples/dialog/treebox usr/share/examples/dialog/yesno \ + usr/share/examples/libdialog/Makefile usr/share/examples/libdialog/check1.c\ + usr/share/examples/libdialog/check2.c usr/share/examples/libdialog/check3.c\ + usr/share/examples/libdialog/dselect.c \ + usr/share/examples/libdialog/fselect.c \ + usr/share/examples/libdialog/ftree1.c \ + usr/share/examples/libdialog/ftree1.test \ + usr/share/examples/libdialog/ftree2.c \ + usr/share/examples/libdialog/ftree2.test \ + usr/share/examples/libdialog/gauge.c usr/share/examples/libdialog/input1.c \ + usr/share/examples/libdialog/input2.c usr/share/examples/libdialog/menu1.c \ + usr/share/examples/libdialog/menu2.c usr/share/examples/libdialog/menu3.c \ + usr/share/examples/libdialog/msg.c usr/share/examples/libdialog/prgbox.c \ + usr/share/examples/libdialog/radio1.c usr/share/examples/libdialog/radio2.c\ + usr/share/examples/libdialog/radio3.c usr/share/examples/libdialog/text.c \ + usr/share/examples/libdialog/tree.c usr/share/examples/libdialog/yesno.c +OLD_DIRS+=usr/share/examples/libdialog usr/share/examples/dialog # 20101114: Remove long-obsolete MAKEDEV.8 OLD_FILES+=usr/share/man/man8/MAKEDEV.8.gz # 20101112: vgonel(9) has gone to private API a while ago Modified: projects/binutils-2.17/UPDATING ============================================================================== --- projects/binutils-2.17/UPDATING Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/UPDATING Thu Jan 13 21:06:30 2011 (r217376) @@ -22,10 +22,26 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110112: + A SYSCTL_[ADD_]UQUAD was added for unsigned uint64_t pointers, + symmetric with the existing SYSCTL_[ADD_]QUAD. Type checking + for scalar sysctls is defined but disabled. Code that needs + UQUAD to pass the type checking that must compile on older + systems where the define is not present can check against + __FreeBSD_version >= 900030. + + The system dialog(1) has been replaced with a new version previously + in ports as devel/cdialog. dialog(1) is mostly command-line compatible + with the previous version, but the libdialog associated with it has + a largely incompatible API. As such, the original version of libdialog + will be kept temporarily as libodialog, until its base system consumers + are replaced or updated. Bump __FreeBSD_version to 900030. + 20110103: If you are trying to run make universe on a -stable system, and you get the following warning: -"Makefile", line 356: "Target architecture for i386/conf/GENERIC unknown. config(8) likely too old." + "Makefile", line 356: "Target architecture for i386/conf/GENERIC + unknown. config(8) likely too old." or something similar to it, then you must upgrade your -stable system to 8.2-Release or newer (really, any time after r210146 7/15/2010 in stable/8) or build the config from the latest stable/8 branch and @@ -33,8 +49,8 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. Prior to this date, building a current universe on 8-stable system from between 7/15/2010 and 1/2/2011 would result in a weird shell parsing - error in the first kernel build phase. A new config on those old systems - will fix that problem for older versions of -current. + error in the first kernel build phase. A new config on those old + systems will fix that problem for older versions of -current. 20101228: The TCP stack has been modified to allow Khelp modules to interact with Modified: projects/binutils-2.17/bin/ps/print.c ============================================================================== --- projects/binutils-2.17/bin/ps/print.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/bin/ps/print.c Thu Jan 13 21:06:30 2011 (r217376) @@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include Modified: projects/binutils-2.17/bin/sh/exec.c ============================================================================== --- projects/binutils-2.17/bin/sh/exec.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/bin/sh/exec.c Thu Jan 13 21:06:30 2011 (r217376) @@ -92,7 +92,6 @@ struct tblentry { static struct tblentry *cmdtable[CMDTABLESIZE]; -static int builtinloc = -1; /* index in path of %builtin, or -1 */ int exerrno = 0; /* Last exec error */ @@ -244,8 +243,7 @@ hashcmd(int argc __unused, char **argv _ } while ((name = *argptr) != NULL) { if ((cmdp = cmdlookup(name, 0)) != NULL - && (cmdp->cmdtype == CMDNORMAL - || (cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0))) + && cmdp->cmdtype == CMDNORMAL) delete_cmd_entry(); find_command(name, &entry, DO_ERR, pathval()); if (verbose) { @@ -336,8 +334,8 @@ find_command(const char *name, struct cm goto success; } - /* If %builtin not in path, check for builtin next */ - if (builtinloc < 0 && (i = find_builtin(name, &spec)) >= 0) { + /* Check for builtin next */ + if ((i = find_builtin(name, &spec)) >= 0) { INTOFF; cmdp = cmdlookup(name, 1); if (cmdp->cmdtype == CMDFUNCTION) @@ -353,7 +351,7 @@ find_command(const char *name, struct cm prev = -1; /* where to start */ if (cmdp) { /* doing a rehash */ if (cmdp->cmdtype == CMDBUILTIN) - prev = builtinloc; + prev = -1; else prev = cmdp->param.index; } @@ -365,19 +363,7 @@ loop: stunalloc(fullname); idx++; if (pathopt) { - if (prefix("builtin", pathopt)) { - if ((i = find_builtin(name, &spec)) < 0) - goto loop; - INTOFF; - cmdp = cmdlookup(name, 1); - if (cmdp->cmdtype == CMDFUNCTION) - cmdp = &loc_cmd; - cmdp->cmdtype = CMDBUILTIN; - cmdp->param.index = i; - cmdp->special = spec; - INTON; - goto success; - } else if (prefix("func", pathopt)) { + if (prefix("func", pathopt)) { /* handled below */ } else { goto loop; /* ignore unimplemented options */ @@ -484,8 +470,7 @@ hashcd(void) for (pp = cmdtable ; pp < &cmdtable[CMDTABLESIZE] ; pp++) { for (cmdp = *pp ; cmdp ; cmdp = cmdp->next) { - if (cmdp->cmdtype == CMDNORMAL - || (cmdp->cmdtype == CMDBUILTIN && builtinloc >= 0)) + if (cmdp->cmdtype == CMDNORMAL) cmdp->rehash = 1; } } @@ -505,13 +490,11 @@ changepath(const char *newval) const char *old, *new; int idx; int firstchange; - int bltin; old = pathval(); new = newval; firstchange = 9999; /* assume no change */ idx = 0; - bltin = -1; for (;;) { if (*old != *new) { firstchange = idx; @@ -522,19 +505,12 @@ changepath(const char *newval) } if (*new == '\0') break; - if (*new == '%' && bltin < 0 && prefix("builtin", new + 1)) - bltin = idx; if (*new == ':') { idx++; } new++, old++; } - if (builtinloc < 0 && bltin >= 0) - builtinloc = bltin; /* zap builtins */ - if (builtinloc >= 0 && bltin < 0) - firstchange = 0; clearcmdentry(firstchange); - builtinloc = bltin; } @@ -555,9 +531,7 @@ clearcmdentry(int firstchange) pp = tblp; while ((cmdp = *pp) != NULL) { if ((cmdp->cmdtype == CMDNORMAL && - cmdp->param.index >= firstchange) - || (cmdp->cmdtype == CMDBUILTIN && - builtinloc >= firstchange)) { + cmdp->param.index >= firstchange)) { *pp = cmdp->next; ckfree(cmdp); } else { Modified: projects/binutils-2.17/bin/sh/memalloc.c ============================================================================== --- projects/binutils-2.17/bin/sh/memalloc.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/bin/sh/memalloc.c Thu Jan 13 21:06:30 2011 (r217376) @@ -277,16 +277,6 @@ growstackblock(int min) -void -grabstackblock(int len) -{ - len = ALIGN(len); - stacknxt += len; - stacknleft -= len; -} - - - /* * The following routines are somewhat easier to use that the above. * The user declares a variable of type STACKSTR, which may be declared Modified: projects/binutils-2.17/bin/sh/memalloc.h ============================================================================== --- projects/binutils-2.17/bin/sh/memalloc.h Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/bin/sh/memalloc.h Thu Jan 13 21:06:30 2011 (r217376) @@ -55,7 +55,6 @@ pointer stalloc(int); void stunalloc(pointer); void setstackmark(struct stackmark *); void popstackmark(struct stackmark *); -void grabstackblock(int); char *growstackstr(void); char *makestrspace(int, char *); char *stputbin(const char *data, int len, char *p); @@ -65,6 +64,7 @@ char *stputs(const char *data, char *p); #define stackblock() stacknxt #define stackblocksize() stacknleft +#define grabstackblock(n) stalloc(n) #define STARTSTACKSTR(p) p = stackblock() #define STPUTC(c, p) do { if (p == sstrend) p = growstackstr(); *p++ = (c); } while(0) #define CHECKSTRSPACE(n, p) { if (sstrend - p < n) p = makestrspace(n, p); } Modified: projects/binutils-2.17/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h ============================================================================== --- projects/binutils-2.17/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/cddl/contrib/opensolaris/lib/libzpool/common/sys/zfs_context.h Thu Jan 13 21:06:30 2011 (r217376) @@ -601,6 +601,7 @@ typedef uint32_t idmap_rid_t; #define SYSCTL_UINT(...) #define SYSCTL_ULONG(...) #define SYSCTL_QUAD(...) +#define SYSCTL_UQUAD(...) #ifdef TUNABLE_INT #undef TUNABLE_INT #undef TUNABLE_ULONG Modified: projects/binutils-2.17/etc/mtree/BSD.usr.dist ============================================================================== --- projects/binutils-2.17/etc/mtree/BSD.usr.dist Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/etc/mtree/BSD.usr.dist Thu Jan 13 21:06:30 2011 (r217376) @@ -201,8 +201,6 @@ .. cvsup .. - dialog - .. diskless .. drivers @@ -251,8 +249,6 @@ .. .. .. - libdialog - .. libvgl .. mdoc Modified: projects/binutils-2.17/gnu/lib/Makefile ============================================================================== --- projects/binutils-2.17/gnu/lib/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/gnu/lib/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -2,7 +2,8 @@ .include -SUBDIR= csu libgcc libgcov libdialog libgomp libregex libreadline libssp +SUBDIR= csu libgcc libgcov libdialog libgomp libodialog libregex libreadline \ + libssp # libsupc++ uses libstdc++ headers, although 'make includes' should # have taken care of that already. Modified: projects/binutils-2.17/gnu/lib/libdialog/Makefile ============================================================================== --- projects/binutils-2.17/gnu/lib/libdialog/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/gnu/lib/libdialog/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -1,47 +1,19 @@ -# Makefile for libdialog # $FreeBSD$ -.include +DIALOG= ${.CURDIR}/../../../contrib/dialog -LIB= dialog -INCS= dialog.h -MAN= dialog.3 - -SHLIB_MAJOR= 7 -SRCS= kernel.c rc.c checklist.c inputbox.c menubox.c msgbox.c \ - lineedit.c radiolist.c textbox.c yesno.c prgbox.c raw_popen.c \ - fselect.c ui_objects.c dir.c notify.c help.c gauge.c tree.c - -EXAMPLES= Makefile check1.c check2.c check3.c dselect.c fselect.c \ - ftree1.c ftree1.test ftree2.c ftree2.test gauge.c input1.c \ - input2.c menu1.c menu2.c menu3.c msg.c prgbox.c radio1.c \ - radio2.c radio3.c text.c tree.c yesno.c - -CFLAGS+= -I${.CURDIR} -Wall -Wstrict-prototypes -DLOCALE - -DPADD= ${LIBNCURSES} -LDADD= -lncurses - -.if ${MK_HTML} != "no" -FILES= ${EXAMPLES:C;^;${.CURDIR}/TESTS/;} -FILESDIR= ${SHAREDIR}/examples/libdialog -.endif - -MLINKS+=dialog.3 draw_shadow.3 dialog.3 draw_box.3 \ - dialog.3 line_edit.3 dialog.3 strheight.3 \ - dialog.3 strwidth.3 dialog.3 dialog_create_rc.3 \ - dialog.3 dialog_yesno.3 dialog.3 dialog_noyes.3 \ - dialog.3 dialog_prgbox.3 \ - dialog.3 dialog_textbox.3 dialog.3 dialog_menu.3 \ - dialog.3 dialog_checklist.3 dialog.3 dialog_radiolist.3 \ - dialog.3 dialog_inputbox.3 dialog.3 dialog_clear_norefresh.3 \ - dialog.3 dialog_clear.3 dialog.3 dialog_update.3 \ - dialog.3 dialog_fselect.3 dialog.3 dialog_notify.3 \ - dialog.3 dialog_mesgbox.3 dialog.3 dialog_gauge.3 \ - dialog.3 init_dialog.3 dialog.3 end_dialog.3 \ - dialog.3 use_helpfile.3 dialog.3 use_helpline.3 \ - dialog.3 get_helpline.3 dialog.3 restore_helpline.3 \ - dialog.3 dialog_msgbox.3 dialog.3 dialog_ftree.3 \ - dialog.3 dialog_tree.3 +LIB= dialog +SHLIB_MAJOR= 7 +SRCS= arrows.c buttons.c calendar.c checklist.c columns.c dlg_keys.c \ + editbox.c fselect.c formbox.c guage.c inputbox.c inputstr.c \ + menubox.c mixedform.c mixedgauge.c mouse.c mousewget.c \ + msgbox.c pause.c progressbox.c rc.c tailbox.c textbox.c \ + timebox.c trace.c ui_getc.c util.c version.c yesno.c +INCS= dialog.h dlg_colors.h dlg_config.h dlg_keys.h +MAN= dialog.3 + +CFLAGS+= -I${.CURDIR} -I${DIALOG} +.PATH: ${DIALOG} +WARNS?= 3 .include Copied: projects/binutils-2.17/gnu/lib/libdialog/dlg_config.h (from r217375, head/gnu/lib/libdialog/dlg_config.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/binutils-2.17/gnu/lib/libdialog/dlg_config.h Thu Jan 13 21:06:30 2011 (r217376, copy of r217375, head/gnu/lib/libdialog/dlg_config.h) @@ -0,0 +1,91 @@ +/* dlg_config.h. Generated automatically by configure. */ +/* + * The configure script expands this as a set of definitions + * + * $FreeBSD$ + */ + + +#define DIALOG_PATCHDATE 20100428 +#define DIALOG_VERSION "1.1" +#define HAVE_ALLOCA 1 +#define HAVE_COLOR 1 +#define HAVE_CURSES_H 1 +#define HAVE_DIRENT_H 1 +#define HAVE_DLG_FORMBOX 1 +#define HAVE_DLG_GAUGE 1 +#define HAVE_DLG_MIXEDFORM 1 +#define HAVE_DLG_TAILBOX 1 +#define HAVE_DLG_TRACE 1 +#define HAVE_FEOF_UNLOCKED 1 +#define HAVE_FLUSHINP 1 +#define HAVE_FSEEKO 1 +#define HAVE_GETBEGX 1 +#define HAVE_GETBEGY 1 +#define HAVE_GETBEGYX 1 +#define HAVE_GETCURX 1 +#define HAVE_GETCURY 1 +#define HAVE_GETCWD 1 +#define HAVE_GETEGID 1 +#define HAVE_GETEUID 1 +#define HAVE_GETGID 1 +#define HAVE_GETMAXX 1 +#define HAVE_GETMAXY 1 +#define HAVE_GETMAXYX 1 +#define HAVE_GETPAGESIZE 1 +#define HAVE_GETPARX 1 +#define HAVE_GETPARY 1 +#define HAVE_GETPARYX 1 +#define HAVE_GETUID 1 +#define HAVE_ICONV 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LANGINFO_CODESET 1 +#define HAVE_LC_MESSAGES 1 +#define HAVE_LIMITS_H 1 +#define HAVE_LOCALE_H 1 +#define HAVE_MBSTATE_T 1 +#define HAVE_MEMORY_H 1 +#define HAVE_MIXEDGAUGE 1 +#define HAVE_MMAP 1 +#define HAVE_MUNMAP 1 +#define HAVE_NL_TYPES_H 1 +#define HAVE_PUTENV 1 +#define HAVE_RC_FILE 1 +#define HAVE_SEARCH_H 1 +#define HAVE_SETENV 1 +#define HAVE_SETLOCALE 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STPCPY 1 +#define HAVE_STRCASECMP 1 +#define HAVE_STRCHR 1 +#define HAVE_STRDUP 1 +#define HAVE_STRFTIME 1 +#define HAVE_STRINGS_H 1 +#define HAVE_STRING_H 1 +#define HAVE_STRTOUL 1 +#define HAVE_SYS_PARAM_H 1 +#define HAVE_SYS_STAT_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_SYS_WAIT_H 1 +#define HAVE_TERM_H 1 +#define HAVE_TSEARCH 1 +#define HAVE_TYPE_CHTYPE 1 +#define HAVE_UNCTRL_H 1 +#define HAVE_UNISTD_H 1 +#define HAVE_USE_DEFAULT_COLORS 1 +#define HAVE_WAITPID 1 +#define HAVE_WGET_WCH 1 +#define HAVE_XDIALOG 1 +#define HAVE__NC_FREE_AND_EXIT 1 +#define ICONV_CONST const +#define MIXEDCASE_FILENAMES 1 +#define NCURSES 1 +#define NEED_WCHAR_H 1 +#define PACKAGE "dialog" +#define RETSIGTYPE void +#define STDC_HEADERS 1 +#define SYSTEM_NAME "freebsd9.0" +#define TIME_WITH_SYS_TIME 1 +#define TYPE_CHTYPE_IS_SCALAR 1 Modified: projects/binutils-2.17/gnu/usr.bin/dialog/Makefile ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/dialog/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/gnu/usr.bin/dialog/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -1,17 +1,13 @@ -# Makefile for dialog # $FreeBSD$ -.include - -.if ${MK_EXAMPLES} != "no" -SUBDIR= TESTS -.endif - +DIALOG= ${.CURDIR}/../../../contrib/dialog PROG= dialog -CFLAGS+= -Wall -Wstrict-prototypes - DPADD= $(LIBDIALOG) $(LIBNCURSES) -LDADD= -ldialog -lncurses +LDADD= -ldialog -lncursesw -lm +CFLAGS+= -I${.CURDIR} -I${DIALOG} +.PATH: ${DIALOG} + +WARNS?= 3 .include Modified: projects/binutils-2.17/include/assert.h ============================================================================== --- projects/binutils-2.17/include/assert.h Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/include/assert.h Thu Jan 13 21:06:30 2011 (r217376) @@ -58,6 +58,6 @@ #ifndef _ASSERT_H_ #define _ASSERT_H_ __BEGIN_DECLS -void __assert(const char *, const char *, int, const char *); +void __assert(const char *, const char *, int, const char *) __dead2; __END_DECLS #endif /* !_ASSERT_H_ */ Modified: projects/binutils-2.17/lib/bind/config.mk ============================================================================== --- projects/binutils-2.17/lib/bind/config.mk Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/bind/config.mk Thu Jan 13 21:06:30 2011 (r217376) @@ -65,7 +65,11 @@ CFLAGS+= -I${LIB_BIND_DIR} .endif # Use the right version of the atomic.h file from lib/isc -ISC_ATOMIC_ARCH=${MACHINE_CPUARCH:S/i386/x86_32/:S/amd64/x86_32/} +.if ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "i386" +ISC_ATOMIC_ARCH= x86_32 +.else +ISC_ATOMIC_ARCH= ${MACHINE_CPUARCH} +.endif # Optional features .if ${MK_BIND_LARGE_FILE} == "yes" Modified: projects/binutils-2.17/lib/csu/amd64/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/amd64/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/amd64/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -12,12 +12,31 @@ CFLAGS+= -fno-omit-frame-pointer all: ${OBJS} CLEANFILES= ${OBJS} +CLEANFILES+= crt1.s gcrt1.s Scrt1.s -gcrt1.o: crt1.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.CURDIR}/crt1.c +# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not +# directly compiled to .o files. -Scrt1.o: crt1.c - ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.CURDIR}/crt1.c +crt1.s: crt1.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crt1.o: crt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crt1.s + +gcrt1.s: crt1.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrt1.o: gcrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1.s + +Scrt1.s: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +Scrt1.o: Scrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} Scrt1.s realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ Modified: projects/binutils-2.17/lib/csu/arm/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/arm/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/arm/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -11,12 +11,31 @@ CFLAGS+= -I${.CURDIR}/../common \ all: ${OBJS} CLEANFILES= ${OBJS} +CLEANFILES+= crt1.s gcrt1.s Scrt1.s -gcrt1.o: crt1.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not +# directly compiled to .o files. -Scrt1.o: crt1.c - ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} +crt1.s: crt1.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crt1.o: crt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crt1.s + +gcrt1.s: crt1.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrt1.o: gcrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1.s + +Scrt1.s: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +Scrt1.o: Scrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} Scrt1.s realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ Modified: projects/binutils-2.17/lib/csu/common/crtbrand.c ============================================================================== --- projects/binutils-2.17/lib/csu/common/crtbrand.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/common/crtbrand.c Thu Jan 13 21:06:30 2011 (r217376) @@ -36,6 +36,23 @@ __FBSDID("$FreeBSD$"); * Special ".note" entry specifying the ABI version. See * http://www.netbsd.org/Documentation/kernel/elf-notes.html * for more information. + * + * For all arches except sparc, gcc emits the section directive for the + * following struct with a PROGBITS type. However, newer versions of binutils + * (after 2.16.90) require the section to be of NOTE type, to guarantee that the + * .note.ABI-tag section correctly ends up in the first page of the final + * executable. + * + * Unfortunately, there is no clean way to tell gcc to use another section type, + * so this C file (or the C file that includes it) must be compiled in multiple + * steps: + * + * - Compile the .c file to a .s file. + * - Edit the .s file to change the 'progbits' type to 'note', for the section + * directive that defines the .note.ABI-tag section. + * - Compile the .s file to an object file. + * + * These steps are done in the invididual Makefiles for each applicable arch. */ static const struct { int32_t namesz; Modified: projects/binutils-2.17/lib/csu/i386-elf/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/i386-elf/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/i386-elf/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -11,19 +11,38 @@ FILESDIR= ${LIBDIR} CFLAGS+= -I${.CURDIR}/../common \ -I${.CURDIR}/../../libc/include CLEANFILES= ${FILES} crt1_c.o crt1_s.o gcrt1_c.o Scrt1_c.o +CLEANFILES+= crt1_c.s gcrt1_c.s Scrt1_c.s -gcrt1_c.o: crt1_c.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1_c.o ${.CURDIR}/crt1_c.c +# See the comment in lib/csu/common/crtbrand.c for the reason crt1_c.c is not +# directly compiled to .o files. + +gcrt1_c.s: crt1_c.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1_c.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrt1_c.o: gcrt1_c.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1_c.s gcrt1.o: gcrt1_c.o crt1_s.o ${LD} ${LDFLAGS} -o gcrt1.o -r crt1_s.o gcrt1_c.o +crt1_c.s: crt1_c.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1_c.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crt1_c.o: crt1_c.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crt1_c.s + crt1.o: crt1_c.o crt1_s.o ${LD} ${LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o objcopy --localize-symbol _start1 crt1.o -Scrt1_c.o: crt1_c.c - ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1_c.o ${.CURDIR}/crt1_c.c +Scrt1_c.s: crt1_c.c + ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1_c.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +Scrt1_c.o: Scrt1_c.s + ${CC} ${CFLAGS} -c -o ${.TARGET} Scrt1_c.s Scrt1.o: Scrt1_c.o crt1_s.o ${LD} ${LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o Modified: projects/binutils-2.17/lib/csu/ia64/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/ia64/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/ia64/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -11,12 +11,20 @@ all: ${OBJS} CLEANFILES= ${OBJS} CLEANFILES+= crt1_.o gcrt1_.o Scrt1_.o CLEANFILES+= crtbrand.o gcrtbrand.o Scrtbrand.o +CLEANFILES+= crtbrand.s gcrtbrand.s Scrtbrand.s crt1_.o: crt1.S ${CC} ${CFLAGS} -c -o ${.TARGET} ${.ALLSRC} -crtbrand.o: crtbrand.c - ${CC} ${CFLAGS} -c -o ${.TARGET} ${.ALLSRC} +# See the comment in lib/csu/common/crtbrand.c for the reason crtbrand.c is not +# directly compiled to .o files. + +crtbrand.s: crtbrand.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.ALLSRC} + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crtbrand.o: crtbrand.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crtbrand.s crt1.o: crt1_.o crtbrand.o ${LD} ${LDFLAGS} -r -o ${.TARGET} crt1_.o crtbrand.o @@ -24,8 +32,12 @@ crt1.o: crt1_.o crtbrand.o gcrt1_.o: crt1.S ${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.ALLSRC} -gcrtbrand.o: crtbrand.c - ${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.ALLSRC} +gcrtbrand.s: crtbrand.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.ALLSRC} + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrtbrand.o: gcrtbrand.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrtbrand.s gcrt1.o: gcrt1_.o gcrtbrand.o ${LD} ${LDFLAGS} -r -o ${.TARGET} ${.ALLSRC} @@ -33,8 +45,12 @@ gcrt1.o: gcrt1_.o gcrtbrand.o Scrt1_.o: crt1.S ${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.ALLSRC} -Scrtbrand.o: crtbrand.c - ${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.ALLSRC} +Scrtbrand.s: crtbrand.c + ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.ALLSRC} + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +Scrtbrand.o: Scrtbrand.s + ${CC} ${CFLAGS} -c -o ${.TARGET} Scrtbrand.s Scrt1.o: Scrt1_.o Scrtbrand.o ${LD} ${LDFLAGS} -r -o ${.TARGET} ${.ALLSRC} Modified: projects/binutils-2.17/lib/csu/mips/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/mips/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/mips/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -11,12 +11,31 @@ CFLAGS+= -I${.CURDIR}/../common \ all: ${OBJS} CLEANFILES= ${OBJS} +CLEANFILES+= crt1.s gcrt1.s Scrt1.s -gcrt1.o: crt1.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not +# directly compiled to .o files. -Scrt1.o: crt1.c - ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} +crt1.s: crt1.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crt1.o: crt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crt1.s + +gcrt1.s: crt1.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrt1.o: gcrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1.s + +Scrt1.s: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +Scrt1.o: Scrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} Scrt1.s realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ Modified: projects/binutils-2.17/lib/csu/powerpc/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/powerpc/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/powerpc/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -11,12 +11,31 @@ CFLAGS+= -I${.CURDIR}/../common \ all: ${OBJS} CLEANFILES= ${OBJS} +CLEANFILES+= crt1.s gcrt1.s Scrt1.s -gcrt1.o: crt1.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not +# directly compiled to .o files. -Scrt1.o: crt1.c - ${CC} ${CFLAGS} -fPIC -DPIC -c -o Scrt1.o ${.ALLSRC} +crt1.s: crt1.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crt1.o: crt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crt1.s + +gcrt1.s: crt1.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrt1.o: gcrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1.s + +Scrt1.s: crt1.c + ${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +Scrt1.o: Scrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} Scrt1.s realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ Modified: projects/binutils-2.17/lib/csu/powerpc64/Makefile ============================================================================== --- projects/binutils-2.17/lib/csu/powerpc64/Makefile Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/csu/powerpc64/Makefile Thu Jan 13 21:06:30 2011 (r217376) @@ -12,9 +12,24 @@ CFLAGS+= -Wall -Wno-unused \ all: ${OBJS} CLEANFILES= ${OBJS} +CLEANFILES+= crt1.s gcrt1.s -gcrt1.o: crt1.c - ${CC} ${CFLAGS} -DGCRT -c -o gcrt1.o ${.ALLSRC} +# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not +# directly compiled to .o files. + +crt1.s: crt1.c + ${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +crt1.o: crt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} crt1.s + +gcrt1.s: crt1.c + ${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c + sed -i "" -e '/\.note\.ABI-tag/s/progbits/note/' ${.TARGET} + +gcrt1.o: gcrt1.s + ${CC} ${CFLAGS} -c -o ${.TARGET} gcrt1.s realinstall: ${INSTALL} -o ${LIBOWN} -g ${LIBGRP} -m ${LIBMODE} \ Modified: projects/binutils-2.17/lib/libthr/pthread.map ============================================================================== --- projects/binutils-2.17/lib/libthr/pthread.map Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/libthr/pthread.map Thu Jan 13 21:06:30 2011 (r217376) @@ -382,6 +382,8 @@ FBSDprivate_1.0 { _thread_size_key; _thread_state_running; _thread_state_zoombie; + + __pthread_map_stacks_exec; }; FBSD_1.1 { Modified: projects/binutils-2.17/lib/libthr/thread/thr_create.c ============================================================================== --- projects/binutils-2.17/lib/libthr/thread/thr_create.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/libthr/thread/thr_create.c Thu Jan 13 21:06:30 2011 (r217376) @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -58,6 +59,7 @@ _pthread_create(pthread_t * thread, cons sigset_t set, oset; cpuset_t *cpusetp = NULL; int cpusetsize = 0; + int old_stack_prot; _thr_check_init(); @@ -96,6 +98,7 @@ _pthread_create(pthread_t * thread, cons new_thread->tid = TID_TERMINATED; + old_stack_prot = _rtld_get_stack_prot(); if (create_stack(&new_thread->attr) != 0) { /* Insufficient memory to create a stack: */ _thr_free(curthread, new_thread); @@ -130,6 +133,14 @@ _pthread_create(pthread_t * thread, cons /* Add the new thread. */ new_thread->refcount = 1; _thr_link(curthread, new_thread); + + /* + * Handle the race between __pthread_map_stacks_exec and + * thread linkage. + */ + if (old_stack_prot != _rtld_get_stack_prot()) + _thr_stack_fix_protection(new_thread); + /* Return thread pointer eariler so that new thread can use it. */ (*thread) = new_thread; if (SHOULD_REPORT_EVENT(curthread, TD_CREATE) || cpusetp != NULL) { Modified: projects/binutils-2.17/lib/libthr/thread/thr_private.h ============================================================================== --- projects/binutils-2.17/lib/libthr/thread/thr_private.h Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/libthr/thread/thr_private.h Thu Jan 13 21:06:30 2011 (r217376) @@ -898,6 +898,7 @@ struct dl_phdr_info; void __pthread_cxa_finalize(struct dl_phdr_info *phdr_info); void _thr_tsd_unload(struct dl_phdr_info *phdr_info) __hidden; void _thr_sigact_unload(struct dl_phdr_info *phdr_info) __hidden; +void _thr_stack_fix_protection(struct pthread *thrd); __END_DECLS Modified: projects/binutils-2.17/lib/libthr/thread/thr_rtld.c ============================================================================== --- projects/binutils-2.17/lib/libthr/thread/thr_rtld.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/libthr/thread/thr_rtld.c Thu Jan 13 21:06:30 2011 (r217376) @@ -31,6 +31,8 @@ * A lockless rwlock for rtld. */ #include +#include +#include #include #include @@ -194,6 +196,9 @@ _thr_rtld_init(void) /* force to resolve memcpy PLT */ memcpy(&dummy, &dummy, sizeof(dummy)); + mprotect(NULL, 0, 0); + _rtld_get_stack_prot(); + li.lock_create = _thr_rtld_lock_create; li.lock_destroy = _thr_rtld_lock_destroy; li.rlock_acquire = _thr_rtld_rlock_acquire; Modified: projects/binutils-2.17/lib/libthr/thread/thr_sig.c ============================================================================== --- projects/binutils-2.17/lib/libthr/thread/thr_sig.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/libthr/thread/thr_sig.c Thu Jan 13 21:06:30 2011 (r217376) @@ -321,7 +321,7 @@ check_deferred_signal(struct pthread *cu if (__predict_true(curthread->deferred_siginfo.si_signo == 0)) return; getcontext(&uc); - if (curthread->deferred_siginfo.si_signo == 0) { + if (curthread->deferred_siginfo.si_signo != 0) { act = curthread->deferred_sigact; uc.uc_sigmask = curthread->deferred_sigmask; memcpy(&info, &curthread->deferred_siginfo, sizeof(siginfo_t)); Modified: projects/binutils-2.17/lib/libthr/thread/thr_stack.c ============================================================================== --- projects/binutils-2.17/lib/libthr/thread/thr_stack.c Thu Jan 13 20:44:31 2011 (r217375) +++ projects/binutils-2.17/lib/libthr/thread/thr_stack.c Thu Jan 13 21:06:30 2011 (r217376) @@ -30,8 +30,11 @@ #include #include #include +#include +#include #include #include +#include #include "thr_private.h" @@ -128,6 +131,62 @@ round_up(size_t size) return size; } +void +_thr_stack_fix_protection(struct pthread *thrd) +{ + + mprotect((char *)thrd->attr.stackaddr_attr + + round_up(thrd->attr.guardsize_attr), + round_up(thrd->attr.stacksize_attr), + _rtld_get_stack_prot()); +} + +static void +singlethread_map_stacks_exec(void) +{ + int mib[2]; + struct rlimit rlim; + u_long usrstack; + size_t len; + + mib[0] = CTL_KERN; + mib[1] = KERN_USRSTACK; + len = sizeof(usrstack); + if (sysctl(mib, sizeof(mib) / sizeof(mib[0]), &usrstack, &len, NULL, 0) + == -1) + return; + if (getrlimit(RLIMIT_STACK, &rlim) == -1) + return; + mprotect((void *)(uintptr_t)(usrstack - rlim.rlim_cur), + rlim.rlim_cur, _rtld_get_stack_prot()); +} + +void __pthread_map_stacks_exec(void); +void +__pthread_map_stacks_exec(void) +{ + struct pthread *curthread, *thrd; + struct stack *st; + + if (!_thr_is_inited()) { + singlethread_map_stacks_exec(); + return; + } + curthread = _get_curthread(); + THREAD_LIST_RDLOCK(curthread); + LIST_FOREACH(st, &mstackq, qe) + mprotect((char *)st->stackaddr + st->guardsize, st->stacksize, + _rtld_get_stack_prot()); + LIST_FOREACH(st, &dstackq, qe) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 21:17:59 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5D202106566C; Thu, 13 Jan 2011 21:17:59 +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 4C56B8FC15; Thu, 13 Jan 2011 21:17:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DLHxHN063855; Thu, 13 Jan 2011 21:17:59 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DLHxSu063853; Thu, 13 Jan 2011 21:17:59 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101132117.p0DLHxSu063853@svn.freebsd.org> From: Dimitry Andric Date: Thu, 13 Jan 2011 21:17:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217377 - projects/binutils-2.17/contrib/binutils/ld/emultempl X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 21:17:59 -0000 Author: dim Date: Thu Jan 13 21:17:59 2011 New Revision: 217377 URL: http://svn.freebsd.org/changeset/base/217377 Log: Remove temporary kludge from r217260, as the .note.ABI-tag sections in crt1.o, gcrt1.o and Scrt1.o will now have the correct type, due to the changes in r217375. Modified: projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Modified: projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em ============================================================================== --- projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Thu Jan 13 21:06:30 2011 (r217376) +++ projects/binutils-2.17/contrib/binutils/ld/emultempl/elf32.em Thu Jan 13 21:17:59 2011 (r217377) @@ -1540,7 +1540,8 @@ gld${EMULATION_NAME}_place_orphan (asect if ((s->flags & SEC_ALLOC) == 0) ; else if ((s->flags & SEC_LOAD) != 0 - && CONST_STRNEQ (secname, ".note")) + && ((iself && sh_type == SHT_NOTE) + || (!iself && CONST_STRNEQ (secname, ".note")))) place = &hold[orphan_interp]; else if ((s->flags & (SEC_LOAD | SEC_HAS_CONTENTS)) == 0) place = &hold[orphan_bss]; From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 21:32:38 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1AB7C106564A; Thu, 13 Jan 2011 21:32:38 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0A43B8FC15; Thu, 13 Jan 2011 21:32:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DLWbq4064193; Thu, 13 Jan 2011 21:32:37 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DLWbtc064191; Thu, 13 Jan 2011 21:32:37 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101132132.p0DLWbtc064191@svn.freebsd.org> From: Alexander Motin Date: Thu, 13 Jan 2011 21:32:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217378 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 21:32:38 -0000 Author: mav Date: Thu Jan 13 21:32:37 2011 New Revision: 217378 URL: http://svn.freebsd.org/changeset/base/217378 Log: If we found no matching transformation module - send volume down even immediately to release root mount. Modified: projects/graid/head/sys/geom/raid/g_raid.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 13 21:17:59 2011 (r217377) +++ projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 13 21:32:37 2011 (r217378) @@ -1397,8 +1397,10 @@ int g_raid_start_volume(struct g_raid_vo if (class == NULL) { G_RAID_DEBUG(1, "No transformation module found for %s.", vol->v_name); - g_raid_change_volume_state(vol, G_RAID_VOLUME_S_UNSUPPORTED); vol->v_tr = NULL; + g_raid_change_volume_state(vol, G_RAID_VOLUME_S_UNSUPPORTED); + g_raid_event_send(vol, G_RAID_VOLUME_E_DOWN, + G_RAID_EVENT_VOLUME); return (-1); } vol->v_tr = obj; From owner-svn-src-projects@FreeBSD.ORG Thu Jan 13 21:53:51 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C273C106566C; Thu, 13 Jan 2011 21:53:51 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 97D538FC1F; Thu, 13 Jan 2011 21:53:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0DLrpC7064686; Thu, 13 Jan 2011 21:53:51 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0DLrpAG064684; Thu, 13 Jan 2011 21:53:51 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101132153.p0DLrpAG064684@svn.freebsd.org> From: Alexander Motin Date: Thu, 13 Jan 2011 21:53:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217380 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 13 Jan 2011 21:53:51 -0000 Author: mav Date: Thu Jan 13 21:53:51 2011 New Revision: 217380 URL: http://svn.freebsd.org/changeset/base/217380 Log: Fix some math bugs in sizes calculations. Modified: projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Jan 13 21:49:14 2011 (r217379) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Jan 13 21:53:51 2011 (r217380) @@ -46,7 +46,7 @@ struct intel_raid_map { uint32_t offset; uint32_t disk_sectors; uint32_t stripe_count; - uint16_t stripe_sectors; + uint16_t strip_sectors; uint8_t status; #define INTEL_S_READY 0x00 #define INTEL_S_DISABLED 0x01 @@ -278,7 +278,7 @@ g_raid_md_intel_print(struct intel_raid_ printf(" offset %u\n", mmap->offset); printf(" disk_sectors %u\n", mmap->disk_sectors); printf(" stripe_count %u\n", mmap->stripe_count); - printf(" stripe_sectors %u\n", mmap->stripe_sectors); + printf(" strip_sectors %u\n", mmap->strip_sectors); printf(" status %u\n", mmap->status); printf(" type %u\n", mmap->type); printf(" total_disks %u\n", mmap->total_disks); @@ -561,14 +561,14 @@ g_raid_md_intel_start(struct g_raid_soft else vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; - vol->v_strip_size = mmap->stripe_sectors * 512; //ZZZ + vol->v_strip_size = (u_int)mmap->strip_sectors * 512; //ZZZ vol->v_disks_count = mmap->total_disks; - vol->v_mediasize = mvol->total_sectors * 512; //ZZZ + vol->v_mediasize = (off_t)mvol->total_sectors * 512; //ZZZ vol->v_sectorsize = 512; //ZZZ for (j = 0; j < vol->v_disks_count; j++) { sd = &vol->v_subdisks[j]; - sd->sd_offset = mmap->offset * 512; //ZZZ - sd->sd_size = mmap->disk_sectors; + sd->sd_offset = (off_t)mmap->offset * 512; //ZZZ + sd->sd_size = (off_t)mmap->disk_sectors * 512; //ZZZ } g_raid_start_volume(vol); } @@ -1362,8 +1362,7 @@ g_raid_md_write_intel(struct g_raid_md_o mvol->total_sectors = vol->v_mediasize / sectorsize; mmap->offset = sd->sd_offset / sectorsize; mmap->disk_sectors = sd->sd_size / sectorsize; - mmap->stripe_count = sd->sd_size / vol->v_strip_size; - mmap->stripe_sectors = vol->v_strip_size / sectorsize; + mmap->strip_sectors = vol->v_strip_size / sectorsize; mmap->status = INTEL_S_READY; if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) mmap->type = INTEL_T_RAID0; @@ -1379,6 +1378,8 @@ g_raid_md_write_intel(struct g_raid_md_o mmap->total_domains = vol->v_disks_count; else mmap->total_domains = 1; + mmap->stripe_count = sd->sd_size / vol->v_strip_size / + mmap->total_domains; mmap->failed_disk_num = 0xff; mmap->ddf = 1; for (sdi = 0; sdi < vol->v_disks_count; sdi++) { From owner-svn-src-projects@FreeBSD.ORG Fri Jan 14 05:25:45 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0E6C8106566C; Fri, 14 Jan 2011 05:25:45 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F1FB98FC19; Fri, 14 Jan 2011 05:25:44 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0E5Pib8075901; Fri, 14 Jan 2011 05:25:44 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0E5PiZb075899; Fri, 14 Jan 2011 05:25:44 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201101140525.p0E5PiZb075899@svn.freebsd.org> From: Warner Losh Date: Fri, 14 Jan 2011 05:25:44 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217389 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Jan 2011 05:25:45 -0000 Author: imp Date: Fri Jan 14 05:25:44 2011 New Revision: 217389 URL: http://svn.freebsd.org/changeset/base/217389 Log: Fix bug in overlaps that Pawel pointed out. Modified: projects/graid/head/sys/geom/raid/g_raid.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 04:24:53 2011 (r217388) +++ projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 05:25:44 2011 (r217389) @@ -733,7 +733,7 @@ g_raid_start(struct bio *bp) } static int -g_raid_bio_overlaps(const struct bio *bp, off_t off, off_t len) +g_raid_bio_overlaps(const struct bio *bp, off_t lstart, off_t len) { /* * 5 cases: @@ -750,10 +750,13 @@ g_raid_bio_overlaps(const struct bio *bp * (4) 12-14: passes both ifs * (5) 19-20: passes both */ + off_t lend = lstart + len - 1; + off_t bstart = bp->bio_offset; + off_t bend = bp->bio_offset + bp->bio_length - 1; - if (bp->bio_offset + bp->bio_length - 1 < off) + if (bend < lstart) return (0); - if (bp->bio_offset < off + len - 1) + if (lend < bstart) return (0); return (1); } From owner-svn-src-projects@FreeBSD.ORG Fri Jan 14 16:42:13 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D176B10656B0; Fri, 14 Jan 2011 16:42:13 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BF8228FC23; Fri, 14 Jan 2011 16:42:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0EGgD65094163; Fri, 14 Jan 2011 16:42:13 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0EGgDsM094159; Fri, 14 Jan 2011 16:42:13 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101141642.p0EGgDsM094159@svn.freebsd.org> From: Alexander Motin Date: Fri, 14 Jan 2011 16:42:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217409 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Jan 2011 16:42:14 -0000 Author: mav Date: Fri Jan 14 16:42:13 2011 New Revision: 217409 URL: http://svn.freebsd.org/changeset/base/217409 Log: Change disks, subdisks and volumes lists from LIST_ to TAILQ_. For now tail insertion fixes volumes and subdisks reordering on every metadata parse. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/md_intel.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 16:30:22 2011 (r217408) +++ projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 16:42:13 2011 (r217409) @@ -455,7 +455,7 @@ g_raid_ndisks(struct g_raid_softc *sc, i sx_assert(&sc->sc_lock, SX_LOCKED); n = 0; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_state == state || state == -1) n++; } @@ -601,7 +601,7 @@ g_raid_bump_syncid(struct g_raid_softc * sc->sc_syncid++; G_RAID_DEBUG(1, "Device %s: syncid bumped to %u.", sc->sc_name, sc->sc_syncid); - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_state == G_RAID_DISK_S_ACTIVE || disk->d_state == G_RAID_DISK_S_SYNCHRONIZING) { // g_raid_update_metadata(disk); @@ -625,7 +625,7 @@ g_raid_bump_genid(struct g_raid_softc *s sc->sc_genid++; G_RAID_DEBUG(1, "Device %s: genid bumped to %u.", sc->sc_name, sc->sc_genid); - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_state == G_RAID_DISK_S_ACTIVE || disk->d_state == G_RAID_DISK_S_SYNCHRONIZING) { disk->d_genid = sc->sc_genid; @@ -662,7 +662,7 @@ g_raid_idle(struct g_raid_volume *vol, i } vol->v_idle = 1; // ZZZ - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_state != G_RAID_DISK_S_ACTIVE) continue; G_RAID_DEBUG(1, "Disk %s (device %s) marked as clean.", @@ -688,7 +688,7 @@ g_raid_unidle(struct g_raid_volume *vol) vol->v_idle = 0; vol->v_last_write = time_uptime; //ZZZ - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_state != G_RAID_DISK_S_ACTIVE) continue; G_RAID_DEBUG(1, "Disk %s (device %s) marked as dirty.", @@ -1120,7 +1120,7 @@ g_raid_launch_provider(struct g_raid_vol pp->stripesize = 0; pp->stripeoffset = 0; #if 0 - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_consumer && disk->d_consumer->provider && disk->d_consumer->provider->stripesize > pp->stripesize) { pp->stripesize = disk->d_consumer->provider->stripesize; @@ -1312,8 +1312,8 @@ g_raid_create_node(struct g_class *mp, sc->sc_md = md; sc->sc_geom = gp; sc->sc_flags = 0; - LIST_INIT(&sc->sc_volumes); - LIST_INIT(&sc->sc_disks); + TAILQ_INIT(&sc->sc_volumes); + TAILQ_INIT(&sc->sc_disks); sx_init(&sc->sc_lock, "gmirror:lock"); mtx_init(&sc->sc_queue_mtx, "gmirror:queue", NULL, MTX_DEF); TAILQ_INIT(&sc->sc_events); @@ -1361,7 +1361,7 @@ g_raid_create_volume(struct g_raid_softc callout_reset(&vol->v_start_co, g_raid_start_timeout * hz, g_raid_go, vol); vol->v_starting = 1; - LIST_INSERT_HEAD(&sc->sc_volumes, vol, v_next); + TAILQ_INSERT_TAIL(&sc->sc_volumes, vol, v_next); return (vol); } @@ -1374,8 +1374,8 @@ g_raid_create_disk(struct g_raid_softc * disk = malloc(sizeof(*disk), M_RAID, M_WAITOK | M_ZERO); disk->d_softc = sc; disk->d_state = G_RAID_DISK_S_NONE; - LIST_INIT(&disk->d_subdisks); - LIST_INSERT_HEAD(&sc->sc_disks, disk, d_next); + TAILQ_INIT(&disk->d_subdisks); + TAILQ_INSERT_TAIL(&sc->sc_disks, disk, d_next); return (disk); } @@ -1418,13 +1418,13 @@ g_raid_destroy_node(struct g_raid_softc int error = 0; sc->sc_stopping = 1; - LIST_FOREACH_SAFE(vol, &sc->sc_volumes, v_next, tmpv) { + TAILQ_FOREACH_SAFE(vol, &sc->sc_volumes, v_next, tmpv) { if (g_raid_destroy_volume(vol)) error = EBUSY; } if (error) return (error); - LIST_FOREACH_SAFE(disk, &sc->sc_disks, d_next, tmpd) { + TAILQ_FOREACH_SAFE(disk, &sc->sc_disks, d_next, tmpd) { if (g_raid_destroy_disk(disk)) error = EBUSY; } @@ -1464,6 +1464,7 @@ int g_raid_destroy_volume(struct g_raid_volume *vol) { struct g_raid_softc *sc; + struct g_raid_disk *disk; int i; sc = vol->v_softc; @@ -1490,11 +1491,12 @@ g_raid_destroy_volume(struct g_raid_volu if (vol->v_rootmount) root_mount_rel(vol->v_rootmount); callout_drain(&vol->v_start_co); - LIST_REMOVE(vol, v_next); + TAILQ_REMOVE(&sc->sc_volumes, vol, v_next); for (i = 0; i < G_RAID_MAX_SUBDISKS; i++) { - if (vol->v_subdisks[i].sd_disk == NULL) + disk = vol->v_subdisks[i].sd_disk; + if (disk == NULL) continue; - LIST_REMOVE(&vol->v_subdisks[i], sd_next); + TAILQ_REMOVE(&disk->d_subdisks, &vol->v_subdisks[i], sd_next); } G_RAID_DEBUG(2, "Volume %s destroyed.", vol->v_name); free(vol, M_RAID); @@ -1517,13 +1519,13 @@ g_raid_destroy_disk(struct g_raid_disk * g_topology_unlock(); disk->d_consumer = NULL; } - LIST_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) { + TAILQ_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) { g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, G_RAID_EVENT_SUBDISK); - LIST_REMOVE(sd, sd_next); + TAILQ_REMOVE(&disk->d_subdisks, sd, sd_next); sd->sd_disk = NULL; } - LIST_REMOVE(disk, d_next); + TAILQ_REMOVE(&sc->sc_disks, disk, d_next); if (sc->sc_md) G_RAID_MD_FREE_DISK(sc->sc_md, disk); free(disk, M_RAID); @@ -1543,7 +1545,7 @@ g_raid_destroy(struct g_raid_softc *sc, /* Count open volumes. */ opens = 0; - LIST_FOREACH(vol, &sc->sc_volumes, v_next) { + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (vol->v_provider_open != 0) opens++; } @@ -1714,12 +1716,12 @@ g_raid_dumpconf(struct sbuf *sb, const c sx_xlock(&sc->sc_lock); sbuf_printf(sb, "%s%s", indent, g_raid_disk_state2str(disk->d_state)); - if (!LIST_EMPTY(&disk->d_subdisks)) { + if (!TAILQ_EMPTY(&disk->d_subdisks)) { sbuf_printf(sb, " ("); - LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { sbuf_printf(sb, "%s", g_raid_subdisk_state2str(sd->sd_state)); - if (LIST_NEXT(sd, sd_next)) + if (TAILQ_NEXT(sd, sd_next)) sbuf_printf(sb, ", "); } sbuf_printf(sb, ")"); @@ -1734,9 +1736,9 @@ g_raid_dumpconf(struct sbuf *sb, const c sbuf_printf(sb, "%s%s\n", indent, sc->sc_md->mdo_class->name); } - if (!LIST_EMPTY(&sc->sc_volumes)) { + if (!TAILQ_EMPTY(&sc->sc_volumes)) { s = 0xff; - LIST_FOREACH(vol, &sc->sc_volumes, v_next) { + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (vol->v_state < s) s = vol->v_state; } Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Fri Jan 14 16:30:22 2011 (r217408) +++ projects/graid/head/sys/geom/raid/g_raid.h Fri Jan 14 16:42:13 2011 (r217409) @@ -115,8 +115,8 @@ struct g_raid_disk { uint64_t d_flags; /* Additional flags. */ u_int d_load; /* Disk average load. */ off_t d_last_offset; /* Last head offset. */ - LIST_HEAD(, g_raid_subdisk) d_subdisks; /* List of subdisks. */ - LIST_ENTRY(g_raid_disk) d_next; /* Next disk in the node. */ + TAILQ_HEAD(, g_raid_subdisk) d_subdisks; /* List of subdisks. */ + TAILQ_ENTRY(g_raid_disk) d_next; /* Next disk in the node. */ }; #define G_RAID_SUBDISK_S_NONE 0x00 @@ -137,7 +137,7 @@ struct g_raid_subdisk { u_int sd_pos; /* Position in volume. */ u_int sd_state; /* Subdisk state. */ int sd_read_errs; /* Count of the read errors */ - LIST_ENTRY(g_raid_subdisk) sd_next; /* Next subdisk on disk. */ + TAILQ_ENTRY(g_raid_subdisk) sd_next; /* Next subdisk on disk. */ }; #define G_RAID_MAX_SUBDISKS 16 @@ -205,15 +205,15 @@ struct g_raid_volume { int v_starting; /* STARTING state timer armed */ int v_stopping; /* Volume is stopping */ int v_provider_open; /* Number of opens. */ - LIST_ENTRY(g_raid_volume) v_next; /* List of volumes entry. */ + TAILQ_ENTRY(g_raid_volume) v_next; /* List of volumes entry. */ }; struct g_raid_softc { struct g_raid_md_object *sc_md; /* Metadata object. */ struct g_geom *sc_geom; /* GEOM class instance. */ uint64_t sc_flags; /* Additional flags. */ - LIST_HEAD(, g_raid_volume) sc_volumes; /* List of volumes. */ - LIST_HEAD(, g_raid_disk) sc_disks; /* List of disks. */ + TAILQ_HEAD(, g_raid_volume) sc_volumes; /* List of volumes. */ + TAILQ_HEAD(, g_raid_disk) sc_disks; /* List of disks. */ struct sx sc_lock; /* Main node lock. */ struct proc *sc_worker; /* Worker process. */ struct mtx sc_queue_mtx; /* Worker queues lock. */ Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Fri Jan 14 16:30:22 2011 (r217408) +++ projects/graid/head/sys/geom/raid/md_intel.c Fri Jan 14 16:42:13 2011 (r217409) @@ -452,7 +452,7 @@ g_raid_md_intel_get_disk(struct g_raid_s struct g_raid_disk *disk; struct g_raid_md_intel_perdisk *pd; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; if (pd->pd_disk_pos == id) break; @@ -465,7 +465,7 @@ g_raid_md_intel_get_volume(struct g_raid { struct g_raid_volume *mvol; - LIST_FOREACH(mvol, &sc->sc_volumes, v_next) { + TAILQ_FOREACH(mvol, &sc->sc_volumes, v_next) { if ((intptr_t)(mvol->v_md_data) == id) break; } @@ -519,7 +519,7 @@ g_raid_md_intel_start_disk(struct g_raid /* Welcome the "new" disk. */ g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); - LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } @@ -593,12 +593,12 @@ g_raid_md_intel_start(struct g_raid_soft vol = g_raid_md_intel_get_volume(sc, i); sd = &vol->v_subdisks[j]; sd->sd_disk = disk; - LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); + TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); } } /* Make existing disks take their places. */ - LIST_FOREACH_SAFE(disk, &sc->sc_disks, d_next, tmpdisk) { + TAILQ_FOREACH_SAFE(disk, &sc->sc_disks, d_next, tmpdisk) { if (disk->d_state == G_RAID_DISK_S_NONE) g_raid_md_intel_start_disk(disk); } @@ -860,7 +860,7 @@ g_raid_md_event_intel(struct g_raid_md_o g_topology_unlock(); disk->d_consumer = NULL; } - LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, G_RAID_EVENT_SUBDISK); } @@ -1054,13 +1054,13 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_raid_start_volume(vol); /* , and subdisks. */ - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; sd = &vol->v_subdisks[pd->pd_disk_pos]; sd->sd_disk = disk; sd->sd_offset = 0; sd->sd_size = size; - LIST_INSERT_HEAD(&disk->d_subdisks, sd, sd_next); + TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); @@ -1086,7 +1086,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (strncmp(diskname, "/dev/", 5) == 0) diskname += 5; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { if (disk->d_consumer != NULL && disk->d_consumer->provider != NULL && strcmp(disk->d_consumer->provider->name, @@ -1113,7 +1113,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_topology_unlock(); disk->d_consumer = NULL; } - LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, G_RAID_EVENT_SUBDISK); } @@ -1140,7 +1140,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj } for (i = 1; i < *nargs; i++) { /* Look for empty disk slot. */ - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *) disk->d_md_data; if (pd->pd_disk_pos < 0) @@ -1196,7 +1196,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj g_topology_unlock(); /* Make sure disk is big enough. */ - LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { if (sd->sd_offset + sd->sd_size + 4096 > pp->mediasize) { gctl_error(req, @@ -1236,7 +1236,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj /* Welcome the "new" disk. */ g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); - LIST_FOREACH(sd, &disk->d_subdisks, sd_next) { + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } @@ -1273,7 +1273,7 @@ g_raid_md_write_intel(struct g_raid_md_o /* Count number of disks. */ numdisks = 0; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; if (pd->pd_disk_pos < 0) continue; @@ -1304,7 +1304,7 @@ g_raid_md_write_intel(struct g_raid_md_o meta->generation = mdi->mdio_generation; meta->attributes = INTEL_ATTR_CHECKSUM; meta->total_disks = numdisks; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; if (pd->pd_disk_pos < 0) continue; @@ -1314,7 +1314,7 @@ g_raid_md_write_intel(struct g_raid_md_o /* Fill volumes and maps. */ vi = 0; version = INTEL_VERSION_1000; - LIST_FOREACH(vol, &sc->sc_volumes, v_next) { + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { mvol = intel_get_volume(meta, vi); mmap = intel_get_map(mvol, 0); @@ -1405,7 +1405,7 @@ g_raid_md_write_intel(struct g_raid_md_o if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_INTEL); mdi->mdio_meta = meta; - LIST_FOREACH(disk, &sc->sc_disks, d_next) { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_intel_perdisk *)disk->d_md_data; if (disk->d_state != G_RAID_DISK_S_ACTIVE) continue; From owner-svn-src-projects@FreeBSD.ORG Fri Jan 14 18:43:14 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7FAF7106566B; Fri, 14 Jan 2011 18:43:14 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6E41D8FC14; Fri, 14 Jan 2011 18:43:14 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0EIhEUp096987; Fri, 14 Jan 2011 18:43:14 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0EIhEBc096984; Fri, 14 Jan 2011 18:43:14 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101141843.p0EIhEBc096984@svn.freebsd.org> From: Alexander Motin Date: Fri, 14 Jan 2011 18:43:14 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217411 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Jan 2011 18:43:14 -0000 Author: mav Date: Fri Jan 14 18:43:14 2011 New Revision: 217411 URL: http://svn.freebsd.org/changeset/base/217411 Log: Remake providers naming. Assign numbers at volumes creation time, not on providers creation. This makes ordering more predictable. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 17:06:54 2011 (r217410) +++ projects/graid/head/sys/geom/raid/g_raid.c Fri Jan 14 18:43:14 2011 (r217411) @@ -85,6 +85,9 @@ LIST_HEAD(, g_raid_md_class) g_raid_md_c LIST_HEAD(, g_raid_tr_class) g_raid_tr_classes = LIST_HEAD_INITIALIZER(g_raid_tr_classes); +LIST_HEAD(, g_raid_volume) g_raid_volumes = + LIST_HEAD_INITIALIZER(g_raid_volumes); + //static eventhandler_tag g_raid_pre_sync = NULL; static int g_raid_destroy_geom(struct gctl_req *req, struct g_class *mp, @@ -1096,7 +1099,6 @@ g_raid_launch_provider(struct g_raid_vol struct g_raid_softc *sc; struct g_provider *pp; char name[G_RAID_MAX_VOLUMENAME]; - int i; sc = vol->v_softc; sx_assert(&sc->sc_lock, SX_LOCKED); @@ -1106,12 +1108,8 @@ g_raid_launch_provider(struct g_raid_vol snprintf(name, sizeof(name), "raid/%s", vol->v_name); if (g_raid_name_format == 0 || vol->v_name[0] == 0 || g_provider_by_name(name) != NULL) { - /* Otherwise find first free name. */ - for (i = 0; ; i++) { - snprintf(name, sizeof(name), "raid/r%d", i); - if (g_provider_by_name(name) == NULL) - break; - } + /* Otherwise use sequential volume number. */ + snprintf(name, sizeof(name), "raid/r%d", vol->v_global_id); } pp = g_new_providerf(sc->sc_geom, "%s", name); pp->private = vol; @@ -1337,7 +1335,7 @@ g_raid_create_node(struct g_class *mp, struct g_raid_volume * g_raid_create_volume(struct g_raid_softc *sc, const char *name) { - struct g_raid_volume *vol; + struct g_raid_volume *vol, *vol1; int i; G_RAID_DEBUG(1, "Creating volume %s.", name); @@ -1355,6 +1353,22 @@ g_raid_create_volume(struct g_raid_softc vol->v_subdisks[i].sd_pos = i; vol->v_subdisks[i].sd_state = G_RAID_DISK_S_NONE; } + + /* Find free ID for this volume. */ + g_topology_lock(); + for (i = 0; ; i++) { + LIST_FOREACH(vol1, &g_raid_volumes, v_global_next) { + if (vol1->v_global_id == i) + break; + } + if (vol1 == NULL) + break; + } + vol->v_global_id = i; + LIST_INSERT_HEAD(&g_raid_volumes, vol, v_global_next); + g_topology_unlock(); + + /* Delay root mounting. */ vol->v_rootmount = root_mount_hold("GRAID"); G_RAID_DEBUG(1, "root_mount_hold %p", vol->v_rootmount); callout_init(&vol->v_start_co, 1); @@ -1491,6 +1505,9 @@ g_raid_destroy_volume(struct g_raid_volu if (vol->v_rootmount) root_mount_rel(vol->v_rootmount); callout_drain(&vol->v_start_co); + g_topology_lock(); + LIST_REMOVE(vol, v_global_next); + g_topology_unlock(); TAILQ_REMOVE(&sc->sc_volumes, vol, v_next); for (i = 0; i < G_RAID_MAX_SUBDISKS; i++) { disk = vol->v_subdisks[i].sd_disk; Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Fri Jan 14 17:06:54 2011 (r217410) +++ projects/graid/head/sys/geom/raid/g_raid.h Fri Jan 14 18:43:14 2011 (r217411) @@ -205,7 +205,9 @@ struct g_raid_volume { int v_starting; /* STARTING state timer armed */ int v_stopping; /* Volume is stopping */ int v_provider_open; /* Number of opens. */ + int v_global_id; /* Global volume ID (rX). */ TAILQ_ENTRY(g_raid_volume) v_next; /* List of volumes entry. */ + LIST_ENTRY(g_raid_volume) v_global_next; /* Global list entry. */ }; struct g_raid_softc { From owner-svn-src-projects@FreeBSD.ORG Sat Jan 15 00:12:52 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0B35E106566C; Sat, 15 Jan 2011 00:12: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 EF22E8FC18; Sat, 15 Jan 2011 00:12:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0F0CpbV006705; Sat, 15 Jan 2011 00:12:51 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0F0Cpak006703; Sat, 15 Jan 2011 00:12:51 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101150012.p0F0Cpak006703@svn.freebsd.org> From: Dimitry Andric Date: Sat, 15 Jan 2011 00:12:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217433 - projects/binutils-2.17/contrib/binutils/bfd X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2011 00:12:52 -0000 Author: dim Date: Sat Jan 15 00:12:51 2011 New Revision: 217433 URL: http://svn.freebsd.org/changeset/base/217433 Log: Backport the second part of the fix for binutils PR ld/4424, which fixes an error in elf_i386_relocate_section, when building the VirtualBox port on i386. The port now builds to completion on i386. A similar amd64 error was already fixed in r217232, but the port does not build to completion there yet, because of another issue. Modified: projects/binutils-2.17/contrib/binutils/bfd/elflink.c Modified: projects/binutils-2.17/contrib/binutils/bfd/elflink.c ============================================================================== --- projects/binutils-2.17/contrib/binutils/bfd/elflink.c Fri Jan 14 23:30:35 2011 (r217432) +++ projects/binutils-2.17/contrib/binutils/bfd/elflink.c Sat Jan 15 00:12:51 2011 (r217433) @@ -858,9 +858,11 @@ _bfd_elf_merge_symbol (bfd *abfd, return FALSE; *sym_hash = h; + bed = get_elf_backend_data (abfd); + /* This code is for coping with dynamic objects, and is only useful if we are doing an ELF link. */ - if (info->hash->creator != abfd->xvec) + if (!(*bed->relocs_compatible) (abfd->xvec, info->hash->creator)) return TRUE; /* For merging, we only care about real symbols. */ @@ -947,7 +949,6 @@ _bfd_elf_merge_symbol (bfd *abfd, && h->root.type != bfd_link_hash_undefweak && h->root.type != bfd_link_hash_common); - bed = get_elf_backend_data (abfd); /* When we try to create a default indirect symbol from the dynamic definition with the default version, we skip it if its type and the type of existing regular definition mismatch. We only do it From owner-svn-src-projects@FreeBSD.ORG Sat Jan 15 00:23:58 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 825851065672; Sat, 15 Jan 2011 00:23:58 +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 6E1E08FC08; Sat, 15 Jan 2011 00:23:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0F0NwQp007112; Sat, 15 Jan 2011 00:23:58 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0F0Nve7007048; Sat, 15 Jan 2011 00:23:57 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201101150023.p0F0Nve7007048@svn.freebsd.org> From: Dimitry Andric Date: Sat, 15 Jan 2011 00:23:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217434 - in projects/binutils-2.17: bin/sh contrib/binutils/ld/emultempl contrib/gcc/config/rs6000 contrib/top lib/csu/i386-elf lib/csu/powerpc lib/csu/powerpc64 lib/libc/powerpc/gen l... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2011 00:23:58 -0000 Author: dim Date: Sat Jan 15 00:23:57 2011 New Revision: 217434 URL: http://svn.freebsd.org/changeset/base/217434 Log: Sync: merge r217376 through r217433 from ^/head. Modified: projects/binutils-2.17/bin/sh/trap.c projects/binutils-2.17/contrib/binutils/ld/emultempl/ppc64elf.em projects/binutils-2.17/contrib/gcc/config/rs6000/crtsavres.asm projects/binutils-2.17/contrib/gcc/config/rs6000/freebsd.h projects/binutils-2.17/contrib/gcc/config/rs6000/rs6000.c projects/binutils-2.17/contrib/gcc/config/rs6000/tramp.asm projects/binutils-2.17/lib/csu/i386-elf/crt1_s.S projects/binutils-2.17/lib/csu/powerpc/crti.S projects/binutils-2.17/lib/csu/powerpc/crtn.S projects/binutils-2.17/lib/csu/powerpc64/crti.S projects/binutils-2.17/lib/csu/powerpc64/crtn.S projects/binutils-2.17/lib/libc/powerpc/gen/_ctx_start.S projects/binutils-2.17/lib/libc/powerpc/gen/_setjmp.S projects/binutils-2.17/lib/libc/powerpc/gen/fabs.S projects/binutils-2.17/lib/libc/powerpc/gen/setjmp.S projects/binutils-2.17/lib/libc/powerpc/gen/sigsetjmp.S projects/binutils-2.17/lib/libc/powerpc/sys/brk.S projects/binutils-2.17/lib/libc/powerpc/sys/cerror.S projects/binutils-2.17/lib/libc/powerpc/sys/exect.S projects/binutils-2.17/lib/libc/powerpc/sys/pipe.S projects/binutils-2.17/lib/libc/powerpc/sys/ptrace.S projects/binutils-2.17/lib/libc/powerpc/sys/sbrk.S projects/binutils-2.17/lib/libc/powerpc/sys/setlogin.S projects/binutils-2.17/lib/libc/powerpc64/gen/_ctx_start.S projects/binutils-2.17/lib/libc/powerpc64/gen/_setjmp.S projects/binutils-2.17/lib/libc/powerpc64/gen/fabs.S projects/binutils-2.17/lib/libc/powerpc64/gen/setjmp.S projects/binutils-2.17/lib/libc/powerpc64/gen/sigsetjmp.S projects/binutils-2.17/lib/libc/powerpc64/sys/brk.S projects/binutils-2.17/lib/libc/powerpc64/sys/cerror.S projects/binutils-2.17/lib/libc/powerpc64/sys/exect.S projects/binutils-2.17/lib/libc/powerpc64/sys/pipe.S projects/binutils-2.17/lib/libc/powerpc64/sys/ptrace.S projects/binutils-2.17/lib/libc/powerpc64/sys/sbrk.S projects/binutils-2.17/lib/libc/powerpc64/sys/setlogin.S projects/binutils-2.17/lib/libcompiler_rt/Makefile projects/binutils-2.17/libexec/rtld-elf/powerpc/rtld_start.S projects/binutils-2.17/libexec/rtld-elf/powerpc64/rtld_start.S projects/binutils-2.17/release/amd64/boot_crunch.conf projects/binutils-2.17/release/i386/boot_crunch.conf projects/binutils-2.17/release/ia64/boot_crunch.conf projects/binutils-2.17/release/pc98/boot_crunch.conf projects/binutils-2.17/release/powerpc/boot_crunch.conf projects/binutils-2.17/release/sparc64/boot_crunch.conf projects/binutils-2.17/release/sun4v/boot_crunch.conf projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c projects/binutils-2.17/sys/amd64/linux32/linux32_sysvec.c projects/binutils-2.17/sys/contrib/pf/net/pf_osfp.c projects/binutils-2.17/sys/dev/alc/if_alc.c projects/binutils-2.17/sys/dev/alc/if_alcvar.h projects/binutils-2.17/sys/dev/dc/dcphy.c projects/binutils-2.17/sys/dev/dc/pnphy.c projects/binutils-2.17/sys/dev/mii/atphy.c projects/binutils-2.17/sys/dev/mii/brgphy.c projects/binutils-2.17/sys/dev/mii/ciphy.c projects/binutils-2.17/sys/dev/mii/e1000phy.c projects/binutils-2.17/sys/dev/mii/ip1000phy.c projects/binutils-2.17/sys/dev/mii/jmphy.c projects/binutils-2.17/sys/dev/mii/mii_physubr.c projects/binutils-2.17/sys/dev/mii/rgephy.c projects/binutils-2.17/sys/dev/mii/xmphy.c projects/binutils-2.17/sys/dev/re/if_re.c projects/binutils-2.17/sys/fs/nfs/nfs_var.h projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdkrpc.c projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdport.c projects/binutils-2.17/sys/fs/nfsserver/nfs_nfsdstate.c projects/binutils-2.17/sys/kern/sched_4bsd.c projects/binutils-2.17/sys/kern/sched_ule.c projects/binutils-2.17/sys/kern/subr_sleepqueue.c projects/binutils-2.17/sys/nfs/nfs_nfssvc.c projects/binutils-2.17/sys/nfs/nfssvc.h projects/binutils-2.17/sys/powerpc/include/vmparam.h projects/binutils-2.17/sys/powerpc/powerpc/elf32_machdep.c projects/binutils-2.17/sys/powerpc/powerpc/elf64_machdep.c projects/binutils-2.17/sys/powerpc/powerpc/exec_machdep.c projects/binutils-2.17/sys/sys/priority.h projects/binutils-2.17/usr.bin/cpuset/cpuset.1 projects/binutils-2.17/usr.bin/cpuset/cpuset.c Directory Properties: projects/binutils-2.17/ (props changed) projects/binutils-2.17/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/contrib/bind9/ (props changed) projects/binutils-2.17/contrib/binutils/ (props changed) projects/binutils-2.17/contrib/bzip2/ (props changed) projects/binutils-2.17/contrib/dialog/ (props changed) projects/binutils-2.17/contrib/ee/ (props changed) projects/binutils-2.17/contrib/expat/ (props changed) projects/binutils-2.17/contrib/file/ (props changed) projects/binutils-2.17/contrib/gdb/ (props changed) projects/binutils-2.17/contrib/gdtoa/ (props changed) projects/binutils-2.17/contrib/gnu-sort/ (props changed) projects/binutils-2.17/contrib/groff/ (props changed) projects/binutils-2.17/contrib/less/ (props changed) projects/binutils-2.17/contrib/libpcap/ (props changed) projects/binutils-2.17/contrib/llvm/ (props changed) projects/binutils-2.17/contrib/llvm/tools/clang/ (props changed) projects/binutils-2.17/contrib/ncurses/ (props changed) projects/binutils-2.17/contrib/netcat/ (props changed) projects/binutils-2.17/contrib/ntp/ (props changed) projects/binutils-2.17/contrib/one-true-awk/ (props changed) projects/binutils-2.17/contrib/openbsm/ (props changed) projects/binutils-2.17/contrib/openpam/ (props changed) projects/binutils-2.17/contrib/pf/ (props changed) projects/binutils-2.17/contrib/sendmail/ (props changed) projects/binutils-2.17/contrib/tcpdump/ (props changed) projects/binutils-2.17/contrib/tcsh/ (props changed) projects/binutils-2.17/contrib/top/ (props changed) projects/binutils-2.17/contrib/top/install-sh (props changed) projects/binutils-2.17/contrib/tzcode/stdtime/ (props changed) projects/binutils-2.17/contrib/tzcode/zic/ (props changed) projects/binutils-2.17/contrib/tzdata/ (props changed) projects/binutils-2.17/contrib/wpa/ (props changed) projects/binutils-2.17/contrib/xz/ (props changed) projects/binutils-2.17/crypto/openssh/ (props changed) projects/binutils-2.17/crypto/openssl/ (props changed) projects/binutils-2.17/lib/libc/ (props changed) projects/binutils-2.17/lib/libc/stdtime/ (props changed) projects/binutils-2.17/lib/libutil/ (props changed) projects/binutils-2.17/lib/libz/ (props changed) projects/binutils-2.17/sbin/ (props changed) projects/binutils-2.17/sbin/ipfw/ (props changed) projects/binutils-2.17/share/mk/bsd.arch.inc.mk (props changed) projects/binutils-2.17/share/zoneinfo/ (props changed) projects/binutils-2.17/sys/ (props changed) projects/binutils-2.17/sys/amd64/include/xen/ (props changed) projects/binutils-2.17/sys/cddl/contrib/opensolaris/ (props changed) projects/binutils-2.17/sys/contrib/dev/acpica/ (props changed) projects/binutils-2.17/sys/contrib/octeon-sdk/ (props changed) projects/binutils-2.17/sys/contrib/pf/ (props changed) projects/binutils-2.17/sys/contrib/x86emu/ (props changed) projects/binutils-2.17/usr.bin/calendar/ (props changed) projects/binutils-2.17/usr.bin/csup/ (props changed) projects/binutils-2.17/usr.bin/procstat/ (props changed) projects/binutils-2.17/usr.sbin/zic/ (props changed) Modified: projects/binutils-2.17/bin/sh/trap.c ============================================================================== --- projects/binutils-2.17/bin/sh/trap.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/bin/sh/trap.c Sat Jan 15 00:23:57 2011 (r217434) @@ -134,7 +134,7 @@ printsignals(void) outlen += 3; /* good enough */ } ++outlen; - if (outlen > 70 || n == sys_nsig - 1) { + if (outlen > 71 || n == sys_nsig - 1) { out1str("\n"); outlen = 0; } else { Modified: projects/binutils-2.17/contrib/binutils/ld/emultempl/ppc64elf.em ============================================================================== --- projects/binutils-2.17/contrib/binutils/ld/emultempl/ppc64elf.em Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/contrib/binutils/ld/emultempl/ppc64elf.em Sat Jan 15 00:23:57 2011 (r217434) @@ -72,6 +72,7 @@ ppc_create_output_section_statements (vo { extern const bfd_target bfd_elf64_powerpc_vec; extern const bfd_target bfd_elf64_powerpcle_vec; + asection *sect; if (link_info.hash->creator != &bfd_elf64_powerpc_vec && link_info.hash->creator != &bfd_elf64_powerpcle_vec) @@ -92,6 +93,8 @@ ppc_create_output_section_statements (vo return; } + if (bfd_get_section_by_name (stub_file->the_bfd, ".note.GNU-stack") == NULL) + sect = bfd_make_section (stub_file->the_bfd, ".note.GNU-stack"); stub_file->the_bfd->flags |= BFD_LINKER_CREATED; ldlang_add_file (stub_file); ppc64_elf_init_stub_bfd (stub_file->the_bfd, &link_info); Modified: projects/binutils-2.17/contrib/gcc/config/rs6000/crtsavres.asm ============================================================================== --- projects/binutils-2.17/contrib/gcc/config/rs6000/crtsavres.asm Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/contrib/gcc/config/rs6000/crtsavres.asm Sat Jan 15 00:23:57 2011 (r217434) @@ -305,3 +305,5 @@ FUNC_END(_restgpr_15_x) FUNC_END(_restgpr_14_x) #endif + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/contrib/gcc/config/rs6000/freebsd.h ============================================================================== --- projects/binutils-2.17/contrib/gcc/config/rs6000/freebsd.h Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/contrib/gcc/config/rs6000/freebsd.h Sat Jan 15 00:23:57 2011 (r217434) @@ -230,6 +230,8 @@ } #endif +#define TARGET_ASM_FILE_END rs6000_elf_end_indicate_exec_stack + /* FreeBSD doesn't support saving and restoring 64-bit regs with a 32-bit kernel. This is supported when running on a 64-bit kernel with COMPAT_FREEBSD32, but tell GCC it isn't so that our 32-bit binaries @@ -242,3 +244,5 @@ #define PROFILE_HOOK(LABEL) \ do { if (TARGET_64BIT) output_profile_hook (LABEL); } while (0) +#undef NEED_INDICATE_EXEC_STACK +#define NEED_INDICATE_EXEC_STACK 1 Modified: projects/binutils-2.17/contrib/gcc/config/rs6000/rs6000.c ============================================================================== --- projects/binutils-2.17/contrib/gcc/config/rs6000/rs6000.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/contrib/gcc/config/rs6000/rs6000.c Sat Jan 15 00:23:57 2011 (r217434) @@ -18426,7 +18426,7 @@ rs6000_elf_declare_function_name (FILE * static void rs6000_elf_end_indicate_exec_stack (void) { - if (TARGET_32BIT) + if (NEED_INDICATE_EXEC_STACK) file_end_indicate_exec_stack (); } #endif Modified: projects/binutils-2.17/contrib/gcc/config/rs6000/tramp.asm ============================================================================== --- projects/binutils-2.17/contrib/gcc/config/rs6000/tramp.asm Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/contrib/gcc/config/rs6000/tramp.asm Sat Jan 15 00:23:57 2011 (r217434) @@ -115,3 +115,5 @@ FUNC_START(__trampoline_setup) FUNC_END(__trampoline_setup) #endif + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/csu/i386-elf/crt1_s.S ============================================================================== --- projects/binutils-2.17/lib/csu/i386-elf/crt1_s.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/csu/i386-elf/crt1_s.S Sat Jan 15 00:23:57 2011 (r217434) @@ -42,6 +42,7 @@ _start: .cfi_def_cfa_register %ebp andl $0xfffffff0,%esp # align stack leal 8(%ebp),%eax + subl $4,%esp pushl %eax # argv pushl 4(%ebp) # argc pushl %edx # rtld cleanup Modified: projects/binutils-2.17/lib/csu/powerpc/crti.S ============================================================================== --- projects/binutils-2.17/lib/csu/powerpc/crti.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/csu/powerpc/crti.S Sat Jan 15 00:23:57 2011 (r217434) @@ -47,3 +47,5 @@ _fini: stw 31,12(1) stw 0,20(1) mr 31,1 + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/csu/powerpc/crtn.S ============================================================================== --- projects/binutils-2.17/lib/csu/powerpc/crtn.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/csu/powerpc/crtn.S Sat Jan 15 00:23:57 2011 (r217434) @@ -42,3 +42,5 @@ __FBSDID("$FreeBSD$"); lwz 31,-4(11) mr 1,11 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/csu/powerpc64/crti.S ============================================================================== --- projects/binutils-2.17/lib/csu/powerpc64/crti.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/csu/powerpc64/crti.S Sat Jan 15 00:23:57 2011 (r217434) @@ -59,3 +59,5 @@ _fini: stdu 1,-48(1) mflr 0 std 0,64(1) + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/csu/powerpc64/crtn.S ============================================================================== --- projects/binutils-2.17/lib/csu/powerpc64/crtn.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/csu/powerpc64/crtn.S Sat Jan 15 00:23:57 2011 (r217434) @@ -38,3 +38,5 @@ __FBSDID("$FreeBSD$"); ld 0,16(%r1) mtlr 0 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/gen/_ctx_start.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/gen/_ctx_start.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/gen/_ctx_start.S Sat Jan 15 00:23:57 2011 (r217434) @@ -41,3 +41,5 @@ * above branch. */ bl PIC_PLT(CNAME(abort)) /* abort */ + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/gen/_setjmp.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/gen/_setjmp.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/gen/_setjmp.S Sat Jan 15 00:23:57 2011 (r217434) @@ -69,3 +69,5 @@ ENTRY(_longjmp) bnelr li %r3,1 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/gen/fabs.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/gen/fabs.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/gen/fabs.S Sat Jan 15 00:23:57 2011 (r217434) @@ -33,3 +33,5 @@ __FBSDID("$FreeBSD$"); ENTRY(fabs) fabs %f1,%f1 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/gen/setjmp.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/gen/setjmp.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/gen/setjmp.S Sat Jan 15 00:23:57 2011 (r217434) @@ -89,3 +89,4 @@ ENTRY(__longjmp) li %r3,1 blr + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/gen/sigsetjmp.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/gen/sigsetjmp.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/gen/sigsetjmp.S Sat Jan 15 00:23:57 2011 (r217434) @@ -95,3 +95,5 @@ ENTRY(siglongjmp) bnelr li %r3,1 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/brk.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/brk.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/brk.S Sat Jan 15 00:23:57 2011 (r217434) @@ -71,3 +71,5 @@ ENTRY(brk) 1: b PIC_PLT(HIDENAME(cerror)) + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/cerror.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/cerror.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/cerror.S Sat Jan 15 00:23:57 2011 (r217434) @@ -54,4 +54,4 @@ HIDENAME(cerror): li %r4,-1 blr /* return to callers caller */ - + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/exect.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/exect.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/exect.S Sat Jan 15 00:23:57 2011 (r217434) @@ -37,3 +37,5 @@ ENTRY(exect) blr 1: b PIC_PLT(HIDENAME(cerror)) + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/pipe.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/pipe.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/pipe.S Sat Jan 15 00:23:57 2011 (r217434) @@ -41,3 +41,5 @@ ENTRY(pipe) blr /* and return 0 */ 1: b PIC_PLT(HIDENAME(cerror)) + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/ptrace.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/ptrace.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/ptrace.S Sat Jan 15 00:23:57 2011 (r217434) @@ -56,3 +56,5 @@ ENTRY(ptrace) blr 1: b PIC_PLT(HIDENAME(cerror)) + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/sbrk.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/sbrk.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/sbrk.S Sat Jan 15 00:23:57 2011 (r217434) @@ -68,3 +68,5 @@ ENTRY(sbrk) blr 2: b PIC_PLT(HIDENAME(cerror)) + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc/sys/setlogin.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc/sys/setlogin.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc/sys/setlogin.S Sat Jan 15 00:23:57 2011 (r217434) @@ -47,3 +47,5 @@ SYSCALL(setlogin) stw %r5,CNAME(_logname_valid)@l(%r4) #endif blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/gen/_ctx_start.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/gen/_ctx_start.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/gen/_ctx_start.S Sat Jan 15 00:23:57 2011 (r217434) @@ -45,3 +45,5 @@ */ nop bl PIC_PLT(CNAME(abort)) /* abort */ + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/gen/_setjmp.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/gen/_setjmp.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/gen/_setjmp.S Sat Jan 15 00:23:57 2011 (r217434) @@ -114,3 +114,5 @@ ENTRY(_longjmp) bnelr li %r3,1 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/gen/fabs.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/gen/fabs.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/gen/fabs.S Sat Jan 15 00:23:57 2011 (r217434) @@ -33,3 +33,5 @@ __FBSDID("$FreeBSD$"); ENTRY(fabs) fabs %f1,%f1 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/gen/setjmp.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/gen/setjmp.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/gen/setjmp.S Sat Jan 15 00:23:57 2011 (r217434) @@ -137,3 +137,4 @@ ENTRY(__longjmp) li %r3,1 blr + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/gen/sigsetjmp.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/gen/sigsetjmp.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/gen/sigsetjmp.S Sat Jan 15 00:23:57 2011 (r217434) @@ -142,3 +142,5 @@ ENTRY(siglongjmp) bnelr li %r3,1 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/brk.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/brk.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/brk.S Sat Jan 15 00:23:57 2011 (r217434) @@ -69,3 +69,5 @@ ENTRY(brk) ld %r0,16(%r1) mtlr %r0 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/cerror.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/cerror.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/cerror.S Sat Jan 15 00:23:57 2011 (r217434) @@ -57,4 +57,4 @@ ENTRY(HIDENAME(cerror)) li %r4,-1 blr - + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/exect.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/exect.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/exect.S Sat Jan 15 00:23:57 2011 (r217434) @@ -45,3 +45,5 @@ ENTRY(exect) ld %r0,16(%r1) mtlr %r0 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/pipe.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/pipe.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/pipe.S Sat Jan 15 00:23:57 2011 (r217434) @@ -49,3 +49,5 @@ ENTRY(pipe) ld %r0,16(%r1) mtlr %r0 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/ptrace.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/ptrace.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/ptrace.S Sat Jan 15 00:23:57 2011 (r217434) @@ -63,3 +63,5 @@ ENTRY(ptrace) ld %r0,16(%r1) mtlr %r0 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/sbrk.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/sbrk.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/sbrk.S Sat Jan 15 00:23:57 2011 (r217434) @@ -64,3 +64,5 @@ ENTRY(sbrk) ld %r0,16(%r1) mtlr %r0 blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libc/powerpc64/sys/setlogin.S ============================================================================== --- projects/binutils-2.17/lib/libc/powerpc64/sys/setlogin.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libc/powerpc64/sys/setlogin.S Sat Jan 15 00:23:57 2011 (r217434) @@ -37,3 +37,5 @@ SYSCALL(setlogin) li %r5,0 stw %r5,CNAME(_logname_valid)@toc@l(%r4) blr + + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/lib/libcompiler_rt/Makefile ============================================================================== --- projects/binutils-2.17/lib/libcompiler_rt/Makefile Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/lib/libcompiler_rt/Makefile Sat Jan 15 00:23:57 2011 (r217434) @@ -156,7 +156,8 @@ SYMLINKS+=libcompiler_rt_p.a ${LIBDIR}/l . endif .endif -.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" +.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386" || \ + ${MACHINE_CPUARCH} == "powerpc" AFLAGS+=--noexecstack ACFLAGS+=-Wa,--noexecstack .endif Modified: projects/binutils-2.17/libexec/rtld-elf/powerpc/rtld_start.S ============================================================================== --- projects/binutils-2.17/libexec/rtld-elf/powerpc/rtld_start.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/libexec/rtld-elf/powerpc/rtld_start.S Sat Jan 15 00:23:57 2011 (r217434) @@ -197,4 +197,4 @@ _ENTRY(_rtld_powerpc_pltcall) mtctr %r11 bctr # (*jmptab[index])() - + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/libexec/rtld-elf/powerpc64/rtld_start.S ============================================================================== --- projects/binutils-2.17/libexec/rtld-elf/powerpc64/rtld_start.S Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/libexec/rtld-elf/powerpc64/rtld_start.S Sat Jan 15 00:23:57 2011 (r217434) @@ -159,3 +159,4 @@ _ENTRY(_rtld_bind_start) bctr # jump to target + .section .note.GNU-stack,"",%progbits Modified: projects/binutils-2.17/release/amd64/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/amd64/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/amd64/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -40,5 +40,5 @@ progs sysinstall progs usbconfig libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo +libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo libs -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail Modified: projects/binutils-2.17/release/i386/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/i386/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/i386/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -40,5 +40,5 @@ progs sysinstall progs usbconfig libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo +libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo libs -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail Modified: projects/binutils-2.17/release/ia64/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/ia64/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/ia64/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -45,5 +45,5 @@ progs sysinstall progs usbconfig libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs -ldevinfo +libs -lodialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs -ldevinfo libs -lgeom -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail Modified: projects/binutils-2.17/release/pc98/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/pc98/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/pc98/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -39,5 +39,5 @@ progs ppp progs sysinstall libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml +libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml libs -larchive -lcrypto -lbz2 -llzma -ljail Modified: projects/binutils-2.17/release/powerpc/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/powerpc/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/powerpc/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -45,5 +45,5 @@ progs sysinstall progs usbconfig libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs +libs -lodialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs libs -lgeom -lbsdxml -larchive -lcrypto -lbz2 -llzma -lusb -ljail Modified: projects/binutils-2.17/release/sparc64/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/sparc64/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/sparc64/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -43,5 +43,5 @@ progs sysinstall progs usbconfig libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -lgeom -lbsdxml +libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -lgeom -lbsdxml libs -larchive -lcrypto -lbz2 -llzma -lusb -ljail Modified: projects/binutils-2.17/release/sun4v/boot_crunch.conf ============================================================================== --- projects/binutils-2.17/release/sun4v/boot_crunch.conf Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/release/sun4v/boot_crunch.conf Sat Jan 15 00:23:57 2011 (r217434) @@ -40,5 +40,5 @@ progs sysinstall progs usbconfig libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph -libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml +libs -lodialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml libs -larchive -lcrypto -lbz2 -llzma -lusb -ljail Modified: projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c ============================================================================== --- projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/amd64/ia32/ia32_signal.c Sat Jan 15 00:23:57 2011 (r217434) @@ -741,7 +741,6 @@ ia32_setregs(struct thread *td, struct i regs->tf_gs = _ugssel; regs->tf_flags = TF_HASSEGS; - load_cr0(rcr0() | CR0_MP | CR0_TS); fpstate_drop(td); /* Return via doreti so that we can change to a different %cs */ Modified: projects/binutils-2.17/sys/amd64/linux32/linux32_sysvec.c ============================================================================== --- projects/binutils-2.17/sys/amd64/linux32/linux32_sysvec.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/amd64/linux32/linux32_sysvec.c Sat Jan 15 00:23:57 2011 (r217434) @@ -865,7 +865,7 @@ exec_linux_setregs(struct thread *td, st regs->tf_flags = TF_HASSEGS; regs->tf_cs = _ucode32sel; regs->tf_rbx = imgp->ps_strings; - load_cr0(rcr0() | CR0_MP | CR0_TS); + fpstate_drop(td); /* Do full restore on return so that we can change to a different %cs */ Modified: projects/binutils-2.17/sys/contrib/pf/net/pf_osfp.c ============================================================================== --- projects/binutils-2.17/sys/contrib/pf/net/pf_osfp.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/contrib/pf/net/pf_osfp.c Sat Jan 15 00:23:57 2011 (r217434) @@ -601,7 +601,7 @@ pf_osfp_validate(void) if (find.fp_mss == 0) find.fp_mss = 128; if (f->fp_flags & PF_OSFP_WSIZE_MSS) - find.fp_wsize *= find.fp_mss, 1; + find.fp_wsize *= find.fp_mss; else if (f->fp_flags & PF_OSFP_WSIZE_MTU) find.fp_wsize *= (find.fp_mss + 40); else if (f->fp_flags & PF_OSFP_WSIZE_MOD) Modified: projects/binutils-2.17/sys/dev/alc/if_alc.c ============================================================================== --- projects/binutils-2.17/sys/dev/alc/if_alc.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/alc/if_alc.c Sat Jan 15 00:23:57 2011 (r217434) @@ -1052,13 +1052,12 @@ alc_detach(device_t dev) ifp = sc->alc_ifp; if (device_is_attached(dev)) { + ether_ifdetach(ifp); ALC_LOCK(sc); - sc->alc_flags |= ALC_FLAG_DETACH; alc_stop(sc); ALC_UNLOCK(sc); callout_drain(&sc->alc_tick_ch); taskqueue_drain(sc->alc_tq, &sc->alc_int_task); - ether_ifdetach(ifp); } if (sc->alc_tq != NULL) { @@ -2368,7 +2367,7 @@ alc_ioctl(struct ifnet *ifp, u_long cmd, ((ifp->if_flags ^ sc->alc_if_flags) & (IFF_PROMISC | IFF_ALLMULTI)) != 0) alc_rxfilter(sc); - else if ((sc->alc_flags & ALC_FLAG_DETACH) == 0) + else alc_init_locked(sc); } else if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0) alc_stop(sc); @@ -2663,6 +2662,7 @@ alc_int_task(void *arg, int pending) ifp = sc->alc_ifp; status = CSR_READ_4(sc, ALC_INTR_STATUS); + ALC_LOCK(sc); if (sc->alc_morework != 0) { sc->alc_morework = 0; status |= INTR_RX_PKT; @@ -2680,7 +2680,6 @@ alc_int_task(void *arg, int pending) if (more == EAGAIN) sc->alc_morework = 1; else if (more == EIO) { - ALC_LOCK(sc); ifp->if_drv_flags &= ~IFF_DRV_RUNNING; alc_init_locked(sc); ALC_UNLOCK(sc); @@ -2698,7 +2697,6 @@ alc_int_task(void *arg, int pending) if ((status & INTR_TXQ_TO_RST) != 0) device_printf(sc->alc_dev, "TxQ reset! -- resetting\n"); - ALC_LOCK(sc); ifp->if_drv_flags &= ~IFF_DRV_RUNNING; alc_init_locked(sc); ALC_UNLOCK(sc); @@ -2706,11 +2704,12 @@ alc_int_task(void *arg, int pending) } if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0 && !IFQ_DRV_IS_EMPTY(&ifp->if_snd)) - alc_start(ifp); + alc_start_locked(ifp); } if (more == EAGAIN || (CSR_READ_4(sc, ALC_INTR_STATUS) & ALC_INTRS) != 0) { + ALC_UNLOCK(sc); taskqueue_enqueue(sc->alc_tq, &sc->alc_int_task); return; } @@ -2720,6 +2719,7 @@ done: /* Re-enable interrupts if we're running. */ CSR_WRITE_4(sc, ALC_INTR_STATUS, 0x7FFFFFFF); } + ALC_UNLOCK(sc); } static void @@ -3039,7 +3039,9 @@ alc_rxeof(struct alc_softc *sc, struct r #endif { /* Pass it on. */ + ALC_UNLOCK(sc); (*ifp->if_input)(ifp, m); + ALC_LOCK(sc); } } } Modified: projects/binutils-2.17/sys/dev/alc/if_alcvar.h ============================================================================== --- projects/binutils-2.17/sys/dev/alc/if_alcvar.h Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/alc/if_alcvar.h Sat Jan 15 00:23:57 2011 (r217434) @@ -230,7 +230,6 @@ struct alc_softc { #define ALC_FLAG_L0S 0x0400 #define ALC_FLAG_L1S 0x0800 #define ALC_FLAG_APS 0x1000 -#define ALC_FLAG_DETACH 0x4000 #define ALC_FLAG_LINK 0x8000 struct callout alc_tick_ch; Modified: projects/binutils-2.17/sys/dev/dc/dcphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/dc/dcphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/dc/dcphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -222,17 +222,12 @@ dcphy_service(struct mii_softc *sc, stru /*dcphy_reset(sc);*/ (void) dcphy_auto(sc); break; - case IFM_100_T4: - /* - * XXX Not supported as a manual setting right now. - */ - return (EINVAL); case IFM_100_TX: dcphy_reset(sc); DC_CLRBIT(dc_sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL); mode |= DC_NETCFG_PORTSEL | DC_NETCFG_PCS | DC_NETCFG_SCRAMBLER; - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) + if ((ife->ifm_media & IFM_FDX) != 0) mode |= DC_NETCFG_FULLDUPLEX; else mode &= ~DC_NETCFG_FULLDUPLEX; @@ -241,7 +236,7 @@ dcphy_service(struct mii_softc *sc, stru case IFM_10_T: DC_CLRBIT(dc_sc, DC_SIARESET, DC_SIA_RESET); DC_CLRBIT(dc_sc, DC_10BTCTRL, 0xFFFF); - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) + if ((ife->ifm_media & IFM_FDX) != 0) DC_SETBIT(dc_sc, DC_10BTCTRL, 0x7F3D); else DC_SETBIT(dc_sc, DC_10BTCTRL, 0x7F3F); @@ -249,7 +244,7 @@ dcphy_service(struct mii_softc *sc, stru DC_CLRBIT(dc_sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL); mode &= ~DC_NETCFG_PORTSEL; mode |= DC_NETCFG_SPEEDSEL; - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) + if ((ife->ifm_media & IFM_FDX) != 0) mode |= DC_NETCFG_FULLDUPLEX; else mode &= ~DC_NETCFG_FULLDUPLEX; Modified: projects/binutils-2.17/sys/dev/dc/pnphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/dc/pnphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/dc/pnphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -66,14 +66,6 @@ __FBSDID("$FreeBSD$"); #include "miibus_if.h" -#define DC_SETBIT(sc, reg, x) \ - CSR_WRITE_4(sc, reg, \ - CSR_READ_4(sc, reg) | x) - -#define DC_CLRBIT(sc, reg, x) \ - CSR_WRITE_4(sc, reg, \ - CSR_READ_4(sc, reg) & ~x) - static int pnphy_probe(device_t); static int pnphy_attach(device_t); @@ -170,23 +162,19 @@ pnphy_service(struct mii_softc *sc, stru if ((mii->mii_ifp->if_flags & IFF_UP) == 0) break; + /* + * Note that auto-negotiation is broken on this chip. + */ switch (IFM_SUBTYPE(ife->ifm_media)) { - case IFM_AUTO: - /* NWAY is busted on this chip */ - case IFM_100_T4: - /* - * XXX Not supported as a manual setting right now. - */ - return (EINVAL); case IFM_100_TX: mii->mii_media_active = IFM_ETHER | IFM_100_TX; - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) + if ((ife->ifm_media & IFM_FDX) != 0) mii->mii_media_active |= IFM_FDX; MIIBUS_STATCHG(sc->mii_dev); return (0); case IFM_10_T: mii->mii_media_active = IFM_ETHER | IFM_10_T; - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) + if ((ife->ifm_media & IFM_FDX) != 0) mii->mii_media_active |= IFM_FDX; MIIBUS_STATCHG(sc->mii_dev); return (0); @@ -226,15 +214,14 @@ pnphy_status(struct mii_softc *sc) mii->mii_media_active = IFM_ETHER; reg = CSR_READ_4(dc_sc, DC_ISR); - if (!(reg & DC_ISR_LINKFAIL)) mii->mii_media_status |= IFM_ACTIVE; - - if (CSR_READ_4(dc_sc, DC_NETCFG) & DC_NETCFG_SPEEDSEL) + reg = CSR_READ_4(dc_sc, DC_NETCFG); + if (reg & DC_NETCFG_SPEEDSEL) mii->mii_media_active |= IFM_10_T; else mii->mii_media_active |= IFM_100_TX; - if (CSR_READ_4(dc_sc, DC_NETCFG) & DC_NETCFG_FULLDUPLEX) + if (reg & DC_NETCFG_FULLDUPLEX) mii->mii_media_active |= IFM_FDX; else mii->mii_media_active |= IFM_HDX; Modified: projects/binutils-2.17/sys/dev/mii/atphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/atphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/atphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -187,9 +187,9 @@ atphy_service(struct mii_softc *sc, stru } anar = atphy_anar(ife); - if (((ife->ifm_media & IFM_GMASK) & IFM_FDX) != 0) { + if ((ife->ifm_media & IFM_FDX) != 0) { bmcr |= BMCR_FDX; - if (((ife->ifm_media & IFM_GMASK) & IFM_FLOW) != 0 || + if ((ife->ifm_media & IFM_FLOW) != 0 || (sc->mii_flags & MIIF_FORCEPAUSE) != 0) anar |= ANAR_PAUSE_TOWARDS; } @@ -371,7 +371,7 @@ atphy_anar(struct ifmedia_entry *ife) return (0); } - if (((ife->ifm_media & IFM_GMASK) & IFM_FDX) != 0) { + if ((ife->ifm_media & IFM_FDX) != 0) { if (IFM_SUBTYPE(ife->ifm_media) == IFM_100_TX) anar |= ANAR_TX_FD; else @@ -387,13 +387,13 @@ atphy_setmedia(struct mii_softc *sc, int uint16_t anar; anar = BMSR_MEDIA_TO_ANAR(sc->mii_capabilities) | ANAR_CSMA; - if (((IFM_SUBTYPE(media) == IFM_AUTO || - ((media & IFM_GMASK) & IFM_FDX) != 0) && - ((media & IFM_GMASK) & IFM_FLOW) != 0) || - (sc->mii_flags & MIIF_FORCEPAUSE) != 0) + if ((IFM_SUBTYPE(media) == IFM_AUTO || (media & IFM_FDX) != 0) && + ((media & IFM_FLOW) != 0 || + (sc->mii_flags & MIIF_FORCEPAUSE) != 0)) anar |= ANAR_PAUSE_TOWARDS; PHY_WRITE(sc, MII_ANAR, anar); - if ((sc->mii_extcapabilities & (EXTSR_1000TFDX | EXTSR_1000THDX)) != 0) + if ((sc->mii_extcapabilities & + (EXTSR_1000TFDX | EXTSR_1000THDX)) != 0) PHY_WRITE(sc, MII_100T2CR, GTCR_ADV_1000TFDX | GTCR_ADV_1000THDX); PHY_WRITE(sc, MII_BMCR, BMCR_RESET | BMCR_AUTOEN | BMCR_STARTNEG); Modified: projects/binutils-2.17/sys/dev/mii/brgphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/brgphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/brgphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -453,7 +453,7 @@ brgphy_setmedia(struct mii_softc *sc, in break; } - if ((media & IFM_GMASK) == IFM_FDX) { + if ((media & IFM_FDX) != 0) { bmcr |= BRGPHY_BMCR_FDX; gig = BRGPHY_1000CTL_AFD; } else { Modified: projects/binutils-2.17/sys/dev/mii/ciphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/ciphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/ciphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -176,26 +176,23 @@ ciphy_service(struct mii_softc *sc, stru case IFM_10_T: speed = CIPHY_S10; setit: - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) { + if ((ife->ifm_media & IFM_FDX) != 0) { speed |= CIPHY_BMCR_FDX; gig = CIPHY_1000CTL_AFD; - } else { + } else gig = CIPHY_1000CTL_AHD; - } - PHY_WRITE(sc, CIPHY_MII_1000CTL, 0); + if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) { + gig |= CIPHY_1000CTL_MSE; + if ((ife->ifm_media & IFM_ETH_MASTER) != 0) + gig |= CIPHY_1000CTL_MSC; + speed |= + CIPHY_BMCR_AUTOEN | CIPHY_BMCR_STARTNEG; + } else + gig = 0; + PHY_WRITE(sc, CIPHY_MII_1000CTL, gig); PHY_WRITE(sc, CIPHY_MII_BMCR, speed); PHY_WRITE(sc, CIPHY_MII_ANAR, CIPHY_SEL_TYPE); - - if (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T) - break; - - gig |= CIPHY_1000CTL_MSE; - if ((ife->ifm_media & IFM_ETH_MASTER) != 0) - gig |= CIPHY_1000CTL_MSC; - PHY_WRITE(sc, CIPHY_MII_1000CTL, gig); - PHY_WRITE(sc, CIPHY_MII_BMCR, - speed | CIPHY_BMCR_AUTOEN | CIPHY_BMCR_STARTNEG); break; case IFM_NONE: PHY_WRITE(sc, MII_BMCR, BMCR_ISO | BMCR_PDOWN); Modified: projects/binutils-2.17/sys/dev/mii/e1000phy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/e1000phy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/e1000phy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -358,7 +358,7 @@ e1000phy_service(struct mii_softc *sc, s return (EINVAL); } - if (((ife->ifm_media & IFM_GMASK) & IFM_FDX) != 0) { + if ((ife->ifm_media & IFM_FDX) != 0) { speed |= E1000_CR_FULL_DUPLEX; gig = E1000_1GCR_1000T_FD; } else @@ -372,10 +372,10 @@ e1000phy_service(struct mii_softc *sc, s gig |= E1000_1GCR_MS_ENABLE; if ((ife->ifm_media & IFM_ETH_MASTER) != 0) gig |= E1000_1GCR_MS_VALUE; - PHY_WRITE(sc, E1000_1GCR, gig); } else if ((sc->mii_extcapabilities & (EXTSR_1000TFDX | EXTSR_1000THDX)) != 0) - PHY_WRITE(sc, E1000_1GCR, 0); + gig = 0; + PHY_WRITE(sc, E1000_1GCR, gig); PHY_WRITE(sc, E1000_AR, E1000_AR_SELECTOR_FIELD); PHY_WRITE(sc, E1000_CR, speed | E1000_CR_RESET); done: Modified: projects/binutils-2.17/sys/dev/mii/ip1000phy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/ip1000phy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/ip1000phy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -186,22 +186,21 @@ ip1000phy_service(struct mii_softc *sc, return (EINVAL); } - if (((ife->ifm_media & IFM_GMASK) & IFM_FDX) != 0) { + if ((ife->ifm_media & IFM_FDX) != 0) { speed |= IP1000PHY_BMCR_FDX; gig = IP1000PHY_1000CR_1000T_FDX; } else gig = IP1000PHY_1000CR_1000T; - PHY_WRITE(sc, IP1000PHY_MII_1000CR, 0); - PHY_WRITE(sc, IP1000PHY_MII_BMCR, speed); - - if (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T) - break; - - gig |= IP1000PHY_1000CR_MASTER | IP1000PHY_1000CR_MANUAL; - if ((ife->ifm_media & IFM_ETH_MASTER) != 0) - gig |= IP1000PHY_1000CR_MMASTER; + if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) { + gig |= + IP1000PHY_1000CR_MASTER | IP1000PHY_1000CR_MANUAL; + if ((ife->ifm_media & IFM_ETH_MASTER) != 0) + gig |= IP1000PHY_1000CR_MMASTER; + } else + gig = 0; PHY_WRITE(sc, IP1000PHY_MII_1000CR, gig); + PHY_WRITE(sc, IP1000PHY_MII_BMCR, speed); done: break; Modified: projects/binutils-2.17/sys/dev/mii/jmphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/jmphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/jmphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -373,10 +373,10 @@ jmphy_setmedia(struct mii_softc *sc, str bmcr |= BMCR_LOOP; anar = jmphy_anar(ife); - if (((IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO || + if ((IFM_SUBTYPE(ife->ifm_media) == IFM_AUTO || (ife->ifm_media & IFM_FDX) != 0) && - (ife->ifm_media & IFM_FLOW) != 0) || - (sc->mii_flags & MIIF_FORCEPAUSE) != 0) + ((ife->ifm_media & IFM_FLOW) != 0 || + (sc->mii_flags & MIIF_FORCEPAUSE) != 0)) anar |= ANAR_PAUSE_TOWARDS; if ((sc->mii_flags & MIIF_HAVE_GTCR) != 0) { Modified: projects/binutils-2.17/sys/dev/mii/mii_physubr.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/mii_physubr.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/mii_physubr.c Sat Jan 15 00:23:57 2011 (r217434) @@ -135,8 +135,9 @@ mii_phy_setmedia(struct mii_softc *sc) gtcr |= GTCR_ADV_MS; } - if ((ife->ifm_media & IFM_GMASK) == (IFM_FDX | IFM_FLOW) || - (sc->mii_flags & MIIF_FORCEPAUSE) != 0) { + if ((ife->ifm_media & IFM_FDX) != 0 && + ((ife->ifm_media & IFM_FLOW) != 0 || + (sc->mii_flags & MIIF_FORCEPAUSE) != 0)) { if ((sc->mii_flags & MIIF_IS_1000X) != 0) anar |= ANAR_X_PAUSE_TOWARDS; else { @@ -184,7 +185,8 @@ mii_phy_auto(struct mii_softc *sc) ANAR_CSMA; if ((ife->ifm_media & IFM_FLOW) != 0 || (sc->mii_flags & MIIF_FORCEPAUSE) != 0) { - if ((sc->mii_capabilities & BMSR_100TXFDX) != 0) + if ((sc->mii_capabilities & + (BMSR_10TFDX | BMSR_100TXFDX)) != 0) anar |= ANAR_FC; /* XXX Only 1000BASE-T has PAUSE_ASYM? */ if (((sc->mii_flags & MIIF_HAVE_GTCR) != 0) && Modified: projects/binutils-2.17/sys/dev/mii/rgephy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/rgephy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/rgephy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -146,6 +146,13 @@ rgephy_attach(device_t dev) mii_phy_add_media(sc); printf("\n"); #undef ADD + /* + * Allow IFM_FLAG0 to be set indicating that auto-negotiation with + * manual configuration, which is used to work around issues with + * certain setups by default, should not be triggered as it may in + * turn cause harm in some edge cases. + */ + mii->mii_media.ifm_mask |= IFM_FLAG0; rgephy_reset(sc); MIIBUS_MEDIAINIT(sc->mii_dev); @@ -201,37 +208,38 @@ rgephy_service(struct mii_softc *sc, str speed = RGEPHY_S10; anar |= RGEPHY_ANAR_10_FD | RGEPHY_ANAR_10; setit: - rgephy_loop(sc); - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) { + if ((ife->ifm_media & IFM_FLOW) != 0 && + (mii->mii_media.ifm_media & IFM_FLAG0) != 0) + return (EINVAL); + + if ((ife->ifm_media & IFM_FDX) != 0) { speed |= RGEPHY_BMCR_FDX; gig = RGEPHY_1000CTL_AFD; anar &= ~(RGEPHY_ANAR_TX | RGEPHY_ANAR_10); + if ((ife->ifm_media & IFM_FLOW) != 0 || + (sc->mii_flags & MIIF_FORCEPAUSE) != 0) + anar |= + RGEPHY_ANAR_PC | RGEPHY_ANAR_ASP; } else { gig = RGEPHY_1000CTL_AHD; anar &= ~(RGEPHY_ANAR_TX_FD | RGEPHY_ANAR_10_FD); } - - if (IFM_SUBTYPE(ife->ifm_media) != IFM_1000_T) { - PHY_WRITE(sc, RGEPHY_MII_1000CTL, 0); - PHY_WRITE(sc, RGEPHY_MII_ANAR, anar); - PHY_WRITE(sc, RGEPHY_MII_BMCR, speed | - RGEPHY_BMCR_AUTOEN | - RGEPHY_BMCR_STARTNEG); - break; + if (IFM_SUBTYPE(ife->ifm_media) == IFM_1000_T) { + gig |= RGEPHY_1000CTL_MSE; + if ((ife->ifm_media & IFM_ETH_MASTER) != 0) + gig |= RGEPHY_1000CTL_MSC; + } else { + gig = 0; + anar &= ~RGEPHY_ANAR_ASP; } - - if ((ife->ifm_media & IFM_FLOW) != 0 || - (sc->mii_flags & MIIF_FORCEPAUSE) != 0) - anar |= RGEPHY_ANAR_PC | RGEPHY_ANAR_ASP; - - gig |= RGEPHY_1000CTL_MSE; - if ((ife->ifm_media & IFM_ETH_MASTER) != 0) - gig |= RGEPHY_1000CTL_MSC; + if ((mii->mii_media.ifm_media & IFM_FLAG0) == 0) + speed |= + RGEPHY_BMCR_AUTOEN | RGEPHY_BMCR_STARTNEG; + rgephy_loop(sc); PHY_WRITE(sc, RGEPHY_MII_1000CTL, gig); PHY_WRITE(sc, RGEPHY_MII_ANAR, anar); - PHY_WRITE(sc, RGEPHY_MII_BMCR, speed | - RGEPHY_BMCR_AUTOEN | RGEPHY_BMCR_STARTNEG); + PHY_WRITE(sc, RGEPHY_MII_BMCR, speed); break; case IFM_NONE: PHY_WRITE(sc, MII_BMCR, BMCR_ISO | BMCR_PDOWN); @@ -258,8 +266,7 @@ setit: /* * Check to see if we have link. If we do, we don't - * need to restart the autonegotiation process. Read - * the BMSR twice in case it's latched. + * need to restart the autonegotiation process. */ if (rsc->mii_revision >= 2) { /* RTL8211B(L) */ Modified: projects/binutils-2.17/sys/dev/mii/xmphy.c ============================================================================== --- projects/binutils-2.17/sys/dev/mii/xmphy.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/mii/xmphy.c Sat Jan 15 00:23:57 2011 (r217434) @@ -171,7 +171,7 @@ xmphy_service(struct mii_softc *sc, stru break; case IFM_1000_SX: mii_phy_reset(sc); - if ((ife->ifm_media & IFM_GMASK) == IFM_FDX) { + if ((ife->ifm_media & IFM_FDX) != 0) { PHY_WRITE(sc, XMPHY_MII_ANAR, XMPHY_ANAR_FDX); PHY_WRITE(sc, XMPHY_MII_BMCR, XMPHY_BMCR_FDX); } else { Modified: projects/binutils-2.17/sys/dev/re/if_re.c ============================================================================== --- projects/binutils-2.17/sys/dev/re/if_re.c Sat Jan 15 00:12:51 2011 (r217433) +++ projects/binutils-2.17/sys/dev/re/if_re.c Sat Jan 15 00:23:57 2011 (r217434) @@ -1258,11 +1258,6 @@ re_attach(device_t dev) CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); } - /* Reset the adapter. */ - RL_LOCK(sc); - re_reset(sc); - RL_UNLOCK(sc); - hw_rev = re_hwrevs; hwrev = CSR_READ_4(sc, RL_TXCFG); switch (hwrev & 0x70000000) { @@ -1366,6 +1361,11 @@ re_attach(device_t dev) break; } + /* Reset the adapter. */ + RL_LOCK(sc); + re_reset(sc); + RL_UNLOCK(sc); + /* Enable PME. */ CSR_WRITE_1(sc, RL_EECMD, RL_EE_MODE); cfg = CSR_READ_1(sc, RL_CFG1); @@ -1663,15 +1663,19 @@ re_detach(device_t dev) /* Destroy all the RX and TX buffer maps */ if (sc->rl_ldata.rl_tx_mtag) { - for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) - bus_dmamap_destroy(sc->rl_ldata.rl_tx_mtag, - sc->rl_ldata.rl_tx_desc[i].tx_dmamap); + for (i = 0; i < sc->rl_ldata.rl_tx_desc_cnt; i++) { + if (sc->rl_ldata.rl_tx_desc[i].tx_dmamap) + bus_dmamap_destroy(sc->rl_ldata.rl_tx_mtag, + sc->rl_ldata.rl_tx_desc[i].tx_dmamap); + } bus_dma_tag_destroy(sc->rl_ldata.rl_tx_mtag); } if (sc->rl_ldata.rl_rx_mtag) { - for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) - bus_dmamap_destroy(sc->rl_ldata.rl_rx_mtag, - sc->rl_ldata.rl_rx_desc[i].rx_dmamap); + for (i = 0; i < sc->rl_ldata.rl_rx_desc_cnt; i++) { + if (sc->rl_ldata.rl_rx_desc[i].rx_dmamap) + bus_dmamap_destroy(sc->rl_ldata.rl_rx_mtag, + sc->rl_ldata.rl_rx_desc[i].rx_dmamap); + } if (sc->rl_ldata.rl_rx_sparemap) bus_dmamap_destroy(sc->rl_ldata.rl_rx_mtag, sc->rl_ldata.rl_rx_sparemap); @@ -2618,6 +2622,16 @@ re_init_locked(struct rl_softc *sc) re_reset(sc); /* + * For C+ mode, initialize the RX descriptors and mbufs. + */ + if (re_rx_list_init(sc) != 0) { + device_printf(sc->rl_dev, "no memory for RX buffers\n"); + re_stop(sc); + return; + } + re_tx_list_init(sc); + + /* * Enable C+ RX and TX mode, as well as VLAN stripping and * RX checksum offload. We must configure the C+ register * before all others. @@ -2669,12 +2683,6 @@ re_init_locked(struct rl_softc *sc) CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF); /* - * For C+ mode, initialize the RX descriptors and mbufs. - */ - re_rx_list_init(sc); - re_tx_list_init(sc); - - /* * Load the addresses of the RX and TX lists into the chip. */ @@ -2923,14 +2931,20 @@ re_ioctl(struct ifnet *ifp, u_long comma } } #endif /* DEVICE_POLLING */ - if (mask & IFCAP_HWCSUM) { - ifp->if_capenable ^= IFCAP_HWCSUM; - if (ifp->if_capenable & IFCAP_TXCSUM) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sat Jan 15 21:24:39 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5F365106566B; Sat, 15 Jan 2011 21:24:39 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4E5988FC08; Sat, 15 Jan 2011 21:24:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0FLOdQO037891; Sat, 15 Jan 2011 21:24:39 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0FLOdYo037886; Sat, 15 Jan 2011 21:24:39 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101152124.p0FLOdYo037886@svn.freebsd.org> From: Alexander Motin Date: Sat, 15 Jan 2011 21:24:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217462 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2011 21:24:39 -0000 Author: mav Date: Sat Jan 15 21:24:39 2011 New Revision: 217462 URL: http://svn.freebsd.org/changeset/base/217462 Log: Change list of subdisk states to: NONE, NEW, STALE, REBUILD, RESYNC, ACTIVE. Implement reading of these subdisk states from Intel metadata. Let RAID0 to shift any present disk state to ACTIVE, as there is no rebuild. Make RAID1 to not overwrite state on NEW event to let it be used later. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Sat Jan 15 21:09:00 2011 (r217461) +++ projects/graid/head/sys/geom/raid/g_raid.c Sat Jan 15 21:24:39 2011 (r217462) @@ -156,12 +156,14 @@ g_raid_subdisk_state2str(int state) return ("NONE"); case G_RAID_SUBDISK_S_NEW: return ("NEW"); - case G_RAID_SUBDISK_S_ACTIVE: - return ("ACTIVE"); case G_RAID_SUBDISK_S_STALE: return ("STALE"); - case G_RAID_SUBDISK_S_SYNCHRONIZING: - return ("SYNCHRONIZING"); + case G_RAID_SUBDISK_S_REBUILD: + return ("REBUILD"); + case G_RAID_SUBDISK_S_RESYNC: + return ("RESYNC"); + case G_RAID_SUBDISK_S_ACTIVE: + return ("ACTIVE"); default: return ("INVALID"); } Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Sat Jan 15 21:09:00 2011 (r217461) +++ projects/graid/head/sys/geom/raid/g_raid.h Sat Jan 15 21:24:39 2011 (r217462) @@ -119,11 +119,12 @@ struct g_raid_disk { TAILQ_ENTRY(g_raid_disk) d_next; /* Next disk in the node. */ }; -#define G_RAID_SUBDISK_S_NONE 0x00 -#define G_RAID_SUBDISK_S_NEW 0x01 -#define G_RAID_SUBDISK_S_ACTIVE 0x02 -#define G_RAID_SUBDISK_S_STALE 0x03 -#define G_RAID_SUBDISK_S_SYNCHRONIZING 0x04 +#define G_RAID_SUBDISK_S_NONE 0x00 /* Absent. */ +#define G_RAID_SUBDISK_S_NEW 0x01 /* Blank. */ +#define G_RAID_SUBDISK_S_STALE 0x02 /* Dirty. */ +#define G_RAID_SUBDISK_S_REBUILD 0x03 /* Blank + rebuild. */ +#define G_RAID_SUBDISK_S_RESYNC 0x04 /* Dirty + check/repair. */ +#define G_RAID_SUBDISK_S_ACTIVE 0x05 /* Usable. */ #define G_RAID_SUBDISK_E_NEW 0x01 #define G_RAID_SUBDISK_E_DISCONNECTED 0x02 @@ -136,6 +137,7 @@ struct g_raid_subdisk { off_t sd_size; /* Size on the disk. */ u_int sd_pos; /* Position in volume. */ u_int sd_state; /* Subdisk state. */ + u_int sd_rebuild_pos; /* Rebuild position. */ int sd_read_errs; /* Count of the read errors */ TAILQ_ENTRY(g_raid_subdisk) sd_next; /* Next subdisk on disk. */ }; Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Sat Jan 15 21:09:00 2011 (r217461) +++ projects/graid/head/sys/geom/raid/md_intel.c Sat Jan 15 21:24:39 2011 (r217462) @@ -482,6 +482,8 @@ g_raid_md_intel_start_disk(struct g_raid struct g_raid_md_intel_object *mdi; struct g_raid_md_intel_perdisk *pd, *oldpd; struct intel_raid_conf *meta; + struct intel_raid_vol *mvol; + struct intel_raid_map *mmap0, *mmap1; int disk_pos; sc = disk->d_softc; @@ -520,6 +522,47 @@ g_raid_md_intel_start_disk(struct g_raid /* Welcome the "new" disk. */ g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { + mvol = intel_get_volume(meta, + (uintptr_t)(sd->sd_volume->v_md_data)); + mmap0 = intel_get_map(mvol, 0); + if (mvol->migr_state) + mmap1 = intel_get_map(mvol, 1); + else + mmap1 = mmap0; + + if (mvol->migr_state == 0) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NEW); + } else { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); + } + } else if (mvol->migr_type == INTEL_MT_INIT || + mvol->migr_type == INTEL_MT_REBUILD) { + if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); + } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NEW); + } else { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_REBUILD); + } + } else if (mvol->migr_type == INTEL_MT_VERIFY || + mvol->migr_type == INTEL_MT_REPAIR) { + if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); + } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_RESYNC); + } + } g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } @@ -1062,6 +1105,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj sd->sd_size = size; TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } @@ -1237,6 +1281,8 @@ g_raid_md_ctl_intel(struct g_raid_md_obj /* Welcome the "new" disk. */ g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NEW); g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, G_RAID_EVENT_SUBDISK); } @@ -1363,7 +1409,12 @@ g_raid_md_write_intel(struct g_raid_md_o mmap->offset = sd->sd_offset / sectorsize; mmap->disk_sectors = sd->sd_size / sectorsize; mmap->strip_sectors = vol->v_strip_size / sectorsize; - mmap->status = INTEL_S_READY; + if (vol->v_state == G_RAID_VOLUME_S_BROKEN) + mmap->status = INTEL_S_FAILURE; + else if (vol->v_state == G_RAID_VOLUME_S_DEGRADED) + mmap->status = INTEL_S_DEGRADED; + else + mmap->status = INTEL_S_READY; if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) mmap->type = INTEL_T_RAID0; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 || @@ -1387,11 +1438,11 @@ g_raid_md_write_intel(struct g_raid_md_o pd = (struct g_raid_md_intel_perdisk *) sd->sd_disk->d_md_data; mmap->disk_idx[sdi] = pd->pd_disk_pos; -// if (sd->sd_state == G_RAID_SUBDISK_S_NONE) { -// mmap->disk_idx[sdi] |= INTEL_DI_RBLD; -// if (mmap->failed_disk_num == 0xff) -// mmap->failed_disk_num = sdi; -// } + if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { + mmap->disk_idx[sdi] |= INTEL_DI_RBLD; + if (mmap->failed_disk_num == 0xff) + mmap->failed_disk_num = sdi; + } } vi++; } Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Sat Jan 15 21:09:00 2011 (r217461) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Sat Jan 15 21:24:39 2011 (r217462) @@ -131,9 +131,9 @@ g_raid_tr_event_raid1(struct g_raid_tr_o trs = (struct g_raid_tr_raid1_object *)tr; vol = tr->tro_volume; - if (event == G_RAID_SUBDISK_E_NEW) - g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); - else + if (event == G_RAID_SUBDISK_E_NEW) { +// g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); + } else g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); g_raid_tr_update_state_raid1(vol); return (0); From owner-svn-src-projects@FreeBSD.ORG Sat Jan 15 23:25:59 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B03CF1065675; Sat, 15 Jan 2011 23:25:59 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9F0CD8FC08; Sat, 15 Jan 2011 23:25:59 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0FNPxTI040863; Sat, 15 Jan 2011 23:25:59 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0FNPxXk040857; Sat, 15 Jan 2011 23:25:59 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101152325.p0FNPxXk040857@svn.freebsd.org> From: Alexander Motin Date: Sat, 15 Jan 2011 23:25:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217465 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2011 23:25:59 -0000 Author: mav Date: Sat Jan 15 23:25:59 2011 New Revision: 217465 URL: http://svn.freebsd.org/changeset/base/217465 Log: Implement writing subdisks statuses to Intel metadata. Add function g_raid_write_metadata() - wrapper for metadata write() method to be used by transformation modules when they updating some statuses that worth to be saved. Make RAID0 transformation module to use it. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/g_raid_md_if.m projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/tr_raid0.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Sat Jan 15 22:07:08 2011 (r217464) +++ projects/graid/head/sys/geom/raid/g_raid.c Sat Jan 15 23:25:59 2011 (r217465) @@ -1692,6 +1692,14 @@ g_raid_destroy_geom(struct gctl_req *req return (error); } +void g_raid_write_metadata(struct g_raid_softc *sc, struct g_raid_volume *vol, + struct g_raid_subdisk *sd, struct g_raid_disk *disk) +{ + + if (sc->sc_md) + G_RAID_MD_WRITE(sc->sc_md, vol, sd, disk); +} + static void g_raid_dumpconf(struct sbuf *sb, const char *indent, struct g_geom *gp, struct g_consumer *cp, struct g_provider *pp) Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Sat Jan 15 22:07:08 2011 (r217464) +++ projects/graid/head/sys/geom/raid/g_raid.h Sat Jan 15 23:25:59 2011 (r217465) @@ -308,6 +308,9 @@ void g_raid_change_disk_state(struct g_r void g_raid_change_subdisk_state(struct g_raid_subdisk *sd, int state); void g_raid_change_volume_state(struct g_raid_volume *vol, int state); +void g_raid_write_metadata(struct g_raid_softc *sc, struct g_raid_volume *vol, + struct g_raid_subdisk *sd, struct g_raid_disk *disk); + u_int g_raid_ndisks(struct g_raid_softc *sc, int state); u_int g_raid_nsubdisks(struct g_raid_volume *vol, int state); #define G_RAID_DESTROY_SOFT 0 Modified: projects/graid/head/sys/geom/raid/g_raid_md_if.m ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid_md_if.m Sat Jan 15 22:07:08 2011 (r217464) +++ projects/graid/head/sys/geom/raid/g_raid_md_if.m Sat Jan 15 23:25:59 2011 (r217465) @@ -95,6 +95,9 @@ METHOD int event { # write() - metadata write method. METHOD int write { struct g_raid_md_object *md; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct g_raid_disk *disk; }; # free_disk() - disk destructor. Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Sat Jan 15 22:07:08 2011 (r217464) +++ projects/graid/head/sys/geom/raid/md_intel.c Sat Jan 15 23:25:59 2011 (r217465) @@ -904,6 +904,8 @@ g_raid_md_event_intel(struct g_raid_md_o disk->d_consumer = NULL; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NONE); g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, G_RAID_EVENT_SUBDISK); } @@ -912,6 +914,11 @@ g_raid_md_event_intel(struct g_raid_md_o g_raid_change_disk_state(disk, G_RAID_DISK_S_NONE); g_raid_destroy_disk(disk); } + + /* Write updated metadata to all disks. */ + g_raid_md_write_intel(md, NULL, NULL, NULL); + + /* Check if anything left. */ if (g_raid_ndisks(sc, G_RAID_DISK_S_NONE) == 0 && g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) == 0) g_raid_destroy_node(sc, 0); @@ -1111,7 +1118,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj } /* Write metadata based on created entities. */ - g_raid_md_write_intel(md); + g_raid_md_write_intel(md, NULL, NULL, NULL); return (0); } if (strcmp(verb, "remove") == 0) { @@ -1158,6 +1165,8 @@ g_raid_md_ctl_intel(struct g_raid_md_obj disk->d_consumer = NULL; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NONE); g_raid_event_send(sd, G_RAID_SUBDISK_E_DISCONNECTED, G_RAID_EVENT_SUBDISK); } @@ -1169,7 +1178,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj } /* Write updated metadata to remaining disks. */ - g_raid_md_write_intel(md); + g_raid_md_write_intel(md, NULL, NULL, NULL); /* Check if anything left. */ if (g_raid_ndisks(sc, G_RAID_DISK_S_NONE) == 0 && @@ -1289,14 +1298,15 @@ g_raid_md_ctl_intel(struct g_raid_md_obj } /* Write updated metadata to all disks. */ - g_raid_md_write_intel(md); + g_raid_md_write_intel(md, NULL, NULL, NULL); return (error); } return (-100); } static int -g_raid_md_write_intel(struct g_raid_md_object *md) +g_raid_md_write_intel(struct g_raid_md_object *md, struct g_raid_volume *tvol, + struct g_raid_subdisk *tsd, struct g_raid_disk *tdisk) { struct g_raid_softc *sc; struct g_raid_volume *vol; @@ -1306,10 +1316,10 @@ g_raid_md_write_intel(struct g_raid_md_o struct g_raid_md_intel_perdisk *pd; struct intel_raid_conf *meta; struct intel_raid_vol *mvol; - struct intel_raid_map *mmap; + struct intel_raid_map *mmap0, *mmap1; off_t sectorsize = 512; const char *version, *cv; - int vi, sdi, numdisks, len; + int vi, sdi, numdisks, len, state; sc = md->mdo_softc; mdi = (struct g_raid_md_intel_object *)md; @@ -1362,7 +1372,6 @@ g_raid_md_write_intel(struct g_raid_md_o version = INTEL_VERSION_1000; TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { mvol = intel_get_volume(meta, vi); - mmap = intel_get_map(mvol, 0); /* New metadata may have different volumes order. */ vol->v_md_data = (void *)(intptr_t)vi; @@ -1406,42 +1415,86 @@ g_raid_md_write_intel(struct g_raid_md_o strlcpy(&mvol->name[0], vol->v_name, sizeof(mvol->name)); mvol->total_sectors = vol->v_mediasize / sectorsize; - mmap->offset = sd->sd_offset / sectorsize; - mmap->disk_sectors = sd->sd_size / sectorsize; - mmap->strip_sectors = vol->v_strip_size / sectorsize; + + /* Check for any recovery in progress. */ + state = G_RAID_SUBDISK_S_ACTIVE; + for (sdi = 0; sdi < vol->v_disks_count; sdi++) { + sd = &vol->v_subdisks[sdi]; + if (sd->sd_state == G_RAID_SUBDISK_S_REBUILD) + state = G_RAID_SUBDISK_S_REBUILD; + else if (sd->sd_state == G_RAID_SUBDISK_S_RESYNC && + state != G_RAID_SUBDISK_S_REBUILD) + state = G_RAID_SUBDISK_S_RESYNC; + } + if (state == G_RAID_SUBDISK_S_REBUILD) { + mvol->migr_state = 1; + mvol->migr_type = INTEL_MT_REBUILD; + } else if (state == G_RAID_SUBDISK_S_RESYNC) { + mvol->migr_state = 1; + mvol->migr_type = INTEL_MT_REPAIR; + } else + mvol->migr_state = 0; + + mmap0 = intel_get_map(mvol, 0); + + /* Write map / common part of two maps. */ + mmap0->offset = sd->sd_offset / sectorsize; + mmap0->disk_sectors = sd->sd_size / sectorsize; + mmap0->strip_sectors = vol->v_strip_size / sectorsize; if (vol->v_state == G_RAID_VOLUME_S_BROKEN) - mmap->status = INTEL_S_FAILURE; + mmap0->status = INTEL_S_FAILURE; else if (vol->v_state == G_RAID_VOLUME_S_DEGRADED) - mmap->status = INTEL_S_DEGRADED; + mmap0->status = INTEL_S_DEGRADED; else - mmap->status = INTEL_S_READY; + mmap0->status = INTEL_S_READY; if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID0) - mmap->type = INTEL_T_RAID0; + mmap0->type = INTEL_T_RAID0; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1 || vol->v_raid_level == G_RAID_VOLUME_RL_RAID10) - mmap->type = INTEL_T_RAID1; + mmap0->type = INTEL_T_RAID1; else - mmap->type = INTEL_T_RAID5; - mmap->total_disks = vol->v_disks_count; + mmap0->type = INTEL_T_RAID5; + mmap0->total_disks = vol->v_disks_count; if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID10) - mmap->total_domains = vol->v_disks_count / 2; + mmap0->total_domains = vol->v_disks_count / 2; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1) - mmap->total_domains = vol->v_disks_count; + mmap0->total_domains = vol->v_disks_count; else - mmap->total_domains = 1; - mmap->stripe_count = sd->sd_size / vol->v_strip_size / - mmap->total_domains; - mmap->failed_disk_num = 0xff; - mmap->ddf = 1; + mmap0->total_domains = 1; + mmap0->stripe_count = sd->sd_size / vol->v_strip_size / + mmap0->total_domains; + mmap0->failed_disk_num = 0xff; + mmap0->ddf = 1; + + /* If there are two maps - copy common and update. */ + if (mvol->migr_state) { + mmap1 = intel_get_map(mvol, 1); + memcpy(mmap1, mmap0, sizeof(struct intel_raid_map)); + mmap0->status = INTEL_S_READY; + } else + mmap1 = NULL; + + /* Write disk indexes and put rebuild flags. */ for (sdi = 0; sdi < vol->v_disks_count; sdi++) { sd = &vol->v_subdisks[sdi]; pd = (struct g_raid_md_intel_perdisk *) sd->sd_disk->d_md_data; - mmap->disk_idx[sdi] = pd->pd_disk_pos; - if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { - mmap->disk_idx[sdi] |= INTEL_DI_RBLD; - if (mmap->failed_disk_num == 0xff) - mmap->failed_disk_num = sdi; + mmap0->disk_idx[sdi] = pd->pd_disk_pos; + if (mvol->migr_state) + mmap1->disk_idx[sdi] = pd->pd_disk_pos; + if (sd->sd_state == G_RAID_SUBDISK_S_REBUILD || + sd->sd_state == G_RAID_SUBDISK_S_RESYNC) { + mmap1->disk_idx[sdi] |= INTEL_DI_RBLD; + } else if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { + mmap0->disk_idx[sdi] |= INTEL_DI_RBLD; + if (mvol->migr_state) + mmap1->disk_idx[sdi] |= INTEL_DI_RBLD; + } + if (sd->sd_state == G_RAID_SUBDISK_S_NONE && + mmap0->failed_disk_num == 0xff) { + mmap0->failed_disk_num = sdi; + if (mvol->migr_state) + mmap1->failed_disk_num = sdi; } } vi++; Modified: projects/graid/head/sys/geom/raid/tr_raid0.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid0.c Sat Jan 15 22:07:08 2011 (r217464) +++ projects/graid/head/sys/geom/raid/tr_raid0.c Sat Jan 15 23:25:59 2011 (r217465) @@ -91,9 +91,11 @@ static int g_raid_tr_update_state_raid0(struct g_raid_volume *vol) { struct g_raid_tr_raid0_object *trs; + struct g_raid_softc *sc; u_int s; int n; + sc = vol->v_softc; trs = (struct g_raid_tr_raid0_object *)vol->v_tr; if (trs->trso_stopped) s = G_RAID_VOLUME_S_STOPPED; @@ -112,6 +114,8 @@ g_raid_tr_update_state_raid0(struct g_ra G_RAID_VOLUME_E_UP : G_RAID_VOLUME_E_DOWN, G_RAID_EVENT_VOLUME); g_raid_change_volume_state(vol, s); + if (!trs->trso_starting && !trs->trso_stopped) + g_raid_write_metadata(sc, vol, NULL, NULL); } return (0); } @@ -121,13 +125,20 @@ g_raid_tr_event_raid0(struct g_raid_tr_o struct g_raid_subdisk *sd, u_int event) { struct g_raid_tr_raid0_object *trs; + struct g_raid_softc *sc; struct g_raid_volume *vol; + int state; trs = (struct g_raid_tr_raid0_object *)tr; vol = tr->tro_volume; - if (event == G_RAID_SUBDISK_E_NEW) + sc = vol->v_softc; + if (event == G_RAID_SUBDISK_E_NEW) { + state = sd->sd_state; g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); - else + if (state != sd->sd_state && + !trs->trso_starting && !trs->trso_stopped) + g_raid_write_metadata(sc, vol, sd, NULL); + } else g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); g_raid_tr_update_state_raid0(vol); return (0); From owner-svn-src-projects@FreeBSD.ORG Sat Jan 15 23:31:58 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 13281106564A; Sat, 15 Jan 2011 23:31:58 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 030F48FC15; Sat, 15 Jan 2011 23:31:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0FNVvmm041042; Sat, 15 Jan 2011 23:31:57 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0FNVv70041040; Sat, 15 Jan 2011 23:31:57 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101152331.p0FNVv70041040@svn.freebsd.org> From: Alexander Motin Date: Sat, 15 Jan 2011 23:31:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217466 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 15 Jan 2011 23:31:58 -0000 Author: mav Date: Sat Jan 15 23:31:57 2011 New Revision: 217466 URL: http://svn.freebsd.org/changeset/base/217466 Log: sd_rebuild_pos should be off_t. Modified: projects/graid/head/sys/geom/raid/g_raid.h Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Sat Jan 15 23:25:59 2011 (r217465) +++ projects/graid/head/sys/geom/raid/g_raid.h Sat Jan 15 23:31:57 2011 (r217466) @@ -137,7 +137,7 @@ struct g_raid_subdisk { off_t sd_size; /* Size on the disk. */ u_int sd_pos; /* Position in volume. */ u_int sd_state; /* Subdisk state. */ - u_int sd_rebuild_pos; /* Rebuild position. */ + off_t sd_rebuild_pos; /* Rebuild position. */ int sd_read_errs; /* Count of the read errors */ TAILQ_ENTRY(g_raid_subdisk) sd_next; /* Next subdisk on disk. */ };