From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 05:56:01 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 1F97F1065679; Sun, 13 Feb 2011 05:56:01 +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 10B128FC08; Sun, 13 Feb 2011 05:56:01 +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 p1D5u04G027259; Sun, 13 Feb 2011 05:56:00 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1D5u0FX027256; Sun, 13 Feb 2011 05:56:00 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102130556.p1D5u0FX027256@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 05:56:00 +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: r218630 - 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, 13 Feb 2011 05:56:01 -0000 Author: mav Date: Sun Feb 13 05:56:00 2011 New Revision: 218630 URL: http://svn.freebsd.org/changeset/base/218630 Log: Mark kerneldump() functions static. Modified: projects/graid/head/sys/geom/raid/tr_raid0.c projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/tr_raid0.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid0.c Sun Feb 13 04:44:06 2011 (r218629) +++ projects/graid/head/sys/geom/raid/tr_raid0.c Sun Feb 13 05:56:00 2011 (r218630) @@ -255,7 +255,7 @@ failure: g_raid_iodone(bp, bp->bio_error); } -int +static int g_raid_tr_kerneldump_raid0(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t boffset, size_t blength) { Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Sun Feb 13 04:44:06 2011 (r218629) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Sun Feb 13 05:56:00 2011 (r218630) @@ -923,7 +923,7 @@ rebuild_round_done: } } -int +static int g_raid_tr_kerneldump_raid1(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t offset, size_t length) { From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 08:54:47 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 B2E4E1065670; Sun, 13 Feb 2011 08:54:47 +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 A36CA8FC1A; Sun, 13 Feb 2011 08:54:47 +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 p1D8slik031877; Sun, 13 Feb 2011 08:54:47 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1D8slFh031875; Sun, 13 Feb 2011 08:54:47 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102130854.p1D8slFh031875@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 08:54:47 +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: r218632 - 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, 13 Feb 2011 08:54:47 -0000 Author: mav Date: Sun Feb 13 08:54:47 2011 New Revision: 218632 URL: http://svn.freebsd.org/changeset/base/218632 Log: Plug BIO leaks during error recovery. 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 Sun Feb 13 06:19:38 2011 (r218631) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Sun Feb 13 08:54:47 2011 (r218632) @@ -843,6 +843,7 @@ rebuild_round_done: *mask |= 1 << sd->sd_pos; nsd = g_raid_tr_raid1_select_read_disk(vol, pbp, *mask); if (nsd != NULL && (cbp = g_clone_bio(pbp)) != NULL) { + g_destroy_bio(bp); G_RAID_LOGREQ(2, cbp, "Retrying read from %d", nsd->sd_pos); if (pbp->bio_children == 2 && do_write) { @@ -883,6 +884,7 @@ rebuild_round_done: G_RAID_LOGREQ(3, bp, "Recovered data from other drive"); cbp = g_clone_bio(pbp); if (cbp != NULL) { + g_destroy_bio(bp); cbp->bio_cmd = BIO_WRITE; cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP; G_RAID_LOGREQ(2, cbp, From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 13:21: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 EF9DD1065679; Sun, 13 Feb 2011 13:21:55 +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 DC1CC8FC18; Sun, 13 Feb 2011 13:21:55 +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 p1DDLtYQ039943; Sun, 13 Feb 2011 13:21:55 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1DDLtx1039938; Sun, 13 Feb 2011 13:21:55 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102131321.p1DDLtx1039938@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 13:21:55 +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: r218638 - in projects/graid/head/sys: conf geom/raid modules/geom/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, 13 Feb 2011 13:21:56 -0000 Author: mav Date: Sun Feb 13 13:21:55 2011 New Revision: 218638 URL: http://svn.freebsd.org/changeset/base/218638 Log: Add transformation module, handling different combinations of striping and adjacent mirroring in addition to specialized and more effective RAID0 and RAID1 modules. With two data copies and 4/6/... disks it will become RAID10, with 3/5/... disks it will become RAID1E, with 2 -- overloaded RAID1. With one data copy it will be overkilling RAID0, with 3+ copies it will be overredundant RAID1/1E/10. At this moment it can read/write/dump volumes with 2 data copies and 2+ disks. Rebuild, resync and recovery are missing for now. Added: projects/graid/head/sys/geom/raid/tr_raid1e.c (contents, props changed) Modified: projects/graid/head/sys/conf/files projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/modules/geom/geom_raid/Makefile Modified: projects/graid/head/sys/conf/files ============================================================================== --- projects/graid/head/sys/conf/files Sun Feb 13 13:11:00 2011 (r218637) +++ projects/graid/head/sys/conf/files Sun Feb 13 13:21:55 2011 (r218638) @@ -2092,6 +2092,7 @@ geom/raid/g_raid_tr_if.m optional geom_r geom/raid/md_intel.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid +geom/raid/tr_raid1e.c optional geom_raid geom/raid3/g_raid3.c optional geom_raid3 geom/raid3/g_raid3_ctl.c optional geom_raid3 geom/shsec/g_shsec.c optional geom_shsec Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Sun Feb 13 13:11:00 2011 (r218637) +++ projects/graid/head/sys/geom/raid/md_intel.c Sun Feb 13 13:21:55 2011 (r218638) @@ -586,7 +586,7 @@ g_raid_md_intel_supported(int level, int return (0); break; case G_RAID_VOLUME_RL_RAID1E: - if (disks < 3) + if (disks < 2) return (0); if (!force && (disks != 4)) return (0); @@ -1539,6 +1539,9 @@ makedisk: /* Round size down to strip or sector. */ if (level == G_RAID_VOLUME_RL_RAID1) size -= (size % sectorsize); + else if (level == G_RAID_VOLUME_RL_RAID1E && + (numdisks & 1) != 0) + size -= (size % (2 * strip)); else size -= (size % strip); if (size <= 0) { Added: projects/graid/head/sys/geom/raid/tr_raid1e.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 13:21:55 2011 (r218638) @@ -0,0 +1,1159 @@ +/*- + * Copyright (c) 2010 Alexander Motin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS 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 AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "geom/raid/g_raid.h" +#include "g_raid_tr_if.h" + +#define N 2 + +SYSCTL_DECL(_kern_geom_raid); +SYSCTL_NODE(_kern_geom_raid, OID_AUTO, raid1e, CTLFLAG_RW, 0, + "RAID1E parameters"); + +#define RAID1E_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */ +static int g_raid1e_rebuild_slab = RAID1E_REBUILD_SLAB; +TUNABLE_INT("kern.geom.raid.raid1e.rebuild_slab_size", + &g_raid1e_rebuild_slab); +SYSCTL_UINT(_kern_geom_raid_raid1e, OID_AUTO, rebuild_slab_size, CTLFLAG_RW, + &g_raid1e_rebuild_slab, 0, + "Amount of the disk to rebuild each read/write cycle of the rebuild."); + +#define RAID1E_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */ +static int g_raid1e_rebuild_fair_io = RAID1E_REBUILD_FAIR_IO; +TUNABLE_INT("kern.geom.raid.raid1e.rebuild_fair_io", + &g_raid1e_rebuild_fair_io); +SYSCTL_UINT(_kern_geom_raid_raid1e, OID_AUTO, rebuild_fair_io, CTLFLAG_RW, + &g_raid1e_rebuild_fair_io, 0, + "Fraction of the I/O bandwidth to use when disk busy for rebuild."); + +#define RAID1E_REBUILD_CLUSTER_IDLE 100 +static int g_raid1e_rebuild_cluster_idle = RAID1E_REBUILD_CLUSTER_IDLE; +TUNABLE_INT("kern.geom.raid.raid1e.rebuild_cluster_idle", + &g_raid1e_rebuild_cluster_idle); +SYSCTL_UINT(_kern_geom_raid_raid1e, OID_AUTO, rebuild_cluster_idle, CTLFLAG_RW, + &g_raid1e_rebuild_cluster_idle, 0, + "Number of slabs to do each time we trigger a rebuild cycle"); + +#define RAID1E_REBUILD_META_UPDATE 1024 /* update meta data every 1GB or so */ +static int g_raid1e_rebuild_meta_update = RAID1E_REBUILD_META_UPDATE; +TUNABLE_INT("kern.geom.raid.raid1e.rebuild_meta_update", + &g_raid1e_rebuild_meta_update); +SYSCTL_UINT(_kern_geom_raid_raid1e, OID_AUTO, rebuild_meta_update, CTLFLAG_RW, + &g_raid1e_rebuild_meta_update, 0, + "When to update the meta data."); + +static MALLOC_DEFINE(M_TR_RAID1E, "tr_raid1e_data", "GEOM_RAID RAID1E data"); + +#define TR_RAID1E_NONE 0 +#define TR_RAID1E_REBUILD 1 +#define TR_RAID1E_RESYNC 2 + +#define TR_RAID1E_F_DOING_SOME 0x1 +#define TR_RAID1E_F_LOCKED 0x2 +#define TR_RAID1E_F_ABORT 0x4 + +struct g_raid_tr_raid1e_object { + struct g_raid_tr_object trso_base; + int trso_starting; + int trso_stopping; + int trso_type; + int trso_recover_slabs; /* slabs before rest */ + int trso_fair_io; + int trso_meta_update; + int trso_flags; + struct g_raid_subdisk *trso_failed_sd; /* like per volume */ + void *trso_buffer; /* Buffer space */ + struct bio trso_bio; +}; + +static g_raid_tr_taste_t g_raid_tr_taste_raid1e; +static g_raid_tr_event_t g_raid_tr_event_raid1e; +static g_raid_tr_start_t g_raid_tr_start_raid1e; +static g_raid_tr_stop_t g_raid_tr_stop_raid1e; +static g_raid_tr_iostart_t g_raid_tr_iostart_raid1e; +static g_raid_tr_iodone_t g_raid_tr_iodone_raid1e; +static g_raid_tr_kerneldump_t g_raid_tr_kerneldump_raid1e; +static g_raid_tr_locked_t g_raid_tr_locked_raid1e; +static g_raid_tr_idle_t g_raid_tr_idle_raid1e; +static g_raid_tr_free_t g_raid_tr_free_raid1e; + +static kobj_method_t g_raid_tr_raid1e_methods[] = { + KOBJMETHOD(g_raid_tr_taste, g_raid_tr_taste_raid1e), + KOBJMETHOD(g_raid_tr_event, g_raid_tr_event_raid1e), + KOBJMETHOD(g_raid_tr_start, g_raid_tr_start_raid1e), + KOBJMETHOD(g_raid_tr_stop, g_raid_tr_stop_raid1e), + KOBJMETHOD(g_raid_tr_iostart, g_raid_tr_iostart_raid1e), + KOBJMETHOD(g_raid_tr_iodone, g_raid_tr_iodone_raid1e), + KOBJMETHOD(g_raid_tr_kerneldump, g_raid_tr_kerneldump_raid1e), + KOBJMETHOD(g_raid_tr_locked, g_raid_tr_locked_raid1e), + KOBJMETHOD(g_raid_tr_idle, g_raid_tr_idle_raid1e), + KOBJMETHOD(g_raid_tr_free, g_raid_tr_free_raid1e), + { 0, 0 } +}; + +static struct g_raid_tr_class g_raid_tr_raid1e_class = { + "RAID1E", + g_raid_tr_raid1e_methods, + sizeof(struct g_raid_tr_raid1e_object), + .trc_priority = 200 +}; + +static void g_raid_tr_raid1e_rebuild_abort(struct g_raid_tr_object *tr); +static void g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd); + +static inline void +V2P(struct g_raid_volume *vol, off_t virt, + int *disk, off_t *offset, off_t *start) +{ + off_t nstrip; + u_int strip_size; + + strip_size = vol->v_strip_size; + /* Strip number. */ + nstrip = virt / strip_size; + /* Start position in strip. */ + *start = virt % strip_size; + /* Disk number. */ + *disk = (nstrip * N) % vol->v_disks_count; + /* Strip start position in disk. */ + *offset = ((nstrip * N) / vol->v_disks_count) * strip_size; +} + +static inline void +P2V(struct g_raid_volume *vol, int disk, off_t offset, + off_t *virt, int *copy) +{ + off_t nstrip, start; + u_int strip_size; + + strip_size = vol->v_strip_size; + /* Start position in strip. */ + start = offset % strip_size; + /* Physical strip number. */ + nstrip = (offset / strip_size) * vol->v_disks_count + disk; + /* Number of physical strip (copy) inside virtual strip. */ + *copy = nstrip % N; + /* Offset in virtual space. */ + *virt = (nstrip / N) * strip_size + start; +} + +static int +g_raid_tr_taste_raid1e(struct g_raid_tr_object *tr, struct g_raid_volume *vol) +{ + struct g_raid_tr_raid1e_object *trs; + + trs = (struct g_raid_tr_raid1e_object *)tr; + if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_RAID1E || + tr->tro_volume->v_raid_level_qualifier != G_RAID_VOLUME_RLQ_NONE) + return (G_RAID_TR_TASTE_FAIL); + trs->trso_starting = 1; + return (G_RAID_TR_TASTE_SUCCEED); +} + +static int +g_raid_tr_update_state_raid1e_even(struct g_raid_volume *vol) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_softc *sc; + struct g_raid_subdisk *sd, *bestsd, *worstsd; + int i, j, state, sstate; + + sc = vol->v_softc; + trs = (struct g_raid_tr_raid1e_object *)vol->v_tr; + state = G_RAID_VOLUME_S_OPTIMAL; + for (i = 0; i < vol->v_disks_count / N; i++) { + bestsd = &vol->v_subdisks[i * N]; + worstsd = &vol->v_subdisks[i * N]; + for (j = 1; j < N; j++) { + sd = &vol->v_subdisks[i * N + j]; + if (sd->sd_state > bestsd->sd_state) + bestsd = sd; + else if (sd->sd_state == bestsd->sd_state && + (sd->sd_state == G_RAID_SUBDISK_S_REBUILD || + sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && + sd->sd_rebuild_pos > bestsd->sd_rebuild_pos) + bestsd = sd; + if (sd->sd_state < worstsd->sd_state) + worstsd = sd; + } + if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED && + bestsd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { + /* We found reasonable candidate. */ + G_RAID_DEBUG1(1, sc, + "Promote subdisk %s:%d from %s to ACTIVE.", + vol->v_name, bestsd->sd_pos, + g_raid_subdisk_state2str(bestsd->sd_state)); + g_raid_change_subdisk_state(bestsd, + G_RAID_SUBDISK_S_ACTIVE); + g_raid_write_metadata(sc, + vol, bestsd, bestsd->sd_disk); + } + if (worstsd->sd_state == G_RAID_SUBDISK_S_ACTIVE) + sstate = G_RAID_VOLUME_S_OPTIMAL; + else if (worstsd->sd_state >= G_RAID_SUBDISK_S_STALE) + sstate = G_RAID_VOLUME_S_SUBOPTIMAL; + else if (bestsd->sd_state == G_RAID_SUBDISK_S_ACTIVE) + sstate = G_RAID_VOLUME_S_DEGRADED; + else + sstate = G_RAID_VOLUME_S_BROKEN; + if (sstate < state) + state = sstate; + } + return (state); +} + +static int +g_raid_tr_update_state_raid1e_odd(struct g_raid_volume *vol) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_softc *sc; + struct g_raid_subdisk *sd, *bestsd, *worstsd; + int i, j, state, sstate; + + sc = vol->v_softc; + trs = (struct g_raid_tr_raid1e_object *)vol->v_tr; + if (g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE) == + vol->v_disks_count) + return (G_RAID_VOLUME_S_OPTIMAL); + for (i = 0; i < vol->v_disks_count; i++) { + sd = &vol->v_subdisks[i]; + if (sd->sd_state == G_RAID_SUBDISK_S_UNINITIALIZED) { + /* We found reasonable candidate. */ + G_RAID_DEBUG1(1, sc, + "Promote subdisk %s:%d from %s to STALE.", + vol->v_name, sd->sd_pos, + g_raid_subdisk_state2str(sd->sd_state)); + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + g_raid_write_metadata(sc, vol, sd, sd->sd_disk); + } + } + state = G_RAID_VOLUME_S_OPTIMAL; + for (i = 0; i < vol->v_disks_count; i++) { + bestsd = &vol->v_subdisks[i]; + worstsd = &vol->v_subdisks[i]; + for (j = 1; j < N; j++) { + sd = &vol->v_subdisks[(i + j) % vol->v_disks_count]; + if (sd->sd_state > bestsd->sd_state) + bestsd = sd; + else if (sd->sd_state == bestsd->sd_state && + (sd->sd_state == G_RAID_SUBDISK_S_REBUILD || + sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && + sd->sd_rebuild_pos > bestsd->sd_rebuild_pos) + bestsd = sd; + if (sd->sd_state < worstsd->sd_state) + worstsd = sd; + } + if (worstsd->sd_state == G_RAID_SUBDISK_S_ACTIVE) + sstate = G_RAID_VOLUME_S_OPTIMAL; + else if (worstsd->sd_state >= G_RAID_SUBDISK_S_STALE) + sstate = G_RAID_VOLUME_S_SUBOPTIMAL; + else if (bestsd->sd_state >= G_RAID_SUBDISK_S_STALE) + sstate = G_RAID_VOLUME_S_DEGRADED; + else + sstate = G_RAID_VOLUME_S_BROKEN; + if (sstate < state) + state = sstate; + } + return (state); +} + +static int +g_raid_tr_update_state_raid1e(struct g_raid_volume *vol, + struct g_raid_subdisk *sd) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_softc *sc; + u_int s; + + sc = vol->v_softc; + trs = (struct g_raid_tr_raid1e_object *)vol->v_tr; + if (trs->trso_stopping && + (trs->trso_flags & TR_RAID1E_F_DOING_SOME) == 0) + s = G_RAID_VOLUME_S_STOPPED; + else if (trs->trso_starting) + s = G_RAID_VOLUME_S_STARTING; + else { + if ((vol->v_disks_count % N) == 0) + s = g_raid_tr_update_state_raid1e_even(vol); + else + s = g_raid_tr_update_state_raid1e_odd(vol); + g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); + } + if (s != vol->v_state) { + g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? + 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_stopping) + g_raid_write_metadata(sc, vol, NULL, NULL); + } + return (0); +} + +static void +g_raid_tr_raid1e_fail_disk(struct g_raid_softc *sc, struct g_raid_subdisk *sd, + struct g_raid_disk *disk) +{ + /* + * We don't fail the last disk in the pack, since it still has decent + * data on it and that's better than failing the disk if it is the root + * file system. + * + * XXX should this be controlled via a tunable? It makes sense for + * the volume that has / on it. I can't think of a case where we'd + * want the volume to go away on this kind of event. + */ + if (g_raid_nsubdisks(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == 1 && + g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE) == sd) + return; + g_raid_fail_disk(sc, sd, disk); +} + +static void +g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_subdisk *sd, *good_sd; + struct bio *bp; + + trs = (struct g_raid_tr_raid1e_object *)tr; + if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) + return; + sd = trs->trso_failed_sd; + good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); + if (good_sd == NULL) { + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } + bp = &trs->trso_bio; + memset(bp, 0, sizeof(*bp)); + bp->bio_offset = sd->sd_rebuild_pos; + bp->bio_length = MIN(g_raid1e_rebuild_slab, + sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); + bp->bio_data = trs->trso_buffer; + bp->bio_cmd = BIO_READ; + bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; + bp->bio_caller1 = good_sd; + trs->trso_flags |= TR_RAID1E_F_DOING_SOME; + trs->trso_flags |= TR_RAID1E_F_LOCKED; + g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ + bp->bio_offset, bp->bio_length, NULL, bp); +} + +static void +g_raid_tr_raid1e_rebuild_done(struct g_raid_tr_raid1e_object *trs) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + + vol = trs->trso_base.tro_volume; + sd = trs->trso_failed_sd; + g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk); + free(trs->trso_buffer, M_TR_RAID1E); + trs->trso_buffer = NULL; + trs->trso_flags &= ~TR_RAID1E_F_DOING_SOME; + trs->trso_type = TR_RAID1E_NONE; + trs->trso_recover_slabs = 0; + trs->trso_failed_sd = NULL; + g_raid_tr_update_state_raid1e(vol, NULL); +} + +static void +g_raid_tr_raid1e_rebuild_finish(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_subdisk *sd; + + trs = (struct g_raid_tr_raid1e_object *)tr; + sd = trs->trso_failed_sd; + G_RAID_DEBUG1(0, tr->tro_volume->v_softc, + "Subdisk %s:%d-%s rebuild completed.", + sd->sd_volume->v_name, sd->sd_pos, + sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); + sd->sd_rebuild_pos = 0; + g_raid_tr_raid1e_rebuild_done(trs); +} + +static void +g_raid_tr_raid1e_rebuild_abort(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_subdisk *sd; + struct g_raid_volume *vol; + off_t len; + + vol = tr->tro_volume; + trs = (struct g_raid_tr_raid1e_object *)tr; + sd = trs->trso_failed_sd; + if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) { + G_RAID_DEBUG1(1, vol->v_softc, + "Subdisk %s:%d-%s rebuild is aborting.", + sd->sd_volume->v_name, sd->sd_pos, + sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); + trs->trso_flags |= TR_RAID1E_F_ABORT; + } else { + G_RAID_DEBUG1(0, vol->v_softc, + "Subdisk %s:%d-%s rebuild aborted.", + sd->sd_volume->v_name, sd->sd_pos, + sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]"); + trs->trso_flags &= ~TR_RAID1E_F_ABORT; + if (trs->trso_flags & TR_RAID1E_F_LOCKED) { + trs->trso_flags &= ~TR_RAID1E_F_LOCKED; + len = MIN(g_raid1e_rebuild_slab, + vol->v_mediasize - sd->sd_rebuild_pos); + g_raid_unlock_range(tr->tro_volume, + sd->sd_rebuild_pos, len); + } + g_raid_tr_raid1e_rebuild_done(trs); + } +} + +static void +g_raid_tr_raid1e_rebuild_start(struct g_raid_tr_object *tr) +{ + struct g_raid_volume *vol; + struct g_raid_tr_raid1e_object *trs; + struct g_raid_subdisk *sd, *fsd; + + vol = tr->tro_volume; + trs = (struct g_raid_tr_raid1e_object *)tr; + if (trs->trso_failed_sd) { + G_RAID_DEBUG1(1, vol->v_softc, + "Already rebuild in start rebuild. pos %jd\n", + (intmax_t)trs->trso_failed_sd->sd_rebuild_pos); + return; + } + sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_ACTIVE); + if (sd == NULL) { + G_RAID_DEBUG1(1, vol->v_softc, + "No active disk to rebuild. night night."); + return; + } + fsd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_RESYNC); + if (fsd == NULL) + fsd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_REBUILD); + if (fsd == NULL) { + fsd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_STALE); + if (fsd != NULL) { + fsd->sd_rebuild_pos = 0; + g_raid_change_subdisk_state(fsd, + G_RAID_SUBDISK_S_RESYNC); + g_raid_write_metadata(vol->v_softc, vol, fsd, NULL); + } else { + fsd = g_raid_get_subdisk(vol, + G_RAID_SUBDISK_S_UNINITIALIZED); + if (fsd == NULL) + fsd = g_raid_get_subdisk(vol, + G_RAID_SUBDISK_S_NEW); + if (fsd != NULL) { + fsd->sd_rebuild_pos = 0; + g_raid_change_subdisk_state(fsd, + G_RAID_SUBDISK_S_REBUILD); + g_raid_write_metadata(vol->v_softc, + vol, fsd, NULL); + } + } + } + if (fsd == NULL) { + G_RAID_DEBUG1(1, vol->v_softc, + "No failed disk to rebuild. night night."); + return; + } + trs->trso_failed_sd = fsd; + G_RAID_DEBUG1(0, vol->v_softc, + "Subdisk %s:%d-%s rebuild start at %jd.", + fsd->sd_volume->v_name, fsd->sd_pos, + fsd->sd_disk ? g_raid_get_diskname(fsd->sd_disk) : "[none]", + trs->trso_failed_sd->sd_rebuild_pos); + trs->trso_type = TR_RAID1E_REBUILD; + trs->trso_buffer = malloc(g_raid1e_rebuild_slab, M_TR_RAID1E, M_WAITOK); + trs->trso_meta_update = g_raid1e_rebuild_meta_update; + g_raid_tr_raid1e_rebuild_some(tr); +} + + +static void +g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd) +{ + struct g_raid_volume *vol; + struct g_raid_tr_raid1e_object *trs; + int na, nr; + + /* + * If we're stopping, don't do anything. If we don't have at least one + * good disk and one bad disk, we don't do anything. And if there's a + * 'good disk' stored in the trs, then we're in progress and we punt. + * If we make it past all these checks, we need to rebuild. + */ + vol = tr->tro_volume; + trs = (struct g_raid_tr_raid1e_object *)tr; + if (trs->trso_stopping) + return; + na = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE); + nr = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_REBUILD) + + g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_RESYNC); + switch(trs->trso_type) { + case TR_RAID1E_NONE: + if (na == 0) + return; + if (nr == 0) { + nr = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_NEW) + + g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_STALE) + + g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_UNINITIALIZED); + if (nr == 0) + return; + } + g_raid_tr_raid1e_rebuild_start(tr); + break; + case TR_RAID1E_REBUILD: + if (na == 0 || nr == 0 || trs->trso_failed_sd == sd) + g_raid_tr_raid1e_rebuild_abort(tr); + break; + case TR_RAID1E_RESYNC: + break; + } +} + +static int +g_raid_tr_event_raid1e(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd, u_int event) +{ + + g_raid_tr_update_state_raid1e(tr->tro_volume, sd); + return (0); +} + +static int +g_raid_tr_start_raid1e(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_raid1e_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + g_raid_tr_update_state_raid1e(vol, NULL); + return (0); +} + +static int +g_raid_tr_stop_raid1e(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_raid1e_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + trs->trso_stopping = 1; + g_raid_tr_update_state_raid1e(vol, NULL); + return (0); +} + +/* + * Select the disk to read from. Take into account: subdisk state, running + * error recovery, average disk load, head position and possible cache hits. + */ +#define ABS(x) (((x) >= 0) ? (x) : (-(x))) +static int +g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol, + int no, off_t off, off_t len, u_int mask) +{ + struct g_raid_subdisk *sd; + off_t offset; + int i, best, prio, bestprio; + + best = -1; + bestprio = INT_MAX; + for (i = 0; i < N; i++) { + sd = &vol->v_subdisks[(no + i) % vol->v_disks_count]; + offset = off; + if (no + i >= vol->v_disks_count) + offset += vol->v_strip_size; + + prio = G_RAID_SUBDISK_LOAD(sd); + if ((mask & (1 << sd->sd_pos)) != 0) + continue; + switch (sd->sd_state) { + case G_RAID_SUBDISK_S_ACTIVE: + break; + case G_RAID_SUBDISK_S_RESYNC: + if (offset + off < sd->sd_rebuild_pos) + break; + /* FALLTHROUGH */ + case G_RAID_SUBDISK_S_STALE: + prio += i << 24; + break; + case G_RAID_SUBDISK_S_REBUILD: + if (offset + off < sd->sd_rebuild_pos) + break; + /* FALLTHROUGH */ + default: + continue; + } + prio += min(sd->sd_recovery, 255) << 16; + /* If disk head is precisely in position - highly prefer it. */ + if (G_RAID_SUBDISK_POS(sd) == offset) + prio -= 2 * G_RAID_SUBDISK_LOAD_SCALE; + else + /* If disk head is close to position - prefer it. */ + if (ABS(G_RAID_SUBDISK_POS(sd) - offset) < + G_RAID_SUBDISK_TRACK_SIZE) + prio -= 1 * G_RAID_SUBDISK_LOAD_SCALE; + if (prio < bestprio) { + bestprio = prio; + best = i; + } + } + return (best); +} + +static void +g_raid_tr_iostart_raid1e_read(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + char *addr; + off_t offset, start, length, remain; + u_int no, strip_size; + int best; + + vol = tr->tro_volume; + addr = bp->bio_data; + strip_size = vol->v_strip_size; + V2P(vol, bp->bio_offset, &no, &offset, &start); + remain = bp->bio_length; + bioq_init(&queue); + while (remain > 0) { + length = MIN(strip_size - start, remain); + best = g_raid_tr_raid1e_select_read_disk(vol, + no, offset, length, 0); + KASSERT(best >= 0, ("No readable disk in volume %s!", + vol->v_name)); + no += best; + if (no >= vol->v_disks_count) { + no -= vol->v_disks_count; + offset += strip_size; + } + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_offset = offset + start; + cbp->bio_data = addr; + cbp->bio_length = length; + cbp->bio_caller1 = &vol->v_subdisks[no]; + bioq_insert_tail(&queue, cbp); + no += N - best; + if (no >= vol->v_disks_count) { + no -= vol->v_disks_count; + offset += strip_size; + } + remain -= length; + addr += length; + start = 0; + } + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + +static void +g_raid_tr_iostart_raid1e_write(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + char *addr; + off_t offset, start, length, remain; + u_int no, strip_size; + int i; + + vol = tr->tro_volume; + addr = bp->bio_data; + strip_size = vol->v_strip_size; + V2P(vol, bp->bio_offset, &no, &offset, &start); + remain = bp->bio_length; + bioq_init(&queue); + while (remain > 0) { + length = MIN(strip_size - start, remain); + for (i = 0; i < N; i++) { + sd = &vol->v_subdisks[no]; + switch (sd->sd_state) { + case G_RAID_SUBDISK_S_ACTIVE: + case G_RAID_SUBDISK_S_STALE: + case G_RAID_SUBDISK_S_RESYNC: + break; + case G_RAID_SUBDISK_S_REBUILD: + if (offset + start >= sd->sd_rebuild_pos) + goto nextdisk; + break; + default: + goto nextdisk; + } + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_offset = offset + start; + cbp->bio_data = addr; + cbp->bio_length = length; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); +nextdisk: + if (++no >= vol->v_disks_count) { + no = 0; + offset += strip_size; + } + } + remain -= length; + addr += length; + start = 0; + } + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + +static void +g_raid_tr_iostart_raid1e(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_tr_raid1e_object *trs; + + vol = tr->tro_volume; + trs = (struct g_raid_tr_raid1e_object *)tr; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && + vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL && + vol->v_state != G_RAID_VOLUME_S_DEGRADED) { + g_raid_iodone(bp, EIO); + return; + } + /* + * If we're rebuilding, squeeze in rebuild activity every so often, + * even when the disk is busy. Be sure to only count real I/O + * to the disk. All 'SPECIAL' I/O is traffic generated to the disk + * by this module. + */ + if (trs->trso_failed_sd != NULL && + !(bp->bio_cflags & G_RAID_BIO_FLAG_SPECIAL)) { + /* Make this new or running now round short. */ + trs->trso_recover_slabs = 0; + if (--trs->trso_fair_io <= 0) { + trs->trso_fair_io = g_raid1e_rebuild_fair_io; + g_raid_tr_raid1e_rebuild_some(tr); + } + } + switch (bp->bio_cmd) { + case BIO_READ: + g_raid_tr_iostart_raid1e_read(tr, bp); + break; + case BIO_WRITE: + g_raid_tr_iostart_raid1e_write(tr, bp); + break; + case BIO_DELETE: + g_raid_iodone(bp, EIO); + break; + case BIO_FLUSH: + g_raid_tr_flush_common(tr, bp); + break; + default: + KASSERT(1 == 0, ("Invalid command here: %u (volume=%s)", + bp->bio_cmd, vol->v_name)); + break; + } +} + +static void +g_raid_tr_iodone_raid1e(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; + struct g_raid_tr_raid1e_object *trs; + uintptr_t *mask; + int error, do_write; + + trs = (struct g_raid_tr_raid1e_object *)tr; + vol = tr->tro_volume; + if (bp->bio_cflags & G_RAID_BIO_FLAG_SYNC) { + if (trs->trso_type == TR_RAID1E_REBUILD) { + if (bp->bio_cmd == BIO_READ) { + + /* Immediately abort rebuild, if requested. */ + if (trs->trso_flags & TR_RAID1E_F_ABORT) { + trs->trso_flags &= ~TR_RAID1E_F_DOING_SOME; + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } + + /* On read error, skip and cross fingers. */ + if (bp->bio_error != 0) { + G_RAID_LOGREQ(0, bp, + "Read error during rebuild (%d), " + "possible data loss!", + bp->bio_error); + goto rebuild_round_done; + } + + /* + * The read operation finished, queue the + * write and get out. + */ + G_RAID_LOGREQ(4, bp, "rebuild read done. %d", + bp->bio_error); + bp->bio_cmd = BIO_WRITE; + bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; + bp->bio_offset = bp->bio_offset; + bp->bio_length = bp->bio_length; + G_RAID_LOGREQ(4, bp, "Queueing reguild write."); + g_raid_subdisk_iostart(trs->trso_failed_sd, bp); + } else { + /* + * The write operation just finished. Do + * another. We keep cloning the master bio + * since it has the right buffers allocated to + * it. + */ + G_RAID_LOGREQ(4, bp, + "rebuild write done. Error %d", + bp->bio_error); + nsd = trs->trso_failed_sd; + if (bp->bio_error != 0 || + trs->trso_flags & TR_RAID1E_F_ABORT) { + if ((trs->trso_flags & + TR_RAID1E_F_ABORT) == 0) { + g_raid_tr_raid1e_fail_disk(sd->sd_softc, + nsd, nsd->sd_disk); + } + trs->trso_flags &= ~TR_RAID1E_F_DOING_SOME; + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } +rebuild_round_done: + nsd = trs->trso_failed_sd; + trs->trso_flags &= ~TR_RAID1E_F_LOCKED; + g_raid_unlock_range(sd->sd_volume, + bp->bio_offset, bp->bio_length); + nsd->sd_rebuild_pos += bp->bio_length; + if (nsd->sd_rebuild_pos >= vol->v_mediasize) { + g_raid_tr_raid1e_rebuild_finish(tr); + return; + } + + /* Abort rebuild if we are stopping */ + if (trs->trso_stopping) { + trs->trso_flags &= ~TR_RAID1E_F_DOING_SOME; + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } + + if (--trs->trso_meta_update <= 0) { + g_raid_write_metadata(vol->v_softc, + vol, nsd, nsd->sd_disk); + trs->trso_meta_update = + g_raid1e_rebuild_meta_update; + } + trs->trso_flags &= ~TR_RAID1E_F_DOING_SOME; + if (--trs->trso_recover_slabs <= 0) + return; + /* Run next rebuild iteration. */ + g_raid_tr_raid1e_rebuild_some(tr); + } + } else if (trs->trso_type == TR_RAID1E_RESYNC) { + /* + * read good sd, read bad sd in parallel. when both + * done, compare the buffers. write good to the bad + * if different. do the next bit of work. + */ + panic("Somehow, we think we're doing a resync"); + } + return; + } + pbp = bp->bio_parent; + pbp->bio_inbed++; + if (bp->bio_cmd == BIO_READ && bp->bio_error != 0) { + /* + * Read failed on first drive. Retry the read error on + * another disk drive, if available, before erroring out the + * read. + */ + sd->sd_disk->d_read_errs++; + G_RAID_LOGREQ(0, bp, + "Read error (%d), %d read errors total", + bp->bio_error, sd->sd_disk->d_read_errs); + + /* + * If there are too many read errors, we move to degraded. + * XXX Do we want to FAIL the drive (eg, make the user redo + * everything to get it back in sync), or just degrade the + * drive, which kicks off a resync? + */ + do_write = 1; + if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) { *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 18:08:54 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 6C860106566C; Sun, 13 Feb 2011 18:08:54 +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 415CA8FC13; Sun, 13 Feb 2011 18:08:54 +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 p1DI8saS046675; Sun, 13 Feb 2011 18:08:54 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1DI8smT046673; Sun, 13 Feb 2011 18:08:54 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102131808.p1DI8smT046673@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 18:08:54 +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: r218649 - 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, 13 Feb 2011 18:08:54 -0000 Author: mav Date: Sun Feb 13 18:08:53 2011 New Revision: 218649 URL: http://svn.freebsd.org/changeset/base/218649 Log: Change dirty flag handling during rebuild and resync. Do not report disks as ACTIVE in those cases. It is not important for two-disk arrays, because transformation modules will any way shift one to ACTIVE. But 3+ disk arrays may get real use of it. 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 Feb 13 18:03:30 2011 (r218648) +++ projects/graid/head/sys/geom/raid/md_intel.c Sun Feb 13 18:08:53 2011 (r218649) @@ -776,15 +776,11 @@ nofit: } } else if (mvol->migr_type == INTEL_MT_INIT || mvol->migr_type == INTEL_MT_REBUILD) { - if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { - /* Up to date disk. */ - g_raid_change_subdisk_state(sd, - G_RAID_SUBDISK_S_ACTIVE); - } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Freshly inserted disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NEW); - } else { + } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Rebuilding disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_REBUILD); @@ -796,18 +792,22 @@ nofit: sd->sd_volume->v_strip_size * mmap0->total_domains; } - } - } else if (mvol->migr_type == INTEL_MT_VERIFY || - mvol->migr_type == INTEL_MT_REPAIR) { - if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { + } else if (mvol->dirty) { + /* Dirty volume (unclean shutdown). */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { /* Up to date disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); - } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + } + } else if (mvol->migr_type == INTEL_MT_VERIFY || + mvol->migr_type == INTEL_MT_REPAIR) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Freshly inserted disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NEW); - } else { + } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Resyncing disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_RESYNC); @@ -819,6 +819,14 @@ nofit: sd->sd_volume->v_strip_size * mmap0->total_domains; } + } else if (mvol->dirty) { + /* Dirty volume (unclean shutdown). */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { + /* Up to date disk. */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); } } g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 18:21:41 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 6D7A71065670; Sun, 13 Feb 2011 18:21:41 +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 5BDDB8FC14; Sun, 13 Feb 2011 18:21:41 +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 p1DILfVM047135; Sun, 13 Feb 2011 18:21:41 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1DILfuD047133; Sun, 13 Feb 2011 18:21:41 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102131821.p1DILfuD047133@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 18:21:41 +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: r218651 - 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, 13 Feb 2011 18:21:41 -0000 Author: mav Date: Sun Feb 13 18:21:41 2011 New Revision: 218651 URL: http://svn.freebsd.org/changeset/base/218651 Log: Add rebuild and resync (via rebuild) support to the new module. Modified: projects/graid/head/sys/geom/raid/tr_raid1e.c Modified: projects/graid/head/sys/geom/raid/tr_raid1e.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 18:18:56 2011 (r218650) +++ projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 18:21:41 2011 (r218651) @@ -101,6 +101,8 @@ struct g_raid_tr_raid1e_object { int trso_flags; struct g_raid_subdisk *trso_failed_sd; /* like per volume */ void *trso_buffer; /* Buffer space */ + off_t trso_lock_pos; /* Locked range start. */ + off_t trso_lock_len; /* Locked range length. */ struct bio trso_bio; }; @@ -139,6 +141,8 @@ static struct g_raid_tr_class g_raid_tr_ static void g_raid_tr_raid1e_rebuild_abort(struct g_raid_tr_object *tr); static void g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr, struct g_raid_subdisk *sd); +static int g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol, + int no, off_t off, off_t len, u_int mask); static inline void V2P(struct g_raid_volume *vol, off_t virt, @@ -202,7 +206,6 @@ g_raid_tr_update_state_raid1e_even(struc state = G_RAID_VOLUME_S_OPTIMAL; for (i = 0; i < vol->v_disks_count / N; i++) { bestsd = &vol->v_subdisks[i * N]; - worstsd = &vol->v_subdisks[i * N]; for (j = 1; j < N; j++) { sd = &vol->v_subdisks[i * N + j]; if (sd->sd_state > bestsd->sd_state) @@ -212,8 +215,6 @@ g_raid_tr_update_state_raid1e_even(struc sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && sd->sd_rebuild_pos > bestsd->sd_rebuild_pos) bestsd = sd; - if (sd->sd_state < worstsd->sd_state) - worstsd = sd; } if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED && bestsd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { @@ -227,6 +228,12 @@ g_raid_tr_update_state_raid1e_even(struc g_raid_write_metadata(sc, vol, bestsd, bestsd->sd_disk); } + worstsd = &vol->v_subdisks[i * N]; + for (j = 1; j < N; j++) { + sd = &vol->v_subdisks[i * N + j]; + if (sd->sd_state < worstsd->sd_state) + worstsd = sd; + } if (worstsd->sd_state == G_RAID_SUBDISK_S_ACTIVE) sstate = G_RAID_VOLUME_S_OPTIMAL; else if (worstsd->sd_state >= G_RAID_SUBDISK_S_STALE) @@ -317,7 +324,6 @@ g_raid_tr_update_state_raid1e(struct g_r s = g_raid_tr_update_state_raid1e_even(vol); else s = g_raid_tr_update_state_raid1e_odd(vol); - g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); } if (s != vol->v_state) { g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? @@ -327,6 +333,8 @@ g_raid_tr_update_state_raid1e(struct g_r if (!trs->trso_starting && !trs->trso_stopping) g_raid_write_metadata(sc, vol, NULL, NULL); } + if (!trs->trso_starting && !trs->trso_stopping) + g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); return (0); } @@ -350,37 +358,6 @@ g_raid_tr_raid1e_fail_disk(struct g_raid } static void -g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) -{ - struct g_raid_tr_raid1e_object *trs; - struct g_raid_subdisk *sd, *good_sd; - struct bio *bp; - - trs = (struct g_raid_tr_raid1e_object *)tr; - if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) - return; - sd = trs->trso_failed_sd; - good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); - if (good_sd == NULL) { - g_raid_tr_raid1e_rebuild_abort(tr); - return; - } - bp = &trs->trso_bio; - memset(bp, 0, sizeof(*bp)); - bp->bio_offset = sd->sd_rebuild_pos; - bp->bio_length = MIN(g_raid1e_rebuild_slab, - sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); - bp->bio_data = trs->trso_buffer; - bp->bio_cmd = BIO_READ; - bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_caller1 = good_sd; - trs->trso_flags |= TR_RAID1E_F_DOING_SOME; - trs->trso_flags |= TR_RAID1E_F_LOCKED; - g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ - bp->bio_offset, bp->bio_length, NULL, bp); -} - -static void g_raid_tr_raid1e_rebuild_done(struct g_raid_tr_raid1e_object *trs) { struct g_raid_volume *vol; @@ -421,7 +398,6 @@ g_raid_tr_raid1e_rebuild_abort(struct g_ struct g_raid_tr_raid1e_object *trs; struct g_raid_subdisk *sd; struct g_raid_volume *vol; - off_t len; vol = tr->tro_volume; trs = (struct g_raid_tr_raid1e_object *)tr; @@ -440,21 +416,94 @@ g_raid_tr_raid1e_rebuild_abort(struct g_ trs->trso_flags &= ~TR_RAID1E_F_ABORT; if (trs->trso_flags & TR_RAID1E_F_LOCKED) { trs->trso_flags &= ~TR_RAID1E_F_LOCKED; - len = MIN(g_raid1e_rebuild_slab, - vol->v_mediasize - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, - sd->sd_rebuild_pos, len); + trs->trso_lock_pos, trs->trso_lock_len); } g_raid_tr_raid1e_rebuild_done(trs); } } static void +g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio *bp; + off_t len, virtual, vend, offset, start; + int disk, copy, best; + + trs = (struct g_raid_tr_raid1e_object *)tr; + if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) + return; + vol = tr->tro_volume; + sc = vol->v_softc; + sd = trs->trso_failed_sd; + + while (1) { + if (sd->sd_rebuild_pos >= sd->sd_size) { + g_raid_tr_raid1e_rebuild_finish(tr); + return; + } + /* Get virtual offset from physical rebuild position. */ + P2V(vol, sd->sd_pos, sd->sd_rebuild_pos, &virtual, ©); + /* Get physical offset back to get first stripe position. */ + V2P(vol, virtual, &disk, &offset, &start); + /* Calculate contignous data length. */ + len = MIN(g_raid1e_rebuild_slab, + sd->sd_size - sd->sd_rebuild_pos); + if ((vol->v_disks_count % N) != 0) + len = MIN(len, vol->v_strip_size - start); + /* Find disk with most accurate data. */ + best = g_raid_tr_raid1e_select_read_disk(vol, disk, + offset + start, len, 0); + if (best < 0) { + /* There is no any valid disk. */ + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } else if (best != copy) { + /* Some other disk has better data. */ + break; + } + /* We have the most accurate data. Skip the range. */ + G_RAID_DEBUG1(3, sc, "Skipping rebuild for range %ju - %ju", + sd->sd_rebuild_pos, sd->sd_rebuild_pos + len); + sd->sd_rebuild_pos += len; + } + + bp = &trs->trso_bio; + memset(bp, 0, sizeof(*bp)); + bp->bio_offset = offset + start + + ((disk + best >= vol->v_disks_count) ? vol->v_strip_size : 0); + bp->bio_length = len; + bp->bio_data = trs->trso_buffer; + bp->bio_cmd = BIO_READ; + bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; + bp->bio_caller1 = &vol->v_subdisks[(disk + best) % vol->v_disks_count]; + G_RAID_LOGREQ(3, bp, "Queueing rebuild read"); + /* + * If we are crossing stripe boundary, correct affected virtual + * range we should lock. + */ + if (start + len > vol->v_strip_size) { + P2V(vol, sd->sd_pos, sd->sd_rebuild_pos + len, &vend, ©); + len = vend - virtual; + } + trs->trso_flags |= TR_RAID1E_F_DOING_SOME; + trs->trso_flags |= TR_RAID1E_F_LOCKED; + trs->trso_lock_pos = virtual; + trs->trso_lock_len = len; + /* Lock callback starts I/O */ + g_raid_lock_range(sd->sd_volume, virtual, len, NULL, bp); +} + +static void g_raid_tr_raid1e_rebuild_start(struct g_raid_tr_object *tr) { struct g_raid_volume *vol; struct g_raid_tr_raid1e_object *trs; - struct g_raid_subdisk *sd, *fsd; + struct g_raid_subdisk *sd; vol = tr->tro_volume; trs = (struct g_raid_tr_raid1e_object *)tr; @@ -464,47 +513,41 @@ g_raid_tr_raid1e_rebuild_start(struct g_ (intmax_t)trs->trso_failed_sd->sd_rebuild_pos); return; } - sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_ACTIVE); + sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_RESYNC); + if (sd == NULL) + sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_REBUILD); if (sd == NULL) { - G_RAID_DEBUG1(1, vol->v_softc, - "No active disk to rebuild. night night."); - return; - } - fsd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_RESYNC); - if (fsd == NULL) - fsd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_REBUILD); - if (fsd == NULL) { - fsd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_STALE); - if (fsd != NULL) { - fsd->sd_rebuild_pos = 0; - g_raid_change_subdisk_state(fsd, + sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_STALE); + if (sd != NULL) { + sd->sd_rebuild_pos = 0; + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_RESYNC); - g_raid_write_metadata(vol->v_softc, vol, fsd, NULL); + g_raid_write_metadata(vol->v_softc, vol, sd, NULL); } else { - fsd = g_raid_get_subdisk(vol, + sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_UNINITIALIZED); - if (fsd == NULL) - fsd = g_raid_get_subdisk(vol, + if (sd == NULL) + sd = g_raid_get_subdisk(vol, G_RAID_SUBDISK_S_NEW); - if (fsd != NULL) { - fsd->sd_rebuild_pos = 0; - g_raid_change_subdisk_state(fsd, + if (sd != NULL) { + sd->sd_rebuild_pos = 0; + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_REBUILD); g_raid_write_metadata(vol->v_softc, - vol, fsd, NULL); + vol, sd, NULL); } } } - if (fsd == NULL) { + if (sd == NULL) { G_RAID_DEBUG1(1, vol->v_softc, "No failed disk to rebuild. night night."); return; } - trs->trso_failed_sd = fsd; + trs->trso_failed_sd = sd; G_RAID_DEBUG1(0, vol->v_softc, "Subdisk %s:%d-%s rebuild start at %jd.", - fsd->sd_volume->v_name, fsd->sd_pos, - fsd->sd_disk ? g_raid_get_diskname(fsd->sd_disk) : "[none]", + sd->sd_volume->v_name, sd->sd_pos, + sd->sd_disk ? g_raid_get_diskname(sd->sd_disk) : "[none]", trs->trso_failed_sd->sd_rebuild_pos); trs->trso_type = TR_RAID1E_REBUILD; trs->trso_buffer = malloc(g_raid1e_rebuild_slab, M_TR_RAID1E, M_WAITOK); @@ -512,31 +555,23 @@ g_raid_tr_raid1e_rebuild_start(struct g_ g_raid_tr_raid1e_rebuild_some(tr); } - static void g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr, struct g_raid_subdisk *sd) { struct g_raid_volume *vol; struct g_raid_tr_raid1e_object *trs; - int na, nr; + int nr; - /* - * If we're stopping, don't do anything. If we don't have at least one - * good disk and one bad disk, we don't do anything. And if there's a - * 'good disk' stored in the trs, then we're in progress and we punt. - * If we make it past all these checks, we need to rebuild. - */ vol = tr->tro_volume; trs = (struct g_raid_tr_raid1e_object *)tr; if (trs->trso_stopping) return; - na = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE); nr = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_REBUILD) + g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_RESYNC); switch(trs->trso_type) { case TR_RAID1E_NONE: - if (na == 0) + if (vol->v_state < G_RAID_VOLUME_S_DEGRADED) return; if (nr == 0) { nr = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_NEW) + @@ -548,7 +583,8 @@ g_raid_tr_raid1e_maybe_rebuild(struct g_ g_raid_tr_raid1e_rebuild_start(tr); break; case TR_RAID1E_REBUILD: - if (na == 0 || nr == 0 || trs->trso_failed_sd == sd) + if (vol->v_state < G_RAID_VOLUME_S_DEGRADED || nr == 0 || + trs->trso_failed_sd == sd) g_raid_tr_raid1e_rebuild_abort(tr); break; case TR_RAID1E_RESYNC: @@ -851,6 +887,7 @@ g_raid_tr_iodone_raid1e(struct g_raid_tr vol = tr->tro_volume; if (bp->bio_cflags & G_RAID_BIO_FLAG_SYNC) { if (trs->trso_type == TR_RAID1E_REBUILD) { + nsd = trs->trso_failed_sd; if (bp->bio_cmd == BIO_READ) { /* Immediately abort rebuild, if requested. */ @@ -873,14 +910,13 @@ g_raid_tr_iodone_raid1e(struct g_raid_tr * The read operation finished, queue the * write and get out. */ - G_RAID_LOGREQ(4, bp, "rebuild read done. %d", + G_RAID_LOGREQ(3, bp, "Rebuild read done: %d", bp->bio_error); bp->bio_cmd = BIO_WRITE; bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_offset = bp->bio_offset; - bp->bio_length = bp->bio_length; - G_RAID_LOGREQ(4, bp, "Queueing reguild write."); - g_raid_subdisk_iostart(trs->trso_failed_sd, bp); + bp->bio_offset = nsd->sd_rebuild_pos; + G_RAID_LOGREQ(3, bp, "Queueing rebuild write."); + g_raid_subdisk_iostart(nsd, bp); } else { /* * The write operation just finished. Do @@ -888,10 +924,8 @@ g_raid_tr_iodone_raid1e(struct g_raid_tr * since it has the right buffers allocated to * it. */ - G_RAID_LOGREQ(4, bp, - "rebuild write done. Error %d", + G_RAID_LOGREQ(3, bp, "Rebuild write done: %d", bp->bio_error); - nsd = trs->trso_failed_sd; if (bp->bio_error != 0 || trs->trso_flags & TR_RAID1E_F_ABORT) { if ((trs->trso_flags & @@ -904,12 +938,11 @@ g_raid_tr_iodone_raid1e(struct g_raid_tr return; } rebuild_round_done: - nsd = trs->trso_failed_sd; trs->trso_flags &= ~TR_RAID1E_F_LOCKED; - g_raid_unlock_range(sd->sd_volume, - bp->bio_offset, bp->bio_length); + g_raid_unlock_range(tr->tro_volume, + trs->trso_lock_pos, trs->trso_lock_len); nsd->sd_rebuild_pos += bp->bio_length; - if (nsd->sd_rebuild_pos >= vol->v_mediasize) { + if (nsd->sd_rebuild_pos >= nsd->sd_size) { g_raid_tr_raid1e_rebuild_finish(tr); return; } @@ -926,6 +959,15 @@ rebuild_round_done: vol, nsd, nsd->sd_disk); trs->trso_meta_update = g_raid1e_rebuild_meta_update; + /* Compensate short rebuild I/Os. */ + if ((vol->v_disks_count % N) != 0 && + vol->v_strip_size < + g_raid1e_rebuild_slab) { + trs->trso_meta_update *= + g_raid1e_rebuild_slab; + trs->trso_meta_update /= + vol->v_strip_size; + } } trs->trso_flags &= ~TR_RAID1E_F_DOING_SOME; if (--trs->trso_recover_slabs <= 0) @@ -1133,10 +1175,18 @@ static int g_raid_tr_idle_raid1e(struct g_raid_tr_object *tr) { struct g_raid_tr_raid1e_object *trs; + struct g_raid_volume *vol; + vol = tr->tro_volume; trs = (struct g_raid_tr_raid1e_object *)tr; trs->trso_fair_io = g_raid1e_rebuild_fair_io; trs->trso_recover_slabs = g_raid1e_rebuild_cluster_idle; + /* Compensate short rebuild I/Os. */ + if ((vol->v_disks_count % N) != 0 && + vol->v_strip_size < g_raid1e_rebuild_slab) { + trs->trso_recover_slabs *= g_raid1e_rebuild_slab; + trs->trso_recover_slabs /= vol->v_strip_size; + } if (trs->trso_type == TR_RAID1E_REBUILD) g_raid_tr_raid1e_rebuild_some(tr); return (0); From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 18:35:21 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 73D6F106564A; Sun, 13 Feb 2011 18:35:21 +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 62D828FC13; Sun, 13 Feb 2011 18:35:21 +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 p1DIZLJS047506; Sun, 13 Feb 2011 18:35:21 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1DIZLw6047504; Sun, 13 Feb 2011 18:35:21 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102131835.p1DIZLw6047504@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 18:35:21 +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: r218653 - projects/graid/head/sbin/geom/class/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, 13 Feb 2011 18:35:21 -0000 Author: mav Date: Sun Feb 13 18:35:21 2011 New Revision: 218653 URL: http://svn.freebsd.org/changeset/base/218653 Log: Add RAID1E and RAID10 to the list of supported. Modified: projects/graid/head/sbin/geom/class/raid/graid.8 Modified: projects/graid/head/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/head/sbin/geom/class/raid/graid.8 Sun Feb 13 18:30:17 2011 (r218652) +++ projects/graid/head/sbin/geom/class/raid/graid.8 Sun Feb 13 18:35:21 2011 (r218653) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 10, 2011 +.Dd February 13, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -211,7 +211,8 @@ risk: RAID1 (3+ disks), RAID1E (3+ disks .Sh SUPPORTED RAID LEVELS The GEOM RAID class follows a modular design, allowing different RAID levels to be used. -Support for the following RAID levels is currently implemented: RAID0, RAID1. +Support for the following RAID levels is currently implemented: RAID0, RAID1, +RAID1E, RAID10. .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. .Sh SEE ALSO From owner-svn-src-projects@FreeBSD.ORG Sun Feb 13 21:12: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 311121065675; Sun, 13 Feb 2011 21:12: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 1F3F18FC13; Sun, 13 Feb 2011 21:12: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 p1DLC6t4057958; Sun, 13 Feb 2011 21:12:06 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1DLC65g057956; Sun, 13 Feb 2011 21:12:06 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102132112.p1DLC65g057956@svn.freebsd.org> From: Alexander Motin Date: Sun, 13 Feb 2011 21:12: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: r218669 - 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, 13 Feb 2011 21:12:06 -0000 Author: mav Date: Sun Feb 13 21:12:05 2011 New Revision: 218669 URL: http://svn.freebsd.org/changeset/base/218669 Log: Implmenent read errors recovery and bad secotors remapping. Modified: projects/graid/head/sys/geom/raid/tr_raid1e.c Modified: projects/graid/head/sys/geom/raid/tr_raid1e.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 20:07:48 2011 (r218668) +++ projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 21:12:05 2011 (r218669) @@ -880,8 +880,9 @@ g_raid_tr_iodone_raid1e(struct g_raid_tr struct g_raid_volume *vol; struct bio *pbp; struct g_raid_tr_raid1e_object *trs; - uintptr_t *mask; - int error, do_write; + off_t virtual, offset, start; + uintptr_t mask; + int error, do_write, copy, disk, best; trs = (struct g_raid_tr_raid1e_object *)tr; vol = tr->tro_volume; @@ -987,6 +988,7 @@ rebuild_round_done: } pbp = bp->bio_parent; pbp->bio_inbed++; + mask = (intptr_t)bp->bio_caller2; if (bp->bio_cmd == BIO_READ && bp->bio_error != 0) { /* * Read failed on first drive. Retry the read error on @@ -1004,38 +1006,43 @@ rebuild_round_done: * everything to get it back in sync), or just degrade the * drive, which kicks off a resync? */ - do_write = 1; - if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) { + do_write = 0; + if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) g_raid_tr_raid1e_fail_disk(sd->sd_softc, sd, sd->sd_disk); - if (pbp->bio_children == 1) - do_write = 0; - } + else if (mask == 0) + do_write = 1; - /* - * Find the other disk, and try to do the I/O to it. - */ - mask = (uintptr_t *)(&pbp->bio_driver2); - if (pbp->bio_children == 1) { - /* Save original subdisk. */ - pbp->bio_driver1 = do_write ? sd : NULL; - *mask = 0; - } - *mask |= 1 << sd->sd_pos; -//P2V(struct g_raid_volume *vol, int disk, off_t offset, -// off_t *virt, int *copy) -// best = g_raid_tr_raid1e_select_read_disk(vol, -// no, offset, start, 0); - nsd = NULL; //g_raid_tr_raid1e_select_read_disk(vol, pbp, *mask); - if (nsd != NULL && (cbp = g_clone_bio(pbp)) != NULL) { + /* Restore what we were doing. */ + P2V(vol, sd->sd_pos, bp->bio_offset, &virtual, ©); + V2P(vol, virtual, &disk, &offset, &start); + + /* Find the other disk, and try to do the I/O to it. */ + mask |= 1 << copy; + best = g_raid_tr_raid1e_select_read_disk(vol, + disk, offset, start, mask); + if (best >= 0 && (cbp = g_clone_bio(pbp)) != NULL) { + disk += best; + if (disk >= vol->v_disks_count) { + disk -= vol->v_disks_count; + offset += vol->v_strip_size; + } + cbp->bio_offset = offset + start; + cbp->bio_length = bp->bio_length; + cbp->bio_data = bp->bio_data; + g_destroy_bio(bp); + nsd = &vol->v_subdisks[disk]; G_RAID_LOGREQ(2, cbp, "Retrying read from %d", nsd->sd_pos); - if (pbp->bio_children == 2 && do_write) { + if (do_write) + mask |= 1 << 31; + if ((mask & (1 << 31)) != 0) sd->sd_recovery++; + cbp->bio_caller2 = (void *)mask; + if (do_write) { cbp->bio_caller1 = nsd; - pbp->bio_pflags = G_RAID_BIO_FLAG_LOCKED; /* Lock callback starts I/O */ g_raid_lock_range(sd->sd_volume, - cbp->bio_offset, cbp->bio_length, pbp, cbp); + virtual, cbp->bio_length, pbp, cbp); } else { g_raid_subdisk_iostart(nsd, cbp); } @@ -1051,31 +1058,36 @@ rebuild_round_done: } if (bp->bio_cmd == BIO_READ && bp->bio_error == 0 && - pbp->bio_children > 1 && - pbp->bio_driver1 != NULL) { - /* - * If it was a read, and bio_children is >1, 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. However, to make the code simpler, it - * is done syncrhonously. - */ + (mask & (1 << 31)) != 0) { G_RAID_LOGREQ(3, bp, "Recovered data from other drive"); - cbp = g_clone_bio(pbp); - if (cbp != NULL) { + + /* Restore what we were doing. */ + P2V(vol, sd->sd_pos, bp->bio_offset, &virtual, ©); + V2P(vol, virtual, &disk, &offset, &start); + + /* Find best disk to write. */ + best = g_raid_tr_raid1e_select_read_disk(vol, + disk, offset, start, ~mask); + if (best >= 0 && (cbp = g_clone_bio(pbp)) != NULL) { + disk += best; + if (disk >= vol->v_disks_count) { + disk -= vol->v_disks_count; + offset += vol->v_strip_size; + } + cbp->bio_offset = offset + start; + cbp->bio_length = bp->bio_length; + cbp->bio_data = bp->bio_data; cbp->bio_cmd = BIO_WRITE; cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP; + cbp->bio_caller2 = (void *)mask; + g_destroy_bio(bp); G_RAID_LOGREQ(2, cbp, "Attempting bad sector remap on failing drive."); - g_raid_subdisk_iostart(pbp->bio_driver1, cbp); + g_raid_subdisk_iostart(&vol->v_subdisks[disk], cbp); return; } } - if (pbp->bio_pflags & G_RAID_BIO_FLAG_LOCKED) { + if ((mask & (1 << 31)) != 0) { /* * We're done with a recovery, mark the range as unlocked. * For any write errors, we agressively fail the disk since @@ -1085,19 +1097,25 @@ rebuild_round_done: * it now. However, we need to reset error to 0 in that case * because we're not failing the original I/O which succeeded. */ + + /* Restore what we were doing. */ + P2V(vol, sd->sd_pos, bp->bio_offset, &virtual, ©); + V2P(vol, virtual, &disk, &offset, &start); + + for (copy = 0; copy < N; copy++) { + if ((mask & (1 << copy) ) != 0) + vol->v_subdisks[(disk + copy) % + vol->v_disks_count].sd_recovery--; + } + if (bp->bio_cmd == BIO_WRITE && bp->bio_error) { G_RAID_LOGREQ(0, bp, "Remap write failed: " "failing subdisk."); g_raid_tr_raid1e_fail_disk(sd->sd_softc, sd, sd->sd_disk); bp->bio_error = 0; } - if (pbp->bio_driver1 != NULL) { - ((struct g_raid_subdisk *)pbp->bio_driver1) - ->sd_recovery--; - } G_RAID_LOGREQ(2, bp, "REMAP done %d.", bp->bio_error); - g_raid_unlock_range(sd->sd_volume, bp->bio_offset, - bp->bio_length); + g_raid_unlock_range(sd->sd_volume, virtual, bp->bio_length); } error = bp->bio_error; g_destroy_bio(bp); From owner-svn-src-projects@FreeBSD.ORG Mon Feb 14 06:06:20 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 AC55B106564A; Mon, 14 Feb 2011 06:06:20 +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 9AEFB8FC1A; Mon, 14 Feb 2011 06:06:20 +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 p1E66KTH081761; Mon, 14 Feb 2011 06:06:20 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1E66KbL081759; Mon, 14 Feb 2011 06:06:20 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102140606.p1E66KbL081759@svn.freebsd.org> From: Alexander Motin Date: Mon, 14 Feb 2011 06:06:20 +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: r218674 - 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: Mon, 14 Feb 2011 06:06:20 -0000 Author: mav Date: Mon Feb 14 06:06:20 2011 New Revision: 218674 URL: http://svn.freebsd.org/changeset/base/218674 Log: Some refactoring to deduplicate rebuild read code. 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 Mon Feb 14 02:37:27 2011 (r218673) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Mon Feb 14 06:06:20 2011 (r218674) @@ -243,16 +243,16 @@ g_raid_tr_raid1_fail_disk(struct g_raid_ } static void -g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr, - struct g_raid_subdisk *sd) +g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr) { struct g_raid_tr_raid1_object *trs; - struct g_raid_subdisk *good_sd; + struct g_raid_subdisk *sd, *good_sd; struct bio *bp; trs = (struct g_raid_tr_raid1_object *)tr; if (trs->trso_flags & TR_RAID1_F_DOING_SOME) return; + sd = trs->trso_failed_sd; good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); if (good_sd == NULL) { g_raid_tr_raid1_rebuild_abort(tr); @@ -262,13 +262,11 @@ g_raid_tr_raid1_rebuild_some(struct g_ra memset(bp, 0, sizeof(*bp)); bp->bio_offset = sd->sd_rebuild_pos; bp->bio_length = MIN(g_raid1_rebuild_slab, - sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); + sd->sd_size - sd->sd_rebuild_pos); bp->bio_data = trs->trso_buffer; bp->bio_cmd = BIO_READ; bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; bp->bio_caller1 = good_sd; - trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; - trs->trso_fair_io = g_raid1_rebuild_fair_io; trs->trso_flags |= TR_RAID1_F_DOING_SOME; trs->trso_flags |= TR_RAID1_F_LOCKED; g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ @@ -336,7 +334,7 @@ g_raid_tr_raid1_rebuild_abort(struct g_r if (trs->trso_flags & TR_RAID1_F_LOCKED) { trs->trso_flags &= ~TR_RAID1_F_LOCKED; len = MIN(g_raid1_rebuild_slab, - vol->v_mediasize - sd->sd_rebuild_pos); + sd->sd_size - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, sd->sd_rebuild_pos, len); } @@ -404,7 +402,7 @@ g_raid_tr_raid1_rebuild_start(struct g_r trs->trso_type = TR_RAID1_REBUILD; trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_RAID1, M_WAITOK); trs->trso_meta_update = g_raid1_rebuild_meta_update; - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); + g_raid_tr_raid1_rebuild_some(tr); } @@ -639,10 +637,12 @@ g_raid_tr_iostart_raid1(struct g_raid_tr */ if (trs->trso_failed_sd != NULL && !(bp->bio_cflags & G_RAID_BIO_FLAG_SPECIAL)) { - if (--trs->trso_fair_io <= 0) - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); /* Make this new or running now round short. */ trs->trso_recover_slabs = 0; + if (--trs->trso_fair_io <= 0) { + trs->trso_fair_io = g_raid1_rebuild_fair_io; + g_raid_tr_raid1_rebuild_some(tr); + } } switch (bp->bio_cmd) { case BIO_READ: @@ -669,7 +669,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ struct g_raid_subdisk *sd, struct bio *bp) { struct bio *cbp; - struct g_raid_subdisk *nsd, *good_sd; + struct g_raid_subdisk *nsd; struct g_raid_volume *vol; struct bio *pbp; struct g_raid_tr_raid1_object *trs; @@ -746,14 +746,13 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ g_raid_tr_raid1_rebuild_abort(tr); return; } -/* XXX A lot of the following is needed when we kick of the work -- refactor */ rebuild_round_done: nsd = trs->trso_failed_sd; trs->trso_flags &= ~TR_RAID1_F_LOCKED; g_raid_unlock_range(sd->sd_volume, bp->bio_offset, bp->bio_length); nsd->sd_rebuild_pos += bp->bio_length; - if (nsd->sd_rebuild_pos >= vol->v_mediasize) { + if (nsd->sd_rebuild_pos >= nsd->sd_size) { g_raid_tr_raid1_rebuild_finish(tr); return; } @@ -771,29 +770,10 @@ rebuild_round_done: trs->trso_meta_update = g_raid1_rebuild_meta_update; } - if (--trs->trso_recover_slabs <= 0) { - trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; + trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; + if (--trs->trso_recover_slabs <= 0) return; - } - good_sd = g_raid_get_subdisk(sd->sd_volume, - G_RAID_SUBDISK_S_ACTIVE); - if (good_sd == NULL) { - trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; - g_raid_tr_raid1_rebuild_abort(tr); - return; - } - bp->bio_cmd = BIO_READ; - bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_offset = nsd->sd_rebuild_pos; - bp->bio_length = MIN(g_raid1_rebuild_slab, - vol->v_mediasize - nsd->sd_rebuild_pos); - bp->bio_caller1 = good_sd; - G_RAID_LOGREQ(4, bp, - "Rebuild read at %jd.", bp->bio_offset); - /* Lock callback starts I/O */ - trs->trso_flags |= TR_RAID1_F_LOCKED; - g_raid_lock_range(sd->sd_volume, - bp->bio_offset, bp->bio_length, NULL, bp); + g_raid_tr_raid1_rebuild_some(tr); } } else if (trs->trso_type == TR_RAID1_RESYNC) { /* @@ -989,8 +969,10 @@ g_raid_tr_idle_raid1(struct g_raid_tr_ob struct g_raid_tr_raid1_object *trs; trs = (struct g_raid_tr_raid1_object *)tr; + trs->trso_fair_io = g_raid1_rebuild_fair_io; + trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; if (trs->trso_type == TR_RAID1_REBUILD) - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); + g_raid_tr_raid1_rebuild_some(tr); return (0); } From owner-svn-src-projects@FreeBSD.ORG Mon Feb 14 11:56: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 49F71106564A; Mon, 14 Feb 2011 11:56:46 +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 38B468FC19; Mon, 14 Feb 2011 11:56: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 p1EBukTp091969; Mon, 14 Feb 2011 11:56:46 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1EBuk0p091966; Mon, 14 Feb 2011 11:56:46 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102141156.p1EBuk0p091966@svn.freebsd.org> From: Alexander Motin Date: Mon, 14 Feb 2011 11:56:46 +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: r218678 - 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: Mon, 14 Feb 2011 11:56:46 -0000 Author: mav Date: Mon Feb 14 11:56:45 2011 New Revision: 218678 URL: http://svn.freebsd.org/changeset/base/218678 Log: Rework idle events scheduling. Call idle() trasfotmation method for the volume with no active payload requests with fixed period of idle_threshold, instead of measuring that time from the last (probably internal) activity. That change allows to reach full rebuild/resync speed supported by the disk. Also it makes tunables closer related to some real world values. Maximum speed for idle disk now is rebuild_slab_size * rebuild_cluster_idle per idle_threshold interval. With present settings it is 100MB/s. When disk is busy - rebuild does one rebuild_slab_size sized transaction every rebuild_fair_io payload requests. Now it is 1MB per 20 requests. 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 Mon Feb 14 09:58:47 2011 (r218677) +++ projects/graid/head/sys/geom/raid/g_raid.c Mon Feb 14 11:56:45 2011 (r218678) @@ -1047,6 +1047,7 @@ g_raid_iodone(struct bio *bp, int error) bioq_remove(&vol->v_inflight, bp); if (vol->v_pending_lock && g_raid_is_in_locked_range(vol, bp)) g_raid_finish_with_locked_ranges(vol, bp); + getmicrouptime(&vol->v_last_done); g_io_deliver(bp, error); } @@ -1273,6 +1274,7 @@ g_raid_worker(void *arg) struct g_raid_event *ep; struct g_raid_volume *vol; struct bio *bp; + struct timeval now, t; int timeout, rv; sc = arg; @@ -1296,38 +1298,59 @@ g_raid_worker(void *arg) else if ((bp = bioq_takefirst(&sc->sc_queue)) != NULL) ; else { - /* - * Two steps to avoid overflows at HZ=1000 - * and idle timeouts > 2.1s. Some rounding errors - * can occur, but they are < 1tick, which is deemed to - * be close enough for this purpose. - */ - int micpertic = 1000000 / hz; - timeout = g_raid_idle_threshold / micpertic; - sx_xunlock(&sc->sc_lock); - MSLEEP(rv, sc, &sc->sc_queue_mtx, PRIBIO | PDROP, "-", - timeout); - sx_xlock(&sc->sc_lock); - goto process; + getmicrouptime(&now); + t = now; + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { + if (bioq_first(&vol->v_inflight) == NULL && + timevalcmp(&vol->v_last_done, &t, < )) + t = vol->v_last_done; + } + timevalsub(&t, &now); + timeout = g_raid_idle_threshold + + t.tv_sec * 1000000 + t.tv_usec; + if (timeout > 0) { + /* + * Two steps to avoid overflows at HZ=1000 + * and idle timeouts > 2.1s. Some rounding + * errors can occur, but they are < 1tick, + * which is deemed to be close enough for + * this purpose. + */ + int micpertic = 1000000 / hz; + timeout = (timeout + micpertic - 1) / micpertic; + sx_xunlock(&sc->sc_lock); + MSLEEP(rv, sc, &sc->sc_queue_mtx, + PRIBIO | PDROP, "-", timeout); + sx_xlock(&sc->sc_lock); + goto process; + } else + rv = EWOULDBLOCK; } mtx_unlock(&sc->sc_queue_mtx); process: - if (ep != NULL) + if (ep != NULL) { g_raid_handle_event(sc, ep); - if (bp != NULL) { + } else if (bp != NULL) { if (bp->bio_to != NULL && bp->bio_to->geom == sc->sc_geom) g_raid_start_request(bp); else g_raid_disk_done_request(bp); - } - if (rv == EWOULDBLOCK) { + } else if (rv == EWOULDBLOCK) { TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (vol->v_writes == 0 && vol->v_dirty) g_raid_clean(vol, -1); if (bioq_first(&vol->v_inflight) == NULL && - vol->v_tr) - G_RAID_TR_IDLE(vol->v_tr); + vol->v_tr) { + t.tv_sec = g_raid_idle_threshold / 1000000; + t.tv_usec = g_raid_idle_threshold % 1000000; + timevaladd(&t, &vol->v_last_done); + getmicrouptime(&now); + if (timevalcmp(&t, &now, <= )) { + G_RAID_TR_IDLE(vol->v_tr); + vol->v_last_done = now; + } + } } } if (sc->sc_stopping == G_RAID_DESTROY_HARD) Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Mon Feb 14 09:58:47 2011 (r218677) +++ projects/graid/head/sys/geom/raid/g_raid.h Mon Feb 14 11:56:45 2011 (r218678) @@ -32,6 +32,7 @@ #include #include #include +#include #define G_RAID_CLASS_NAME "RAID" @@ -250,6 +251,7 @@ struct g_raid_volume { LIST_HEAD(, g_raid_lock) v_locks; /* List of locked regions. */ int v_pending_lock; /* writes to locked region */ int v_dirty; /* Volume is DIRTY. */ + struct timeval v_last_done; /* Time of the last I/O. */ time_t v_last_write; /* Time of the last write. */ u_int v_writes; /* Number of active writes. */ struct root_hold_token *v_rootmount; /* Root mount delay token. */ From owner-svn-src-projects@FreeBSD.ORG Mon Feb 14 14:21:08 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 26FA01065674; Mon, 14 Feb 2011 14:21:08 +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 14D078FC13; Mon, 14 Feb 2011 14:21:08 +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 p1EEL80a095596; Mon, 14 Feb 2011 14:21:08 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1EEL75m095586; Mon, 14 Feb 2011 14:21:07 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102141421.p1EEL75m095586@svn.freebsd.org> From: Alexander Motin Date: Mon, 14 Feb 2011 14:21:07 +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: r218679 - in projects/graid/8: . contrib/bsnmp/snmpd contrib/top contrib/xz gnu/usr.bin lib lib/liblzma lib/librtld_db lib/libusb release/picobsd/floppy.tree/sbin sbin/geom/class/raid s... 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, 14 Feb 2011 14:21:08 -0000 Author: mav Date: Mon Feb 14 14:21:07 2011 New Revision: 218679 URL: http://svn.freebsd.org/changeset/base/218679 Log: MFH r218600, r218608, r218622, r218624, r218630, r218632, r218638, r218649, r218651, r218653, r218669, r218674, r218678. Added: projects/graid/8/sys/geom/raid/tr_raid1e.c - copied, changed from r218638, projects/graid/head/sys/geom/raid/tr_raid1e.c Modified: projects/graid/8/sbin/geom/class/raid/graid.8 projects/graid/8/sys/conf/files projects/graid/8/sys/geom/raid/g_raid.c projects/graid/8/sys/geom/raid/g_raid.h projects/graid/8/sys/geom/raid/md_intel.c projects/graid/8/sys/geom/raid/tr_raid0.c projects/graid/8/sys/geom/raid/tr_raid1.c projects/graid/8/sys/modules/geom/geom_raid/Makefile Directory Properties: projects/graid/8/ (props changed) projects/graid/8/COPYRIGHT (props changed) projects/graid/8/LOCKS (props changed) projects/graid/8/MAINTAINERS (props changed) projects/graid/8/Makefile (props changed) projects/graid/8/Makefile.inc1 (props changed) projects/graid/8/ObsoleteFiles.inc (props changed) projects/graid/8/README (props changed) projects/graid/8/UPDATING (props changed) projects/graid/8/bin/ (props changed) projects/graid/8/bin/chio/ (props changed) projects/graid/8/bin/chmod/ (props changed) projects/graid/8/bin/cp/ (props changed) projects/graid/8/bin/csh/ (props changed) projects/graid/8/bin/date/ (props changed) projects/graid/8/bin/echo/ (props changed) projects/graid/8/bin/expr/ (props changed) projects/graid/8/bin/getfacl/ (props changed) projects/graid/8/bin/kill/ (props changed) projects/graid/8/bin/ln/ (props changed) projects/graid/8/bin/ls/ (props changed) projects/graid/8/bin/mv/ (props changed) projects/graid/8/bin/pax/ (props changed) projects/graid/8/bin/pkill/ (props changed) projects/graid/8/bin/ps/ (props changed) projects/graid/8/bin/pwait/ (props changed) projects/graid/8/bin/setfacl/ (props changed) projects/graid/8/bin/sh/ (props changed) projects/graid/8/bin/sleep/ (props changed) projects/graid/8/bin/test/ (props changed) projects/graid/8/cddl/ (props changed) projects/graid/8/cddl/compat/opensolaris/ (props changed) projects/graid/8/cddl/contrib/opensolaris/ (props changed) projects/graid/8/cddl/lib/ (props changed) projects/graid/8/cddl/lib/libnvpair/ (props changed) projects/graid/8/cddl/lib/libzpool/ (props changed) projects/graid/8/cddl/usr.bin/ (props changed) projects/graid/8/cddl/usr.sbin/ (props changed) projects/graid/8/contrib/ (props changed) projects/graid/8/contrib/amd/ (props changed) projects/graid/8/contrib/bc/ (props changed) projects/graid/8/contrib/bind9/ (props changed) projects/graid/8/contrib/binutils/ (props changed) projects/graid/8/contrib/bsnmp/ (props changed) projects/graid/8/contrib/bsnmp/snmpd/bsnmpd.1 (props changed) projects/graid/8/contrib/bzip2/ (props changed) projects/graid/8/contrib/com_err/ (props changed) projects/graid/8/contrib/csup/ (props changed) projects/graid/8/contrib/cvs/ (props changed) projects/graid/8/contrib/diff/ (props changed) projects/graid/8/contrib/ee/ (props changed) projects/graid/8/contrib/expat/ (props changed) projects/graid/8/contrib/file/ (props changed) projects/graid/8/contrib/gcc/ (props changed) projects/graid/8/contrib/gcclibs/ (props changed) projects/graid/8/contrib/gdb/ (props changed) projects/graid/8/contrib/gdtoa/ (props changed) projects/graid/8/contrib/gnu-sort/ (props changed) projects/graid/8/contrib/gperf/ (props changed) projects/graid/8/contrib/groff/ (props changed) projects/graid/8/contrib/ipfilter/ (props changed) projects/graid/8/contrib/less/ (props changed) projects/graid/8/contrib/libbegemot/ (props changed) projects/graid/8/contrib/libf2c/ (props changed) projects/graid/8/contrib/libobjc/ (props changed) projects/graid/8/contrib/libpcap/ (props changed) projects/graid/8/contrib/libreadline/ (props changed) projects/graid/8/contrib/libstdc++/ (props changed) projects/graid/8/contrib/lukemftp/ (props changed) projects/graid/8/contrib/lukemftpd/ (props changed) projects/graid/8/contrib/ncurses/ (props changed) projects/graid/8/contrib/netcat/ (props changed) projects/graid/8/contrib/ngatm/ (props changed) projects/graid/8/contrib/ntp/ (props changed) projects/graid/8/contrib/nvi/ (props changed) projects/graid/8/contrib/one-true-awk/ (props changed) projects/graid/8/contrib/openbsm/ (props changed) projects/graid/8/contrib/openpam/ (props changed) projects/graid/8/contrib/opie/ (props changed) projects/graid/8/contrib/pam_modules/ (props changed) projects/graid/8/contrib/pf/ (props changed) projects/graid/8/contrib/pnpinfo/ (props changed) projects/graid/8/contrib/sendmail/ (props changed) projects/graid/8/contrib/smbfs/ (props changed) projects/graid/8/contrib/tcp_wrappers/ (props changed) projects/graid/8/contrib/tcpdump/ (props changed) projects/graid/8/contrib/tcsh/ (props changed) projects/graid/8/contrib/telnet/ (props changed) projects/graid/8/contrib/texinfo/ (props changed) projects/graid/8/contrib/top/ (props changed) projects/graid/8/contrib/top/install-sh (props changed) projects/graid/8/contrib/traceroute/ (props changed) projects/graid/8/contrib/wpa/ (props changed) projects/graid/8/contrib/xz/ (props changed) projects/graid/8/contrib/xz/AUTHORS (props changed) projects/graid/8/contrib/xz/COPYING (props changed) projects/graid/8/contrib/xz/ChangeLog (props changed) projects/graid/8/contrib/xz/FREEBSD-Xlist (props changed) projects/graid/8/contrib/xz/FREEBSD-upgrade (props changed) projects/graid/8/contrib/xz/README (props changed) projects/graid/8/contrib/xz/THANKS (props changed) projects/graid/8/contrib/xz/TODO (props changed) projects/graid/8/contrib/xz/po/ (props changed) projects/graid/8/contrib/xz/src/ (props changed) projects/graid/8/crypto/ (props changed) projects/graid/8/crypto/heimdal/ (props changed) projects/graid/8/crypto/openssh/ (props changed) projects/graid/8/crypto/openssl/ (props changed) projects/graid/8/etc/ (props changed) projects/graid/8/games/ (props changed) projects/graid/8/games/factor/ (props changed) projects/graid/8/games/fortune/ (props changed) projects/graid/8/games/grdc/ (props changed) projects/graid/8/games/pom/ (props changed) projects/graid/8/gnu/ (props changed) projects/graid/8/gnu/lib/csu/ (props changed) projects/graid/8/gnu/lib/libgcc/ (props changed) projects/graid/8/gnu/lib/libstdc++/ (props changed) projects/graid/8/gnu/usr.bin/ (props changed) projects/graid/8/gnu/usr.bin/Makefile (props changed) projects/graid/8/gnu/usr.bin/dialog/ (props changed) projects/graid/8/gnu/usr.bin/gdb/ (props changed) projects/graid/8/gnu/usr.bin/gdb/kgdb/ (props changed) projects/graid/8/gnu/usr.bin/groff/ (props changed) projects/graid/8/gnu/usr.bin/patch/ (props changed) projects/graid/8/include/ (props changed) projects/graid/8/kerberos5/ (props changed) projects/graid/8/kerberos5/lib/libgssapi_krb5/ (props changed) projects/graid/8/kerberos5/lib/libgssapi_spnego/ (props changed) projects/graid/8/kerberos5/usr.bin/kdestroy/ (props changed) projects/graid/8/kerberos5/usr.bin/kpasswd/ (props changed) projects/graid/8/lib/ (props changed) projects/graid/8/lib/Makefile (props changed) projects/graid/8/lib/Makefile.inc (props changed) projects/graid/8/lib/bind/ (props changed) projects/graid/8/lib/csu/ (props changed) projects/graid/8/lib/libalias/ (props changed) projects/graid/8/lib/libarchive/ (props changed) projects/graid/8/lib/libauditd/ (props changed) projects/graid/8/lib/libautofs/ (props changed) projects/graid/8/lib/libbegemot/ (props changed) projects/graid/8/lib/libbluetooth/ (props changed) projects/graid/8/lib/libbsm/ (props changed) projects/graid/8/lib/libbsnmp/ (props changed) projects/graid/8/lib/libbz2/ (props changed) projects/graid/8/lib/libc/ (props changed) projects/graid/8/lib/libc/stdtime/ (props changed) projects/graid/8/lib/libc_r/ (props changed) projects/graid/8/lib/libcalendar/ (props changed) projects/graid/8/lib/libcam/ (props changed) projects/graid/8/lib/libcom_err/ (props changed) projects/graid/8/lib/libcompat/ (props changed) projects/graid/8/lib/libcrypt/ (props changed) projects/graid/8/lib/libdevinfo/ (props changed) projects/graid/8/lib/libdevstat/ (props changed) projects/graid/8/lib/libdisk/ (props changed) projects/graid/8/lib/libdwarf/ (props changed) projects/graid/8/lib/libedit/ (props changed) projects/graid/8/lib/libelf/ (props changed) projects/graid/8/lib/libexpat/ (props changed) projects/graid/8/lib/libfetch/ (props changed) projects/graid/8/lib/libftpio/ (props changed) projects/graid/8/lib/libgeom/ (props changed) projects/graid/8/lib/libgpib/ (props changed) projects/graid/8/lib/libgssapi/ (props changed) projects/graid/8/lib/libipsec/ (props changed) projects/graid/8/lib/libipx/ (props changed) projects/graid/8/lib/libjail/ (props changed) projects/graid/8/lib/libkiconv/ (props changed) projects/graid/8/lib/libkse/ (props changed) projects/graid/8/lib/libkvm/ (props changed) projects/graid/8/lib/liblzma/ (props changed) projects/graid/8/lib/liblzma/Makefile (props changed) projects/graid/8/lib/liblzma/Symbol.map (props changed) projects/graid/8/lib/liblzma/Versions.def (props changed) projects/graid/8/lib/liblzma/config.h (props changed) projects/graid/8/lib/libmagic/ (props changed) projects/graid/8/lib/libmd/ (props changed) projects/graid/8/lib/libmemstat/ (props changed) projects/graid/8/lib/libmilter/ (props changed) projects/graid/8/lib/libmp/ (props changed) projects/graid/8/lib/libncp/ (props changed) projects/graid/8/lib/libnetgraph/ (props changed) projects/graid/8/lib/libngatm/ (props changed) projects/graid/8/lib/libopie/ (props changed) projects/graid/8/lib/libpam/ (props changed) projects/graid/8/lib/libpcap/ (props changed) projects/graid/8/lib/libpmc/ (props changed) projects/graid/8/lib/libproc/ (props changed) projects/graid/8/lib/libradius/ (props changed) projects/graid/8/lib/librpcsec_gss/ (props changed) projects/graid/8/lib/librpcsvc/ (props changed) projects/graid/8/lib/librt/ (props changed) projects/graid/8/lib/librtld_db/ (props changed) projects/graid/8/lib/librtld_db/Makefile (props changed) projects/graid/8/lib/librtld_db/librtld_db.3 (props changed) projects/graid/8/lib/librtld_db/rtld_db.c (props changed) projects/graid/8/lib/librtld_db/rtld_db.h (props changed) projects/graid/8/lib/libsbuf/ (props changed) projects/graid/8/lib/libsdp/ (props changed) projects/graid/8/lib/libsm/ (props changed) projects/graid/8/lib/libsmb/ (props changed) projects/graid/8/lib/libsmdb/ (props changed) projects/graid/8/lib/libsmutil/ (props changed) projects/graid/8/lib/libstand/ (props changed) projects/graid/8/lib/libtacplus/ (props changed) projects/graid/8/lib/libtelnet/ (props changed) projects/graid/8/lib/libthr/ (props changed) projects/graid/8/lib/libthread_db/ (props changed) projects/graid/8/lib/libufs/ (props changed) projects/graid/8/lib/libugidfw/ (props changed) projects/graid/8/lib/libusb/ (props changed) projects/graid/8/lib/libusb/usb.h (props changed) projects/graid/8/lib/libusbhid/ (props changed) projects/graid/8/lib/libutil/ (props changed) projects/graid/8/lib/libvgl/ (props changed) projects/graid/8/lib/libwrap/ (props changed) projects/graid/8/lib/liby/ (props changed) projects/graid/8/lib/libypclnt/ (props changed) projects/graid/8/lib/libz/ (props changed) projects/graid/8/lib/libz/contrib/ (props changed) projects/graid/8/lib/msun/ (props changed) projects/graid/8/lib/ncurses/ (props changed) projects/graid/8/libexec/ (props changed) projects/graid/8/libexec/ftpd/ (props changed) projects/graid/8/libexec/rtld-elf/ (props changed) projects/graid/8/libexec/tftpd/ (props changed) projects/graid/8/release/ (props changed) projects/graid/8/release/doc/en_US.ISO8859-1/hardware/ (props changed) projects/graid/8/release/picobsd/ (props changed) projects/graid/8/release/picobsd/floppy.tree/sbin/ (props changed) projects/graid/8/release/picobsd/floppy.tree/sbin/dhclient-script (props changed) projects/graid/8/release/picobsd/qemu/ (props changed) projects/graid/8/release/picobsd/tinyware/login/ (props changed) projects/graid/8/release/powerpc/ (props changed) projects/graid/8/rescue/ (props changed) projects/graid/8/sbin/ (props changed) projects/graid/8/sbin/atacontrol/ (props changed) projects/graid/8/sbin/bsdlabel/ (props changed) projects/graid/8/sbin/camcontrol/ (props changed) projects/graid/8/sbin/ddb/ (props changed) projects/graid/8/sbin/devd/ (props changed) projects/graid/8/sbin/devfs/ (props changed) projects/graid/8/sbin/dhclient/ (props changed) projects/graid/8/sbin/dump/ (props changed) projects/graid/8/sbin/dumpfs/ (props changed) projects/graid/8/sbin/fdisk/ (props changed) projects/graid/8/sbin/fsck/ (props changed) projects/graid/8/sbin/fsck_ffs/ (props changed) projects/graid/8/sbin/fsck_msdosfs/ (props changed) projects/graid/8/sbin/fsirand/ (props changed) projects/graid/8/sbin/geom/ (props changed) projects/graid/8/sbin/geom/class/multipath/ (props changed) projects/graid/8/sbin/geom/class/part/ (props changed) projects/graid/8/sbin/geom/class/sched/gsched.8 (props changed) projects/graid/8/sbin/geom/class/stripe/ (props changed) projects/graid/8/sbin/ggate/ (props changed) projects/graid/8/sbin/growfs/ (props changed) projects/graid/8/sbin/hastctl/ (props changed) projects/graid/8/sbin/hastd/ (props changed) projects/graid/8/sbin/ifconfig/ (props changed) projects/graid/8/sbin/ipfw/ (props changed) projects/graid/8/sbin/iscontrol/ (props changed) projects/graid/8/sbin/kldload/ (props changed) projects/graid/8/sbin/kldstat/ (props changed) projects/graid/8/sbin/mdconfig/ (props changed) projects/graid/8/sbin/mksnap_ffs/ (props changed) projects/graid/8/sbin/mount/ (props changed) projects/graid/8/sbin/mount_cd9660/ (props changed) projects/graid/8/sbin/mount_msdosfs/ (props changed) projects/graid/8/sbin/mount_nfs/ (props changed) projects/graid/8/sbin/natd/ (props changed) projects/graid/8/sbin/newfs/ (props changed) projects/graid/8/sbin/newfs_msdos/ (props changed) projects/graid/8/sbin/ping6/ (props changed) projects/graid/8/sbin/reboot/ (props changed) projects/graid/8/sbin/restore/ (props changed) projects/graid/8/sbin/route/ (props changed) projects/graid/8/sbin/routed/ (props changed) projects/graid/8/sbin/setkey/ (props changed) projects/graid/8/sbin/spppcontrol/ (props changed) projects/graid/8/sbin/sysctl/ (props changed) projects/graid/8/sbin/tunefs/ (props changed) projects/graid/8/sbin/umount/ (props changed) projects/graid/8/secure/ (props changed) projects/graid/8/secure/lib/libcrypto/ (props changed) projects/graid/8/secure/lib/libssl/ (props changed) projects/graid/8/secure/usr.bin/bdes/ (props changed) projects/graid/8/secure/usr.bin/openssl/ (props changed) projects/graid/8/share/ (props changed) projects/graid/8/share/dict/ (props changed) projects/graid/8/share/doc/papers/jail/ (props changed) projects/graid/8/share/doc/smm/01.setup/ (props changed) projects/graid/8/share/examples/ (props changed) projects/graid/8/share/examples/etc/ (props changed) projects/graid/8/share/examples/kld/syscall/ (props changed) projects/graid/8/share/man/ (props changed) projects/graid/8/share/man/man1/ (props changed) projects/graid/8/share/man/man3/ (props changed) projects/graid/8/share/man/man4/ (props changed) projects/graid/8/share/man/man5/ (props changed) projects/graid/8/share/man/man7/ (props changed) projects/graid/8/share/man/man8/ (props changed) projects/graid/8/share/man/man9/ (props changed) projects/graid/8/share/misc/ (props changed) projects/graid/8/share/mk/ (props changed) projects/graid/8/share/syscons/ (props changed) projects/graid/8/share/termcap/ (props changed) projects/graid/8/share/timedef/ (props changed) projects/graid/8/share/zoneinfo/ (props changed) projects/graid/8/sys/ (props changed) projects/graid/8/sys/amd64/include/xen/ (props changed) projects/graid/8/sys/cddl/contrib/opensolaris/ (props changed) projects/graid/8/sys/contrib/dev/acpica/ (props changed) projects/graid/8/sys/contrib/pf/ (props changed) projects/graid/8/tools/ (props changed) projects/graid/8/tools/build/mk/ (props changed) projects/graid/8/tools/build/options/ (props changed) projects/graid/8/tools/debugscripts/ (props changed) projects/graid/8/tools/kerneldoc/subsys/ (props changed) projects/graid/8/tools/regression/acct/ (props changed) projects/graid/8/tools/regression/acltools/ (props changed) projects/graid/8/tools/regression/aio/aiotest/ (props changed) projects/graid/8/tools/regression/bin/ (props changed) projects/graid/8/tools/regression/bin/date/ (props changed) projects/graid/8/tools/regression/bin/sh/ (props changed) projects/graid/8/tools/regression/fifo/ (props changed) projects/graid/8/tools/regression/geom/ (props changed) projects/graid/8/tools/regression/lib/libc/ (props changed) projects/graid/8/tools/regression/lib/msun/test-conj.t (props changed) projects/graid/8/tools/regression/mqueue/mqtest1/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest2/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest3/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest4/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest5/ (props changed) projects/graid/8/tools/regression/netinet/ (props changed) projects/graid/8/tools/regression/poll/ (props changed) projects/graid/8/tools/regression/posixsem/ (props changed) projects/graid/8/tools/regression/priv/ (props changed) projects/graid/8/tools/regression/sockets/unix_gc/ (props changed) projects/graid/8/tools/regression/usr.bin/ (props changed) projects/graid/8/tools/regression/usr.bin/pkill/ (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_g.t (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_s.t (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pkill-_g.t (props changed) projects/graid/8/tools/regression/usr.bin/sed/ (props changed) projects/graid/8/tools/regression/usr.bin/tr/ (props changed) projects/graid/8/tools/test/ (props changed) projects/graid/8/tools/tools/ (props changed) projects/graid/8/tools/tools/ath/ (props changed) projects/graid/8/tools/tools/ath/common/dumpregs.h (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5210.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5211.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5212.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5416.c (props changed) projects/graid/8/tools/tools/mctest/ (props changed) projects/graid/8/tools/tools/nanobsd/ (props changed) projects/graid/8/tools/tools/netrate/ (props changed) projects/graid/8/tools/tools/netrate/tcpp/ (props changed) projects/graid/8/tools/tools/termcap/termcap.pl (props changed) projects/graid/8/tools/tools/umastat/ (props changed) projects/graid/8/tools/tools/vimage/ (props changed) projects/graid/8/usr.bin/ (props changed) projects/graid/8/usr.bin/apply/ (props changed) projects/graid/8/usr.bin/ar/ (props changed) projects/graid/8/usr.bin/awk/ (props changed) projects/graid/8/usr.bin/biff/ (props changed) projects/graid/8/usr.bin/c89/ (props changed) projects/graid/8/usr.bin/c99/ (props changed) projects/graid/8/usr.bin/calendar/ (props changed) projects/graid/8/usr.bin/catman/ (props changed) projects/graid/8/usr.bin/chpass/Makefile (props changed) projects/graid/8/usr.bin/column/ (props changed) projects/graid/8/usr.bin/comm/ (props changed) projects/graid/8/usr.bin/cpio/ (props changed) projects/graid/8/usr.bin/csup/ (props changed) projects/graid/8/usr.bin/du/ (props changed) projects/graid/8/usr.bin/ee/ (props changed) projects/graid/8/usr.bin/enigma/ (props changed) projects/graid/8/usr.bin/fetch/ (props changed) projects/graid/8/usr.bin/find/ (props changed) projects/graid/8/usr.bin/finger/ (props changed) projects/graid/8/usr.bin/fold/ (props changed) projects/graid/8/usr.bin/fstat/ (props changed) projects/graid/8/usr.bin/gcore/ (props changed) projects/graid/8/usr.bin/getopt/ (props changed) projects/graid/8/usr.bin/gzip/ (props changed) projects/graid/8/usr.bin/hexdump/ (props changed) projects/graid/8/usr.bin/indent/ (props changed) projects/graid/8/usr.bin/jot/ (props changed) projects/graid/8/usr.bin/kdump/ (props changed) projects/graid/8/usr.bin/killall/ (props changed) projects/graid/8/usr.bin/ktrace/ (props changed) projects/graid/8/usr.bin/ldd/ (props changed) projects/graid/8/usr.bin/lex/ (props changed) projects/graid/8/usr.bin/locale/ (props changed) projects/graid/8/usr.bin/locate/ (props changed) projects/graid/8/usr.bin/lockf/ (props changed) projects/graid/8/usr.bin/look/ (props changed) projects/graid/8/usr.bin/mail/ (props changed) projects/graid/8/usr.bin/make/ (props changed) projects/graid/8/usr.bin/makewhatis/ (props changed) projects/graid/8/usr.bin/minigzip/ (props changed) projects/graid/8/usr.bin/ncal/ (props changed) projects/graid/8/usr.bin/netstat/ (props changed) projects/graid/8/usr.bin/pathchk/ (props changed) projects/graid/8/usr.bin/perror/ (props changed) projects/graid/8/usr.bin/procstat/ (props changed) projects/graid/8/usr.bin/rpcgen/ (props changed) projects/graid/8/usr.bin/ruptime/ (props changed) projects/graid/8/usr.bin/script/ (props changed) projects/graid/8/usr.bin/sed/ (props changed) projects/graid/8/usr.bin/sockstat/ (props changed) projects/graid/8/usr.bin/split/ (props changed) projects/graid/8/usr.bin/stat/ (props changed) projects/graid/8/usr.bin/systat/ (props changed) projects/graid/8/usr.bin/tar/ (props changed) projects/graid/8/usr.bin/tftp/ (props changed) projects/graid/8/usr.bin/top/ (props changed) projects/graid/8/usr.bin/touch/ (props changed) projects/graid/8/usr.bin/tr/ (props changed) projects/graid/8/usr.bin/truss/ (props changed) projects/graid/8/usr.bin/uname/ (props changed) projects/graid/8/usr.bin/unifdef/ (props changed) projects/graid/8/usr.bin/uniq/ (props changed) projects/graid/8/usr.bin/unzip/ (props changed) projects/graid/8/usr.bin/uudecode/ (props changed) projects/graid/8/usr.bin/vmstat/ (props changed) projects/graid/8/usr.bin/w/ (props changed) projects/graid/8/usr.bin/whois/ (props changed) projects/graid/8/usr.bin/xinstall/ (props changed) projects/graid/8/usr.bin/xlint/ (props changed) projects/graid/8/usr.bin/xz/ (props changed) projects/graid/8/usr.bin/yacc/ (props changed) projects/graid/8/usr.sbin/ (props changed) projects/graid/8/usr.sbin/IPXrouted/ (props changed) projects/graid/8/usr.sbin/Makefile (props changed) projects/graid/8/usr.sbin/Makefile.inc (props changed) projects/graid/8/usr.sbin/ac/ (props changed) projects/graid/8/usr.sbin/accton/ (props changed) projects/graid/8/usr.sbin/acpi/ (props changed) projects/graid/8/usr.sbin/adduser/ (props changed) projects/graid/8/usr.sbin/amd/ (props changed) projects/graid/8/usr.sbin/ancontrol/ (props changed) projects/graid/8/usr.sbin/apm/ (props changed) projects/graid/8/usr.sbin/apmd/ (props changed) projects/graid/8/usr.sbin/arp/ (props changed) projects/graid/8/usr.sbin/asf/ (props changed) projects/graid/8/usr.sbin/audit/ (props changed) projects/graid/8/usr.sbin/auditd/ (props changed) projects/graid/8/usr.sbin/auditreduce/ (props changed) projects/graid/8/usr.sbin/authpf/ (props changed) projects/graid/8/usr.sbin/bluetooth/ (props changed) projects/graid/8/usr.sbin/bluetooth/bthidcontrol/ (props changed) projects/graid/8/usr.sbin/bluetooth/bthidd/ (props changed) projects/graid/8/usr.sbin/boot0cfg/ (props changed) projects/graid/8/usr.sbin/boot98cfg/ (props changed) projects/graid/8/usr.sbin/bootparamd/ (props changed) projects/graid/8/usr.sbin/bsnmpd/ (props changed) projects/graid/8/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed) projects/graid/8/usr.sbin/btxld/ (props changed) projects/graid/8/usr.sbin/burncd/ (props changed) projects/graid/8/usr.sbin/cdcontrol/ (props changed) projects/graid/8/usr.sbin/chkgrp/ (props changed) projects/graid/8/usr.sbin/chown/ (props changed) projects/graid/8/usr.sbin/chroot/ (props changed) projects/graid/8/usr.sbin/ckdist/ (props changed) projects/graid/8/usr.sbin/clear_locks/ (props changed) projects/graid/8/usr.sbin/config/ (props changed) projects/graid/8/usr.sbin/config/SMM.doc/ (props changed) projects/graid/8/usr.sbin/cpucontrol/ (props changed) projects/graid/8/usr.sbin/crashinfo/ (props changed) projects/graid/8/usr.sbin/cron/ (props changed) projects/graid/8/usr.sbin/crunch/ (props changed) projects/graid/8/usr.sbin/crunch/examples/ (props changed) projects/graid/8/usr.sbin/ctm/ (props changed) projects/graid/8/usr.sbin/cxgbtool/ (props changed) projects/graid/8/usr.sbin/daemon/ (props changed) projects/graid/8/usr.sbin/dconschat/ (props changed) projects/graid/8/usr.sbin/devinfo/ (props changed) projects/graid/8/usr.sbin/digictl/ (props changed) projects/graid/8/usr.sbin/diskinfo/ (props changed) projects/graid/8/usr.sbin/dnssec-dsfromkey/ (props changed) projects/graid/8/usr.sbin/dnssec-keyfromlabel/ (props changed) projects/graid/8/usr.sbin/dnssec-keygen/ (props changed) projects/graid/8/usr.sbin/dnssec-signzone/ (props changed) projects/graid/8/usr.sbin/dumpcis/ (props changed) projects/graid/8/usr.sbin/dumpcis/cardinfo.h (props changed) projects/graid/8/usr.sbin/dumpcis/cis.h (props changed) projects/graid/8/usr.sbin/editmap/ (props changed) projects/graid/8/usr.sbin/edquota/ (props changed) projects/graid/8/usr.sbin/eeprom/ (props changed) projects/graid/8/usr.sbin/extattr/ (props changed) projects/graid/8/usr.sbin/extattrctl/ (props changed) projects/graid/8/usr.sbin/faithd/ (props changed) projects/graid/8/usr.sbin/fdcontrol/ (props changed) projects/graid/8/usr.sbin/fdformat/ (props changed) projects/graid/8/usr.sbin/fdread/ (props changed) projects/graid/8/usr.sbin/fdwrite/ (props changed) projects/graid/8/usr.sbin/fifolog/ (props changed) projects/graid/8/usr.sbin/flowctl/ (props changed) projects/graid/8/usr.sbin/freebsd-update/ (props changed) projects/graid/8/usr.sbin/ftp-proxy/ (props changed) projects/graid/8/usr.sbin/fwcontrol/ (props changed) projects/graid/8/usr.sbin/getfmac/ (props changed) projects/graid/8/usr.sbin/getpmac/ (props changed) projects/graid/8/usr.sbin/gssd/ (props changed) projects/graid/8/usr.sbin/gstat/ (props changed) projects/graid/8/usr.sbin/i2c/ (props changed) projects/graid/8/usr.sbin/ifmcstat/ (props changed) projects/graid/8/usr.sbin/inetd/ (props changed) projects/graid/8/usr.sbin/iostat/ (props changed) projects/graid/8/usr.sbin/ip6addrctl/ (props changed) projects/graid/8/usr.sbin/ipfwpcap/ (props changed) projects/graid/8/usr.sbin/jail/ (props changed) projects/graid/8/usr.sbin/jexec/ (props changed) projects/graid/8/usr.sbin/jls/ (props changed) projects/graid/8/usr.sbin/kbdcontrol/ (props changed) projects/graid/8/usr.sbin/kbdmap/ (props changed) projects/graid/8/usr.sbin/kernbb/ (props changed) projects/graid/8/usr.sbin/keyserv/ (props changed) projects/graid/8/usr.sbin/kgmon/ (props changed) projects/graid/8/usr.sbin/kgzip/ (props changed) projects/graid/8/usr.sbin/kldxref/ (props changed) projects/graid/8/usr.sbin/lastlogin/ (props changed) projects/graid/8/usr.sbin/lmcconfig/ (props changed) projects/graid/8/usr.sbin/lpr/ (props changed) projects/graid/8/usr.sbin/lptcontrol/ (props changed) projects/graid/8/usr.sbin/mailstats/ (props changed) projects/graid/8/usr.sbin/mailwrapper/ (props changed) projects/graid/8/usr.sbin/makefs/ (props changed) projects/graid/8/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/graid/8/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/graid/8/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/graid/8/usr.sbin/makefs/getid.c (props changed) projects/graid/8/usr.sbin/makemap/ (props changed) projects/graid/8/usr.sbin/manctl/ (props changed) projects/graid/8/usr.sbin/memcontrol/ (props changed) projects/graid/8/usr.sbin/mergemaster/ (props changed) projects/graid/8/usr.sbin/mfiutil/ (props changed) projects/graid/8/usr.sbin/mixer/ (props changed) projects/graid/8/usr.sbin/mld6query/ (props changed) projects/graid/8/usr.sbin/mlxcontrol/ (props changed) projects/graid/8/usr.sbin/mount_nwfs/ (props changed) projects/graid/8/usr.sbin/mount_portalfs/ (props changed) projects/graid/8/usr.sbin/mount_smbfs/ (props changed) projects/graid/8/usr.sbin/mountd/ (props changed) projects/graid/8/usr.sbin/moused/ (props changed) projects/graid/8/usr.sbin/mptable/ (props changed) projects/graid/8/usr.sbin/mptutil/ (props changed) projects/graid/8/usr.sbin/mtest/ (props changed) projects/graid/8/usr.sbin/mtree/ (props changed) projects/graid/8/usr.sbin/named/ (props changed) projects/graid/8/usr.sbin/named-checkconf/ (props changed) projects/graid/8/usr.sbin/named-checkzone/ (props changed) projects/graid/8/usr.sbin/named.reload/ (props changed) projects/graid/8/usr.sbin/ndiscvt/ (props changed) projects/graid/8/usr.sbin/ndp/ (props changed) projects/graid/8/usr.sbin/newsyslog/ (props changed) projects/graid/8/usr.sbin/nfscbd/ (props changed) projects/graid/8/usr.sbin/nfsd/ (props changed) projects/graid/8/usr.sbin/nfsdumpstate/ (props changed) projects/graid/8/usr.sbin/nfsrevoke/ (props changed) projects/graid/8/usr.sbin/nfsuserd/ (props changed) projects/graid/8/usr.sbin/ngctl/ (props changed) projects/graid/8/usr.sbin/nghook/ (props changed) projects/graid/8/usr.sbin/nologin/ (props changed) projects/graid/8/usr.sbin/nscd/ (props changed) projects/graid/8/usr.sbin/ntp/ (props changed) projects/graid/8/usr.sbin/nvram/ (props changed) projects/graid/8/usr.sbin/ofwdump/ (props changed) projects/graid/8/usr.sbin/pciconf/ (props changed) projects/graid/8/usr.sbin/periodic/ (props changed) projects/graid/8/usr.sbin/pkg_install/ (props changed) projects/graid/8/usr.sbin/pmcannotate/ (props changed) projects/graid/8/usr.sbin/pmccontrol/ (props changed) projects/graid/8/usr.sbin/pmcstat/ (props changed) projects/graid/8/usr.sbin/pnpinfo/ (props changed) projects/graid/8/usr.sbin/portsnap/ (props changed) projects/graid/8/usr.sbin/powerd/ (props changed) projects/graid/8/usr.sbin/ppp/ (props changed) projects/graid/8/usr.sbin/pppctl/ (props changed) projects/graid/8/usr.sbin/praliases/ (props changed) projects/graid/8/usr.sbin/praudit/ (props changed) projects/graid/8/usr.sbin/procctl/ (props changed) projects/graid/8/usr.sbin/pstat/ (props changed) projects/graid/8/usr.sbin/pw/ (props changed) projects/graid/8/usr.sbin/pwd_mkdb/ (props changed) projects/graid/8/usr.sbin/quot/ (props changed) projects/graid/8/usr.sbin/quotaon/ (props changed) projects/graid/8/usr.sbin/rarpd/ (props changed) projects/graid/8/usr.sbin/repquota/ (props changed) projects/graid/8/usr.sbin/rip6query/ (props changed) projects/graid/8/usr.sbin/rmt/ (props changed) projects/graid/8/usr.sbin/rndc/ (props changed) projects/graid/8/usr.sbin/rndc-confgen/ (props changed) projects/graid/8/usr.sbin/route6d/ (props changed) projects/graid/8/usr.sbin/rpc.lockd/ (props changed) projects/graid/8/usr.sbin/rpc.statd/ (props changed) projects/graid/8/usr.sbin/rpc.umntall/ (props changed) projects/graid/8/usr.sbin/rpc.yppasswdd/ (props changed) projects/graid/8/usr.sbin/rpc.ypupdated/ (props changed) projects/graid/8/usr.sbin/rpc.ypxfrd/ (props changed) projects/graid/8/usr.sbin/rpcbind/ (props changed) projects/graid/8/usr.sbin/rrenumd/ (props changed) projects/graid/8/usr.sbin/rtadvd/ (props changed) projects/graid/8/usr.sbin/rtprio/ (props changed) projects/graid/8/usr.sbin/rtsold/ (props changed) projects/graid/8/usr.sbin/rwhod/ (props changed) projects/graid/8/usr.sbin/sa/ (props changed) projects/graid/8/usr.sbin/sade/ (props changed) projects/graid/8/usr.sbin/sendmail/ (props changed) projects/graid/8/usr.sbin/service/ (props changed) projects/graid/8/usr.sbin/service/Makefile (props changed) projects/graid/8/usr.sbin/service/service.8 (props changed) projects/graid/8/usr.sbin/service/service.sh (props changed) projects/graid/8/usr.sbin/services_mkdb/ (props changed) projects/graid/8/usr.sbin/services_mkdb/Makefile (props changed) projects/graid/8/usr.sbin/services_mkdb/services_mkdb.8 (props changed) projects/graid/8/usr.sbin/services_mkdb/services_mkdb.c (props changed) projects/graid/8/usr.sbin/services_mkdb/uniq.c (props changed) projects/graid/8/usr.sbin/setfib/ (props changed) projects/graid/8/usr.sbin/setfmac/ (props changed) projects/graid/8/usr.sbin/setpmac/ (props changed) projects/graid/8/usr.sbin/sicontrol/ (props changed) projects/graid/8/usr.sbin/smbmsg/ (props changed) projects/graid/8/usr.sbin/snapinfo/ (props changed) projects/graid/8/usr.sbin/spkrtest/ (props changed) projects/graid/8/usr.sbin/spray/ (props changed) projects/graid/8/usr.sbin/sysinstall/ (props changed) projects/graid/8/usr.sbin/syslogd/ (props changed) projects/graid/8/usr.sbin/tcpdchk/ (props changed) projects/graid/8/usr.sbin/tcpdmatch/ (props changed) projects/graid/8/usr.sbin/tcpdrop/ (props changed) projects/graid/8/usr.sbin/tcpdump/ (props changed) projects/graid/8/usr.sbin/timed/ (props changed) projects/graid/8/usr.sbin/traceroute/ (props changed) projects/graid/8/usr.sbin/traceroute6/ (props changed) projects/graid/8/usr.sbin/trpt/ (props changed) projects/graid/8/usr.sbin/tzsetup/ (props changed) projects/graid/8/usr.sbin/uathload/ (props changed) projects/graid/8/usr.sbin/ugidfw/ (props changed) projects/graid/8/usr.sbin/uhsoctl/ (props changed) projects/graid/8/usr.sbin/usbconfig/ (props changed) projects/graid/8/usr.sbin/usbdevs/ (props changed) projects/graid/8/usr.sbin/vidcontrol/ (props changed) projects/graid/8/usr.sbin/vipw/ (props changed) projects/graid/8/usr.sbin/wake/ (props changed) projects/graid/8/usr.sbin/watch/ (props changed) projects/graid/8/usr.sbin/watchdogd/ (props changed) projects/graid/8/usr.sbin/wlandebug/ (props changed) projects/graid/8/usr.sbin/wlconfig/ (props changed) projects/graid/8/usr.sbin/wpa/ (props changed) projects/graid/8/usr.sbin/yp_mkdb/ (props changed) projects/graid/8/usr.sbin/ypbind/ (props changed) projects/graid/8/usr.sbin/yppoll/ (props changed) projects/graid/8/usr.sbin/yppush/ (props changed) projects/graid/8/usr.sbin/ypserv/ (props changed) projects/graid/8/usr.sbin/ypset/ (props changed) projects/graid/8/usr.sbin/zic/ (props changed) projects/graid/8/usr.sbin/zzz/ (props changed) Modified: projects/graid/8/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/8/sbin/geom/class/raid/graid.8 Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sbin/geom/class/raid/graid.8 Mon Feb 14 14:21:07 2011 (r218679) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 10, 2011 +.Dd February 13, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -211,7 +211,8 @@ risk: RAID1 (3+ disks), RAID1E (3+ disks .Sh SUPPORTED RAID LEVELS The GEOM RAID class follows a modular design, allowing different RAID levels to be used. -Support for the following RAID levels is currently implemented: RAID0, RAID1. +Support for the following RAID levels is currently implemented: RAID0, RAID1, +RAID1E, RAID10. .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. .Sh SEE ALSO Modified: projects/graid/8/sys/conf/files ============================================================================== --- projects/graid/8/sys/conf/files Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sys/conf/files Mon Feb 14 14:21:07 2011 (r218679) @@ -2021,6 +2021,7 @@ geom/raid/g_raid_tr_if.m optional geom_r geom/raid/md_intel.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid +geom/raid/tr_raid1e.c optional geom_raid geom/raid3/g_raid3.c optional geom_raid3 geom/raid3/g_raid3_ctl.c optional geom_raid3 geom/shsec/g_shsec.c optional geom_shsec Modified: projects/graid/8/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.c Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sys/geom/raid/g_raid.c Mon Feb 14 14:21:07 2011 (r218679) @@ -59,14 +59,20 @@ u_int g_raid_debug = 2; 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"); +int g_raid_read_err_thresh = 10; +TUNABLE_INT("kern.geom.raid.read_err_thresh", &g_raid_read_err_thresh); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, read_err_thresh, CTLFLAG_RW, + &g_raid_read_err_thresh, 0, + "Number of read errors equated to disk failure"); u_int g_raid_start_timeout = 15; TUNABLE_INT("kern.geom.raid.start_timeout", &g_raid_start_timeout); -SYSCTL_UINT(_kern_geom_raid, OID_AUTO, timeout, CTLFLAG_RW, &g_raid_start_timeout, - 0, "Time to wait for all array components"); -static u_int g_raid_cleantime = 5; -TUNABLE_INT("kern.geom.raid.cleantime", &g_raid_cleantime); -SYSCTL_UINT(_kern_geom_raid, OID_AUTO, cleantime, CTLFLAG_RW, - &g_raid_cleantime, 0, "Mark volume as clean when idling"); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, start_timeout, CTLFLAG_RW, + &g_raid_start_timeout, 0, + "Time to wait for all array components"); +static u_int g_raid_clean_time = 5; +TUNABLE_INT("kern.geom.raid.clean_time", &g_raid_clean_time); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, clean_time, CTLFLAG_RW, + &g_raid_clean_time, 0, "Mark volume as clean when idling"); static u_int g_raid_disconnect_on_failure = 1; TUNABLE_INT("kern.geom.raid.disconnect_on_failure", &g_raid_disconnect_on_failure); @@ -709,7 +715,7 @@ g_raid_clean(struct g_raid_volume *vol, return (0); if (acw > 0 || (acw == -1 && vol->v_provider != NULL && vol->v_provider->acw > 0)) { - timeout = g_raid_cleantime - (time_uptime - vol->v_last_write); + timeout = g_raid_clean_time - (time_uptime - vol->v_last_write); if (timeout > 0) return (timeout); } @@ -737,6 +743,54 @@ g_raid_dirty(struct g_raid_volume *vol) g_raid_write_metadata(sc, vol, NULL, NULL); } +void +g_raid_tr_flush_common(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + int i; + + vol = tr->tro_volume; + sc = vol->v_softc; + + /* + * Allocate all bios before sending any request, so we can return + * ENOMEM in nice and clean way. + */ + bioq_init(&queue); + for (i = 0; i < vol->v_disks_count; i++) { + sd = &vol->v_subdisks[i]; + if (sd->sd_state == G_RAID_SUBDISK_S_NONE || + sd->sd_state == G_RAID_SUBDISK_S_FAILED) + continue; + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); + } + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + static void g_raid_tr_kerneldump_common_done(struct bio *bp) { @@ -832,10 +886,8 @@ g_raid_start(struct bio *bp) case BIO_READ: case BIO_WRITE: case BIO_DELETE: - break; case BIO_FLUSH: - g_io_deliver(bp, EOPNOTSUPP); - return; + break; case BIO_GETATTR: if (!strcmp(bp->bio_attribute, "GEOM::kerneldump")) g_raid_kerneldump(sc, bp); @@ -995,6 +1047,7 @@ g_raid_iodone(struct bio *bp, int error) bioq_remove(&vol->v_inflight, bp); if (vol->v_pending_lock && g_raid_is_in_locked_range(vol, bp)) g_raid_finish_with_locked_ranges(vol, bp); + getmicrouptime(&vol->v_last_done); g_io_deliver(bp, error); } @@ -1221,6 +1274,7 @@ g_raid_worker(void *arg) struct g_raid_event *ep; struct g_raid_volume *vol; struct bio *bp; + struct timeval now, t; int timeout, rv; sc = arg; @@ -1244,38 +1298,59 @@ g_raid_worker(void *arg) else if ((bp = bioq_takefirst(&sc->sc_queue)) != NULL) ; else { - /* - * Two steps to avoid overflows at HZ=1000 - * and idle timeouts > 2.1s. Some rounding errors - * can occur, but they are < 1tick, which is deemed to - * be close enough for this purpose. - */ - int micpertic = 1000000 / hz; - timeout = g_raid_idle_threshold / micpertic; - sx_xunlock(&sc->sc_lock); - MSLEEP(rv, sc, &sc->sc_queue_mtx, PRIBIO | PDROP, "-", - timeout); - sx_xlock(&sc->sc_lock); - goto process; + getmicrouptime(&now); + t = now; + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { + if (bioq_first(&vol->v_inflight) == NULL && + timevalcmp(&vol->v_last_done, &t, < )) + t = vol->v_last_done; + } + timevalsub(&t, &now); + timeout = g_raid_idle_threshold + + t.tv_sec * 1000000 + t.tv_usec; + if (timeout > 0) { + /* + * Two steps to avoid overflows at HZ=1000 + * and idle timeouts > 2.1s. Some rounding + * errors can occur, but they are < 1tick, + * which is deemed to be close enough for + * this purpose. + */ + int micpertic = 1000000 / hz; + timeout = (timeout + micpertic - 1) / micpertic; + sx_xunlock(&sc->sc_lock); + MSLEEP(rv, sc, &sc->sc_queue_mtx, + PRIBIO | PDROP, "-", timeout); + sx_xlock(&sc->sc_lock); + goto process; + } else + rv = EWOULDBLOCK; } mtx_unlock(&sc->sc_queue_mtx); process: - if (ep != NULL) + if (ep != NULL) { g_raid_handle_event(sc, ep); - if (bp != NULL) { + } else if (bp != NULL) { if (bp->bio_to != NULL && bp->bio_to->geom == sc->sc_geom) g_raid_start_request(bp); else g_raid_disk_done_request(bp); - } - if (rv == EWOULDBLOCK) { + } else if (rv == EWOULDBLOCK) { TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (vol->v_writes == 0 && vol->v_dirty) g_raid_clean(vol, -1); if (bioq_first(&vol->v_inflight) == NULL && - vol->v_tr) - G_RAID_TR_IDLE(vol->v_tr); + vol->v_tr) { + t.tv_sec = g_raid_idle_threshold / 1000000; + t.tv_usec = g_raid_idle_threshold % 1000000; + timevaladd(&t, &vol->v_last_done); + getmicrouptime(&now); + if (timevalcmp(&t, &now, <= )) { + G_RAID_TR_IDLE(vol->v_tr); + vol->v_last_done = now; + } + } } } if (sc->sc_stopping == G_RAID_DESTROY_HARD) Modified: projects/graid/8/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.h Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sys/geom/raid/g_raid.h Mon Feb 14 14:21:07 2011 (r218679) @@ -32,6 +32,7 @@ #include #include #include +#include #define G_RAID_CLASS_NAME "RAID" @@ -50,6 +51,7 @@ struct g_raid_tr_object; #ifdef _KERNEL extern u_int g_raid_aggressive_spare; extern u_int g_raid_debug; +extern int g_raid_read_err_thresh; extern u_int g_raid_start_timeout; extern struct g_class g_raid_class; @@ -249,6 +251,7 @@ struct g_raid_volume { LIST_HEAD(, g_raid_lock) v_locks; /* List of locked regions. */ int v_pending_lock; /* writes to locked region */ int v_dirty; /* Volume is DIRTY. */ + struct timeval v_last_done; /* Time of the last I/O. */ time_t v_last_write; /* Time of the last write. */ u_int v_writes; /* Number of active writes. */ struct root_hold_token *v_rootmount; /* Root mount delay token. */ @@ -373,6 +376,7 @@ void g_raid_write_metadata(struct g_raid void g_raid_fail_disk(struct g_raid_softc *sc, struct g_raid_subdisk *sd, struct g_raid_disk *disk); +void g_raid_tr_flush_common(struct g_raid_tr_object *tr, struct bio *bp); int g_raid_tr_kerneldump_common(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t offset, size_t length); Modified: projects/graid/8/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/8/sys/geom/raid/md_intel.c Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sys/geom/raid/md_intel.c Mon Feb 14 14:21:07 2011 (r218679) @@ -586,7 +586,7 @@ g_raid_md_intel_supported(int level, int return (0); break; case G_RAID_VOLUME_RL_RAID1E: - if (disks < 3) + if (disks < 2) return (0); if (!force && (disks != 4)) return (0); @@ -776,15 +776,11 @@ nofit: } } else if (mvol->migr_type == INTEL_MT_INIT || mvol->migr_type == INTEL_MT_REBUILD) { - if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { - /* Up to date disk. */ - g_raid_change_subdisk_state(sd, - G_RAID_SUBDISK_S_ACTIVE); - } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Freshly inserted disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NEW); - } else { + } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Rebuilding disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_REBUILD); @@ -796,18 +792,22 @@ nofit: sd->sd_volume->v_strip_size * mmap0->total_domains; } - } - } else if (mvol->migr_type == INTEL_MT_VERIFY || - mvol->migr_type == INTEL_MT_REPAIR) { - if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { + } else if (mvol->dirty) { + /* Dirty volume (unclean shutdown). */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { /* Up to date disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); - } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + } + } else if (mvol->migr_type == INTEL_MT_VERIFY || + mvol->migr_type == INTEL_MT_REPAIR) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Freshly inserted disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NEW); - } else { + } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Resyncing disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_RESYNC); @@ -819,6 +819,14 @@ nofit: sd->sd_volume->v_strip_size * mmap0->total_domains; } + } else if (mvol->dirty) { + /* Dirty volume (unclean shutdown). */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { + /* Up to date disk. */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); } } g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, @@ -1539,6 +1547,9 @@ makedisk: /* Round size down to strip or sector. */ if (level == G_RAID_VOLUME_RL_RAID1) size -= (size % sectorsize); + else if (level == G_RAID_VOLUME_RL_RAID1E && + (numdisks & 1) != 0) + size -= (size % (2 * strip)); else size -= (size % strip); if (size <= 0) { Modified: projects/graid/8/sys/geom/raid/tr_raid0.c ============================================================================== --- projects/graid/8/sys/geom/raid/tr_raid0.c Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sys/geom/raid/tr_raid0.c Mon Feb 14 14:21:07 2011 (r218679) @@ -185,13 +185,12 @@ g_raid_tr_stop_raid0(struct g_raid_tr_ob static void g_raid_tr_iostart_raid0(struct g_raid_tr_object *tr, struct bio *bp) { - struct g_raid_softc *sc; struct g_raid_volume *vol; struct g_raid_subdisk *sd; struct bio_queue_head queue; struct bio *cbp; char *addr; - off_t offset, start, length, nstripe; + off_t offset, start, length, nstripe, remain; u_int no, strip_size; vol = tr->tro_volume; @@ -200,8 +199,10 @@ g_raid_tr_iostart_raid0(struct g_raid_tr g_raid_iodone(bp, EIO); return; } - sc = vol->v_softc; - + if (bp->bio_cmd == BIO_FLUSH) { + g_raid_tr_flush_common(tr, bp); + return; + } addr = bp->bio_data; strip_size = vol->v_strip_size; @@ -211,55 +212,30 @@ g_raid_tr_iostart_raid0(struct g_raid_tr start = bp->bio_offset % strip_size; /* Disk number. */ no = nstripe % vol->v_disks_count; - /* Start position in disk. */ - offset = (nstripe / vol->v_disks_count) * strip_size + start; + /* Stripe start position in disk. */ + offset = (nstripe / vol->v_disks_count) * strip_size; /* Length of data to operate. */ - length = MIN(bp->bio_length, strip_size - start); + remain = bp->bio_length; - /* - * Allocate all bios before sending any request, so we can - * return ENOMEM in nice and clean way. - */ bioq_init(&queue); - cbp = g_clone_bio(bp); - if (cbp == NULL) - goto failure; - /* - * Fill in the component buf structure. - */ - cbp->bio_offset = offset; - cbp->bio_data = addr; - cbp->bio_length = length; - cbp->bio_caller1 = &vol->v_subdisks[no]; - bioq_insert_tail(&queue, cbp); - - offset -= offset % strip_size; - addr += length; - length = bp->bio_length - length; - for (no++; length > 0; - no++, length -= strip_size, addr += strip_size) { - if (no > vol->v_disks_count - 1) { - no = 0; - offset += strip_size; - } + do { + length = MIN(strip_size - start, remain); cbp = g_clone_bio(bp); if (cbp == NULL) goto failure; - - /* - * Fill in the component buf structure. - */ - cbp->bio_offset = offset; + cbp->bio_offset = offset + start; cbp->bio_data = addr; - /* - * MIN() is in case when - * (bp->bio_length % sc->sc_stripesize) != 0. - */ - cbp->bio_length = MIN(strip_size, length); - + cbp->bio_length = length; cbp->bio_caller1 = &vol->v_subdisks[no]; bioq_insert_tail(&queue, cbp); - } + if (++no >= vol->v_disks_count) { + no = 0; + offset += strip_size; + } + remain -= length; + addr += length; + start = 0; + } while (remain > 0); for (cbp = bioq_first(&queue); cbp != NULL; cbp = bioq_first(&queue)) { bioq_remove(&queue, cbp); @@ -279,54 +255,47 @@ failure: g_raid_iodone(bp, bp->bio_error); } -int +static int g_raid_tr_kerneldump_raid0(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t boffset, size_t blength) { - struct g_raid_softc *sc; struct g_raid_volume *vol; char *addr; - off_t offset, start, length, nstripe; + off_t offset, start, length, nstripe, remain; u_int no, strip_size; int error; vol = tr->tro_volume; if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) return (ENXIO); - sc = vol->v_softc; - addr = virtual; strip_size = vol->v_strip_size; + /* Stripe number. */ nstripe = boffset / strip_size; /* Start position in stripe. */ start = boffset % strip_size; /* Disk number. */ no = nstripe % vol->v_disks_count; - /* Start position in disk. */ - offset = (nstripe / vol->v_disks_count) * strip_size + start; + /* Stripe tart position in disk. */ + offset = (nstripe / vol->v_disks_count) * strip_size; /* Length of data to operate. */ - length = MIN(blength, strip_size - start); + remain = blength; - error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], - addr, 0, offset, length); - if (error != 0) - return (error); - - offset -= offset % strip_size; - addr += length; - length = blength - length; - for (no++; length > 0; - no++, length -= strip_size, addr += strip_size) { - if (no > vol->v_disks_count - 1) { - no = 0; - offset += strip_size; - } + do { + length = MIN(strip_size - start, remain); error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], - addr, 0, offset, MIN(strip_size, length)); + addr, 0, offset + start, length); if (error != 0) return (error); - } + if (++no >= vol->v_disks_count) { + no = 0; + offset += strip_size; + } + remain -= length; + addr += length; + start = 0; + } while (remain > 0); return (0); } Modified: projects/graid/8/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/8/sys/geom/raid/tr_raid1.c Mon Feb 14 11:56:45 2011 (r218678) +++ projects/graid/8/sys/geom/raid/tr_raid1.c Mon Feb 14 14:21:07 2011 (r218679) @@ -46,19 +46,12 @@ SYSCTL_DECL(_kern_geom_raid); SYSCTL_NODE(_kern_geom_raid, OID_AUTO, raid1, CTLFLAG_RW, 0, "RAID1 parameters"); -#define RAID1_READ_ERR_THRESH 10 /* errors to cause a rebuild */ -static int g_raid1_read_err_thresh = RAID1_READ_ERR_THRESH; -TUNABLE_INT("kern.geom.raid.raid1.read_err_thresh", &g_raid1_read_err_thresh); -SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, read_err_thresh, CTLFLAG_RW, - &g_raid1_read_err_thresh, RAID1_READ_ERR_THRESH, - "Number of read errors on a subdisk that trigger a rebuild"); - #define RAID1_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */ static int g_raid1_rebuild_slab = RAID1_REBUILD_SLAB; TUNABLE_INT("kern.geom.raid.raid1.rebuild_slab_size", &g_raid1_rebuild_slab); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_slab_size, CTLFLAG_RW, - &g_raid1_rebuild_slab, RAID1_REBUILD_SLAB, + &g_raid1_rebuild_slab, 0, "Amount of the disk to rebuild each read/write cycle of the rebuild."); #define RAID1_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */ @@ -66,7 +59,7 @@ static int g_raid1_rebuild_fair_io = RAI TUNABLE_INT("kern.geom.raid.raid1.rebuild_fair_io", &g_raid1_rebuild_fair_io); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_fair_io, CTLFLAG_RW, - &g_raid1_rebuild_fair_io, RAID1_REBUILD_FAIR_IO, + &g_raid1_rebuild_fair_io, 0, "Fraction of the I/O bandwidth to use when disk busy for rebuild."); #define RAID1_REBUILD_CLUSTER_IDLE 100 @@ -74,7 +67,7 @@ static int g_raid1_rebuild_cluster_idle TUNABLE_INT("kern.geom.raid.raid1.rebuild_cluster_idle", &g_raid1_rebuild_cluster_idle); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_cluster_idle, CTLFLAG_RW, - &g_raid1_rebuild_cluster_idle, RAID1_REBUILD_CLUSTER_IDLE, + &g_raid1_rebuild_cluster_idle, 0, "Number of slabs to do each time we trigger a rebuild cycle"); #define RAID1_REBUILD_META_UPDATE 1024 /* update meta data every 1GB or so */ @@ -82,7 +75,7 @@ static int g_raid1_rebuild_meta_update = TUNABLE_INT("kern.geom.raid.raid1.rebuild_meta_update", &g_raid1_rebuild_meta_update); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_meta_update, CTLFLAG_RW, - &g_raid1_rebuild_meta_update, RAID1_REBUILD_META_UPDATE, + &g_raid1_rebuild_meta_update, 0, "When to update the meta data."); static MALLOC_DEFINE(M_TR_RAID1, "tr_raid1_data", "GEOM_RAID RAID1 data"); @@ -250,16 +243,16 @@ g_raid_tr_raid1_fail_disk(struct g_raid_ } static void -g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr, - struct g_raid_subdisk *sd) +g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr) { struct g_raid_tr_raid1_object *trs; - struct g_raid_subdisk *good_sd; + struct g_raid_subdisk *sd, *good_sd; struct bio *bp; trs = (struct g_raid_tr_raid1_object *)tr; if (trs->trso_flags & TR_RAID1_F_DOING_SOME) return; + sd = trs->trso_failed_sd; good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); if (good_sd == NULL) { g_raid_tr_raid1_rebuild_abort(tr); @@ -269,13 +262,11 @@ g_raid_tr_raid1_rebuild_some(struct g_ra memset(bp, 0, sizeof(*bp)); bp->bio_offset = sd->sd_rebuild_pos; bp->bio_length = MIN(g_raid1_rebuild_slab, - sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); + sd->sd_size - sd->sd_rebuild_pos); bp->bio_data = trs->trso_buffer; bp->bio_cmd = BIO_READ; bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; bp->bio_caller1 = good_sd; - trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; - trs->trso_fair_io = g_raid1_rebuild_fair_io; trs->trso_flags |= TR_RAID1_F_DOING_SOME; trs->trso_flags |= TR_RAID1_F_LOCKED; g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ @@ -343,7 +334,7 @@ g_raid_tr_raid1_rebuild_abort(struct g_r if (trs->trso_flags & TR_RAID1_F_LOCKED) { trs->trso_flags &= ~TR_RAID1_F_LOCKED; len = MIN(g_raid1_rebuild_slab, - vol->v_mediasize - sd->sd_rebuild_pos); + sd->sd_size - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, sd->sd_rebuild_pos, len); } @@ -411,7 +402,7 @@ g_raid_tr_raid1_rebuild_start(struct g_r trs->trso_type = TR_RAID1_REBUILD; trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_RAID1, M_WAITOK); trs->trso_meta_update = g_raid1_rebuild_meta_update; - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); + g_raid_tr_raid1_rebuild_some(tr); } @@ -511,10 +502,9 @@ g_raid_tr_raid1_select_read_disk(struct for (i = 0; i < vol->v_disks_count; i++) { sd = &vol->v_subdisks[i]; if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE && - !((sd->sd_state == G_RAID_SUBDISK_S_REBUILD || - sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && - bp->bio_offset + bp->bio_length < - sd->sd_rebuild_pos)) + ((sd->sd_state != G_RAID_SUBDISK_S_REBUILD && + sd->sd_state != G_RAID_SUBDISK_S_RESYNC) || + bp->bio_offset + bp->bio_length > sd->sd_rebuild_pos)) continue; if ((mask & (1 << i)) != 0) continue; @@ -601,17 +591,8 @@ g_raid_tr_iostart_raid1_write(struct g_r continue; } cbp = g_clone_bio(bp); - if (cbp == NULL) { - for (cbp = bioq_first(&queue); cbp != NULL; - cbp = bioq_first(&queue)) { - bioq_remove(&queue, cbp); - g_destroy_bio(cbp); - } - if (bp->bio_error == 0) - bp->bio_error = ENOMEM; - g_raid_iodone(bp, bp->bio_error); - return; - } + if (cbp == NULL) + goto failure; cbp->bio_caller1 = sd; bioq_insert_tail(&queue, cbp); } @@ -622,7 +603,16 @@ g_raid_tr_iostart_raid1_write(struct g_r cbp->bio_caller1 = NULL; g_raid_subdisk_iostart(sd, cbp); } - + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); } static void @@ -647,10 +637,12 @@ g_raid_tr_iostart_raid1(struct g_raid_tr */ if (trs->trso_failed_sd != NULL && !(bp->bio_cflags & G_RAID_BIO_FLAG_SPECIAL)) { - if (--trs->trso_fair_io <= 0) - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); /* Make this new or running now round short. */ trs->trso_recover_slabs = 0; + if (--trs->trso_fair_io <= 0) { + trs->trso_fair_io = g_raid1_rebuild_fair_io; + g_raid_tr_raid1_rebuild_some(tr); + } } switch (bp->bio_cmd) { case BIO_READ: @@ -662,6 +654,9 @@ g_raid_tr_iostart_raid1(struct g_raid_tr case BIO_DELETE: g_raid_iodone(bp, EIO); break; + case BIO_FLUSH: + g_raid_tr_flush_common(tr, bp); + break; default: KASSERT(1 == 0, ("Invalid command here: %u (volume=%s)", bp->bio_cmd, vol->v_name)); @@ -674,7 +669,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ struct g_raid_subdisk *sd, struct bio *bp) { struct bio *cbp; - struct g_raid_subdisk *nsd, *good_sd; + struct g_raid_subdisk *nsd; struct g_raid_volume *vol; struct bio *pbp; struct g_raid_tr_raid1_object *trs; @@ -751,14 +746,13 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ g_raid_tr_raid1_rebuild_abort(tr); return; } -/* XXX A lot of the following is needed when we kick of the work -- refactor */ rebuild_round_done: nsd = trs->trso_failed_sd; trs->trso_flags &= ~TR_RAID1_F_LOCKED; g_raid_unlock_range(sd->sd_volume, bp->bio_offset, bp->bio_length); nsd->sd_rebuild_pos += bp->bio_length; - if (nsd->sd_rebuild_pos >= vol->v_mediasize) { + if (nsd->sd_rebuild_pos >= nsd->sd_size) { g_raid_tr_raid1_rebuild_finish(tr); return; } @@ -776,29 +770,10 @@ rebuild_round_done: trs->trso_meta_update = g_raid1_rebuild_meta_update; } - if (--trs->trso_recover_slabs <= 0) { - trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; + trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; + if (--trs->trso_recover_slabs <= 0) return; - } - good_sd = g_raid_get_subdisk(sd->sd_volume, - G_RAID_SUBDISK_S_ACTIVE); - if (good_sd == NULL) { - trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; - g_raid_tr_raid1_rebuild_abort(tr); - return; - } - bp->bio_cmd = BIO_READ; - bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_offset = nsd->sd_rebuild_pos; - bp->bio_length = MIN(g_raid1_rebuild_slab, - vol->v_mediasize - nsd->sd_rebuild_pos); - bp->bio_caller1 = good_sd; - G_RAID_LOGREQ(4, bp, - "Rebuild read at %jd.", bp->bio_offset); - /* Lock callback starts I/O */ - trs->trso_flags |= TR_RAID1_F_LOCKED; - g_raid_lock_range(sd->sd_volume, - bp->bio_offset, bp->bio_length, NULL, bp); + g_raid_tr_raid1_rebuild_some(tr); } } else if (trs->trso_type == TR_RAID1_RESYNC) { /* @@ -830,7 +805,7 @@ rebuild_round_done: * drive, which kicks off a resync? */ do_write = 1; - if (sd->sd_disk->d_read_errs > g_raid1_read_err_thresh) { + if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) { g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk); if (pbp->bio_children == 1) do_write = 0; @@ -848,6 +823,7 @@ rebuild_round_done: *mask |= 1 << sd->sd_pos; nsd = g_raid_tr_raid1_select_read_disk(vol, pbp, *mask); if (nsd != NULL && (cbp = g_clone_bio(pbp)) != NULL) { + g_destroy_bio(bp); G_RAID_LOGREQ(2, cbp, "Retrying read from %d", nsd->sd_pos); if (pbp->bio_children == 2 && do_write) { @@ -888,6 +864,7 @@ rebuild_round_done: G_RAID_LOGREQ(3, bp, "Recovered data from other drive"); cbp = g_clone_bio(pbp); if (cbp != NULL) { + g_destroy_bio(bp); cbp->bio_cmd = BIO_WRITE; cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP; G_RAID_LOGREQ(2, cbp, @@ -928,7 +905,7 @@ rebuild_round_done: } } -int +static int g_raid_tr_kerneldump_raid1(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t offset, size_t length) { @@ -992,8 +969,10 @@ g_raid_tr_idle_raid1(struct g_raid_tr_ob struct g_raid_tr_raid1_object *trs; trs = (struct g_raid_tr_raid1_object *)tr; + trs->trso_fair_io = g_raid1_rebuild_fair_io; + trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; if (trs->trso_type == TR_RAID1_REBUILD) - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); + g_raid_tr_raid1_rebuild_some(tr); return (0); } Copied and modified: projects/graid/8/sys/geom/raid/tr_raid1e.c (from r218638, projects/graid/head/sys/geom/raid/tr_raid1e.c) ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 13:21:55 2011 (r218638, copy source) +++ projects/graid/8/sys/geom/raid/tr_raid1e.c Mon Feb 14 14:21:07 2011 (r218679) @@ -101,6 +101,8 @@ struct g_raid_tr_raid1e_object { int trso_flags; struct g_raid_subdisk *trso_failed_sd; /* like per volume */ void *trso_buffer; /* Buffer space */ + off_t trso_lock_pos; /* Locked range start. */ + off_t trso_lock_len; /* Locked range length. */ struct bio trso_bio; }; @@ -139,6 +141,8 @@ static struct g_raid_tr_class g_raid_tr_ static void g_raid_tr_raid1e_rebuild_abort(struct g_raid_tr_object *tr); static void g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr, struct g_raid_subdisk *sd); +static int g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol, + int no, off_t off, off_t len, u_int mask); static inline void V2P(struct g_raid_volume *vol, off_t virt, @@ -202,7 +206,6 @@ g_raid_tr_update_state_raid1e_even(struc state = G_RAID_VOLUME_S_OPTIMAL; for (i = 0; i < vol->v_disks_count / N; i++) { bestsd = &vol->v_subdisks[i * N]; - worstsd = &vol->v_subdisks[i * N]; for (j = 1; j < N; j++) { sd = &vol->v_subdisks[i * N + j]; if (sd->sd_state > bestsd->sd_state) @@ -212,8 +215,6 @@ g_raid_tr_update_state_raid1e_even(struc sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && sd->sd_rebuild_pos > bestsd->sd_rebuild_pos) bestsd = sd; - if (sd->sd_state < worstsd->sd_state) - worstsd = sd; } if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED && bestsd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { @@ -227,6 +228,12 @@ g_raid_tr_update_state_raid1e_even(struc g_raid_write_metadata(sc, vol, bestsd, bestsd->sd_disk); } + worstsd = &vol->v_subdisks[i * N]; + for (j = 1; j < N; j++) { + sd = &vol->v_subdisks[i * N + j]; + if (sd->sd_state < worstsd->sd_state) + worstsd = sd; + } if (worstsd->sd_state == G_RAID_SUBDISK_S_ACTIVE) sstate = G_RAID_VOLUME_S_OPTIMAL; else if (worstsd->sd_state >= G_RAID_SUBDISK_S_STALE) @@ -317,7 +324,6 @@ g_raid_tr_update_state_raid1e(struct g_r s = g_raid_tr_update_state_raid1e_even(vol); else s = g_raid_tr_update_state_raid1e_odd(vol); - g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); } if (s != vol->v_state) { g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? @@ -327,6 +333,8 @@ g_raid_tr_update_state_raid1e(struct g_r if (!trs->trso_starting && !trs->trso_stopping) g_raid_write_metadata(sc, vol, NULL, NULL); } + if (!trs->trso_starting && !trs->trso_stopping) + g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); return (0); } @@ -350,37 +358,6 @@ g_raid_tr_raid1e_fail_disk(struct g_raid } static void -g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) -{ - struct g_raid_tr_raid1e_object *trs; - struct g_raid_subdisk *sd, *good_sd; - struct bio *bp; - - trs = (struct g_raid_tr_raid1e_object *)tr; - if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) - return; - sd = trs->trso_failed_sd; - good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); - if (good_sd == NULL) { - g_raid_tr_raid1e_rebuild_abort(tr); - return; - } - bp = &trs->trso_bio; - memset(bp, 0, sizeof(*bp)); - bp->bio_offset = sd->sd_rebuild_pos; - bp->bio_length = MIN(g_raid1e_rebuild_slab, - sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); - bp->bio_data = trs->trso_buffer; - bp->bio_cmd = BIO_READ; - bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_caller1 = good_sd; - trs->trso_flags |= TR_RAID1E_F_DOING_SOME; - trs->trso_flags |= TR_RAID1E_F_LOCKED; - g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ - bp->bio_offset, bp->bio_length, NULL, bp); -} - -static void g_raid_tr_raid1e_rebuild_done(struct g_raid_tr_raid1e_object *trs) { struct g_raid_volume *vol; @@ -421,7 +398,6 @@ g_raid_tr_raid1e_rebuild_abort(struct g_ struct g_raid_tr_raid1e_object *trs; struct g_raid_subdisk *sd; struct g_raid_volume *vol; - off_t len; vol = tr->tro_volume; trs = (struct g_raid_tr_raid1e_object *)tr; @@ -440,21 +416,94 @@ g_raid_tr_raid1e_rebuild_abort(struct g_ trs->trso_flags &= ~TR_RAID1E_F_ABORT; if (trs->trso_flags & TR_RAID1E_F_LOCKED) { trs->trso_flags &= ~TR_RAID1E_F_LOCKED; - len = MIN(g_raid1e_rebuild_slab, - vol->v_mediasize - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, - sd->sd_rebuild_pos, len); + trs->trso_lock_pos, trs->trso_lock_len); } g_raid_tr_raid1e_rebuild_done(trs); } } static void +g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio *bp; + off_t len, virtual, vend, offset, start; + int disk, copy, best; + + trs = (struct g_raid_tr_raid1e_object *)tr; + if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) + return; + vol = tr->tro_volume; + sc = vol->v_softc; + sd = trs->trso_failed_sd; + + while (1) { + if (sd->sd_rebuild_pos >= sd->sd_size) { + g_raid_tr_raid1e_rebuild_finish(tr); + return; + } + /* Get virtual offset from physical rebuild position. */ + P2V(vol, sd->sd_pos, sd->sd_rebuild_pos, &virtual, ©); + /* Get physical offset back to get first stripe position. */ + V2P(vol, virtual, &disk, &offset, &start); + /* Calculate contignous data length. */ + len = MIN(g_raid1e_rebuild_slab, + sd->sd_size - sd->sd_rebuild_pos); + if ((vol->v_disks_count % N) != 0) + len = MIN(len, vol->v_strip_size - start); + /* Find disk with most accurate data. */ + best = g_raid_tr_raid1e_select_read_disk(vol, disk, + offset + start, len, 0); + if (best < 0) { + /* There is no any valid disk. */ + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } else if (best != copy) { + /* Some other disk has better data. */ + break; + } + /* We have the most accurate data. Skip the range. */ + G_RAID_DEBUG1(3, sc, "Skipping rebuild for range %ju - %ju", + sd->sd_rebuild_pos, sd->sd_rebuild_pos + len); + sd->sd_rebuild_pos += len; + } + + bp = &trs->trso_bio; + memset(bp, 0, sizeof(*bp)); + bp->bio_offset = offset + start + + ((disk + best >= vol->v_disks_count) ? vol->v_strip_size : 0); + bp->bio_length = len; + bp->bio_data = trs->trso_buffer; + bp->bio_cmd = BIO_READ; + bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; + bp->bio_caller1 = &vol->v_subdisks[(disk + best) % vol->v_disks_count]; + G_RAID_LOGREQ(3, bp, "Queueing rebuild read"); + /* + * If we are crossing stripe boundary, correct affected virtual + * range we should lock. + */ + if (start + len > vol->v_strip_size) { + P2V(vol, sd->sd_pos, sd->sd_rebuild_pos + len, &vend, ©); + len = vend - virtual; + } + trs->trso_flags |= TR_RAID1E_F_DOING_SOME; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Mon Feb 14 14:26: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 D00B3106566B; Mon, 14 Feb 2011 14:26: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 BE0BB8FC1C; Mon, 14 Feb 2011 14:26: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 p1EEQEfZ095794; Mon, 14 Feb 2011 14:26:14 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1EEQEtZ095784; Mon, 14 Feb 2011 14:26:14 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102141426.p1EEQEtZ095784@svn.freebsd.org> From: Alexander Motin Date: Mon, 14 Feb 2011 14:26: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: r218680 - in projects/graid/7: . contrib/bsnmp/snmpd contrib/wpa_supplicant gnu/usr.bin/groff/tmac sbin/geom/class/raid share/misc sys/conf sys/geom/raid sys/modules/geom/geom_raid tool... 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, 14 Feb 2011 14:26:14 -0000 Author: mav Date: Mon Feb 14 14:26:14 2011 New Revision: 218680 URL: http://svn.freebsd.org/changeset/base/218680 Log: MFH r218600, r218608, r218622, r218624, r218630, r218632, r218638, r218649, r218651, r218653, r218669, r218674, r218678. Added: projects/graid/7/sys/geom/raid/tr_raid1e.c - copied, changed from r218638, projects/graid/head/sys/geom/raid/tr_raid1e.c Modified: projects/graid/7/sbin/geom/class/raid/graid.8 projects/graid/7/sys/conf/files projects/graid/7/sys/geom/raid/g_raid.c projects/graid/7/sys/geom/raid/g_raid.h projects/graid/7/sys/geom/raid/md_intel.c projects/graid/7/sys/geom/raid/tr_raid0.c projects/graid/7/sys/geom/raid/tr_raid1.c projects/graid/7/sys/modules/geom/geom_raid/Makefile Directory Properties: projects/graid/7/ (props changed) projects/graid/7/COPYRIGHT (props changed) projects/graid/7/Makefile (props changed) projects/graid/7/Makefile.inc1 (props changed) projects/graid/7/ObsoleteFiles.inc (props changed) projects/graid/7/UPDATING (props changed) projects/graid/7/bin/ (props changed) projects/graid/7/bin/chflags/ (props changed) projects/graid/7/bin/chio/ (props changed) projects/graid/7/bin/cp/ (props changed) projects/graid/7/bin/csh/ (props changed) projects/graid/7/bin/dd/ (props changed) projects/graid/7/bin/df/ (props changed) projects/graid/7/bin/echo/ (props changed) projects/graid/7/bin/expr/ (props changed) projects/graid/7/bin/kill/ (props changed) projects/graid/7/bin/ln/ (props changed) projects/graid/7/bin/ls/ (props changed) projects/graid/7/bin/pax/ (props changed) projects/graid/7/bin/ps/ (props changed) projects/graid/7/bin/rm/ (props changed) projects/graid/7/bin/sh/ (props changed) projects/graid/7/bin/test/ (props changed) projects/graid/7/cddl/contrib/opensolaris/ (props changed) projects/graid/7/cddl/lib/libzpool/ (props changed) projects/graid/7/contrib/bind9/ (props changed) projects/graid/7/contrib/binutils/ (props changed) projects/graid/7/contrib/bsnmp/ (props changed) projects/graid/7/contrib/bsnmp/snmpd/bsnmpd.1 (props changed) projects/graid/7/contrib/cpio/ (props changed) projects/graid/7/contrib/csup/ (props changed) projects/graid/7/contrib/expat/ (props changed) projects/graid/7/contrib/gcc/ (props changed) projects/graid/7/contrib/gdb/ (props changed) projects/graid/7/contrib/gdtoa/ (props changed) projects/graid/7/contrib/groff/ (props changed) projects/graid/7/contrib/ipfilter/ (props changed) projects/graid/7/contrib/less/ (props changed) projects/graid/7/contrib/libpcap/ (props changed) projects/graid/7/contrib/ncurses/ (props changed) projects/graid/7/contrib/netcat/ (props changed) projects/graid/7/contrib/ntp/ (props changed) projects/graid/7/contrib/nvi/ (props changed) projects/graid/7/contrib/pf/ (props changed) projects/graid/7/contrib/sendmail/ (props changed) projects/graid/7/contrib/smbfs/ (props changed) projects/graid/7/contrib/tcp_wrappers/ (props changed) projects/graid/7/contrib/tcsh/ (props changed) projects/graid/7/contrib/telnet/ (props changed) projects/graid/7/contrib/top/ (props changed) projects/graid/7/contrib/traceroute/ (props changed) projects/graid/7/contrib/wpa_supplicant/ (props changed) projects/graid/7/contrib/wpa_supplicant/wpa_supplicant.conf (props changed) projects/graid/7/crypto/openssh/ (props changed) projects/graid/7/crypto/openssl/ (props changed) projects/graid/7/etc/ (props changed) projects/graid/7/games/factor/ (props changed) projects/graid/7/games/fortune/ (props changed) projects/graid/7/games/grdc/ (props changed) projects/graid/7/gnu/ (props changed) projects/graid/7/gnu/lib/libstdc++/ (props changed) projects/graid/7/gnu/usr.bin/ (props changed) projects/graid/7/gnu/usr.bin/cc/ (props changed) projects/graid/7/gnu/usr.bin/cpio/ (props changed) projects/graid/7/gnu/usr.bin/cvs/ (props changed) projects/graid/7/gnu/usr.bin/gdb/ (props changed) projects/graid/7/gnu/usr.bin/gdb/kgdb/ (props changed) projects/graid/7/gnu/usr.bin/grep/ (props changed) projects/graid/7/gnu/usr.bin/groff/ (props changed) projects/graid/7/gnu/usr.bin/groff/tmac/mdoc.local (props changed) projects/graid/7/gnu/usr.bin/man/ (props changed) projects/graid/7/gnu/usr.bin/sort/ (props changed) projects/graid/7/include/ (props changed) projects/graid/7/kerberos5/ (props changed) projects/graid/7/lib/ (props changed) projects/graid/7/lib/bind/ (props changed) projects/graid/7/lib/csu/ (props changed) projects/graid/7/lib/libarchive/ (props changed) projects/graid/7/lib/libbluetooth/ (props changed) projects/graid/7/lib/libc/ (props changed) projects/graid/7/lib/libc/stdtime/ (props changed) projects/graid/7/lib/libc_r/ (props changed) projects/graid/7/lib/libcam/ (props changed) projects/graid/7/lib/libdisk/ (props changed) projects/graid/7/lib/libdwarf/ (props changed) projects/graid/7/lib/libelf/ (props changed) projects/graid/7/lib/libexpat/ (props changed) projects/graid/7/lib/libfetch/ (props changed) projects/graid/7/lib/libftpio/ (props changed) projects/graid/7/lib/libgeom/ (props changed) projects/graid/7/lib/libgssapi/ (props changed) projects/graid/7/lib/libkse/ (props changed) projects/graid/7/lib/libkvm/ (props changed) projects/graid/7/lib/libmagic/ (props changed) projects/graid/7/lib/libmemstat/ (props changed) projects/graid/7/lib/libpmc/ (props changed) projects/graid/7/lib/libradius/ (props changed) projects/graid/7/lib/libsm/ (props changed) projects/graid/7/lib/libstand/ (props changed) projects/graid/7/lib/libthr/ (props changed) projects/graid/7/lib/libthread_db/ (props changed) projects/graid/7/lib/libufs/ (props changed) projects/graid/7/lib/libutil/ (props changed) projects/graid/7/lib/msun/ (props changed) projects/graid/7/libexec/ (props changed) projects/graid/7/libexec/ftpd/ (props changed) projects/graid/7/libexec/rpc.rquotad/ (props changed) projects/graid/7/libexec/rpc.rstatd/ (props changed) projects/graid/7/libexec/rtld-elf/ (props changed) projects/graid/7/libexec/tftpd/ (props changed) projects/graid/7/release/ (props changed) projects/graid/7/release/doc/ (props changed) projects/graid/7/release/doc/en_US.ISO8859-1/hardware/ (props changed) projects/graid/7/release/picobsd/tinyware/login/ (props changed) projects/graid/7/rescue/ (props changed) projects/graid/7/sbin/ (props changed) projects/graid/7/sbin/atacontrol/ (props changed) projects/graid/7/sbin/bsdlabel/ (props changed) projects/graid/7/sbin/clri/ (props changed) projects/graid/7/sbin/ddb/ (props changed) projects/graid/7/sbin/devd/ (props changed) projects/graid/7/sbin/devfs/ (props changed) projects/graid/7/sbin/dhclient/ (props changed) projects/graid/7/sbin/dumpfs/ (props changed) projects/graid/7/sbin/fdisk/ (props changed) projects/graid/7/sbin/fdisk_pc98/ (props changed) projects/graid/7/sbin/fsck/ (props changed) projects/graid/7/sbin/fsck_ffs/ (props changed) projects/graid/7/sbin/fsck_msdosfs/ (props changed) projects/graid/7/sbin/geom/ (props changed) projects/graid/7/sbin/geom/class/label/ (props changed) projects/graid/7/sbin/geom/class/part/ (props changed) projects/graid/7/sbin/geom/class/stripe/ (props changed) projects/graid/7/sbin/geom/misc/ (props changed) projects/graid/7/sbin/growfs/ (props changed) projects/graid/7/sbin/ifconfig/ (props changed) projects/graid/7/sbin/init/ (props changed) projects/graid/7/sbin/ipf/ (props changed) projects/graid/7/sbin/ipfw/ (props changed) projects/graid/7/sbin/md5/ (props changed) projects/graid/7/sbin/mdconfig/ (props changed) projects/graid/7/sbin/mksnap_ffs/ (props changed) projects/graid/7/sbin/mount/ (props changed) projects/graid/7/sbin/mount_msdosfs/ (props changed) projects/graid/7/sbin/natd/ (props changed) projects/graid/7/sbin/newfs/ (props changed) projects/graid/7/sbin/newfs_msdos/ (props changed) projects/graid/7/sbin/ping6/ (props changed) projects/graid/7/sbin/reboot/ (props changed) projects/graid/7/sbin/restore/ (props changed) projects/graid/7/sbin/route/ (props changed) projects/graid/7/sbin/savecore/ (props changed) projects/graid/7/sbin/sconfig/ (props changed) projects/graid/7/sbin/shutdown/ (props changed) projects/graid/7/sbin/sysctl/ (props changed) projects/graid/7/sbin/tunefs/ (props changed) projects/graid/7/secure/lib/libcrypto/ (props changed) projects/graid/7/secure/lib/libssh/ (props changed) projects/graid/7/secure/lib/libssl/ (props changed) projects/graid/7/secure/libexec/sftp-server/ (props changed) projects/graid/7/secure/usr.bin/bdes/ (props changed) projects/graid/7/secure/usr.bin/openssl/ (props changed) projects/graid/7/secure/usr.bin/ssh/ (props changed) projects/graid/7/secure/usr.sbin/sshd/ (props changed) projects/graid/7/share/ (props changed) projects/graid/7/share/colldef/ (props changed) projects/graid/7/share/dict/ (props changed) projects/graid/7/share/doc/bind9/ (props changed) projects/graid/7/share/doc/papers/jail/ (props changed) projects/graid/7/share/doc/smm/01.setup/ (props changed) projects/graid/7/share/examples/ (props changed) projects/graid/7/share/man/ (props changed) projects/graid/7/share/man/man1/ (props changed) projects/graid/7/share/man/man3/ (props changed) projects/graid/7/share/man/man4/ (props changed) projects/graid/7/share/man/man5/ (props changed) projects/graid/7/share/man/man7/ (props changed) projects/graid/7/share/man/man8/ (props changed) projects/graid/7/share/man/man9/ (props changed) projects/graid/7/share/misc/ (props changed) projects/graid/7/share/misc/iso639 (props changed) projects/graid/7/share/misc/pci_vendors (props changed) projects/graid/7/share/mk/ (props changed) projects/graid/7/share/mklocale/ (props changed) projects/graid/7/share/monetdef/ (props changed) projects/graid/7/share/msgdef/ (props changed) projects/graid/7/share/numericdef/ (props changed) projects/graid/7/share/sendmail/ (props changed) projects/graid/7/share/syscons/ (props changed) projects/graid/7/share/syscons/keymaps/ (props changed) projects/graid/7/share/termcap/ (props changed) projects/graid/7/share/timedef/ (props changed) projects/graid/7/share/zoneinfo/ (props changed) projects/graid/7/sys/ (props changed) projects/graid/7/sys/cddl/contrib/opensolaris/ (props changed) projects/graid/7/sys/contrib/dev/acpica/ (props changed) projects/graid/7/sys/contrib/pf/ (props changed) projects/graid/7/tools/ (props changed) projects/graid/7/tools/build/ (props changed) projects/graid/7/tools/build/options/ (props changed) projects/graid/7/tools/debugscripts/ (props changed) projects/graid/7/tools/regression/acct/ (props changed) projects/graid/7/tools/regression/atm/ (props changed) projects/graid/7/tools/regression/bin/ (props changed) projects/graid/7/tools/regression/bin/date/ (props changed) projects/graid/7/tools/regression/bin/sh/ (props changed) projects/graid/7/tools/regression/file/ (props changed) projects/graid/7/tools/regression/file/flock/ (props changed) projects/graid/7/tools/regression/lib/libc/ (props changed) projects/graid/7/tools/regression/usr.bin/ (props changed) projects/graid/7/tools/regression/usr.bin/jot/ (props changed) projects/graid/7/tools/regression/usr.bin/tr/ (props changed) projects/graid/7/tools/sched/ (props changed) projects/graid/7/tools/test/ (props changed) projects/graid/7/tools/tools/ (props changed) projects/graid/7/tools/tools/aac/ (props changed) projects/graid/7/tools/tools/crypto/ (props changed) projects/graid/7/tools/tools/editing/ (props changed) projects/graid/7/tools/tools/nanobsd/ (props changed) projects/graid/7/tools/tools/nanobsd/FlashDevice.sub (props changed) projects/graid/7/tools/tools/nanobsd/nanobsd.sh (props changed) projects/graid/7/tools/tools/netrate/ (props changed) projects/graid/7/tools/tools/umastat/ (props changed) projects/graid/7/tools/tools/usb/ (props changed) projects/graid/7/usr.bin/ (props changed) projects/graid/7/usr.bin/basename/ (props changed) projects/graid/7/usr.bin/bluetooth/rfcomm_sppd/ (props changed) projects/graid/7/usr.bin/calendar/ (props changed) projects/graid/7/usr.bin/catman/ (props changed) projects/graid/7/usr.bin/cksum/ (props changed) projects/graid/7/usr.bin/comm/ (props changed) projects/graid/7/usr.bin/cpuset/ (props changed) projects/graid/7/usr.bin/csup/ (props changed) projects/graid/7/usr.bin/dirname/ (props changed) projects/graid/7/usr.bin/du/ (props changed) projects/graid/7/usr.bin/fetch/ (props changed) projects/graid/7/usr.bin/file/ (props changed) projects/graid/7/usr.bin/find/ (props changed) projects/graid/7/usr.bin/finger/ (props changed) projects/graid/7/usr.bin/fold/ (props changed) projects/graid/7/usr.bin/fstat/ (props changed) projects/graid/7/usr.bin/gcore/ (props changed) projects/graid/7/usr.bin/gprof/ (props changed) projects/graid/7/usr.bin/gzip/ (props changed) projects/graid/7/usr.bin/hexdump/ (props changed) projects/graid/7/usr.bin/id/ (props changed) projects/graid/7/usr.bin/indent/ (props changed) projects/graid/7/usr.bin/ipcrm/ (props changed) projects/graid/7/usr.bin/ipcs/ (props changed) projects/graid/7/usr.bin/jot/ (props changed) projects/graid/7/usr.bin/kdump/ (props changed) projects/graid/7/usr.bin/ktrace/ (props changed) projects/graid/7/usr.bin/ldd/ (props changed) projects/graid/7/usr.bin/less/ (props changed) projects/graid/7/usr.bin/locate/ (props changed) projects/graid/7/usr.bin/lockf/ (props changed) projects/graid/7/usr.bin/logger/ (props changed) projects/graid/7/usr.bin/make/ (props changed) projects/graid/7/usr.bin/ncal/ (props changed) projects/graid/7/usr.bin/netstat/ (props changed) projects/graid/7/usr.bin/newgrp/ (props changed) projects/graid/7/usr.bin/nsupdate/ (props changed) projects/graid/7/usr.bin/pkill/ (props changed) projects/graid/7/usr.bin/procstat/ (props changed) projects/graid/7/usr.bin/quota/ (props changed) projects/graid/7/usr.bin/rpcgen/ (props changed) projects/graid/7/usr.bin/ruptime/ (props changed) projects/graid/7/usr.bin/script/ (props changed) projects/graid/7/usr.bin/sed/ (props changed) projects/graid/7/usr.bin/shar/ (props changed) projects/graid/7/usr.bin/sockstat/ (props changed) projects/graid/7/usr.bin/stat/ (props changed) projects/graid/7/usr.bin/su/ (props changed) projects/graid/7/usr.bin/systat/ (props changed) projects/graid/7/usr.bin/tail/ (props changed) projects/graid/7/usr.bin/tar/ (props changed) projects/graid/7/usr.bin/tftp/ (props changed) projects/graid/7/usr.bin/tip/ (props changed) projects/graid/7/usr.bin/top/ (props changed) projects/graid/7/usr.bin/truncate/ (props changed) projects/graid/7/usr.bin/truss/ (props changed) projects/graid/7/usr.bin/uname/ (props changed) projects/graid/7/usr.bin/unifdef/ (props changed) projects/graid/7/usr.bin/units/ (props changed) projects/graid/7/usr.bin/uudecode/ (props changed) projects/graid/7/usr.bin/vmstat/ (props changed) projects/graid/7/usr.bin/w/ (props changed) projects/graid/7/usr.bin/wc/ (props changed) projects/graid/7/usr.bin/whereis/ (props changed) projects/graid/7/usr.bin/whois/ (props changed) projects/graid/7/usr.bin/window/ (props changed) projects/graid/7/usr.bin/xargs/ (props changed) projects/graid/7/usr.bin/ypcat/ (props changed) projects/graid/7/usr.bin/ypmatch/ (props changed) projects/graid/7/usr.bin/ypwhich/ (props changed) projects/graid/7/usr.sbin/ (props changed) projects/graid/7/usr.sbin/Makefile (props changed) projects/graid/7/usr.sbin/acpi/ (props changed) projects/graid/7/usr.sbin/adduser/ (props changed) projects/graid/7/usr.sbin/arp/ (props changed) projects/graid/7/usr.sbin/bluetooth/ (props changed) projects/graid/7/usr.sbin/bluetooth/btpand/ (props changed) projects/graid/7/usr.sbin/bluetooth/hcsecd/ (props changed) projects/graid/7/usr.sbin/bluetooth/hcseriald/ (props changed) projects/graid/7/usr.sbin/bluetooth/rfcomm_pppd/ (props changed) projects/graid/7/usr.sbin/bluetooth/sdpd/ (props changed) projects/graid/7/usr.sbin/boot0cfg/ (props changed) projects/graid/7/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed) projects/graid/7/usr.sbin/bsnmpd/modules/snmp_pf/ (props changed) projects/graid/7/usr.sbin/burncd/ (props changed) projects/graid/7/usr.sbin/cdcontrol/ (props changed) projects/graid/7/usr.sbin/chown/ (props changed) projects/graid/7/usr.sbin/chroot/ (props changed) projects/graid/7/usr.sbin/config/ (props changed) projects/graid/7/usr.sbin/config/SMM.doc/ (props changed) projects/graid/7/usr.sbin/cpucontrol/ (props changed) projects/graid/7/usr.sbin/crashinfo/ (props changed) projects/graid/7/usr.sbin/cron/ (props changed) projects/graid/7/usr.sbin/cron/cron/ (props changed) projects/graid/7/usr.sbin/crunch/ (props changed) projects/graid/7/usr.sbin/cxgbtool/ (props changed) projects/graid/7/usr.sbin/eeprom/ (props changed) projects/graid/7/usr.sbin/extattr/ (props changed) projects/graid/7/usr.sbin/faithd/ (props changed) projects/graid/7/usr.sbin/fdcontrol/ (props changed) projects/graid/7/usr.sbin/fdformat/ (props changed) projects/graid/7/usr.sbin/fdread/ (props changed) projects/graid/7/usr.sbin/fdwrite/ (props changed) projects/graid/7/usr.sbin/fifolog/ (props changed) projects/graid/7/usr.sbin/freebsd-update/ (props changed) projects/graid/7/usr.sbin/fwcontrol/ (props changed) projects/graid/7/usr.sbin/gstat/ (props changed) projects/graid/7/usr.sbin/iostat/ (props changed) projects/graid/7/usr.sbin/jail/ (props changed) projects/graid/7/usr.sbin/jexec/ (props changed) projects/graid/7/usr.sbin/jls/ (props changed) projects/graid/7/usr.sbin/lpr/ (props changed) projects/graid/7/usr.sbin/mailwrapper/ (props changed) projects/graid/7/usr.sbin/makefs/ (props changed) projects/graid/7/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/graid/7/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/graid/7/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/graid/7/usr.sbin/makefs/getid.c (props changed) projects/graid/7/usr.sbin/mergemaster/ (props changed) projects/graid/7/usr.sbin/mfiutil/ (props changed) projects/graid/7/usr.sbin/mountd/ (props changed) projects/graid/7/usr.sbin/mptutil/ (props changed) projects/graid/7/usr.sbin/mtree/ (props changed) projects/graid/7/usr.sbin/ndiscvt/ (props changed) projects/graid/7/usr.sbin/ndp/ (props changed) projects/graid/7/usr.sbin/newsyslog/ (props changed) projects/graid/7/usr.sbin/nscd/ (props changed) projects/graid/7/usr.sbin/ntp/ (props changed) projects/graid/7/usr.sbin/pciconf/ (props changed) projects/graid/7/usr.sbin/pkg_install/ (props changed) projects/graid/7/usr.sbin/pmccontrol/ (props changed) projects/graid/7/usr.sbin/pmcstat/ (props changed) projects/graid/7/usr.sbin/portsnap/ (props changed) projects/graid/7/usr.sbin/powerd/ (props changed) projects/graid/7/usr.sbin/ppp/ (props changed) projects/graid/7/usr.sbin/pstat/ (props changed) projects/graid/7/usr.sbin/pw/ (props changed) projects/graid/7/usr.sbin/pwd_mkdb/ (props changed) projects/graid/7/usr.sbin/rpc.lockd/ (props changed) projects/graid/7/usr.sbin/rpc.statd/ (props changed) projects/graid/7/usr.sbin/rpc.yppasswdd/ (props changed) projects/graid/7/usr.sbin/rtadvd/ (props changed) projects/graid/7/usr.sbin/rtsold/ (props changed) projects/graid/7/usr.sbin/sade/ (props changed) projects/graid/7/usr.sbin/service/ (props changed) projects/graid/7/usr.sbin/setfib/ (props changed) projects/graid/7/usr.sbin/sysinstall/ (props changed) projects/graid/7/usr.sbin/syslogd/ (props changed) projects/graid/7/usr.sbin/traceroute/ (props changed) projects/graid/7/usr.sbin/traceroute6/ (props changed) projects/graid/7/usr.sbin/tzsetup/ (props changed) projects/graid/7/usr.sbin/ugidfw/ (props changed) projects/graid/7/usr.sbin/wpa/wpa_supplicant/ (props changed) projects/graid/7/usr.sbin/ypserv/ (props changed) projects/graid/7/usr.sbin/zic/ (props changed) Modified: projects/graid/7/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/7/sbin/geom/class/raid/graid.8 Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sbin/geom/class/raid/graid.8 Mon Feb 14 14:26:14 2011 (r218680) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 10, 2011 +.Dd February 13, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -211,7 +211,8 @@ risk: RAID1 (3+ disks), RAID1E (3+ disks .Sh SUPPORTED RAID LEVELS The GEOM RAID class follows a modular design, allowing different RAID levels to be used. -Support for the following RAID levels is currently implemented: RAID0, RAID1. +Support for the following RAID levels is currently implemented: RAID0, RAID1, +RAID1E, RAID10. .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. .Sh SEE ALSO Modified: projects/graid/7/sys/conf/files ============================================================================== --- projects/graid/7/sys/conf/files Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sys/conf/files Mon Feb 14 14:26:14 2011 (r218680) @@ -1533,6 +1533,7 @@ geom/raid/g_raid_tr_if.m optional geom_r geom/raid/md_intel.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid +geom/raid/tr_raid1e.c optional geom_raid geom/raid3/g_raid3.c optional geom_raid3 geom/raid3/g_raid3_ctl.c optional geom_raid3 geom/shsec/g_shsec.c optional geom_shsec Modified: projects/graid/7/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid.c Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sys/geom/raid/g_raid.c Mon Feb 14 14:26:14 2011 (r218680) @@ -59,14 +59,20 @@ u_int g_raid_debug = 2; 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"); +int g_raid_read_err_thresh = 10; +TUNABLE_INT("kern.geom.raid.read_err_thresh", &g_raid_read_err_thresh); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, read_err_thresh, CTLFLAG_RW, + &g_raid_read_err_thresh, 0, + "Number of read errors equated to disk failure"); u_int g_raid_start_timeout = 15; TUNABLE_INT("kern.geom.raid.start_timeout", &g_raid_start_timeout); -SYSCTL_UINT(_kern_geom_raid, OID_AUTO, timeout, CTLFLAG_RW, &g_raid_start_timeout, - 0, "Time to wait for all array components"); -static u_int g_raid_cleantime = 5; -TUNABLE_INT("kern.geom.raid.cleantime", &g_raid_cleantime); -SYSCTL_UINT(_kern_geom_raid, OID_AUTO, cleantime, CTLFLAG_RW, - &g_raid_cleantime, 0, "Mark volume as clean when idling"); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, start_timeout, CTLFLAG_RW, + &g_raid_start_timeout, 0, + "Time to wait for all array components"); +static u_int g_raid_clean_time = 5; +TUNABLE_INT("kern.geom.raid.clean_time", &g_raid_clean_time); +SYSCTL_UINT(_kern_geom_raid, OID_AUTO, clean_time, CTLFLAG_RW, + &g_raid_clean_time, 0, "Mark volume as clean when idling"); static u_int g_raid_disconnect_on_failure = 1; TUNABLE_INT("kern.geom.raid.disconnect_on_failure", &g_raid_disconnect_on_failure); @@ -709,7 +715,7 @@ g_raid_clean(struct g_raid_volume *vol, return (0); if (acw > 0 || (acw == -1 && vol->v_provider != NULL && vol->v_provider->acw > 0)) { - timeout = g_raid_cleantime - (time_uptime - vol->v_last_write); + timeout = g_raid_clean_time - (time_uptime - vol->v_last_write); if (timeout > 0) return (timeout); } @@ -737,6 +743,54 @@ g_raid_dirty(struct g_raid_volume *vol) g_raid_write_metadata(sc, vol, NULL, NULL); } +void +g_raid_tr_flush_common(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + int i; + + vol = tr->tro_volume; + sc = vol->v_softc; + + /* + * Allocate all bios before sending any request, so we can return + * ENOMEM in nice and clean way. + */ + bioq_init(&queue); + for (i = 0; i < vol->v_disks_count; i++) { + sd = &vol->v_subdisks[i]; + if (sd->sd_state == G_RAID_SUBDISK_S_NONE || + sd->sd_state == G_RAID_SUBDISK_S_FAILED) + continue; + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); + } + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + static void g_raid_tr_kerneldump_common_done(struct bio *bp) { @@ -831,10 +885,8 @@ g_raid_start(struct bio *bp) case BIO_READ: case BIO_WRITE: case BIO_DELETE: - break; case BIO_FLUSH: - g_io_deliver(bp, EOPNOTSUPP); - return; + break; case BIO_GETATTR: if (!strcmp(bp->bio_attribute, "GEOM::kerneldump")) g_raid_kerneldump(sc, bp); @@ -994,6 +1046,7 @@ g_raid_iodone(struct bio *bp, int error) bioq_remove(&vol->v_inflight, bp); if (vol->v_pending_lock && g_raid_is_in_locked_range(vol, bp)) g_raid_finish_with_locked_ranges(vol, bp); + getmicrouptime(&vol->v_last_done); g_io_deliver(bp, error); } @@ -1220,6 +1273,7 @@ g_raid_worker(void *arg) struct g_raid_event *ep; struct g_raid_volume *vol; struct bio *bp; + struct timeval now, t; int timeout, rv; sc = arg; @@ -1243,38 +1297,59 @@ g_raid_worker(void *arg) else if ((bp = bioq_takefirst(&sc->sc_queue)) != NULL) ; else { - /* - * Two steps to avoid overflows at HZ=1000 - * and idle timeouts > 2.1s. Some rounding errors - * can occur, but they are < 1tick, which is deemed to - * be close enough for this purpose. - */ - int micpertic = 1000000 / hz; - timeout = g_raid_idle_threshold / micpertic; - sx_xunlock(&sc->sc_lock); - MSLEEP(rv, sc, &sc->sc_queue_mtx, PRIBIO | PDROP, "-", - timeout); - sx_xlock(&sc->sc_lock); - goto process; + getmicrouptime(&now); + t = now; + TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { + if (bioq_first(&vol->v_inflight) == NULL && + timevalcmp(&vol->v_last_done, &t, < )) + t = vol->v_last_done; + } + timevalsub(&t, &now); + timeout = g_raid_idle_threshold + + t.tv_sec * 1000000 + t.tv_usec; + if (timeout > 0) { + /* + * Two steps to avoid overflows at HZ=1000 + * and idle timeouts > 2.1s. Some rounding + * errors can occur, but they are < 1tick, + * which is deemed to be close enough for + * this purpose. + */ + int micpertic = 1000000 / hz; + timeout = (timeout + micpertic - 1) / micpertic; + sx_xunlock(&sc->sc_lock); + MSLEEP(rv, sc, &sc->sc_queue_mtx, + PRIBIO | PDROP, "-", timeout); + sx_xlock(&sc->sc_lock); + goto process; + } else + rv = EWOULDBLOCK; } mtx_unlock(&sc->sc_queue_mtx); process: - if (ep != NULL) + if (ep != NULL) { g_raid_handle_event(sc, ep); - if (bp != NULL) { + } else if (bp != NULL) { if (bp->bio_to != NULL && bp->bio_to->geom == sc->sc_geom) g_raid_start_request(bp); else g_raid_disk_done_request(bp); - } - if (rv == EWOULDBLOCK) { + } else if (rv == EWOULDBLOCK) { TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (vol->v_writes == 0 && vol->v_dirty) g_raid_clean(vol, -1); if (bioq_first(&vol->v_inflight) == NULL && - vol->v_tr) - G_RAID_TR_IDLE(vol->v_tr); + vol->v_tr) { + t.tv_sec = g_raid_idle_threshold / 1000000; + t.tv_usec = g_raid_idle_threshold % 1000000; + timevaladd(&t, &vol->v_last_done); + getmicrouptime(&now); + if (timevalcmp(&t, &now, <= )) { + G_RAID_TR_IDLE(vol->v_tr); + vol->v_last_done = now; + } + } } } if (sc->sc_stopping == G_RAID_DESTROY_HARD) Modified: projects/graid/7/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid.h Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sys/geom/raid/g_raid.h Mon Feb 14 14:26:14 2011 (r218680) @@ -32,6 +32,7 @@ #include #include #include +#include #define G_RAID_CLASS_NAME "RAID" @@ -50,6 +51,7 @@ struct g_raid_tr_object; #ifdef _KERNEL extern u_int g_raid_aggressive_spare; extern u_int g_raid_debug; +extern int g_raid_read_err_thresh; extern u_int g_raid_start_timeout; extern struct g_class g_raid_class; @@ -249,6 +251,7 @@ struct g_raid_volume { LIST_HEAD(, g_raid_lock) v_locks; /* List of locked regions. */ int v_pending_lock; /* writes to locked region */ int v_dirty; /* Volume is DIRTY. */ + struct timeval v_last_done; /* Time of the last I/O. */ time_t v_last_write; /* Time of the last write. */ u_int v_writes; /* Number of active writes. */ struct root_hold_token *v_rootmount; /* Root mount delay token. */ @@ -373,6 +376,7 @@ void g_raid_write_metadata(struct g_raid void g_raid_fail_disk(struct g_raid_softc *sc, struct g_raid_subdisk *sd, struct g_raid_disk *disk); +void g_raid_tr_flush_common(struct g_raid_tr_object *tr, struct bio *bp); int g_raid_tr_kerneldump_common(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t offset, size_t length); Modified: projects/graid/7/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/7/sys/geom/raid/md_intel.c Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sys/geom/raid/md_intel.c Mon Feb 14 14:26:14 2011 (r218680) @@ -586,7 +586,7 @@ g_raid_md_intel_supported(int level, int return (0); break; case G_RAID_VOLUME_RL_RAID1E: - if (disks < 3) + if (disks < 2) return (0); if (!force && (disks != 4)) return (0); @@ -776,15 +776,11 @@ nofit: } } else if (mvol->migr_type == INTEL_MT_INIT || mvol->migr_type == INTEL_MT_REBUILD) { - if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { - /* Up to date disk. */ - g_raid_change_subdisk_state(sd, - G_RAID_SUBDISK_S_ACTIVE); - } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Freshly inserted disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NEW); - } else { + } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Rebuilding disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_REBUILD); @@ -796,18 +792,22 @@ nofit: sd->sd_volume->v_strip_size * mmap0->total_domains; } - } - } else if (mvol->migr_type == INTEL_MT_VERIFY || - mvol->migr_type == INTEL_MT_REPAIR) { - if (!(mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD)) { + } else if (mvol->dirty) { + /* Dirty volume (unclean shutdown). */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { /* Up to date disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); - } else if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { + } + } else if (mvol->migr_type == INTEL_MT_VERIFY || + mvol->migr_type == INTEL_MT_REPAIR) { + if (mmap0->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Freshly inserted disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NEW); - } else { + } else if (mmap1->disk_idx[sd->sd_pos] & INTEL_DI_RBLD) { /* Resyncing disk. */ g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_RESYNC); @@ -819,6 +819,14 @@ nofit: sd->sd_volume->v_strip_size * mmap0->total_domains; } + } else if (mvol->dirty) { + /* Dirty volume (unclean shutdown). */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { + /* Up to date disk. */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_ACTIVE); } } g_raid_event_send(sd, G_RAID_SUBDISK_E_NEW, @@ -1539,6 +1547,9 @@ makedisk: /* Round size down to strip or sector. */ if (level == G_RAID_VOLUME_RL_RAID1) size -= (size % sectorsize); + else if (level == G_RAID_VOLUME_RL_RAID1E && + (numdisks & 1) != 0) + size -= (size % (2 * strip)); else size -= (size % strip); if (size <= 0) { Modified: projects/graid/7/sys/geom/raid/tr_raid0.c ============================================================================== --- projects/graid/7/sys/geom/raid/tr_raid0.c Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sys/geom/raid/tr_raid0.c Mon Feb 14 14:26:14 2011 (r218680) @@ -185,13 +185,12 @@ g_raid_tr_stop_raid0(struct g_raid_tr_ob static void g_raid_tr_iostart_raid0(struct g_raid_tr_object *tr, struct bio *bp) { - struct g_raid_softc *sc; struct g_raid_volume *vol; struct g_raid_subdisk *sd; struct bio_queue_head queue; struct bio *cbp; char *addr; - off_t offset, start, length, nstripe; + off_t offset, start, length, nstripe, remain; u_int no, strip_size; vol = tr->tro_volume; @@ -200,8 +199,10 @@ g_raid_tr_iostart_raid0(struct g_raid_tr g_raid_iodone(bp, EIO); return; } - sc = vol->v_softc; - + if (bp->bio_cmd == BIO_FLUSH) { + g_raid_tr_flush_common(tr, bp); + return; + } addr = bp->bio_data; strip_size = vol->v_strip_size; @@ -211,55 +212,30 @@ g_raid_tr_iostart_raid0(struct g_raid_tr start = bp->bio_offset % strip_size; /* Disk number. */ no = nstripe % vol->v_disks_count; - /* Start position in disk. */ - offset = (nstripe / vol->v_disks_count) * strip_size + start; + /* Stripe start position in disk. */ + offset = (nstripe / vol->v_disks_count) * strip_size; /* Length of data to operate. */ - length = MIN(bp->bio_length, strip_size - start); + remain = bp->bio_length; - /* - * Allocate all bios before sending any request, so we can - * return ENOMEM in nice and clean way. - */ bioq_init(&queue); - cbp = g_clone_bio(bp); - if (cbp == NULL) - goto failure; - /* - * Fill in the component buf structure. - */ - cbp->bio_offset = offset; - cbp->bio_data = addr; - cbp->bio_length = length; - cbp->bio_caller1 = &vol->v_subdisks[no]; - bioq_insert_tail(&queue, cbp); - - offset -= offset % strip_size; - addr += length; - length = bp->bio_length - length; - for (no++; length > 0; - no++, length -= strip_size, addr += strip_size) { - if (no > vol->v_disks_count - 1) { - no = 0; - offset += strip_size; - } + do { + length = MIN(strip_size - start, remain); cbp = g_clone_bio(bp); if (cbp == NULL) goto failure; - - /* - * Fill in the component buf structure. - */ - cbp->bio_offset = offset; + cbp->bio_offset = offset + start; cbp->bio_data = addr; - /* - * MIN() is in case when - * (bp->bio_length % sc->sc_stripesize) != 0. - */ - cbp->bio_length = MIN(strip_size, length); - + cbp->bio_length = length; cbp->bio_caller1 = &vol->v_subdisks[no]; bioq_insert_tail(&queue, cbp); - } + if (++no >= vol->v_disks_count) { + no = 0; + offset += strip_size; + } + remain -= length; + addr += length; + start = 0; + } while (remain > 0); for (cbp = bioq_first(&queue); cbp != NULL; cbp = bioq_first(&queue)) { bioq_remove(&queue, cbp); @@ -279,54 +255,47 @@ failure: g_raid_iodone(bp, bp->bio_error); } -int +static int g_raid_tr_kerneldump_raid0(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t boffset, size_t blength) { - struct g_raid_softc *sc; struct g_raid_volume *vol; char *addr; - off_t offset, start, length, nstripe; + off_t offset, start, length, nstripe, remain; u_int no, strip_size; int error; vol = tr->tro_volume; if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) return (ENXIO); - sc = vol->v_softc; - addr = virtual; strip_size = vol->v_strip_size; + /* Stripe number. */ nstripe = boffset / strip_size; /* Start position in stripe. */ start = boffset % strip_size; /* Disk number. */ no = nstripe % vol->v_disks_count; - /* Start position in disk. */ - offset = (nstripe / vol->v_disks_count) * strip_size + start; + /* Stripe tart position in disk. */ + offset = (nstripe / vol->v_disks_count) * strip_size; /* Length of data to operate. */ - length = MIN(blength, strip_size - start); + remain = blength; - error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], - addr, 0, offset, length); - if (error != 0) - return (error); - - offset -= offset % strip_size; - addr += length; - length = blength - length; - for (no++; length > 0; - no++, length -= strip_size, addr += strip_size) { - if (no > vol->v_disks_count - 1) { - no = 0; - offset += strip_size; - } + do { + length = MIN(strip_size - start, remain); error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], - addr, 0, offset, MIN(strip_size, length)); + addr, 0, offset + start, length); if (error != 0) return (error); - } + if (++no >= vol->v_disks_count) { + no = 0; + offset += strip_size; + } + remain -= length; + addr += length; + start = 0; + } while (remain > 0); return (0); } Modified: projects/graid/7/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/7/sys/geom/raid/tr_raid1.c Mon Feb 14 14:21:07 2011 (r218679) +++ projects/graid/7/sys/geom/raid/tr_raid1.c Mon Feb 14 14:26:14 2011 (r218680) @@ -46,19 +46,12 @@ SYSCTL_DECL(_kern_geom_raid); SYSCTL_NODE(_kern_geom_raid, OID_AUTO, raid1, CTLFLAG_RW, 0, "RAID1 parameters"); -#define RAID1_READ_ERR_THRESH 10 /* errors to cause a rebuild */ -static int g_raid1_read_err_thresh = RAID1_READ_ERR_THRESH; -TUNABLE_INT("kern.geom.raid.raid1.read_err_thresh", &g_raid1_read_err_thresh); -SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, read_err_thresh, CTLFLAG_RW, - &g_raid1_read_err_thresh, RAID1_READ_ERR_THRESH, - "Number of read errors on a subdisk that trigger a rebuild"); - #define RAID1_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */ static int g_raid1_rebuild_slab = RAID1_REBUILD_SLAB; TUNABLE_INT("kern.geom.raid.raid1.rebuild_slab_size", &g_raid1_rebuild_slab); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_slab_size, CTLFLAG_RW, - &g_raid1_rebuild_slab, RAID1_REBUILD_SLAB, + &g_raid1_rebuild_slab, 0, "Amount of the disk to rebuild each read/write cycle of the rebuild."); #define RAID1_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */ @@ -66,7 +59,7 @@ static int g_raid1_rebuild_fair_io = RAI TUNABLE_INT("kern.geom.raid.raid1.rebuild_fair_io", &g_raid1_rebuild_fair_io); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_fair_io, CTLFLAG_RW, - &g_raid1_rebuild_fair_io, RAID1_REBUILD_FAIR_IO, + &g_raid1_rebuild_fair_io, 0, "Fraction of the I/O bandwidth to use when disk busy for rebuild."); #define RAID1_REBUILD_CLUSTER_IDLE 100 @@ -74,7 +67,7 @@ static int g_raid1_rebuild_cluster_idle TUNABLE_INT("kern.geom.raid.raid1.rebuild_cluster_idle", &g_raid1_rebuild_cluster_idle); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_cluster_idle, CTLFLAG_RW, - &g_raid1_rebuild_cluster_idle, RAID1_REBUILD_CLUSTER_IDLE, + &g_raid1_rebuild_cluster_idle, 0, "Number of slabs to do each time we trigger a rebuild cycle"); #define RAID1_REBUILD_META_UPDATE 1024 /* update meta data every 1GB or so */ @@ -82,7 +75,7 @@ static int g_raid1_rebuild_meta_update = TUNABLE_INT("kern.geom.raid.raid1.rebuild_meta_update", &g_raid1_rebuild_meta_update); SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_meta_update, CTLFLAG_RW, - &g_raid1_rebuild_meta_update, RAID1_REBUILD_META_UPDATE, + &g_raid1_rebuild_meta_update, 0, "When to update the meta data."); static MALLOC_DEFINE(M_TR_RAID1, "tr_raid1_data", "GEOM_RAID RAID1 data"); @@ -250,16 +243,16 @@ g_raid_tr_raid1_fail_disk(struct g_raid_ } static void -g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr, - struct g_raid_subdisk *sd) +g_raid_tr_raid1_rebuild_some(struct g_raid_tr_object *tr) { struct g_raid_tr_raid1_object *trs; - struct g_raid_subdisk *good_sd; + struct g_raid_subdisk *sd, *good_sd; struct bio *bp; trs = (struct g_raid_tr_raid1_object *)tr; if (trs->trso_flags & TR_RAID1_F_DOING_SOME) return; + sd = trs->trso_failed_sd; good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); if (good_sd == NULL) { g_raid_tr_raid1_rebuild_abort(tr); @@ -269,13 +262,11 @@ g_raid_tr_raid1_rebuild_some(struct g_ra memset(bp, 0, sizeof(*bp)); bp->bio_offset = sd->sd_rebuild_pos; bp->bio_length = MIN(g_raid1_rebuild_slab, - sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); + sd->sd_size - sd->sd_rebuild_pos); bp->bio_data = trs->trso_buffer; bp->bio_cmd = BIO_READ; bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; bp->bio_caller1 = good_sd; - trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; - trs->trso_fair_io = g_raid1_rebuild_fair_io; trs->trso_flags |= TR_RAID1_F_DOING_SOME; trs->trso_flags |= TR_RAID1_F_LOCKED; g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ @@ -343,7 +334,7 @@ g_raid_tr_raid1_rebuild_abort(struct g_r if (trs->trso_flags & TR_RAID1_F_LOCKED) { trs->trso_flags &= ~TR_RAID1_F_LOCKED; len = MIN(g_raid1_rebuild_slab, - vol->v_mediasize - sd->sd_rebuild_pos); + sd->sd_size - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, sd->sd_rebuild_pos, len); } @@ -411,7 +402,7 @@ g_raid_tr_raid1_rebuild_start(struct g_r trs->trso_type = TR_RAID1_REBUILD; trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_RAID1, M_WAITOK); trs->trso_meta_update = g_raid1_rebuild_meta_update; - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); + g_raid_tr_raid1_rebuild_some(tr); } @@ -511,10 +502,9 @@ g_raid_tr_raid1_select_read_disk(struct for (i = 0; i < vol->v_disks_count; i++) { sd = &vol->v_subdisks[i]; if (sd->sd_state != G_RAID_SUBDISK_S_ACTIVE && - !((sd->sd_state == G_RAID_SUBDISK_S_REBUILD || - sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && - bp->bio_offset + bp->bio_length < - sd->sd_rebuild_pos)) + ((sd->sd_state != G_RAID_SUBDISK_S_REBUILD && + sd->sd_state != G_RAID_SUBDISK_S_RESYNC) || + bp->bio_offset + bp->bio_length > sd->sd_rebuild_pos)) continue; if ((mask & (1 << i)) != 0) continue; @@ -601,17 +591,8 @@ g_raid_tr_iostart_raid1_write(struct g_r continue; } cbp = g_clone_bio(bp); - if (cbp == NULL) { - for (cbp = bioq_first(&queue); cbp != NULL; - cbp = bioq_first(&queue)) { - bioq_remove(&queue, cbp); - g_destroy_bio(cbp); - } - if (bp->bio_error == 0) - bp->bio_error = ENOMEM; - g_raid_iodone(bp, bp->bio_error); - return; - } + if (cbp == NULL) + goto failure; cbp->bio_caller1 = sd; bioq_insert_tail(&queue, cbp); } @@ -622,7 +603,16 @@ g_raid_tr_iostart_raid1_write(struct g_r cbp->bio_caller1 = NULL; g_raid_subdisk_iostart(sd, cbp); } - + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); } static void @@ -647,10 +637,12 @@ g_raid_tr_iostart_raid1(struct g_raid_tr */ if (trs->trso_failed_sd != NULL && !(bp->bio_cflags & G_RAID_BIO_FLAG_SPECIAL)) { - if (--trs->trso_fair_io <= 0) - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); /* Make this new or running now round short. */ trs->trso_recover_slabs = 0; + if (--trs->trso_fair_io <= 0) { + trs->trso_fair_io = g_raid1_rebuild_fair_io; + g_raid_tr_raid1_rebuild_some(tr); + } } switch (bp->bio_cmd) { case BIO_READ: @@ -662,6 +654,9 @@ g_raid_tr_iostart_raid1(struct g_raid_tr case BIO_DELETE: g_raid_iodone(bp, EIO); break; + case BIO_FLUSH: + g_raid_tr_flush_common(tr, bp); + break; default: KASSERT(1 == 0, ("Invalid command here: %u (volume=%s)", bp->bio_cmd, vol->v_name)); @@ -674,7 +669,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ struct g_raid_subdisk *sd, struct bio *bp) { struct bio *cbp; - struct g_raid_subdisk *nsd, *good_sd; + struct g_raid_subdisk *nsd; struct g_raid_volume *vol; struct bio *pbp; struct g_raid_tr_raid1_object *trs; @@ -751,14 +746,13 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ g_raid_tr_raid1_rebuild_abort(tr); return; } -/* XXX A lot of the following is needed when we kick of the work -- refactor */ rebuild_round_done: nsd = trs->trso_failed_sd; trs->trso_flags &= ~TR_RAID1_F_LOCKED; g_raid_unlock_range(sd->sd_volume, bp->bio_offset, bp->bio_length); nsd->sd_rebuild_pos += bp->bio_length; - if (nsd->sd_rebuild_pos >= vol->v_mediasize) { + if (nsd->sd_rebuild_pos >= nsd->sd_size) { g_raid_tr_raid1_rebuild_finish(tr); return; } @@ -776,29 +770,10 @@ rebuild_round_done: trs->trso_meta_update = g_raid1_rebuild_meta_update; } - if (--trs->trso_recover_slabs <= 0) { - trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; + trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; + if (--trs->trso_recover_slabs <= 0) return; - } - good_sd = g_raid_get_subdisk(sd->sd_volume, - G_RAID_SUBDISK_S_ACTIVE); - if (good_sd == NULL) { - trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; - g_raid_tr_raid1_rebuild_abort(tr); - return; - } - bp->bio_cmd = BIO_READ; - bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_offset = nsd->sd_rebuild_pos; - bp->bio_length = MIN(g_raid1_rebuild_slab, - vol->v_mediasize - nsd->sd_rebuild_pos); - bp->bio_caller1 = good_sd; - G_RAID_LOGREQ(4, bp, - "Rebuild read at %jd.", bp->bio_offset); - /* Lock callback starts I/O */ - trs->trso_flags |= TR_RAID1_F_LOCKED; - g_raid_lock_range(sd->sd_volume, - bp->bio_offset, bp->bio_length, NULL, bp); + g_raid_tr_raid1_rebuild_some(tr); } } else if (trs->trso_type == TR_RAID1_RESYNC) { /* @@ -830,7 +805,7 @@ rebuild_round_done: * drive, which kicks off a resync? */ do_write = 1; - if (sd->sd_disk->d_read_errs > g_raid1_read_err_thresh) { + if (sd->sd_disk->d_read_errs > g_raid_read_err_thresh) { g_raid_tr_raid1_fail_disk(sd->sd_softc, sd, sd->sd_disk); if (pbp->bio_children == 1) do_write = 0; @@ -848,6 +823,7 @@ rebuild_round_done: *mask |= 1 << sd->sd_pos; nsd = g_raid_tr_raid1_select_read_disk(vol, pbp, *mask); if (nsd != NULL && (cbp = g_clone_bio(pbp)) != NULL) { + g_destroy_bio(bp); G_RAID_LOGREQ(2, cbp, "Retrying read from %d", nsd->sd_pos); if (pbp->bio_children == 2 && do_write) { @@ -888,6 +864,7 @@ rebuild_round_done: G_RAID_LOGREQ(3, bp, "Recovered data from other drive"); cbp = g_clone_bio(pbp); if (cbp != NULL) { + g_destroy_bio(bp); cbp->bio_cmd = BIO_WRITE; cbp->bio_cflags = G_RAID_BIO_FLAG_REMAP; G_RAID_LOGREQ(2, cbp, @@ -928,7 +905,7 @@ rebuild_round_done: } } -int +static int g_raid_tr_kerneldump_raid1(struct g_raid_tr_object *tr, void *virtual, vm_offset_t physical, off_t offset, size_t length) { @@ -992,8 +969,10 @@ g_raid_tr_idle_raid1(struct g_raid_tr_ob struct g_raid_tr_raid1_object *trs; trs = (struct g_raid_tr_raid1_object *)tr; + trs->trso_fair_io = g_raid1_rebuild_fair_io; + trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; if (trs->trso_type == TR_RAID1_REBUILD) - g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); + g_raid_tr_raid1_rebuild_some(tr); return (0); } Copied and modified: projects/graid/7/sys/geom/raid/tr_raid1e.c (from r218638, projects/graid/head/sys/geom/raid/tr_raid1e.c) ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1e.c Sun Feb 13 13:21:55 2011 (r218638, copy source) +++ projects/graid/7/sys/geom/raid/tr_raid1e.c Mon Feb 14 14:26:14 2011 (r218680) @@ -101,6 +101,8 @@ struct g_raid_tr_raid1e_object { int trso_flags; struct g_raid_subdisk *trso_failed_sd; /* like per volume */ void *trso_buffer; /* Buffer space */ + off_t trso_lock_pos; /* Locked range start. */ + off_t trso_lock_len; /* Locked range length. */ struct bio trso_bio; }; @@ -139,6 +141,8 @@ static struct g_raid_tr_class g_raid_tr_ static void g_raid_tr_raid1e_rebuild_abort(struct g_raid_tr_object *tr); static void g_raid_tr_raid1e_maybe_rebuild(struct g_raid_tr_object *tr, struct g_raid_subdisk *sd); +static int g_raid_tr_raid1e_select_read_disk(struct g_raid_volume *vol, + int no, off_t off, off_t len, u_int mask); static inline void V2P(struct g_raid_volume *vol, off_t virt, @@ -202,7 +206,6 @@ g_raid_tr_update_state_raid1e_even(struc state = G_RAID_VOLUME_S_OPTIMAL; for (i = 0; i < vol->v_disks_count / N; i++) { bestsd = &vol->v_subdisks[i * N]; - worstsd = &vol->v_subdisks[i * N]; for (j = 1; j < N; j++) { sd = &vol->v_subdisks[i * N + j]; if (sd->sd_state > bestsd->sd_state) @@ -212,8 +215,6 @@ g_raid_tr_update_state_raid1e_even(struc sd->sd_state == G_RAID_SUBDISK_S_RESYNC) && sd->sd_rebuild_pos > bestsd->sd_rebuild_pos) bestsd = sd; - if (sd->sd_state < worstsd->sd_state) - worstsd = sd; } if (bestsd->sd_state >= G_RAID_SUBDISK_S_UNINITIALIZED && bestsd->sd_state != G_RAID_SUBDISK_S_ACTIVE) { @@ -227,6 +228,12 @@ g_raid_tr_update_state_raid1e_even(struc g_raid_write_metadata(sc, vol, bestsd, bestsd->sd_disk); } + worstsd = &vol->v_subdisks[i * N]; + for (j = 1; j < N; j++) { + sd = &vol->v_subdisks[i * N + j]; + if (sd->sd_state < worstsd->sd_state) + worstsd = sd; + } if (worstsd->sd_state == G_RAID_SUBDISK_S_ACTIVE) sstate = G_RAID_VOLUME_S_OPTIMAL; else if (worstsd->sd_state >= G_RAID_SUBDISK_S_STALE) @@ -317,7 +324,6 @@ g_raid_tr_update_state_raid1e(struct g_r s = g_raid_tr_update_state_raid1e_even(vol); else s = g_raid_tr_update_state_raid1e_odd(vol); - g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); } if (s != vol->v_state) { g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? @@ -327,6 +333,8 @@ g_raid_tr_update_state_raid1e(struct g_r if (!trs->trso_starting && !trs->trso_stopping) g_raid_write_metadata(sc, vol, NULL, NULL); } + if (!trs->trso_starting && !trs->trso_stopping) + g_raid_tr_raid1e_maybe_rebuild(vol->v_tr, sd); return (0); } @@ -350,37 +358,6 @@ g_raid_tr_raid1e_fail_disk(struct g_raid } static void -g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) -{ - struct g_raid_tr_raid1e_object *trs; - struct g_raid_subdisk *sd, *good_sd; - struct bio *bp; - - trs = (struct g_raid_tr_raid1e_object *)tr; - if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) - return; - sd = trs->trso_failed_sd; - good_sd = g_raid_get_subdisk(sd->sd_volume, G_RAID_SUBDISK_S_ACTIVE); - if (good_sd == NULL) { - g_raid_tr_raid1e_rebuild_abort(tr); - return; - } - bp = &trs->trso_bio; - memset(bp, 0, sizeof(*bp)); - bp->bio_offset = sd->sd_rebuild_pos; - bp->bio_length = MIN(g_raid1e_rebuild_slab, - sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); - bp->bio_data = trs->trso_buffer; - bp->bio_cmd = BIO_READ; - bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_caller1 = good_sd; - trs->trso_flags |= TR_RAID1E_F_DOING_SOME; - trs->trso_flags |= TR_RAID1E_F_LOCKED; - g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ - bp->bio_offset, bp->bio_length, NULL, bp); -} - -static void g_raid_tr_raid1e_rebuild_done(struct g_raid_tr_raid1e_object *trs) { struct g_raid_volume *vol; @@ -421,7 +398,6 @@ g_raid_tr_raid1e_rebuild_abort(struct g_ struct g_raid_tr_raid1e_object *trs; struct g_raid_subdisk *sd; struct g_raid_volume *vol; - off_t len; vol = tr->tro_volume; trs = (struct g_raid_tr_raid1e_object *)tr; @@ -440,21 +416,94 @@ g_raid_tr_raid1e_rebuild_abort(struct g_ trs->trso_flags &= ~TR_RAID1E_F_ABORT; if (trs->trso_flags & TR_RAID1E_F_LOCKED) { trs->trso_flags &= ~TR_RAID1E_F_LOCKED; - len = MIN(g_raid1e_rebuild_slab, - vol->v_mediasize - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, - sd->sd_rebuild_pos, len); + trs->trso_lock_pos, trs->trso_lock_len); } g_raid_tr_raid1e_rebuild_done(trs); } } static void +g_raid_tr_raid1e_rebuild_some(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_raid1e_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio *bp; + off_t len, virtual, vend, offset, start; + int disk, copy, best; + + trs = (struct g_raid_tr_raid1e_object *)tr; + if (trs->trso_flags & TR_RAID1E_F_DOING_SOME) + return; + vol = tr->tro_volume; + sc = vol->v_softc; + sd = trs->trso_failed_sd; + + while (1) { + if (sd->sd_rebuild_pos >= sd->sd_size) { + g_raid_tr_raid1e_rebuild_finish(tr); + return; + } + /* Get virtual offset from physical rebuild position. */ + P2V(vol, sd->sd_pos, sd->sd_rebuild_pos, &virtual, ©); + /* Get physical offset back to get first stripe position. */ + V2P(vol, virtual, &disk, &offset, &start); + /* Calculate contignous data length. */ + len = MIN(g_raid1e_rebuild_slab, + sd->sd_size - sd->sd_rebuild_pos); + if ((vol->v_disks_count % N) != 0) + len = MIN(len, vol->v_strip_size - start); + /* Find disk with most accurate data. */ + best = g_raid_tr_raid1e_select_read_disk(vol, disk, + offset + start, len, 0); + if (best < 0) { + /* There is no any valid disk. */ + g_raid_tr_raid1e_rebuild_abort(tr); + return; + } else if (best != copy) { + /* Some other disk has better data. */ + break; + } + /* We have the most accurate data. Skip the range. */ + G_RAID_DEBUG1(3, sc, "Skipping rebuild for range %ju - %ju", + sd->sd_rebuild_pos, sd->sd_rebuild_pos + len); + sd->sd_rebuild_pos += len; + } + + bp = &trs->trso_bio; + memset(bp, 0, sizeof(*bp)); + bp->bio_offset = offset + start + + ((disk + best >= vol->v_disks_count) ? vol->v_strip_size : 0); + bp->bio_length = len; + bp->bio_data = trs->trso_buffer; + bp->bio_cmd = BIO_READ; + bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; + bp->bio_caller1 = &vol->v_subdisks[(disk + best) % vol->v_disks_count]; + G_RAID_LOGREQ(3, bp, "Queueing rebuild read"); + /* + * If we are crossing stripe boundary, correct affected virtual + * range we should lock. + */ + if (start + len > vol->v_strip_size) { + P2V(vol, sd->sd_pos, sd->sd_rebuild_pos + len, &vend, ©); + len = vend - virtual; + } + trs->trso_flags |= TR_RAID1E_F_DOING_SOME; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Feb 15 09:17: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 9B8781065672; Tue, 15 Feb 2011 09:17: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 8AFE78FC0C; Tue, 15 Feb 2011 09:17: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 p1F9HpmE024346; Tue, 15 Feb 2011 09:17:51 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1F9Hpjt024344; Tue, 15 Feb 2011 09:17:51 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102150917.p1F9Hpjt024344@svn.freebsd.org> From: Alexander Motin Date: Tue, 15 Feb 2011 09:17: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: r218702 - 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, 15 Feb 2011 09:17:51 -0000 Author: mav Date: Tue Feb 15 09:17:51 2011 New Revision: 218702 URL: http://svn.freebsd.org/changeset/base/218702 Log: Do not loop infinitely on volumes without transformation object. 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 Tue Feb 15 09:03:58 2011 (r218701) +++ projects/graid/head/sys/geom/raid/g_raid.c Tue Feb 15 09:17:51 2011 (r218702) @@ -1302,6 +1302,7 @@ g_raid_worker(void *arg) t = now; TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (bioq_first(&vol->v_inflight) == NULL && + vol->v_tr && timevalcmp(&vol->v_last_done, &t, < )) t = vol->v_last_done; } From owner-svn-src-projects@FreeBSD.ORG Tue Feb 15 09:48:23 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 A809E1065670; Tue, 15 Feb 2011 09:48:23 +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 97EB58FC14; Tue, 15 Feb 2011 09:48:23 +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 p1F9mN0S025121; Tue, 15 Feb 2011 09:48:23 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1F9mN37025119; Tue, 15 Feb 2011 09:48:23 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102150948.p1F9mN37025119@svn.freebsd.org> From: Alexander Motin Date: Tue, 15 Feb 2011 09:48: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: r218705 - 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, 15 Feb 2011 09:48:23 -0000 Author: mav Date: Tue Feb 15 09:48:23 2011 New Revision: 218705 URL: http://svn.freebsd.org/changeset/base/218705 Log: Fix modules registration order according to priorities. 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 Tue Feb 15 09:30:31 2011 (r218704) +++ projects/graid/head/sys/geom/raid/g_raid.c Tue Feb 15 09:48:23 2011 (r218705) @@ -2229,7 +2229,7 @@ g_raid_md_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_md_classes); - if (c == NULL || c->mdc_priority < class->mdc_priority) + if (c == NULL || c->mdc_priority > class->mdc_priority) LIST_INSERT_HEAD(&g_raid_md_classes, class, mdc_list); else { while ((nc = LIST_NEXT(c, mdc_list)) != NULL && @@ -2262,7 +2262,7 @@ g_raid_tr_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_tr_classes); - if (c == NULL || c->trc_priority < class->trc_priority) + if (c == NULL || c->trc_priority > class->trc_priority) LIST_INSERT_HEAD(&g_raid_tr_classes, class, trc_list); else { while ((nc = LIST_NEXT(c, trc_list)) != NULL && From owner-svn-src-projects@FreeBSD.ORG Tue Feb 15 11:22:48 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 6DA5B106566B; Tue, 15 Feb 2011 11:22:48 +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 5AF388FC16; Tue, 15 Feb 2011 11:22:48 +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 p1FBMmQF029369; Tue, 15 Feb 2011 11:22:48 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1FBMmhr029364; Tue, 15 Feb 2011 11:22:48 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102151122.p1FBMmhr029364@svn.freebsd.org> From: Alexander Motin Date: Tue, 15 Feb 2011 11:22:48 +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: r218706 - in projects/graid/head: sbin/geom/class/raid sys/conf sys/geom/raid sys/modules/geom/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, 15 Feb 2011 11:22:48 -0000 Author: mav Date: Tue Feb 15 11:22:47 2011 New Revision: 218706 URL: http://svn.freebsd.org/changeset/base/218706 Log: Add CONCAT transformation module. Added: projects/graid/head/sys/geom/raid/tr_concat.c (contents, props changed) Modified: projects/graid/head/sbin/geom/class/raid/graid.8 projects/graid/head/sys/conf/files projects/graid/head/sys/modules/geom/geom_raid/Makefile Modified: projects/graid/head/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/head/sbin/geom/class/raid/graid.8 Tue Feb 15 09:48:23 2011 (r218705) +++ projects/graid/head/sbin/geom/class/raid/graid.8 Tue Feb 15 11:22:47 2011 (r218706) @@ -212,7 +212,7 @@ risk: RAID1 (3+ disks), RAID1E (3+ disks The GEOM RAID class follows a modular design, allowing different RAID levels to be used. Support for the following RAID levels is currently implemented: RAID0, RAID1, -RAID1E, RAID10. +RAID1E, RAID10, SINGLE, CONCAT. .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. .Sh SEE ALSO Modified: projects/graid/head/sys/conf/files ============================================================================== --- projects/graid/head/sys/conf/files Tue Feb 15 09:48:23 2011 (r218705) +++ projects/graid/head/sys/conf/files Tue Feb 15 11:22:47 2011 (r218706) @@ -2090,6 +2090,7 @@ geom/raid/g_raid_ctl.c optional geom_ra geom/raid/g_raid_md_if.m optional geom_raid geom/raid/g_raid_tr_if.m optional geom_raid geom/raid/md_intel.c optional geom_raid +geom/raid/tr_concat.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid geom/raid/tr_raid1e.c optional geom_raid Added: projects/graid/head/sys/geom/raid/tr_concat.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/graid/head/sys/geom/raid/tr_concat.c Tue Feb 15 11:22:47 2011 (r218706) @@ -0,0 +1,341 @@ +/*- + * Copyright (c) 2010 Alexander Motin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS 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 AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "geom/raid/g_raid.h" +#include "g_raid_tr_if.h" + +static MALLOC_DEFINE(M_TR_CONCAT, "tr_concat_data", "GEOM_RAID CONCAT data"); + +struct g_raid_tr_concat_object { + struct g_raid_tr_object trso_base; + int trso_starting; + int trso_stopped; +}; + +static g_raid_tr_taste_t g_raid_tr_taste_concat; +static g_raid_tr_event_t g_raid_tr_event_concat; +static g_raid_tr_start_t g_raid_tr_start_concat; +static g_raid_tr_stop_t g_raid_tr_stop_concat; +static g_raid_tr_iostart_t g_raid_tr_iostart_concat; +static g_raid_tr_iodone_t g_raid_tr_iodone_concat; +static g_raid_tr_kerneldump_t g_raid_tr_kerneldump_concat; +static g_raid_tr_free_t g_raid_tr_free_concat; + +static kobj_method_t g_raid_tr_concat_methods[] = { + KOBJMETHOD(g_raid_tr_taste, g_raid_tr_taste_concat), + KOBJMETHOD(g_raid_tr_event, g_raid_tr_event_concat), + KOBJMETHOD(g_raid_tr_start, g_raid_tr_start_concat), + KOBJMETHOD(g_raid_tr_stop, g_raid_tr_stop_concat), + KOBJMETHOD(g_raid_tr_iostart, g_raid_tr_iostart_concat), + KOBJMETHOD(g_raid_tr_iodone, g_raid_tr_iodone_concat), + KOBJMETHOD(g_raid_tr_kerneldump, g_raid_tr_kerneldump_concat), + KOBJMETHOD(g_raid_tr_free, g_raid_tr_free_concat), + { 0, 0 } +}; + +static struct g_raid_tr_class g_raid_tr_concat_class = { + "CONCAT", + g_raid_tr_concat_methods, + sizeof(struct g_raid_tr_concat_object), + .trc_priority = 100 +}; + +static int +g_raid_tr_taste_concat(struct g_raid_tr_object *tr, struct g_raid_volume *volume) +{ + struct g_raid_tr_concat_object *trs; + + trs = (struct g_raid_tr_concat_object *)tr; + if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_SINGLE && + tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_CONCAT) + return (G_RAID_TR_TASTE_FAIL); + trs->trso_starting = 1; + return (G_RAID_TR_TASTE_SUCCEED); +} + +static int +g_raid_tr_update_state_concat(struct g_raid_volume *vol) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + off_t size; + u_int s; + int i, n, f; + + sc = vol->v_softc; + trs = (struct g_raid_tr_concat_object *)vol->v_tr; + if (trs->trso_stopped) + s = G_RAID_VOLUME_S_STOPPED; + else if (trs->trso_starting) + s = G_RAID_VOLUME_S_STARTING; + else { + n = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE); + f = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_FAILED); + if (n + f == vol->v_disks_count) { + if (f == 0) + s = G_RAID_VOLUME_S_OPTIMAL; + else + s = G_RAID_VOLUME_S_SUBOPTIMAL; + } else + s = G_RAID_VOLUME_S_BROKEN; + } + if (s != vol->v_state) { + + /* + * Some metadata modules may not know CONCAT volume + * mediasize until all disks connected. Recalculate. + */ + if (G_RAID_VOLUME_S_ALIVE(s) && + !G_RAID_VOLUME_S_ALIVE(vol->v_state)) { + size = 0; + for (i = 0; i < vol->v_disks_count; i++) { + if (vol->v_subdisks[i].sd_state != + G_RAID_SUBDISK_S_NONE) + size += vol->v_subdisks[i].sd_size; + } + vol->v_mediasize = size; + } + + g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? + 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); +} + +static int +g_raid_tr_event_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd, u_int event) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + int state; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + sc = vol->v_softc; + + state = sd->sd_state; + if (state != G_RAID_SUBDISK_S_NONE && + state != G_RAID_SUBDISK_S_FAILED && + state != G_RAID_SUBDISK_S_ACTIVE) { + G_RAID_DEBUG1(1, sc, + "Promote subdisk %s:%d from %s to ACTIVE.", + vol->v_name, sd->sd_pos, + g_raid_subdisk_state2str(sd->sd_state)); + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); + } + if (state != sd->sd_state && + !trs->trso_starting && !trs->trso_stopped) + g_raid_write_metadata(sc, vol, sd, NULL); + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_start_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_stop_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + trs->trso_stopped = 1; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static void +g_raid_tr_iostart_concat(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + char *addr; + off_t offset, length, remain; + u_int no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && + vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL) { + g_raid_iodone(bp, EIO); + return; + } + if (bp->bio_cmd == BIO_FLUSH) { + g_raid_tr_flush_common(tr, bp); + return; + } + + offset = bp->bio_offset; + remain = bp->bio_length; + addr = bp->bio_data; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", bp->bio_offset)); + bioq_init(&queue); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_offset = offset; + cbp->bio_data = addr; + cbp->bio_length = length; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + bp->bio_offset, bp->bio_length)); + } while (remain > 0); + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + +static int +g_raid_tr_kerneldump_concat(struct g_raid_tr_object *tr, + void *virtual, vm_offset_t physical, off_t boffset, size_t blength) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + char *addr; + off_t offset, length, remain; + int error, no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) + return (ENXIO); + + offset = boffset; + remain = blength; + addr = virtual; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", boffset)); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], + addr, 0, offset, length); + if (error != 0) + return (error); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + boffset, blength)); + } while (remain > 0); + return (0); +} + +static void +g_raid_tr_iodone_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd,struct bio *bp) +{ + struct bio *pbp; + + pbp = bp->bio_parent; + if (pbp->bio_error == 0) + pbp->bio_error = bp->bio_error; + g_destroy_bio(bp); + pbp->bio_inbed++; + if (pbp->bio_children == pbp->bio_inbed) { + pbp->bio_completed = pbp->bio_length; + g_raid_iodone(pbp, bp->bio_error); + } +} + +static int +g_raid_tr_free_concat(struct g_raid_tr_object *tr) +{ + + return (0); +} + +G_RAID_TR_DECLARE(g_raid_tr_concat); Modified: projects/graid/head/sys/modules/geom/geom_raid/Makefile ============================================================================== --- projects/graid/head/sys/modules/geom/geom_raid/Makefile Tue Feb 15 09:48:23 2011 (r218705) +++ projects/graid/head/sys/modules/geom/geom_raid/Makefile Tue Feb 15 11:22:47 2011 (r218706) @@ -11,7 +11,7 @@ SRCS+= g_raid_tr_if.h g_raid_tr_if.c SRCS+= md_intel.c -SRCS+= tr_raid0.c tr_raid1.c tr_raid1e.c +SRCS+= tr_concat.c tr_raid0.c tr_raid1.c tr_raid1e.c MFILES= kern/bus_if.m kern/device_if.m MFILES+= geom/raid/g_raid_md_if.m geom/raid/g_raid_tr_if.m From owner-svn-src-projects@FreeBSD.ORG Tue Feb 15 16:09:09 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 5F5CF10656C1; Tue, 15 Feb 2011 16:09:09 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 49C578FC26; Tue, 15 Feb 2011 16:09:09 +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 p1FG99HI036924; Tue, 15 Feb 2011 16:09:09 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1FG99ow036912; Tue, 15 Feb 2011 16:09:09 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201102151609.p1FG99ow036912@svn.freebsd.org> From: Attilio Rao Date: Tue, 15 Feb 2011 16:09:09 +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: r218709 - in projects/sv: . bin/ed bin/sh contrib/top crypto/openssl/ssl etc games/fortune/datfiles gnu/usr.bin/groff/tmac include lib/libc/gen lib/libc/include lib/libdevinfo lib/libth... 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, 15 Feb 2011 16:09:09 -0000 Author: attilio Date: Tue Feb 15 16:09:08 2011 New Revision: 218709 URL: http://svn.freebsd.org/changeset/base/218709 Log: MFC Added: projects/sv/bin/sh/arith_yacc.c - copied unchanged from r218708, head/bin/sh/arith_yacc.c projects/sv/bin/sh/arith_yacc.h - copied unchanged from r218708, head/bin/sh/arith_yacc.h projects/sv/bin/sh/arith_yylex.c - copied unchanged from r218708, head/bin/sh/arith_yylex.c projects/sv/lib/libthr/thread/thr_getthreadid_np.c - copied unchanged from r218708, head/lib/libthr/thread/thr_getthreadid_np.c projects/sv/share/examples/kld/khelp/ - copied from r218708, head/share/examples/kld/khelp/ projects/sv/share/man/man3/pthread_getthreadid_np.3 - copied unchanged from r218708, head/share/man/man3/pthread_getthreadid_np.3 projects/sv/sys/boot/pc98/pc98boot/ - copied from r218708, head/sys/boot/pc98/pc98boot/ projects/sv/sys/compat/linux/linux_fork.c - copied unchanged from r218708, head/sys/compat/linux/linux_fork.c projects/sv/sys/contrib/dev/acpica/compiler/aslbtypes.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/compiler/aslbtypes.c projects/sv/sys/contrib/dev/acpica/compiler/aslwalks.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/compiler/aslwalks.c projects/sv/sys/contrib/dev/acpica/compiler/dtexpress.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/compiler/dtexpress.c projects/sv/sys/contrib/dev/acpica/debugger/dbmethod.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/debugger/dbmethod.c projects/sv/sys/contrib/dev/acpica/debugger/dbnames.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/debugger/dbnames.c projects/sv/sys/contrib/dev/acpica/dispatcher/dsargs.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/dispatcher/dsargs.c projects/sv/sys/contrib/dev/acpica/dispatcher/dscontrol.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/dispatcher/dscontrol.c projects/sv/sys/contrib/dev/acpica/dispatcher/dswload2.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/dispatcher/dswload2.c projects/sv/sys/contrib/dev/acpica/utilities/utdecode.c - copied unchanged from r218708, head/sys/contrib/dev/acpica/utilities/utdecode.c projects/sv/tools/regression/bin/sh/expansion/arith10.0 - copied unchanged from r218708, head/tools/regression/bin/sh/expansion/arith10.0 projects/sv/tools/regression/bin/sh/expansion/arith11.0 - copied unchanged from r218708, head/tools/regression/bin/sh/expansion/arith11.0 projects/sv/tools/regression/bin/sh/expansion/arith9.0 - copied unchanged from r218708, head/tools/regression/bin/sh/expansion/arith9.0 Deleted: projects/sv/bin/sh/arith.y projects/sv/bin/sh/arith_lex.l Modified: projects/sv/Makefile projects/sv/Makefile.inc1 projects/sv/UPDATING projects/sv/bin/ed/ed.1 projects/sv/bin/sh/Makefile projects/sv/bin/sh/arith.h projects/sv/bin/sh/sh.1 projects/sv/bin/sh/shell.h projects/sv/crypto/openssl/ssl/t1_lib.c projects/sv/etc/termcap.small projects/sv/games/fortune/datfiles/fortunes projects/sv/games/fortune/datfiles/fortunes-o.real projects/sv/gnu/usr.bin/groff/tmac/mdoc.local projects/sv/include/pthread_np.h projects/sv/lib/libc/gen/sysconf.3 projects/sv/lib/libc/include/namespace.h projects/sv/lib/libc/include/un-namespace.h projects/sv/lib/libdevinfo/devinfo.h projects/sv/lib/libdevinfo/devinfo_var.h projects/sv/lib/libthr/pthread.map projects/sv/lib/libthr/thread/Makefile.inc projects/sv/lib/libufs/libufs.h projects/sv/lib/msun/src/e_asin.c projects/sv/lib/msun/src/e_expf.c projects/sv/lib/msun/src/s_atan.c projects/sv/lib/msun/src/s_cos.c projects/sv/lib/msun/src/s_nexttoward.c projects/sv/lib/msun/src/s_nexttowardf.c projects/sv/lib/msun/src/s_sin.c projects/sv/lib/msun/src/s_tan.c projects/sv/libexec/rtld-elf/rtld.c projects/sv/libexec/rtld-elf/rtld.h projects/sv/libexec/rtld-elf/rtld_lock.c projects/sv/release/doc/en_US.ISO8859-1/relnotes/article.sgml projects/sv/sbin/fsck_ffs/fsck.h projects/sv/sbin/fsck_ffs/setup.c projects/sv/sbin/fsck_ffs/suj.c projects/sv/sbin/hastd/proto_uds.c projects/sv/sbin/mdconfig/mdconfig.c projects/sv/sbin/mksnap_ffs/mksnap_ffs.8 projects/sv/sbin/tunefs/tunefs.c projects/sv/share/examples/kld/Makefile projects/sv/share/examples/pf/pf.conf projects/sv/share/man/man3/Makefile projects/sv/share/man/man3/pthread_self.3 projects/sv/share/man/man4/ath_hal.4 projects/sv/share/man/man4/bwn.4 projects/sv/share/man/man7/build.7 projects/sv/share/man/man7/ports.7 projects/sv/share/man/man9/rman.9 projects/sv/share/misc/committers-ports.dot projects/sv/share/mk/bsd.own.mk projects/sv/sys/amd64/linux32/linux.h projects/sv/sys/amd64/linux32/linux32_machdep.c projects/sv/sys/amd64/linux32/linux32_proto.h projects/sv/sys/amd64/linux32/linux32_syscall.h projects/sv/sys/amd64/linux32/linux32_sysent.c projects/sv/sys/amd64/linux32/linux32_sysvec.c projects/sv/sys/amd64/linux32/syscalls.master projects/sv/sys/arm/at91/at91_machdep.c projects/sv/sys/arm/econa/econa_machdep.c projects/sv/sys/arm/include/pmap.h projects/sv/sys/arm/mv/ic.c projects/sv/sys/arm/mv/timer.c projects/sv/sys/arm/sa11x0/assabet_machdep.c projects/sv/sys/arm/xscale/i80321/ep80219_machdep.c projects/sv/sys/arm/xscale/i80321/iq31244_machdep.c projects/sv/sys/arm/xscale/ixp425/avila_machdep.c projects/sv/sys/boot/pc98/Makefile projects/sv/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c projects/sv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/sv/sys/compat/linux/linux_emul.c projects/sv/sys/compat/linux/linux_emul.h projects/sv/sys/compat/linux/linux_futex.c projects/sv/sys/compat/linux/linux_stats.c projects/sv/sys/conf/NOTES projects/sv/sys/conf/files projects/sv/sys/conf/files.amd64 projects/sv/sys/conf/files.i386 projects/sv/sys/conf/files.pc98 projects/sv/sys/conf/kern.pre.mk projects/sv/sys/conf/options projects/sv/sys/contrib/dev/acpica/changes.txt projects/sv/sys/contrib/dev/acpica/common/dmtable.c projects/sv/sys/contrib/dev/acpica/common/dmtbdump.c projects/sv/sys/contrib/dev/acpica/common/dmtbinfo.c projects/sv/sys/contrib/dev/acpica/compiler/aslanalyze.c projects/sv/sys/contrib/dev/acpica/compiler/aslcompile.c projects/sv/sys/contrib/dev/acpica/compiler/aslcompiler.h projects/sv/sys/contrib/dev/acpica/compiler/aslcompiler.l projects/sv/sys/contrib/dev/acpica/compiler/aslcompiler.y projects/sv/sys/contrib/dev/acpica/compiler/aslmessages.h projects/sv/sys/contrib/dev/acpica/compiler/aslpredef.c projects/sv/sys/contrib/dev/acpica/compiler/asltree.c projects/sv/sys/contrib/dev/acpica/compiler/dtcompile.c projects/sv/sys/contrib/dev/acpica/compiler/dtcompiler.h projects/sv/sys/contrib/dev/acpica/compiler/dtfield.c projects/sv/sys/contrib/dev/acpica/compiler/dtio.c projects/sv/sys/contrib/dev/acpica/compiler/dttable.c projects/sv/sys/contrib/dev/acpica/compiler/dtutils.c projects/sv/sys/contrib/dev/acpica/debugger/dbcmds.c projects/sv/sys/contrib/dev/acpica/debugger/dbdisply.c projects/sv/sys/contrib/dev/acpica/debugger/dbinput.c projects/sv/sys/contrib/dev/acpica/dispatcher/dsopcode.c projects/sv/sys/contrib/dev/acpica/dispatcher/dswload.c projects/sv/sys/contrib/dev/acpica/events/evgpe.c projects/sv/sys/contrib/dev/acpica/events/evregion.c projects/sv/sys/contrib/dev/acpica/events/evxfregn.c projects/sv/sys/contrib/dev/acpica/executer/exfldio.c projects/sv/sys/contrib/dev/acpica/include/acdebug.h projects/sv/sys/contrib/dev/acpica/include/acdisasm.h projects/sv/sys/contrib/dev/acpica/include/acdispat.h projects/sv/sys/contrib/dev/acpica/include/acglobal.h projects/sv/sys/contrib/dev/acpica/include/aclocal.h projects/sv/sys/contrib/dev/acpica/include/acoutput.h projects/sv/sys/contrib/dev/acpica/include/acpixf.h projects/sv/sys/contrib/dev/acpica/include/actbl.h projects/sv/sys/contrib/dev/acpica/tables/tbfadt.c projects/sv/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h projects/sv/sys/contrib/dev/acpica/utilities/utglobal.c projects/sv/sys/dev/acpica/Osd/OsdTable.c projects/sv/sys/dev/acpica/acpi_resource.c projects/sv/sys/dev/ahci/ahci.c projects/sv/sys/dev/ath/ath_hal/ah.c projects/sv/sys/dev/ath/ath_hal/ah.h projects/sv/sys/dev/ath/ath_hal/ah_eeprom_v14.c projects/sv/sys/dev/ath/ath_hal/ah_eeprom_v14.h projects/sv/sys/dev/ath/ath_hal/ah_internal.h projects/sv/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c projects/sv/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c projects/sv/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c projects/sv/sys/dev/ath/ath_hal/ar5212/ar5212_keycache.c projects/sv/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416phy.h projects/sv/sys/dev/ath/ath_hal/ar5416/ar5416reg.h projects/sv/sys/dev/ath/ath_hal/ar9002/ar9280.c projects/sv/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c projects/sv/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c projects/sv/sys/dev/ath/ath_rate/sample/sample.h projects/sv/sys/dev/ath/if_ath.c projects/sv/sys/dev/ath/if_ath_tx.c projects/sv/sys/dev/ath/if_ath_tx_ht.c projects/sv/sys/dev/ath/if_ath_tx_ht.h projects/sv/sys/dev/ath/if_athioctl.h projects/sv/sys/dev/ath/if_athvar.h projects/sv/sys/dev/bce/if_bce.c projects/sv/sys/dev/bce/if_bcefw.h projects/sv/sys/dev/bce/if_bcereg.h projects/sv/sys/dev/e1000/e1000_80003es2lan.c projects/sv/sys/dev/e1000/e1000_80003es2lan.h projects/sv/sys/dev/e1000/e1000_82540.c projects/sv/sys/dev/e1000/e1000_82541.c projects/sv/sys/dev/e1000/e1000_82542.c projects/sv/sys/dev/e1000/e1000_82543.c projects/sv/sys/dev/e1000/e1000_82571.c projects/sv/sys/dev/e1000/e1000_82575.c projects/sv/sys/dev/e1000/e1000_82575.h projects/sv/sys/dev/e1000/e1000_api.c projects/sv/sys/dev/e1000/e1000_api.h projects/sv/sys/dev/e1000/e1000_defines.h projects/sv/sys/dev/e1000/e1000_hw.h projects/sv/sys/dev/e1000/e1000_ich8lan.c projects/sv/sys/dev/e1000/e1000_ich8lan.h projects/sv/sys/dev/e1000/e1000_mac.c projects/sv/sys/dev/e1000/e1000_mac.h projects/sv/sys/dev/e1000/e1000_manage.c projects/sv/sys/dev/e1000/e1000_manage.h projects/sv/sys/dev/e1000/e1000_mbx.c projects/sv/sys/dev/e1000/e1000_nvm.c projects/sv/sys/dev/e1000/e1000_nvm.h projects/sv/sys/dev/e1000/e1000_osdep.c projects/sv/sys/dev/e1000/e1000_phy.c projects/sv/sys/dev/e1000/e1000_phy.h projects/sv/sys/dev/e1000/e1000_regs.h projects/sv/sys/dev/e1000/e1000_vf.c projects/sv/sys/dev/e1000/e1000_vf.h projects/sv/sys/dev/e1000/if_igb.c projects/sv/sys/dev/e1000/if_igb.h projects/sv/sys/dev/fb/splash.c projects/sv/sys/dev/isp/isp.c projects/sv/sys/dev/isp/isp_freebsd.c projects/sv/sys/dev/isp/isp_freebsd.h projects/sv/sys/dev/isp/isp_library.c projects/sv/sys/dev/isp/isp_pci.c projects/sv/sys/dev/isp/isp_sbus.c projects/sv/sys/dev/isp/ispvar.h projects/sv/sys/dev/md/md.c projects/sv/sys/dev/pci/pci.c projects/sv/sys/dev/sio/sio.c projects/sv/sys/dev/sound/pci/emu10k1.c projects/sv/sys/dev/sound/pci/emu10kx.c projects/sv/sys/dev/usb/controller/ehci_mv.c projects/sv/sys/dev/usb/controller/usb_controller.c projects/sv/sys/dev/usb/quirk/usb_quirk.c projects/sv/sys/dev/usb/template/usb_template.c projects/sv/sys/dev/usb/usb_transfer.c projects/sv/sys/dev/usb/usbdevs projects/sv/sys/dev/usb/wlan/if_run.c projects/sv/sys/dev/usb/wlan/if_runreg.h projects/sv/sys/dev/usb/wlan/if_runvar.h projects/sv/sys/fs/ext2fs/ext2_alloc.c projects/sv/sys/fs/tmpfs/tmpfs.h projects/sv/sys/fs/tmpfs/tmpfs_subr.c projects/sv/sys/geom/eli/g_eli.c projects/sv/sys/geom/part/g_part_pc98.c projects/sv/sys/geom/sched/gs_rr.c projects/sv/sys/i386/linux/imgact_linux.c projects/sv/sys/i386/linux/linux.h projects/sv/sys/i386/linux/linux_machdep.c projects/sv/sys/i386/linux/linux_proto.h projects/sv/sys/i386/linux/linux_syscall.h projects/sv/sys/i386/linux/linux_sysent.c projects/sv/sys/i386/linux/linux_sysvec.c projects/sv/sys/i386/linux/syscalls.master projects/sv/sys/kern/kern_synch.c projects/sv/sys/kern/kern_sysctl.c projects/sv/sys/kern/subr_module.c projects/sv/sys/kern/subr_smp.c projects/sv/sys/kern/subr_trap.c projects/sv/sys/kern/subr_uio.c projects/sv/sys/kern/uipc_socket.c projects/sv/sys/kern/vfs_bio.c projects/sv/sys/kern/vfs_mount.c projects/sv/sys/kern/vfs_subr.c projects/sv/sys/kern/vfs_vnops.c projects/sv/sys/mips/cavium/octe/ethernet-common.c projects/sv/sys/mips/cavium/octeon_mp.c projects/sv/sys/mips/include/hwfunc.h projects/sv/sys/mips/mips/mp_machdep.c projects/sv/sys/mips/rmi/xlr_machdep.c projects/sv/sys/mips/sibyte/sb_scd.c projects/sv/sys/modules/acpi/acpi/Makefile projects/sv/sys/modules/linux/Makefile projects/sv/sys/net/if.c projects/sv/sys/net/netisr.c projects/sv/sys/net/rtsock.c projects/sv/sys/net/vnet.h projects/sv/sys/netinet/sctp_asconf.c projects/sv/sys/netinet/sctp_input.c projects/sv/sys/netinet/sctp_output.c projects/sv/sys/netinet/sctp_pcb.c projects/sv/sys/netinet/sctp_ss_functions.c projects/sv/sys/netinet/sctp_structs.h projects/sv/sys/netinet6/sctp6_usrreq.c projects/sv/sys/pc98/cbus/sio.c projects/sv/sys/sparc64/sparc64/machdep.c projects/sv/sys/sparc64/sparc64/pmap.c projects/sv/sys/sys/linker.h projects/sv/sys/sys/mutex.h projects/sv/sys/sys/param.h projects/sv/sys/sys/proc.h projects/sv/sys/sys/uio.h projects/sv/sys/ufs/ffs/ffs_snapshot.c projects/sv/sys/ufs/ffs/ffs_softdep.c projects/sv/sys/ufs/ffs/fs.h projects/sv/sys/ufs/ufs/ufs_acl.c projects/sv/sys/ufs/ufs/ufs_vnops.c projects/sv/sys/vm/vm_kern.c projects/sv/sys/vm/vm_meter.c projects/sv/sys/vm/vm_object.c projects/sv/sys/vm/vm_page.c projects/sv/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c projects/sv/tools/tools/nanobsd/FlashDevice.sub projects/sv/usr.bin/calendar/parsedata.c projects/sv/usr.bin/calendar/paskha.c projects/sv/usr.bin/gzip/zmore.1 projects/sv/usr.bin/rs/rs.c projects/sv/usr.bin/stat/stat.c projects/sv/usr.bin/truss/setup.c projects/sv/usr.sbin/acpi/acpidb/Makefile projects/sv/usr.sbin/acpi/iasl/Makefile projects/sv/usr.sbin/config/configvers.h projects/sv/usr.sbin/config/mkmakefile.c projects/sv/usr.sbin/diskinfo/diskinfo.c Directory Properties: projects/sv/ (props changed) projects/sv/cddl/contrib/opensolaris/ (props changed) projects/sv/contrib/bind9/ (props changed) projects/sv/contrib/binutils/ (props changed) projects/sv/contrib/bzip2/ (props changed) projects/sv/contrib/dialog/ (props changed) projects/sv/contrib/ee/ (props changed) projects/sv/contrib/expat/ (props changed) projects/sv/contrib/file/ (props changed) projects/sv/contrib/gdb/ (props changed) projects/sv/contrib/gdtoa/ (props changed) projects/sv/contrib/gnu-sort/ (props changed) projects/sv/contrib/groff/ (props changed) projects/sv/contrib/less/ (props changed) projects/sv/contrib/libpcap/ (props changed) projects/sv/contrib/llvm/ (props changed) projects/sv/contrib/llvm/tools/clang/ (props changed) projects/sv/contrib/ncurses/ (props changed) projects/sv/contrib/netcat/ (props changed) projects/sv/contrib/ntp/ (props changed) projects/sv/contrib/one-true-awk/ (props changed) projects/sv/contrib/openbsm/ (props changed) projects/sv/contrib/openpam/ (props changed) projects/sv/contrib/pf/ (props changed) projects/sv/contrib/sendmail/ (props changed) projects/sv/contrib/tcpdump/ (props changed) projects/sv/contrib/tcsh/ (props changed) projects/sv/contrib/top/ (props changed) projects/sv/contrib/top/install-sh (props changed) projects/sv/contrib/tzcode/stdtime/ (props changed) projects/sv/contrib/tzcode/zic/ (props changed) projects/sv/contrib/tzdata/ (props changed) projects/sv/contrib/wpa/ (props changed) projects/sv/contrib/xz/ (props changed) projects/sv/crypto/openssh/ (props changed) projects/sv/crypto/openssl/ (props changed) projects/sv/lib/libc/ (props changed) projects/sv/lib/libc/stdtime/ (props changed) projects/sv/lib/libutil/ (props changed) projects/sv/lib/libz/ (props changed) projects/sv/sbin/ (props changed) projects/sv/sbin/ipfw/ (props changed) projects/sv/share/mk/bsd.arch.inc.mk (props changed) projects/sv/share/zoneinfo/ (props changed) projects/sv/sys/ (props changed) projects/sv/sys/amd64/include/xen/ (props changed) projects/sv/sys/cddl/contrib/opensolaris/ (props changed) projects/sv/sys/contrib/dev/acpica/ (props changed) projects/sv/sys/contrib/octeon-sdk/ (props changed) projects/sv/sys/contrib/pf/ (props changed) projects/sv/sys/contrib/x86emu/ (props changed) projects/sv/usr.bin/calendar/ (props changed) projects/sv/usr.bin/csup/ (props changed) projects/sv/usr.bin/procstat/ (props changed) projects/sv/usr.sbin/zic/ (props changed) Modified: projects/sv/Makefile ============================================================================== --- projects/sv/Makefile Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/Makefile Tue Feb 15 16:09:08 2011 (r218709) @@ -30,6 +30,7 @@ # delete-old-libs - Delete obsolete libraries. # targets - Print a list of supported TARGET/TARGET_ARCH pairs # for world and kernel targets. +# toolchains - Build a toolchain for all world and kernel targets. # # 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 @@ -307,8 +308,10 @@ make: .PHONY ${MMAKE} install DESTDIR=${MAKEPATH} BINDIR= tinderbox: - @cd ${.CURDIR} && \ - DOING_TINDERBOX=YES ${MAKE} JFLAG=${JFLAG} universe + @cd ${.CURDIR} && ${MAKE} DOING_TINDERBOX=YES universe + +toolchains: + @cd ${.CURDIR} && ${MAKE} UNIVERSE_TARGET=toolchain universe # # universe @@ -328,6 +331,12 @@ TARGET_ARCHES_sun4v?= sparc64 TARGET_ARCHES_${target}?= ${target} .endfor +.if defined(UNIVERSE_TARGET) +MAKE_JUST_WORLDS= YES +.else +UNIVERSE_TARGET?= buildworld +.endif + targets: @echo "Supported TARGET/TARGET_ARCH pairs for world and kernel targets" .for target in ${TARGETS} @@ -361,16 +370,16 @@ universe_${target}_prologue: .for target_arch in ${TARGET_ARCHES_${target}} universe_${target}: universe_${target}_${target_arch} universe_${target}_${target_arch}: universe_${target}_prologue - @echo ">> ${target}.${target_arch} buildworld started on `LC_ALL=C date`" + @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} started on `LC_ALL=C date`" @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ - ${MAKE} ${JFLAG} buildworld \ + ${MAKE} ${JFLAG} ${UNIVERSE_TARGET} \ TARGET=${target} \ TARGET_ARCH=${target_arch} \ - > _.${target}.${target_arch}.buildworld 2>&1 || \ - (echo "${target}.${target_arch} world failed," \ - "check _.${target}.${target_arch}.buildworld for details" | \ + > _.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \ + (echo "${target}.${target_arch} ${UNIVERSE_TARGET} failed," \ + "check _.${target}.${target_arch}.${UNIVERSE_TARGET} for details" | \ ${MAKEFAIL})) - @echo ">> ${target}.${target_arch} buildworld completed on `LC_ALL=C date`" + @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} completed on `LC_ALL=C date`" .endfor .endif .if !defined(MAKE_JUST_WORLDS) Modified: projects/sv/Makefile.inc1 ============================================================================== --- projects/sv/Makefile.inc1 Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/Makefile.inc1 Tue Feb 15 16:09:08 2011 (r218709) @@ -28,6 +28,17 @@ # /usr/share/mk. These include: # obj depend all install clean cleandepend cleanobj +# You are supposed to define both of these when calling Makefile.inc1 +# directly. However, some old scripts don't. Cope for the moment, but +# issue a new warning for a transition period. +.if defined(TARGET) && !defined(TARGET_ARCH) +.warning "You must pass both TARGET and TARGET_ARCH to Makefile.inc1. Setting TARGET_ARCH=${TARGET}." +TARGET_ARCH=${TARGET} +.endif +.if !defined(TARGET) || !defined(TARGET_ARCH) +.error "Both TARGET and TARGET_ARCH must be defined." +.endif + .include .include @@ -1378,19 +1389,63 @@ check-old: check-old-files check-old-lib showconfig: @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort +.if !empty(KRNLOBJDIR) && !empty(KERNCONF) +DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/ + +.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE) +.if exists(${KERNCONFDIR}/${KERNCONF}) +FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \ + ${KERNCONFDIR}/${KERNCONF} +.endif +.endif + +.endif + +.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH}) +DTBOUTPUTPATH= ${.CURDIR} +.endif + +# +# Build 'standalone' Device Tree Blob +# +builddtb: + @if [ "${FDT_DTS_FILE}" = "" ]; then \ + echo "ERROR: FDT_DTS_FILE must be specified!"; \ + exit 1; \ + fi; \ + if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ]; then \ + echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \ + exist!"; \ + exit 1; \ + fi; \ + if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then \ + echo "WARNING: DTB will be placed in the current working \ + directory"; \ + fi + @PATH=${TMPPATH} \ + dtc -O dtb -o \ + ${DTBOUTPUTPATH}/`echo ${FDT_DTS_FILE} | cut -d. -f1`.dtb -b 0 \ + -p 1024 ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ############### .if defined(XDEV) && defined(XDEV_ARCH) +.if ${XDEV} == ${MACHINE} && ${XDEV_ARCH} == ${MACHINE_ARCH} +XDEV_CPUTYPE?=${CPUTYPE} +.else +XDEV_CPUTYPE?=${TARGET_CPUTYPE} +.endif + NOFUN=-DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE \ - -DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS + -DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS \ + TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} \ + CPUTYPE=${XDEV_CPUTYPE} -XDDIR=${XDEV}-freebsd +XDDIR=${XDEV_ARCH}-freebsd XDTP=/usr/${XDDIR} -CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \ - TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} +CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} CDENV= ${CDBENV} \ _SHLIBDIRPREFIX=${XDTP} \ TOOLS_PREFIX=${XDTP} @@ -1412,7 +1467,7 @@ xdev: xdev-build xdev-install xdev-build: _xb-build-tools _xb-cross-tools _xb-build-tools: - ${_+_}cd ${.CURDIR}; \ + ${_+_}@cd ${.CURDIR}; \ ${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools _xb-cross-tools: @@ -1466,41 +1521,3 @@ _xi-links: ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \ done .endif - -.if !empty(KRNLOBJDIR) && !empty(KERNCONF) -DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/ - -.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE) -.if exists(${KERNCONFDIR}/${KERNCONF}) -FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \ - ${KERNCONFDIR}/${KERNCONF} -.endif -.endif - -.endif - -.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH}) -DTBOUTPUTPATH= ${.CURDIR} -.endif - -# -# Build 'standalone' Device Tree Blob -# -builddtb: - @if [ "${FDT_DTS_FILE}" = "" ]; then \ - echo "ERROR: FDT_DTS_FILE must be specified!"; \ - exit 1; \ - fi; \ - if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ]; then \ - echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \ - exist!"; \ - exit 1; \ - fi; \ - if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then \ - echo "WARNING: DTB will be placed in the current working \ - directory"; \ - fi - @PATH=${TMPPATH} \ - dtc -O dtb -o \ - ${DTBOUTPUTPATH}/`echo ${FDT_DTS_FILE} | cut -d. -f1`.dtb -b 0 \ - -p 1024 ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} Modified: projects/sv/UPDATING ============================================================================== --- projects/sv/UPDATING Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/UPDATING Tue Feb 15 16:09:08 2011 (r218709) @@ -22,6 +22,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110207: + Remove the uio_yield prototype and symbol. This function has + been misnamed since it was introduced and should not be + globally exposed with this name. The equivalent functionality + is now available using kern_yield(curthread->td_user_pri). + The function remains undocumented. + 20110112: A SYSCTL_[ADD_]UQUAD was added for unsigned uint64_t pointers, symmetric with the existing SYSCTL_[ADD_]QUAD. Type checking Modified: projects/sv/bin/ed/ed.1 ============================================================================== --- projects/sv/bin/ed/ed.1 Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/bin/ed/ed.1 Tue Feb 15 16:09:08 2011 (r218709) @@ -231,7 +231,7 @@ The current line (address) in the buffer The last line in the buffer. .It n The -.Em n Ns th, +.Em n Ns th line in the buffer where .Em n @@ -649,7 +649,7 @@ The mark is not cleared until the line i deleted or otherwise modified. .It (.,.)l Print the addressed lines unambiguously. -If a single line fills for than one screen (as might be the case +If a single line fills more than one screen (as might be the case when viewing a binary file, for instance), a .Dq Li --More-- prompt is printed on the last line. Modified: projects/sv/bin/sh/Makefile ============================================================================== --- projects/sv/bin/sh/Makefile Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/bin/sh/Makefile Tue Feb 15 16:09:08 2011 (r218709) @@ -3,22 +3,22 @@ PROG= sh INSTALLFLAGS= -S -SHSRCS= alias.c arith.y arith_lex.l cd.c echo.c error.c eval.c exec.c expand.c \ +SHSRCS= alias.c arith_yacc.c arith_yylex.c cd.c echo.c error.c eval.c \ + exec.c expand.c \ histedit.c input.c jobs.c kill.c mail.c main.c memalloc.c miscbltin.c \ mystring.c options.c output.c parser.c printf.c redir.c show.c \ test.c trap.c var.c GENSRCS= builtins.c init.c nodes.c syntax.c GENHDRS= builtins.h nodes.h syntax.h token.h -SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS} y.tab.h +SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS} # MLINKS for Shell built in commands for which there are no userland # utilities of the same name are handled with the associated manpage, # builtin.1 in share/man/man1/. -DPADD= ${LIBL} ${LIBEDIT} ${LIBTERMCAP} -LDADD= -ll -ledit -ltermcap +DPADD= ${LIBEDIT} ${LIBTERMCAP} +LDADD= -ledit -ltermcap -LFLAGS= -8 # 8-bit lex scanner for arithmetic CFLAGS+=-DSHELL -I. -I${.CURDIR} # for debug: # DEBUG_FLAGS+= -g -DDEBUG=2 -fno-inline Modified: projects/sv/bin/sh/arith.h ============================================================================== --- projects/sv/bin/sh/arith.h Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/bin/sh/arith.h Tue Feb 15 16:09:08 2011 (r218709) @@ -34,8 +34,6 @@ #define DIGITS(var) (3 + (2 + CHAR_BIT * sizeof((var))) / 3) -extern const char *arith_buf, *arith_startbuf; - arith_t arith(const char *); void arith_lex_reset(void); int expcmd(int, char **); Copied: projects/sv/bin/sh/arith_yacc.c (from r218708, head/bin/sh/arith_yacc.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/sv/bin/sh/arith_yacc.c Tue Feb 15 16:09:08 2011 (r218709, copy of r218708, head/bin/sh/arith_yacc.c) @@ -0,0 +1,378 @@ +/*- + * Copyright (c) 1993 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 2007 + * Herbert Xu . All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Kenneth Almquist. + * + * 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. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include "arith.h" +#include "arith_yacc.h" +#include "expand.h" +#include "shell.h" +#include "error.h" +#include "memalloc.h" +#include "output.h" +#include "options.h" +#include "var.h" + +#if ARITH_BOR + 11 != ARITH_BORASS || ARITH_ASS + 11 != ARITH_EQ +#error Arithmetic tokens are out of order. +#endif + +static const char *arith_startbuf; + +const char *arith_buf; +union yystype yylval; + +static int last_token; + +#define ARITH_PRECEDENCE(op, prec) [op - ARITH_BINOP_MIN] = prec + +static const char prec[ARITH_BINOP_MAX - ARITH_BINOP_MIN] = { + ARITH_PRECEDENCE(ARITH_MUL, 0), + ARITH_PRECEDENCE(ARITH_DIV, 0), + ARITH_PRECEDENCE(ARITH_REM, 0), + ARITH_PRECEDENCE(ARITH_ADD, 1), + ARITH_PRECEDENCE(ARITH_SUB, 1), + ARITH_PRECEDENCE(ARITH_LSHIFT, 2), + ARITH_PRECEDENCE(ARITH_RSHIFT, 2), + ARITH_PRECEDENCE(ARITH_LT, 3), + ARITH_PRECEDENCE(ARITH_LE, 3), + ARITH_PRECEDENCE(ARITH_GT, 3), + ARITH_PRECEDENCE(ARITH_GE, 3), + ARITH_PRECEDENCE(ARITH_EQ, 4), + ARITH_PRECEDENCE(ARITH_NE, 4), + ARITH_PRECEDENCE(ARITH_BAND, 5), + ARITH_PRECEDENCE(ARITH_BXOR, 6), + ARITH_PRECEDENCE(ARITH_BOR, 7), +}; + +#define ARITH_MAX_PREC 8 + +static __dead2 void yyerror(const char *s) +{ + error("arithmetic expression: %s: \"%s\"", s, arith_startbuf); + /* NOTREACHED */ +} + +static arith_t arith_lookupvarint(char *varname) +{ + const char *str; + char *p; + arith_t result; + + str = lookupvar(varname); + if (str == NULL || *str == '\0') + str = "0"; + errno = 0; + result = strtoarith_t(str, &p, 0); + if (errno != 0 || *p != '\0') + yyerror("variable conversion error"); + return result; +} + +static inline int arith_prec(int op) +{ + return prec[op - ARITH_BINOP_MIN]; +} + +static inline int higher_prec(int op1, int op2) +{ + return arith_prec(op1) < arith_prec(op2); +} + +static arith_t do_binop(int op, arith_t a, arith_t b) +{ + + switch (op) { + default: + case ARITH_REM: + case ARITH_DIV: + if (!b) + yyerror("division by zero"); + if (a == ARITH_MIN && b == -1) + yyerror("divide error"); + return op == ARITH_REM ? a % b : a / b; + case ARITH_MUL: + return a * b; + case ARITH_ADD: + return a + b; + case ARITH_SUB: + return a - b; + case ARITH_LSHIFT: + return a << b; + case ARITH_RSHIFT: + return a >> b; + case ARITH_LT: + return a < b; + case ARITH_LE: + return a <= b; + case ARITH_GT: + return a > b; + case ARITH_GE: + return a >= b; + case ARITH_EQ: + return a == b; + case ARITH_NE: + return a != b; + case ARITH_BAND: + return a & b; + case ARITH_BXOR: + return a ^ b; + case ARITH_BOR: + return a | b; + } +} + +static arith_t assignment(int var, int noeval); + +static arith_t primary(int token, union yystype *val, int op, int noeval) +{ + arith_t result; + +again: + switch (token) { + case ARITH_LPAREN: + result = assignment(op, noeval); + if (last_token != ARITH_RPAREN) + yyerror("expecting ')'"); + last_token = yylex(); + return result; + case ARITH_NUM: + last_token = op; + return val->val; + case ARITH_VAR: + last_token = op; + return noeval ? val->val : arith_lookupvarint(val->name); + case ARITH_ADD: + token = op; + *val = yylval; + op = yylex(); + goto again; + case ARITH_SUB: + *val = yylval; + return -primary(op, val, yylex(), noeval); + case ARITH_NOT: + *val = yylval; + return !primary(op, val, yylex(), noeval); + case ARITH_BNOT: + *val = yylval; + return ~primary(op, val, yylex(), noeval); + default: + yyerror("expecting primary"); + } +} + +static arith_t binop2(arith_t a, int op, int prec, int noeval) +{ + for (;;) { + union yystype val; + arith_t b; + int op2; + int token; + + token = yylex(); + val = yylval; + + b = primary(token, &val, yylex(), noeval); + + op2 = last_token; + if (op2 >= ARITH_BINOP_MIN && op2 < ARITH_BINOP_MAX && + higher_prec(op2, op)) { + b = binop2(b, op2, arith_prec(op), noeval); + op2 = last_token; + } + + a = noeval ? b : do_binop(op, a, b); + + if (op2 < ARITH_BINOP_MIN || op2 >= ARITH_BINOP_MAX || + arith_prec(op2) >= prec) + return a; + + op = op2; + } +} + +static arith_t binop(int token, union yystype *val, int op, int noeval) +{ + arith_t a = primary(token, val, op, noeval); + + op = last_token; + if (op < ARITH_BINOP_MIN || op >= ARITH_BINOP_MAX) + return a; + + return binop2(a, op, ARITH_MAX_PREC, noeval); +} + +static arith_t and(int token, union yystype *val, int op, int noeval) +{ + arith_t a = binop(token, val, op, noeval); + arith_t b; + + op = last_token; + if (op != ARITH_AND) + return a; + + token = yylex(); + *val = yylval; + + b = and(token, val, yylex(), noeval | !a); + + return a && b; +} + +static arith_t or(int token, union yystype *val, int op, int noeval) +{ + arith_t a = and(token, val, op, noeval); + arith_t b; + + op = last_token; + if (op != ARITH_OR) + return a; + + token = yylex(); + *val = yylval; + + b = or(token, val, yylex(), noeval | !!a); + + return a || b; +} + +static arith_t cond(int token, union yystype *val, int op, int noeval) +{ + arith_t a = or(token, val, op, noeval); + arith_t b; + arith_t c; + + if (last_token != ARITH_QMARK) + return a; + + b = assignment(yylex(), noeval | !a); + + if (last_token != ARITH_COLON) + yyerror("expecting ':'"); + + token = yylex(); + *val = yylval; + + c = cond(token, val, yylex(), noeval | !!a); + + return a ? b : c; +} + +static arith_t assignment(int var, int noeval) +{ + union yystype val = yylval; + int op = yylex(); + arith_t result; + char sresult[DIGITS(result) + 1]; + + if (var != ARITH_VAR) + return cond(var, &val, op, noeval); + + if (op != ARITH_ASS && (op < ARITH_ASS_MIN || op >= ARITH_ASS_MAX)) + return cond(var, &val, op, noeval); + + result = assignment(yylex(), noeval); + if (noeval) + return result; + + if (op != ARITH_ASS) + result = do_binop(op - 11, arith_lookupvarint(val.name), result); + snprintf(sresult, sizeof(sresult), ARITH_FORMAT_STR, result); + setvar(val.name, sresult, 0); + return result; +} + +arith_t arith(const char *s) +{ + struct stackmark smark; + arith_t result; + + setstackmark(&smark); + + arith_buf = arith_startbuf = s; + + result = assignment(yylex(), 0); + + if (last_token) + yyerror("expecting EOF"); + + popstackmark(&smark); + + return result; +} + +/* + * The exp(1) builtin. + */ +int +expcmd(int argc, char **argv) +{ + const char *p; + char *concat; + char **ap; + arith_t i; + + if (argc > 1) { + p = argv[1]; + if (argc > 2) { + /* + * Concatenate arguments. + */ + STARTSTACKSTR(concat); + ap = argv + 2; + for (;;) { + while (*p) + STPUTC(*p++, concat); + if ((p = *ap++) == NULL) + break; + STPUTC(' ', concat); + } + STPUTC('\0', concat); + p = grabstackstr(concat); + } + } else + p = ""; + + i = arith(p); + + out1fmt(ARITH_FORMAT_STR "\n", i); + return !i; +} + Copied: projects/sv/bin/sh/arith_yacc.h (from r218708, head/bin/sh/arith_yacc.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/sv/bin/sh/arith_yacc.h Tue Feb 15 16:09:08 2011 (r218709, copy of r218708, head/bin/sh/arith_yacc.h) @@ -0,0 +1,91 @@ +/*- + * Copyright (c) 1993 + * The Regents of the University of California. All rights reserved. + * Copyright (c) 2007 + * Herbert Xu . All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Kenneth Almquist. + * + * 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. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#define ARITH_ASS 1 + +#define ARITH_OR 2 +#define ARITH_AND 3 +#define ARITH_BAD 4 +#define ARITH_NUM 5 +#define ARITH_VAR 6 +#define ARITH_NOT 7 + +#define ARITH_BINOP_MIN 8 +#define ARITH_LE 8 +#define ARITH_GE 9 +#define ARITH_LT 10 +#define ARITH_GT 11 +#define ARITH_EQ 12 +#define ARITH_REM 13 +#define ARITH_BAND 14 +#define ARITH_LSHIFT 15 +#define ARITH_RSHIFT 16 +#define ARITH_MUL 17 +#define ARITH_ADD 18 +#define ARITH_BOR 19 +#define ARITH_SUB 20 +#define ARITH_BXOR 21 +#define ARITH_DIV 22 +#define ARITH_NE 23 +#define ARITH_BINOP_MAX 24 + +#define ARITH_ASS_MIN 24 +#define ARITH_REMASS 24 +#define ARITH_BANDASS 25 +#define ARITH_LSHIFTASS 26 +#define ARITH_RSHIFTASS 27 +#define ARITH_MULASS 28 +#define ARITH_ADDASS 29 +#define ARITH_BORASS 30 +#define ARITH_SUBASS 31 +#define ARITH_BXORASS 32 +#define ARITH_DIVASS 33 +#define ARITH_ASS_MAX 34 + +#define ARITH_LPAREN 34 +#define ARITH_RPAREN 35 +#define ARITH_BNOT 36 +#define ARITH_QMARK 37 +#define ARITH_COLON 38 + +union yystype { + arith_t val; + char *name; +}; + +extern union yystype yylval; + +int yylex(void); Copied: projects/sv/bin/sh/arith_yylex.c (from r218708, head/bin/sh/arith_yylex.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/sv/bin/sh/arith_yylex.c Tue Feb 15 16:09:08 2011 (r218709, copy of r218708, head/bin/sh/arith_yylex.c) @@ -0,0 +1,244 @@ +/*- + * Copyright (c) 2002 + * Herbert Xu. + * Copyright (c) 1993 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Kenneth Almquist. + * + * 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. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include "shell.h" +#include "arith_yacc.h" +#include "expand.h" +#include "error.h" +#include "memalloc.h" +#include "parser.h" +#include "syntax.h" + +#if ARITH_BOR + 11 != ARITH_BORASS || ARITH_ASS + 11 != ARITH_EQ +#error Arithmetic tokens are out of order. +#endif + +extern const char *arith_buf; + +int +yylex() +{ + int value; + const char *buf = arith_buf; + const char *p; + + for (;;) { + value = *buf; + switch (value) { + case ' ': + case '\t': + case '\n': + buf++; + continue; + default: + return ARITH_BAD; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + yylval.val = strtoarith_t(buf, (char **)&arith_buf, 0); + return ARITH_NUM; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + p = buf; + while (buf++, is_in_name(*buf)) + ; + yylval.name = stalloc(buf - p + 1); + memcpy(yylval.name, p, buf - p); + yylval.name[buf - p] = '\0'; + value = ARITH_VAR; + goto out; + case '=': + value += ARITH_ASS - '='; +checkeq: + buf++; +checkeqcur: + if (*buf != '=') + goto out; + value += 11; + break; + case '>': + switch (*++buf) { + case '=': + value += ARITH_GE - '>'; + break; + case '>': + value += ARITH_RSHIFT - '>'; + goto checkeq; + default: + value += ARITH_GT - '>'; + goto out; + } + break; + case '<': + switch (*++buf) { + case '=': + value += ARITH_LE - '<'; + break; + case '<': + value += ARITH_LSHIFT - '<'; + goto checkeq; + default: + value += ARITH_LT - '<'; + goto out; + } + break; + case '|': + if (*++buf != '|') { + value += ARITH_BOR - '|'; + goto checkeqcur; + } + value += ARITH_OR - '|'; + break; + case '&': + if (*++buf != '&') { + value += ARITH_BAND - '&'; + goto checkeqcur; + } + value += ARITH_AND - '&'; + break; + case '!': + if (*++buf != '=') { + value += ARITH_NOT - '!'; + goto out; + } + value += ARITH_NE - '!'; + break; + case 0: + goto out; + case '(': + value += ARITH_LPAREN - '('; + break; + case ')': + value += ARITH_RPAREN - ')'; + break; + case '*': + value += ARITH_MUL - '*'; + goto checkeq; + case '/': + value += ARITH_DIV - '/'; + goto checkeq; + case '%': + value += ARITH_REM - '%'; + goto checkeq; + case '+': + value += ARITH_ADD - '+'; + goto checkeq; + case '-': + value += ARITH_SUB - '-'; + goto checkeq; + case '~': + value += ARITH_BNOT - '~'; + break; + case '^': + value += ARITH_BXOR - '^'; + goto checkeq; + case '?': + value += ARITH_QMARK - '?'; + break; + case ':': + value += ARITH_COLON - ':'; + break; + } + break; + } + + buf++; +out: + arith_buf = buf; + return value; +} Modified: projects/sv/bin/sh/sh.1 ============================================================================== --- projects/sv/bin/sh/sh.1 Tue Feb 15 13:29:52 2011 (r218708) +++ projects/sv/bin/sh/sh.1 Tue Feb 15 16:09:08 2011 (r218709) @@ -32,7 +32,7 @@ *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Feb 15 22:00:00 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 9ABA0106564A; Tue, 15 Feb 2011 22:00:00 +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 851A68FC08; Tue, 15 Feb 2011 22:00:00 +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 p1FM00tu046660; Tue, 15 Feb 2011 22:00:00 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1FM00Rq046658; Tue, 15 Feb 2011 22:00:00 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102152200.p1FM00Rq046658@svn.freebsd.org> From: Alexander Motin Date: Tue, 15 Feb 2011 22:00:00 +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: r218721 - 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, 15 Feb 2011 22:00:00 -0000 Author: mav Date: Tue Feb 15 22:00:00 2011 New Revision: 218721 URL: http://svn.freebsd.org/changeset/base/218721 Log: Move invariant assignments out of the loop. 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 Feb 15 21:46:36 2011 (r218720) +++ projects/graid/head/sys/geom/raid/md_intel.c Tue Feb 15 22:00:00 2011 (r218721) @@ -715,9 +715,9 @@ nofit: TAILQ_REMOVE(&olddisk->d_subdisks, sd, sd_next); TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); sd->sd_disk = disk; - oldpd->pd_disk_pos = -2; - pd->pd_disk_pos = disk_pos; } + oldpd->pd_disk_pos = -2; + pd->pd_disk_pos = disk_pos; /* If it was placeholder -- destroy it. */ if (olddisk->d_state == G_RAID_DISK_S_OFFLINE) { From owner-svn-src-projects@FreeBSD.ORG Tue Feb 15 22:01: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 EE670106564A; Tue, 15 Feb 2011 22:01: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 DAD508FC19; Tue, 15 Feb 2011 22:01: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 p1FM1d1s046762; Tue, 15 Feb 2011 22:01:39 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1FM1der046757; Tue, 15 Feb 2011 22:01:39 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102152201.p1FM1der046757@svn.freebsd.org> From: Alexander Motin Date: Tue, 15 Feb 2011 22:01: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: r218722 - in projects/graid/head: sbin/geom/class/raid sys/conf sys/geom/raid sys/modules/geom/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, 15 Feb 2011 22:01:40 -0000 Author: mav Date: Tue Feb 15 22:01:39 2011 New Revision: 218722 URL: http://svn.freebsd.org/changeset/base/218722 Log: Add JMicron RAID BIOS metadata format module. Added: projects/graid/head/sys/geom/raid/md_jmicron.c (contents, props changed) Modified: projects/graid/head/sbin/geom/class/raid/graid.8 projects/graid/head/sys/conf/files projects/graid/head/sys/modules/geom/geom_raid/Makefile Modified: projects/graid/head/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/head/sbin/geom/class/raid/graid.8 Tue Feb 15 22:00:00 2011 (r218721) +++ projects/graid/head/sbin/geom/class/raid/graid.8 Tue Feb 15 22:01:39 2011 (r218722) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 13, 2011 +.Dd February 15, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -207,6 +207,13 @@ Supports configurations: RAID0 (2+ disks RAID5 (3+ disks), RAID10 (4 disks). Configurations not supported by Intel RAID BIOS, but enforsable on your own risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks). +.It JMicron +The format used by JMicron RAID BIOS. +Supports one volume per array. +Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), +RAID10 (4 disks), CONCAT (2+ disks). +Configurations not supported by JMicron RAID BIOS, but enforsable on your own +risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks), RAID5 (3+ disks). .El .Sh SUPPORTED RAID LEVELS The GEOM RAID class follows a modular design, allowing different RAID levels Modified: projects/graid/head/sys/conf/files ============================================================================== --- projects/graid/head/sys/conf/files Tue Feb 15 22:00:00 2011 (r218721) +++ projects/graid/head/sys/conf/files Tue Feb 15 22:01:39 2011 (r218722) @@ -2090,6 +2090,7 @@ geom/raid/g_raid_ctl.c optional geom_ra geom/raid/g_raid_md_if.m optional geom_raid geom/raid/g_raid_tr_if.m optional geom_raid geom/raid/md_intel.c optional geom_raid +geom/raid/md_jmicron.c optional geom_raid geom/raid/tr_concat.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid Added: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Tue Feb 15 22:01:39 2011 (r218722) @@ -0,0 +1,1619 @@ +/*- + * Copyright (c) 2010 Alexander Motin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS 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 AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "geom/raid/g_raid.h" +#include "g_raid_md_if.h" + +static MALLOC_DEFINE(M_MD_JMICRON, "md_jmicron_data", "GEOM_RAID JMicron metadata"); + +#define JMICRON_MAX_DISKS 8 +#define JMICRON_MAX_SPARE 2 + +struct jmicron_raid_conf { + u_int8_t signature[2]; +#define JMICRON_MAGIC "JM" + + u_int16_t version; +#define JMICRON_VERSION 0x0001 + + u_int16_t checksum; + u_int8_t filler_1[10]; + u_int32_t disk_id; + u_int32_t offset; + u_int32_t disk_sectors_high; + u_int16_t disk_sectors_low; + u_int8_t filler_2[2]; + u_int8_t name[16]; + u_int8_t type; +#define JMICRON_T_RAID0 0 +#define JMICRON_T_RAID1 1 +#define JMICRON_T_RAID01 2 +#define JMICRON_T_CONCAT 3 +#define JMICRON_T_RAID5 5 + + u_int8_t stripe_shift; + u_int16_t flags; +#define JMICRON_F_READY 0x0001 +#define JMICRON_F_BOOTABLE 0x0002 +#define JMICRON_F_BADSEC 0x0004 +#define JMICRON_F_ACTIVE 0x0010 +#define JMICRON_F_UNSYNC 0x0020 +#define JMICRON_F_NEWEST 0x0040 + + u_int8_t filler_3[4]; + u_int32_t spare[JMICRON_MAX_SPARE]; + u_int32_t disks[JMICRON_MAX_DISKS]; +#define JMICRON_DISK_MASK 0xFFFFFFF0 +#define JMICRON_SEG_MASK 0x0000000F + u_int8_t filler_4[32]; + u_int8_t filler_5[384]; +}; + +struct g_raid_md_jmicron_perdisk { + struct jmicron_raid_conf *pd_meta; + int pd_disk_pos; + int pd_disk_id; +}; + +struct g_raid_md_jmicron_object { + struct g_raid_md_object mdio_base; + uint32_t mdio_config_id; + struct jmicron_raid_conf *mdio_meta; + struct callout mdio_start_co; /* STARTING state timer. */ + int mdio_total_disks; + int mdio_disks_present; + int mdio_started; + int mdio_incomplete; + struct root_hold_token *mdio_rootmount; /* Root mount delay token. */ +}; + +static g_raid_md_create_t g_raid_md_create_jmicron; +static g_raid_md_taste_t g_raid_md_taste_jmicron; +static g_raid_md_event_t g_raid_md_event_jmicron; +static g_raid_md_ctl_t g_raid_md_ctl_jmicron; +static g_raid_md_write_t g_raid_md_write_jmicron; +static g_raid_md_fail_disk_t g_raid_md_fail_disk_jmicron; +static g_raid_md_free_disk_t g_raid_md_free_disk_jmicron; +static g_raid_md_free_t g_raid_md_free_jmicron; + +static kobj_method_t g_raid_md_jmicron_methods[] = { + KOBJMETHOD(g_raid_md_create, g_raid_md_create_jmicron), + KOBJMETHOD(g_raid_md_taste, g_raid_md_taste_jmicron), + KOBJMETHOD(g_raid_md_event, g_raid_md_event_jmicron), + KOBJMETHOD(g_raid_md_ctl, g_raid_md_ctl_jmicron), + KOBJMETHOD(g_raid_md_write, g_raid_md_write_jmicron), + KOBJMETHOD(g_raid_md_fail_disk, g_raid_md_fail_disk_jmicron), + KOBJMETHOD(g_raid_md_free_disk, g_raid_md_free_disk_jmicron), + KOBJMETHOD(g_raid_md_free, g_raid_md_free_jmicron), + { 0, 0 } +}; + +static struct g_raid_md_class g_raid_md_jmicron_class = { + "JMicron", + g_raid_md_jmicron_methods, + sizeof(struct g_raid_md_jmicron_object), + .mdc_priority = 100 +}; + +static void +g_raid_md_jmicron_print(struct jmicron_raid_conf *meta) +{ + int k; + + if (g_raid_debug < 1) + return; + + printf("********* ATA JMicron RAID Metadata *********\n"); + printf("signature <%c%c>\n", meta->signature[0], meta->signature[1]); + printf("version %04x\n", meta->version); + printf("checksum 0x%04x\n", meta->checksum); + printf("disk_id 0x%08x\n", meta->disk_id); + printf("offset 0x%08x\n", meta->offset); + printf("disk_sectors_high 0x%08x\n", meta->disk_sectors_high); + printf("disk_sectors_low 0x%04x\n", meta->disk_sectors_low); + printf("name <%.16s>\n", meta->name); + printf("type %d\n", meta->type); + printf("stripe_shift %d\n", meta->stripe_shift); + printf("flags %04x\n", meta->flags); + printf("spare "); + for (k = 0; k < 2; k++) + printf(" 0x%08x", meta->spare[k]); + printf("\n"); + printf("disks "); + for (k = 0; k < JMICRON_MAX_DISKS; k++) + printf(" 0x%08x", meta->disks[k]); + printf("\n"); + printf("=================================================\n"); +} + +static struct jmicron_raid_conf * +jmicron_meta_copy(struct jmicron_raid_conf *meta) +{ + struct jmicron_raid_conf *nmeta; + + nmeta = malloc(sizeof(*meta), M_MD_JMICRON, M_WAITOK); + memcpy(nmeta, meta, sizeof(*meta)); + return (nmeta); +} + +static int +jmicron_meta_total_disks(struct jmicron_raid_conf *meta) +{ + int pos; + + for (pos = 0; pos < JMICRON_MAX_DISKS; pos++) { + if (meta->disks[pos] == 0) + break; + } + return (pos); +} + +static int +jmicron_meta_total_spare(struct jmicron_raid_conf *meta) +{ + int pos, n; + + n = 0; + for (pos = 0; pos < JMICRON_MAX_SPARE; pos++) { + if (meta->spare[pos] != 0) + n++; + } + return (n); +} + +/* + * Generate fake Configuration ID based on disk IDs. + * Note: it will change after each disk set change. + */ +static uint32_t +jmicron_meta_config_id(struct jmicron_raid_conf *meta) +{ + int pos; + uint32_t config_id; + + config_id = 0; + for (pos = 0; pos < JMICRON_MAX_DISKS; pos++) + config_id += meta->disks[pos] << pos; + return (config_id); +} + +static void +jmicron_meta_get_name(struct jmicron_raid_conf *meta, char *buf) +{ + int i; + + strncpy(buf, meta->name, 16); + buf[16] = 0; + for (i = 15; i >= 0; i--) { + if (buf[i] > 0x20) + break; + buf[i] = 0; + } +} + +static void +jmicron_meta_put_name(struct jmicron_raid_conf *meta, char *buf) +{ + + memset(meta->name, 0x20, 16); + memcpy(meta->name, buf, MIN(strlen(meta->name), 16)); +} + +static int +jmicron_meta_find_disk(struct jmicron_raid_conf *meta, uint32_t id) +{ + int pos; + + id &= JMICRON_DISK_MASK; + for (pos = 0; pos < JMICRON_MAX_DISKS; pos++) { + if ((meta->disks[pos] & JMICRON_DISK_MASK) == id) + return (pos); + } + for (pos = 0; pos < 2; pos++) { + if ((meta->spare[pos] & JMICRON_DISK_MASK) == id) + return (-3); + } + return (-1); +} + +static struct jmicron_raid_conf * +jmicron_meta_read(struct g_consumer *cp) +{ + struct g_provider *pp; + struct jmicron_raid_conf *meta; + char *buf; + int error, i; + uint16_t checksum, *ptr; + + pp = cp->provider; + + /* Read the anchor sector. */ + buf = g_read_data(cp, + pp->mediasize - pp->sectorsize, pp->sectorsize, &error); + if (buf == NULL) { + G_RAID_DEBUG(1, "Cannot read metadata from %s (error=%d).", + pp->name, error); + return (NULL); + } + meta = (struct jmicron_raid_conf *)buf; + + /* Check if this is an JMicron RAID struct */ + if (strncmp(meta->signature, JMICRON_MAGIC, strlen(JMICRON_MAGIC))) { + G_RAID_DEBUG(1, "JMicron signature check failed on %s", pp->name); + g_free(buf); + return (NULL); + } + meta = malloc(sizeof(*meta), M_MD_JMICRON, M_WAITOK); + memcpy(meta, buf, min(sizeof(*meta), pp->sectorsize)); + g_free(buf); + + /* Check metadata checksum. */ + for (checksum = 0, ptr = (uint16_t *)meta, i = 0; i < 64; i++) + checksum += *ptr++; + if (checksum != 0) { + G_RAID_DEBUG(1, "JMicron checksum check failed on %s", pp->name); + free(meta, M_MD_JMICRON); + return (NULL); + } + + return (meta); +} + +static int +jmicron_meta_write(struct g_consumer *cp, struct jmicron_raid_conf *meta) +{ + struct g_provider *pp; + char *buf; + int error, i; + uint16_t checksum, *ptr; + + pp = cp->provider; + + /* Recalculate checksum for case if metadata were changed. */ + meta->checksum = 0; + for (checksum = 0, ptr = (uint16_t *)meta, i = 0; i < 64; i++) + checksum += *ptr++; + meta->checksum -= checksum; + + /* Create and fill buffer. */ + buf = malloc(pp->sectorsize, M_MD_JMICRON, M_WAITOK | M_ZERO); + memcpy(buf, meta, sizeof(*meta)); + + error = g_write_data(cp, + pp->mediasize - pp->sectorsize, buf, pp->sectorsize); + if (error != 0) { + G_RAID_DEBUG(1, "Cannot write metadata to %s (error=%d).", + pp->name, error); + } + + free(buf, M_MD_JMICRON); + return (error); +} + +static int +jmicron_meta_erase(struct g_consumer *cp) +{ + struct g_provider *pp; + char *buf; + int error; + + pp = cp->provider; + buf = malloc(pp->sectorsize, M_MD_JMICRON, M_WAITOK | M_ZERO); + error = g_write_data(cp, + pp->mediasize - 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_JMICRON); + return (error); +} + +static struct g_raid_disk * +g_raid_md_jmicron_get_disk(struct g_raid_softc *sc, int id) +{ + struct g_raid_disk *disk; + struct g_raid_md_jmicron_perdisk *pd; + + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { + pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; + if (pd->pd_disk_pos == id) + break; + } + return (disk); +} + +static int +g_raid_md_jmicron_supported(int level, int qual, int disks, int force) +{ + + if (disks > 8) + return (0); + switch (level) { + case G_RAID_VOLUME_RL_RAID0: + if (disks < 1) + return (0); + if (!force && (disks < 2 || disks > 6)) + return (0); + break; + case G_RAID_VOLUME_RL_RAID1: + if (disks < 1) + return (0); + if (!force && (disks != 2)) + return (0); + break; + case G_RAID_VOLUME_RL_RAID1E: + if (disks < 2) + return (0); + if (!force && (disks != 4)) + return (0); + break; + case G_RAID_VOLUME_RL_SINGLE: + if (disks != 1) + return (0); + break; + case G_RAID_VOLUME_RL_CONCAT: + if (disks < 2) + return (0); + break; + case G_RAID_VOLUME_RL_RAID5: + if (disks < 3) + return (0); + if (!force) + return (0); + break; + default: + return (0); + } + if (qual != G_RAID_VOLUME_RLQ_NONE) + return (0); + return (1); +} + +static int +g_raid_md_jmicron_start_disk(struct g_raid_disk *disk) +{ + struct g_raid_softc *sc; + struct g_raid_subdisk *sd, *tmpsd; + struct g_raid_disk *olddisk, *tmpdisk; + struct g_raid_md_object *md; + struct g_raid_md_jmicron_object *mdi; + struct g_raid_md_jmicron_perdisk *pd, *oldpd; + struct jmicron_raid_conf *meta; + int disk_pos, resurrection = 0; + + sc = disk->d_softc; + md = sc->sc_md; + mdi = (struct g_raid_md_jmicron_object *)md; + meta = mdi->mdio_meta; + pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; + olddisk = NULL; + + /* Find disk position in metadata by it's serial. */ + disk_pos = jmicron_meta_find_disk(meta, pd->pd_disk_id); + if (disk_pos < 0) { + G_RAID_DEBUG1(1, sc, "Unknown, probably new or stale disk"); + /* If we are in the start process, that's all for now. */ + if (!mdi->mdio_started) + goto nofit; + /* + * If we have already started - try to get use of the disk. + * Try to replace OFFLINE disks first, then FAILED. + */ + TAILQ_FOREACH(tmpdisk, &sc->sc_disks, d_next) { + if (tmpdisk->d_state != G_RAID_DISK_S_OFFLINE && + tmpdisk->d_state != G_RAID_DISK_S_FAILED) + continue; +#if 0 + /* Make sure this disk is big enough. */ + TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { + if (sd->sd_offset + sd->sd_size + 4096 > + (off_t)pd->pd_disk_meta.sectors * 512) { + G_RAID_DEBUG1(1, sc, + "Disk too small (%llu < %llu)", + ((unsigned long long) + pd->pd_disk_meta.sectors) * 512, + (unsigned long long) + sd->sd_offset + sd->sd_size + 4096); + break; + } + } + if (sd != NULL) + continue; +#endif + if (tmpdisk->d_state == G_RAID_DISK_S_OFFLINE) { + olddisk = tmpdisk; + break; + } else if (olddisk == NULL) + olddisk = tmpdisk; + } + if (olddisk == NULL) { +nofit: + if (disk_pos == -3 || pd->pd_disk_pos == -3) { + g_raid_change_disk_state(disk, + G_RAID_DISK_S_SPARE); + return (1); + } else { + g_raid_change_disk_state(disk, + G_RAID_DISK_S_STALE); + return (0); + } + } + oldpd = (struct g_raid_md_jmicron_perdisk *)olddisk->d_md_data; + disk_pos = oldpd->pd_disk_pos; + resurrection = 1; + } + + if (olddisk == NULL) { + /* Find placeholder by position. */ + olddisk = g_raid_md_jmicron_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_DEBUG1(1, sc, "More then one disk for pos %d", + disk_pos); + g_raid_change_disk_state(disk, G_RAID_DISK_S_STALE); + return (0); + } + oldpd = (struct g_raid_md_jmicron_perdisk *)olddisk->d_md_data; + } + + /* Replace failed disk or placeholder with new disk. */ + TAILQ_FOREACH_SAFE(sd, &olddisk->d_subdisks, sd_next, tmpsd) { + TAILQ_REMOVE(&olddisk->d_subdisks, sd, sd_next); + TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); + sd->sd_disk = disk; + } + oldpd->pd_disk_pos = -2; + pd->pd_disk_pos = disk_pos; + /* Update global metadata just in case. */ + meta->disks[disk_pos] = pd->pd_disk_id; + + /* If it was placeholder -- destroy it. */ + if (olddisk->d_state == G_RAID_DISK_S_OFFLINE) { + g_raid_destroy_disk(olddisk); + } else { + /* Otherwise, make it STALE_FAILED. */ + g_raid_change_disk_state(olddisk, G_RAID_DISK_S_STALE_FAILED); + } + + /* Welcome the new disk. */ + g_raid_change_disk_state(disk, G_RAID_DISK_S_ACTIVE); + TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { + + /* + * Different disks may have different sizes/offsets, + * especially in concat mode. Update. + */ + if (pd->pd_meta != NULL && !resurrection) { + sd->sd_offset = + (off_t)pd->pd_meta->offset * 16 * 512; //ZZZ + sd->sd_size = + (((off_t)pd->pd_meta->disk_sectors_high << 16) + + pd->pd_meta->disk_sectors_low) * 512; + } + + if (resurrection) { + /* Stale disk, almost same as new. */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NEW); + } else if ((meta->flags & JMICRON_F_BADSEC) != 0 && + (pd->pd_meta->flags & JMICRON_F_BADSEC) == 0) { + /* Cold-inserted or rebuilding disk. */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_NEW); + } else if (pd->pd_meta->flags & JMICRON_F_UNSYNC) { + /* Dirty or resyncing disk.. */ + g_raid_change_subdisk_state(sd, + G_RAID_SUBDISK_S_STALE); + } else { + /* Up to date disk. */ + 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); + } + + /* Update status of our need for spare. */ + if (mdi->mdio_started) { + mdi->mdio_incomplete = + (g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) < + mdi->mdio_total_disks); + } + + return (resurrection); +} + +static void +g_disk_md_jmicron_retaste(void *arg, int pending) +{ + + G_RAID_DEBUG(1, "Array is not complete, trying to retaste."); + g_retaste(&g_raid_class); + free(arg, M_MD_JMICRON); +} + +static void +g_raid_md_jmicron_refill(struct g_raid_softc *sc) +{ + struct g_raid_md_object *md; + struct g_raid_md_jmicron_object *mdi; + struct jmicron_raid_conf *meta; + struct g_raid_disk *disk; + struct task *task; + int update, na; + + md = sc->sc_md; + mdi = (struct g_raid_md_jmicron_object *)md; + meta = mdi->mdio_meta; + update = 0; + do { + /* Make sure we miss anything. */ + na = g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE); + if (na == mdi->mdio_total_disks) + break; + + G_RAID_DEBUG1(1, md->mdo_softc, + "Array is not complete (%d of %d), " + "trying to refill.", na, mdi->mdio_total_disks); + + /* Try to get use some of STALE disks. */ + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { + if (disk->d_state == G_RAID_DISK_S_STALE) { + update += g_raid_md_jmicron_start_disk(disk); + if (disk->d_state == G_RAID_DISK_S_ACTIVE) + break; + } + } + if (disk != NULL) + continue; + + /* Try to get use some of SPARE disks. */ + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { + if (disk->d_state == G_RAID_DISK_S_SPARE) { + update += g_raid_md_jmicron_start_disk(disk); + if (disk->d_state == G_RAID_DISK_S_ACTIVE) + break; + } + } + } while (disk != NULL); + + /* Write new metadata if we changed something. */ + if (update) { + g_raid_md_write_jmicron(md, NULL, NULL, NULL); + meta = mdi->mdio_meta; + } + + /* Update status of our need for spare. */ + mdi->mdio_incomplete = (g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) < + mdi->mdio_total_disks); + + /* Request retaste hoping to find spare. */ + if (mdi->mdio_incomplete) { + task = malloc(sizeof(struct task), + M_MD_JMICRON, M_WAITOK | M_ZERO); + TASK_INIT(task, 0, g_disk_md_jmicron_retaste, task); + taskqueue_enqueue(taskqueue_swi, task); + } +} + +static void +g_raid_md_jmicron_start(struct g_raid_softc *sc) +{ + struct g_raid_md_object *md; + struct g_raid_md_jmicron_object *mdi; + struct g_raid_md_jmicron_perdisk *pd; + struct jmicron_raid_conf *meta; + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct g_raid_disk *disk; + off_t size; + int j, disk_pos; + char buf[17]; + + md = sc->sc_md; + mdi = (struct g_raid_md_jmicron_object *)md; + meta = mdi->mdio_meta; + + /* Create volumes and subdisks. */ + jmicron_meta_get_name(meta, buf); + vol = g_raid_create_volume(sc, buf); + size = ((off_t)meta->disk_sectors_high << 16) + meta->disk_sectors_low; + size *= 512; //ZZZ + if (meta->type == JMICRON_T_RAID0) { + vol->v_raid_level = G_RAID_VOLUME_RL_RAID0; + vol->v_mediasize = size * mdi->mdio_total_disks; + } else if (meta->type == JMICRON_T_RAID1) { + vol->v_raid_level = G_RAID_VOLUME_RL_RAID1; + vol->v_mediasize = size; + } else if (meta->type == JMICRON_T_RAID01) { + vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; + vol->v_mediasize = size * mdi->mdio_total_disks / 2; + } else if (meta->type == JMICRON_T_CONCAT) { + vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; + vol->v_mediasize = 0; + } else if (meta->type == JMICRON_T_RAID5) { + vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; + vol->v_mediasize = size * (mdi->mdio_total_disks - 1); + } else { + vol->v_raid_level = G_RAID_VOLUME_RL_UNKNOWN; + vol->v_mediasize = 0; + } + vol->v_raid_level_qualifier = G_RAID_VOLUME_RLQ_NONE; + vol->v_strip_size = 1024 << meta->stripe_shift; //ZZZ + vol->v_disks_count = mdi->mdio_total_disks; + vol->v_sectorsize = 512; //ZZZ + for (j = 0; j < vol->v_disks_count; j++) { + sd = &vol->v_subdisks[j]; + sd->sd_offset = (off_t)meta->offset * 16 * 512; //ZZZ + sd->sd_size = size; + } + g_raid_start_volume(vol); + + /* Create disk placeholders to store data for later writing. */ + for (disk_pos = 0; disk_pos < mdi->mdio_total_disks; disk_pos++) { + pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); + pd->pd_disk_pos = disk_pos; + pd->pd_disk_id = meta->disks[disk_pos]; + disk = g_raid_create_disk(sc); + disk->d_md_data = (void *)pd; + disk->d_state = G_RAID_DISK_S_OFFLINE; + sd = &vol->v_subdisks[disk_pos]; + sd->sd_disk = disk; + TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); + } + + /* Make all disks found till the moment take their places. */ + do { + TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { + if (disk->d_state == G_RAID_DISK_S_NONE) { + g_raid_md_jmicron_start_disk(disk); + break; + } + } + } while (disk != NULL); + + mdi->mdio_started = 1; + G_RAID_DEBUG1(0, sc, "Array started."); + g_raid_md_write_jmicron(md, NULL, NULL, NULL); + + /* Pickup any STALE/SPARE disks to refill array if needed. */ + g_raid_md_jmicron_refill(sc); + + g_raid_event_send(vol, G_RAID_VOLUME_E_START, G_RAID_EVENT_VOLUME); + + callout_stop(&mdi->mdio_start_co); + G_RAID_DEBUG1(1, sc, "root_mount_rel %p", mdi->mdio_rootmount); + root_mount_rel(mdi->mdio_rootmount); + mdi->mdio_rootmount = NULL; +} + +static void +g_raid_md_jmicron_new_disk(struct g_raid_disk *disk) +{ + struct g_raid_softc *sc; + struct g_raid_md_object *md; + struct g_raid_md_jmicron_object *mdi; + struct jmicron_raid_conf *pdmeta; + struct g_raid_md_jmicron_perdisk *pd; + + sc = disk->d_softc; + md = sc->sc_md; + mdi = (struct g_raid_md_jmicron_object *)md; + pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; + pdmeta = pd->pd_meta; + + if (mdi->mdio_started) { + if (g_raid_md_jmicron_start_disk(disk)) + g_raid_md_write_jmicron(md, NULL, NULL, NULL); + } else { + /* If we haven't started yet - check metadata freshness. */ + if (mdi->mdio_meta == NULL) { + G_RAID_DEBUG1(1, sc, "Newer disk"); + if (mdi->mdio_meta != NULL) + free(mdi->mdio_meta, M_MD_JMICRON); + mdi->mdio_meta = jmicron_meta_copy(pdmeta); + mdi->mdio_total_disks = jmicron_meta_total_disks(pdmeta); + mdi->mdio_disks_present = 1; + } else { + mdi->mdio_disks_present++; + G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", + mdi->mdio_disks_present, + mdi->mdio_total_disks, + jmicron_meta_total_spare(mdi->mdio_meta)); + mdi->mdio_meta->flags |= + pdmeta->flags & JMICRON_F_BADSEC; + } + /* If we collected all needed disks - start array. */ + if (mdi->mdio_disks_present == mdi->mdio_total_disks + + jmicron_meta_total_spare(mdi->mdio_meta)) + g_raid_md_jmicron_start(sc); + } +} + +static void +g_raid_jmicron_go(void *arg) +{ + struct g_raid_softc *sc; + struct g_raid_md_object *md; + struct g_raid_md_jmicron_object *mdi; + + sc = arg; + md = sc->sc_md; + mdi = (struct g_raid_md_jmicron_object *)md; + sx_xlock(&sc->sc_lock); + if (!mdi->mdio_started) { + G_RAID_DEBUG1(0, sc, "Force array start due to timeout."); + g_raid_event_send(sc, G_RAID_NODE_E_START, 0); + } + sx_xunlock(&sc->sc_lock); +} + +static int +g_raid_md_create_jmicron(struct g_raid_md_object *md, struct g_class *mp, + struct g_geom **gp) +{ + struct g_raid_softc *sc; + struct g_raid_md_jmicron_object *mdi; + char name[16]; + + mdi = (struct g_raid_md_jmicron_object *)md; + mdi->mdio_config_id = arc4random(); + snprintf(name, sizeof(name), "JMicron-%08x", mdi->mdio_config_id); + sc = g_raid_create_node(mp, name, md); + if (sc == NULL) + return (G_RAID_MD_TASTE_FAIL); + md->mdo_softc = sc; + *gp = sc->sc_geom; + return (G_RAID_MD_TASTE_NEW); +} + +static int +g_raid_md_taste_jmicron(struct g_raid_md_object *md, struct g_class *mp, + struct g_consumer *cp, struct g_geom **gp) +{ + struct g_consumer *rcp; + struct g_provider *pp; + struct g_raid_md_jmicron_object *mdi, *mdi1; + struct g_raid_softc *sc; + struct g_raid_disk *disk; + struct jmicron_raid_conf *meta; + struct g_raid_md_jmicron_perdisk *pd; + struct g_geom *geom; + int error, disk_pos, result, spare, len; + char name[16]; + uint16_t vendor; + + G_RAID_DEBUG(1, "Tasting JMicron on %s", cp->provider->name); + mdi = (struct g_raid_md_jmicron_object *)md; + pp = cp->provider; + + /* Read metadata from device. */ + meta = NULL; + spare = 0; + vendor = 0xffff; + disk_pos = 0; + if (g_access(cp, 1, 0, 0) != 0) + return (G_RAID_MD_TASTE_FAIL); + g_topology_unlock(); + len = 2; + if (pp->geom->rank == 1) + g_io_getattr("GEOM::hba_vendor", cp, &len, &vendor); + meta = jmicron_meta_read(cp); + g_topology_lock(); + g_access(cp, -1, 0, 0); + if (meta == NULL) { + if (g_raid_aggressive_spare) { + if (vendor == 0x197b) { + G_RAID_DEBUG(1, + "No JMicron metadata, forcing spare."); + spare = 2; + goto search; + } else { + G_RAID_DEBUG(1, + "JMicron vendor mismatch 0x%04x != 0x197b", + vendor); + } + } + return (G_RAID_MD_TASTE_FAIL); + } + + /* Check this disk position in obtained metadata. */ + disk_pos = jmicron_meta_find_disk(meta, meta->disk_id); + if (disk_pos == -1) { + G_RAID_DEBUG(1, "JMicron disk_id %08x not found", + meta->disk_id); + goto fail1; + } + + /* Metadata valid. Print it. */ + g_raid_md_jmicron_print(meta); + G_RAID_DEBUG(1, "JMicron disk position %d", disk_pos); + spare = (disk_pos == -2) ? 1 : 0; + +search: + /* Search for matching node. */ + sc = NULL; + mdi1 = NULL; + LIST_FOREACH(geom, &mp->geom, geom) { + sc = geom->softc; + if (sc == NULL) + continue; + if (sc->sc_stopping != 0) + continue; + if (sc->sc_md->mdo_class != md->mdo_class) + continue; + mdi1 = (struct g_raid_md_jmicron_object *)sc->sc_md; + if (spare == 2) { + if (mdi1->mdio_incomplete) + break; + } else { + if (mdi1->mdio_config_id == + jmicron_meta_config_id(meta)) + break; + } + } + + /* Found matching node. */ + if (geom != NULL) { + G_RAID_DEBUG(1, "Found matching array %s", sc->sc_name); + result = G_RAID_MD_TASTE_EXISTING; + + } else if (spare) { /* Not found needy node -- left for later. */ + G_RAID_DEBUG(1, "Spare is not needed at this time"); + goto fail1; + + } else { /* Not found matching node -- create one. */ + result = G_RAID_MD_TASTE_NEW; + mdi->mdio_config_id = jmicron_meta_config_id(meta); + snprintf(name, sizeof(name), "JMicron-%08x", + mdi->mdio_config_id); + sc = g_raid_create_node(mp, name, md); + md->mdo_softc = sc; + geom = sc->sc_geom; + callout_init(&mdi->mdio_start_co, 1); + callout_reset(&mdi->mdio_start_co, g_raid_start_timeout * hz, + g_raid_jmicron_go, sc); + mdi->mdio_rootmount = root_mount_hold("GRAID-JMicron"); + G_RAID_DEBUG1(1, sc, "root_mount_hold %p", mdi->mdio_rootmount); + } + + rcp = g_new_consumer(geom); + g_attach(rcp, pp); + if (g_access(rcp, 1, 1, 1) != 0) + ; //goto fail1; + + g_topology_unlock(); + sx_xlock(&sc->sc_lock); + + pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); + pd->pd_meta = meta; + if (spare == 2) { +// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + pd->pd_disk_pos = -3; + pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; + } else { + pd->pd_disk_pos = -1; + pd->pd_disk_id = meta->disk_id; + } + disk = g_raid_create_disk(sc); + disk->d_md_data = (void *)pd; + disk->d_consumer = rcp; + rcp->private = disk; + + /* Read kernel dumping information. */ + disk->d_kd.offset = 0; + disk->d_kd.length = OFF_MAX; + len = sizeof(disk->d_kd); + error = g_io_getattr("GEOM::kerneldump", rcp, &len, &disk->d_kd); + if (disk->d_kd.di.dumper == NULL) + G_RAID_DEBUG1(2, sc, "Dumping not supported by %s: %d.", + rcp->provider->name, error); + + g_raid_md_jmicron_new_disk(disk); + + sx_xunlock(&sc->sc_lock); + g_topology_lock(); + *gp = geom; + return (result); +fail1: + free(meta, M_MD_JMICRON); + return (G_RAID_MD_TASTE_FAIL); +} + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 08:12:54 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 ABAD5106566C; Wed, 16 Feb 2011 08:12:54 +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 9A1F18FC15; Wed, 16 Feb 2011 08:12:54 +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 p1G8CshM062155; Wed, 16 Feb 2011 08:12:54 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1G8Csb5062153; Wed, 16 Feb 2011 08:12:54 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102160812.p1G8Csb5062153@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 08:12:54 +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: r218727 - 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, 16 Feb 2011 08:12:54 -0000 Author: mav Date: Wed Feb 16 08:12:54 2011 New Revision: 218727 URL: http://svn.freebsd.org/changeset/base/218727 Log: Set of random improvements to JMicron module. Modified: projects/graid/head/sys/geom/raid/md_jmicron.c Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 06:00:27 2011 (r218726) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 08:12:54 2011 (r218727) @@ -91,6 +91,7 @@ struct g_raid_md_jmicron_perdisk { struct jmicron_raid_conf *pd_meta; int pd_disk_pos; int pd_disk_id; + off_t pd_disk_size; }; struct g_raid_md_jmicron_object { @@ -154,7 +155,7 @@ g_raid_md_jmicron_print(struct jmicron_r printf("stripe_shift %d\n", meta->stripe_shift); printf("flags %04x\n", meta->flags); printf("spare "); - for (k = 0; k < 2; k++) + for (k = 0; k < JMICRON_MAX_SPARE; k++) printf(" 0x%08x", meta->spare[k]); printf("\n"); printf("disks "); @@ -247,7 +248,7 @@ jmicron_meta_find_disk(struct jmicron_ra if ((meta->disks[pos] & JMICRON_DISK_MASK) == id) return (pos); } - for (pos = 0; pos < 2; pos++) { + for (pos = 0; pos < JMICRON_MAX_SPARE; pos++) { if ((meta->spare[pos] & JMICRON_DISK_MASK) == id) return (-3); } @@ -442,23 +443,19 @@ g_raid_md_jmicron_start_disk(struct g_ra if (tmpdisk->d_state != G_RAID_DISK_S_OFFLINE && tmpdisk->d_state != G_RAID_DISK_S_FAILED) continue; -#if 0 /* Make sure this disk is big enough. */ TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { - if (sd->sd_offset + sd->sd_size + 4096 > - (off_t)pd->pd_disk_meta.sectors * 512) { + if (sd->sd_offset + sd->sd_size + 512 > + pd->pd_disk_size) { G_RAID_DEBUG1(1, sc, - "Disk too small (%llu < %llu)", - ((unsigned long long) - pd->pd_disk_meta.sectors) * 512, - (unsigned long long) - sd->sd_offset + sd->sd_size + 4096); + "Disk too small (%ju < %ju)", + pd->pd_disk_size, + sd->sd_offset + sd->sd_size + 512); break; } } if (sd != NULL) continue; -#endif if (tmpdisk->d_state == G_RAID_DISK_S_OFFLINE) { olddisk = tmpdisk; break; @@ -746,23 +743,26 @@ g_raid_md_jmicron_new_disk(struct g_raid if (g_raid_md_jmicron_start_disk(disk)) g_raid_md_write_jmicron(md, NULL, NULL, NULL); } else { - /* If we haven't started yet - check metadata freshness. */ - if (mdi->mdio_meta == NULL) { - G_RAID_DEBUG1(1, sc, "Newer disk"); + /* + * If we haven't started yet - update common metadata + * to get subdisks details, avoiding data from spare disks. + */ + if (mdi->mdio_meta == NULL || + jmicron_meta_find_disk(mdi->mdio_meta, + mdi->mdio_meta->disk_id) == -3) { if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_JMICRON); mdi->mdio_meta = jmicron_meta_copy(pdmeta); mdi->mdio_total_disks = jmicron_meta_total_disks(pdmeta); - mdi->mdio_disks_present = 1; - } else { - mdi->mdio_disks_present++; - G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", - mdi->mdio_disks_present, - mdi->mdio_total_disks, - jmicron_meta_total_spare(mdi->mdio_meta)); - mdi->mdio_meta->flags |= - pdmeta->flags & JMICRON_F_BADSEC; } + mdi->mdio_meta->flags |= pdmeta->flags & JMICRON_F_BADSEC; + + mdi->mdio_disks_present++; + G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", + mdi->mdio_disks_present, + mdi->mdio_total_disks, + jmicron_meta_total_spare(mdi->mdio_meta)); + /* If we collected all needed disks - start array. */ if (mdi->mdio_disks_present == mdi->mdio_total_disks + jmicron_meta_total_spare(mdi->mdio_meta)) @@ -928,13 +928,13 @@ search: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_meta = meta; if (spare == 2) { -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; } else { pd->pd_disk_pos = -1; pd->pd_disk_id = meta->disk_id; } + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_md_data = (void *)pd; disk->d_consumer = rcp; @@ -1141,7 +1141,7 @@ makedisk: "Dumping not supported by %s.", cp->provider->name); -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + pd->pd_disk_size = pp->mediasize; if (size > pp->mediasize) size = pp->mediasize; if (sectorsize < pp->sectorsize) @@ -1199,7 +1199,7 @@ makedisk: gctl_error(req, "Size too small."); return (-13); } - if (size > 0xffffffffllu * sectorsize) { + if (size > 0xffffffffffffllu * sectorsize) { gctl_error(req, "Size too big."); return (-14); } @@ -1399,6 +1399,7 @@ makedisk: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_consumer = cp; From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 08:16: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 39A041065674; Wed, 16 Feb 2011 08:16:34 +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 285788FC15; Wed, 16 Feb 2011 08:16: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 p1G8GYY9062266; Wed, 16 Feb 2011 08:16:34 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1G8GYEY062264; Wed, 16 Feb 2011 08:16:34 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102160816.p1G8GYEY062264@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 08:16: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: r218728 - projects/graid/head/sbin/geom/class/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, 16 Feb 2011 08:16:34 -0000 Author: mav Date: Wed Feb 16 08:16:33 2011 New Revision: 218728 URL: http://svn.freebsd.org/changeset/base/218728 Log: Some grammar fixes. Modified: projects/graid/head/sbin/geom/class/raid/graid.8 Modified: projects/graid/head/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/head/sbin/geom/class/raid/graid.8 Wed Feb 16 08:12:54 2011 (r218727) +++ projects/graid/head/sbin/geom/class/raid/graid.8 Wed Feb 16 08:16:33 2011 (r218728) @@ -205,14 +205,14 @@ The format used by Intel RAID BIOS. Supports up to two volumes per array. Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), RAID5 (3+ disks), RAID10 (4 disks). -Configurations not supported by Intel RAID BIOS, but enforsable on your own +Configurations not supported by Intel RAID BIOS, but enforceable on your own risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks). .It JMicron The format used by JMicron RAID BIOS. Supports one volume per array. Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), RAID10 (4 disks), CONCAT (2+ disks). -Configurations not supported by JMicron RAID BIOS, but enforsable on your own +Configurations not supported by JMicron RAID BIOS, but enforceable on your own risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks), RAID5 (3+ disks). .El .Sh SUPPORTED RAID LEVELS From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 14:26:23 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 94BE1106566B; Wed, 16 Feb 2011 14:26:23 +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 856058FC1F; Wed, 16 Feb 2011 14:26:23 +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 p1GEQNHv072615; Wed, 16 Feb 2011 14:26:23 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1GEQNrw072611; Wed, 16 Feb 2011 14:26:23 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102161426.p1GEQNrw072611@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 14:26: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: r218732 - 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, 16 Feb 2011 14:26:23 -0000 Author: mav Date: Wed Feb 16 14:26:23 2011 New Revision: 218732 URL: http://svn.freebsd.org/changeset/base/218732 Log: Move topology lock/unlock inside g_raid_kill_consumer(). Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/md_jmicron.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 14:25:26 2011 (r218731) +++ projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 14:26:23 2011 (r218732) @@ -652,11 +652,12 @@ g_raid_kill_consumer(struct g_raid_softc struct g_provider *pp; int retaste_wait; - g_topology_assert(); + g_topology_assert_not(); + g_topology_lock(); cp->private = NULL; if (g_raid_consumer_is_busy(sc, cp)) - return; + goto out; pp = cp->provider; retaste_wait = 0; if (cp->acw == 1) { @@ -676,11 +677,13 @@ g_raid_kill_consumer(struct g_raid_softc * after retaste event is sent. */ g_post_event(g_raid_destroy_consumer, cp, M_WAITOK, NULL); - return; + goto out; } G_RAID_DEBUG(1, "Consumer %s destroyed.", pp->name); g_detach(cp); g_destroy_consumer(cp); +out: + g_topology_unlock(); } static void @@ -1228,11 +1231,8 @@ g_raid_disk_done_request(struct bio *bp) if (bp->bio_from != NULL) { bp->bio_from->index--; disk = bp->bio_from->private; - if (disk == NULL) { - g_topology_lock(); + if (disk == NULL) g_raid_kill_consumer(sc, bp->bio_from); - g_topology_unlock(); - } } bp->bio_offset -= sd->sd_offset; @@ -1869,9 +1869,7 @@ g_raid_destroy_disk(struct g_raid_disk * sc = disk->d_softc; G_RAID_DEBUG1(2, sc, "Destroying disk."); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) { Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 14:25:26 2011 (r218731) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 14:26:23 2011 (r218732) @@ -1327,9 +1327,7 @@ g_raid_md_event_intel(struct g_raid_md_o 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1908,9 +1906,7 @@ makedisk: 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1992,9 +1988,7 @@ makedisk: gctl_error(req, "Can't get serial for provider '%s'.", diskname); - g_topology_lock(); g_raid_kill_consumer(sc, cp); - g_topology_unlock(); error = -7; break; } Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 14:25:26 2011 (r218731) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 14:26:23 2011 (r218732) @@ -987,9 +987,7 @@ g_raid_md_event_jmicron(struct g_raid_md 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1319,9 +1317,7 @@ makedisk: 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 15:04:01 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 2BC651065673; Wed, 16 Feb 2011 15:04:01 +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 1BE608FC1E; Wed, 16 Feb 2011 15:04:01 +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 p1GF40mu073757; Wed, 16 Feb 2011 15:04:00 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1GF40rR073752; Wed, 16 Feb 2011 15:04:00 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102161504.p1GF40rR073752@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 15:04:00 +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: r218734 - 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, 16 Feb 2011 15:04:01 -0000 Author: mav Date: Wed Feb 16 15:04:00 2011 New Revision: 218734 URL: http://svn.freebsd.org/changeset/base/218734 Log: Add and use helper function opening disk by name. 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/md_jmicron.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/g_raid.c Wed Feb 16 15:04:00 2011 (r218734) @@ -585,6 +585,32 @@ g_raid_get_subdisk(struct g_raid_volume return (NULL); } +struct g_consumer * +g_raid_open_consumer(struct g_raid_softc *sc, const char *name) +{ + struct g_consumer *cp; + struct g_provider *pp; + + g_topology_assert(); + + if (strncmp(name, "/dev/", 5) == 0) + name += 5; + pp = g_provider_by_name(name); + if (pp == NULL) + return (NULL); + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + g_destroy_consumer(cp); + return (NULL); + } + if (g_access(cp, 1, 1, 1) != 0) { + g_detach(cp); + g_destroy_consumer(cp); + return (NULL); + } + return (cp); +} + static u_int g_raid_nrequests(struct g_raid_softc *sc, struct g_consumer *cp) { Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/g_raid.h Wed Feb 16 15:04:00 2011 (r218734) @@ -364,6 +364,8 @@ void g_raid_subdisk_iostart(struct g_rai int g_raid_subdisk_kerneldump(struct g_raid_subdisk *sd, void *virtual, vm_offset_t physical, off_t offset, size_t length); +struct g_consumer *g_raid_open_consumer(struct g_raid_softc *sc, + const char *name); void g_raid_kill_consumer(struct g_raid_softc *sc, struct g_consumer *cp); void g_raid_report_disk_state(struct g_raid_disk *disk); Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/md_intel.c Wed Feb 16 15:04:00 2011 (r218734) @@ -1426,38 +1426,18 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - 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 = -7; - 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 = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", + diskname); + g_topology_unlock(); + error = -4; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; disk = g_raid_create_disk(sc); @@ -1465,13 +1445,11 @@ makedisk: disk->d_consumer = cp; if (cp == NULL) { strcpy(&pd->pd_disk_meta.serial[0], "NONE"); - pd->pd_disk_meta.id = 0; pd->pd_disk_meta.id = 0xffffffff; pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; continue; } cp->private = disk; - g_topology_unlock(); error = g_raid_md_get_label(cp, @@ -1948,37 +1926,18 @@ makedisk: 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.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", 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; - } + pp = cp->provider; g_topology_unlock(); /* Read disk serial. */ Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 14:28:04 2011 (r218733) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 15:04:00 2011 (r218734) @@ -1085,38 +1085,18 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - 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 = -7; - 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 = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open '%s'.", + diskname); + g_topology_unlock(); + error = -7; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; @@ -1126,7 +1106,6 @@ makedisk: if (cp == NULL) continue; cp->private = disk; - g_topology_unlock(); /* Read kernel dumping information. */ @@ -1359,38 +1338,18 @@ makedisk: 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.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", 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(); + pp = cp->provider; pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = -3; @@ -1402,6 +1361,7 @@ makedisk: disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; + g_topology_unlock(); /* Read kernel dumping information. */ disk->d_kd.offset = 0; From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 15:27:54 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 EB31B1065674; Wed, 16 Feb 2011 15:27:54 +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 942D88FC1D; Wed, 16 Feb 2011 15:27:54 +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 p1GFRsVB074598; Wed, 16 Feb 2011 15:27:54 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1GFRsel074596; Wed, 16 Feb 2011 15:27:54 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102161527.p1GFRsel074596@svn.freebsd.org> From: Alexander Motin Date: Wed, 16 Feb 2011 15:27:54 +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: r218740 - 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, 16 Feb 2011 15:27:55 -0000 Author: mav Date: Wed Feb 16 15:27:54 2011 New Revision: 218740 URL: http://svn.freebsd.org/changeset/base/218740 Log: Fix SINGLE on JMicron. Modified: projects/graid/head/sys/geom/raid/md_jmicron.c Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 15:24:56 2011 (r218739) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Wed Feb 16 15:27:54 2011 (r218740) @@ -390,6 +390,8 @@ g_raid_md_jmicron_supported(int level, i case G_RAID_VOLUME_RL_SINGLE: if (disks != 1) return (0); + if (!force) + return (0); break; case G_RAID_VOLUME_RL_CONCAT: if (disks < 2) @@ -666,7 +668,10 @@ g_raid_md_jmicron_start(struct g_raid_so vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; vol->v_mediasize = size * mdi->mdio_total_disks / 2; } else if (meta->type == JMICRON_T_CONCAT) { - vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; + if (mdi->mdio_total_disks == 1) + vol->v_raid_level = G_RAID_VOLUME_RL_SINGLE; + else + vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; vol->v_mediasize = 0; } else if (meta->type == JMICRON_T_RAID5) { vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; @@ -1190,7 +1195,8 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o vol->v_strip_size = strip; vol->v_disks_count = numdisks; if (level == G_RAID_VOLUME_RL_RAID0 || - level == G_RAID_VOLUME_RL_CONCAT) + level == G_RAID_VOLUME_RL_CONCAT || + level == G_RAID_VOLUME_RL_SINGLE) vol->v_mediasize = size * numdisks; else if (level == G_RAID_VOLUME_RL_RAID1) vol->v_mediasize = size; @@ -1427,7 +1433,8 @@ g_raid_md_write_jmicron(struct g_raid_md meta->type = JMICRON_T_RAID1; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E) meta->type = JMICRON_T_RAID01; - else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) + else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT || + vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE) meta->type = JMICRON_T_CONCAT; else meta->type = JMICRON_T_RAID5; From owner-svn-src-projects@FreeBSD.ORG Wed Feb 16 19:30:32 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 15904106566C; Wed, 16 Feb 2011 19:30:32 +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 F2CAC8FC14; Wed, 16 Feb 2011 19:30: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 p1GJUVjW081073; Wed, 16 Feb 2011 19:30:31 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1GJUTjw081033; Wed, 16 Feb 2011 19:30:29 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201102161930.p1GJUTjw081033@svn.freebsd.org> From: Dimitry Andric Date: Wed, 16 Feb 2011 19:30: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: r218746 - in projects/binutils-2.17: . bin/ed bin/sh bin/test cddl/lib/libzpool contrib/top crypto/openssl/ssl games/fortune/datfiles gnu/usr.bin/groff/tmac lib/libc/gen lib/libdevinfo ... 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, 16 Feb 2011 19:30:32 -0000 Author: dim Date: Wed Feb 16 19:30:29 2011 New Revision: 218746 URL: http://svn.freebsd.org/changeset/base/218746 Log: Sync: merge r218496 through r218745 from ^/head. Added: projects/binutils-2.17/share/examples/kld/khelp/ - copied from r218745, head/share/examples/kld/khelp/ projects/binutils-2.17/share/man/man4/mos.4 - copied unchanged from r218745, head/share/man/man4/mos.4 projects/binutils-2.17/sys/boot/pc98/pc98boot/ - copied from r218745, head/sys/boot/pc98/pc98boot/ projects/binutils-2.17/sys/compat/linux/linux_fork.c - copied unchanged from r218745, head/sys/compat/linux/linux_fork.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslbtypes.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/compiler/aslbtypes.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslwalks.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/compiler/aslwalks.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtexpress.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/compiler/dtexpress.c projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbmethod.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/debugger/dbmethod.c projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbnames.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/debugger/dbnames.c projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsargs.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/dispatcher/dsargs.c projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dscontrol.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/dispatcher/dscontrol.c projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dswload2.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/dispatcher/dswload2.c projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utdecode.c - copied unchanged from r218745, head/sys/contrib/dev/acpica/utilities/utdecode.c projects/binutils-2.17/sys/dev/usb/net/if_mos.c - copied unchanged from r218745, head/sys/dev/usb/net/if_mos.c projects/binutils-2.17/sys/dev/usb/net/if_mosreg.h - copied unchanged from r218745, head/sys/dev/usb/net/if_mosreg.h projects/binutils-2.17/sys/modules/usb/mos/ - copied from r218745, head/sys/modules/usb/mos/ projects/binutils-2.17/tools/regression/bin/sh/expansion/arith11.0 - copied unchanged from r218745, head/tools/regression/bin/sh/expansion/arith11.0 Modified: projects/binutils-2.17/Makefile projects/binutils-2.17/Makefile.inc1 projects/binutils-2.17/bin/ed/ed.1 projects/binutils-2.17/bin/sh/arith_yacc.c projects/binutils-2.17/bin/sh/shell.h projects/binutils-2.17/bin/test/test.c projects/binutils-2.17/cddl/lib/libzpool/Makefile projects/binutils-2.17/crypto/openssl/ssl/t1_lib.c projects/binutils-2.17/games/fortune/datfiles/fortunes projects/binutils-2.17/games/fortune/datfiles/fortunes-o.real projects/binutils-2.17/gnu/usr.bin/groff/tmac/mdoc.local projects/binutils-2.17/lib/libc/gen/glob.3 projects/binutils-2.17/lib/libc/gen/sysconf.3 projects/binutils-2.17/lib/libdevinfo/devinfo.h projects/binutils-2.17/lib/libdevinfo/devinfo_var.h projects/binutils-2.17/lib/liblzma/Makefile projects/binutils-2.17/lib/libmd/Makefile projects/binutils-2.17/lib/libufs/libufs.h projects/binutils-2.17/lib/libz/Makefile projects/binutils-2.17/lib/msun/src/e_asin.c projects/binutils-2.17/lib/msun/src/e_expf.c projects/binutils-2.17/lib/msun/src/s_atan.c projects/binutils-2.17/lib/msun/src/s_cos.c projects/binutils-2.17/lib/msun/src/s_nexttoward.c projects/binutils-2.17/lib/msun/src/s_nexttowardf.c projects/binutils-2.17/lib/msun/src/s_sin.c projects/binutils-2.17/lib/msun/src/s_tan.c projects/binutils-2.17/release/doc/en_US.ISO8859-1/relnotes/article.sgml projects/binutils-2.17/sbin/fsck_ffs/fsck.h projects/binutils-2.17/sbin/fsck_ffs/setup.c projects/binutils-2.17/sbin/fsck_ffs/suj.c projects/binutils-2.17/sbin/mdconfig/mdconfig.c projects/binutils-2.17/sbin/mksnap_ffs/mksnap_ffs.8 projects/binutils-2.17/sbin/newfs/newfs.8 projects/binutils-2.17/sbin/newfs/newfs.c projects/binutils-2.17/sbin/tunefs/tunefs.c projects/binutils-2.17/secure/lib/libcrypto/Makefile projects/binutils-2.17/share/examples/kld/Makefile projects/binutils-2.17/share/examples/pf/pf.conf projects/binutils-2.17/share/man/man4/ath_hal.4 projects/binutils-2.17/share/man/man4/bwn.4 projects/binutils-2.17/share/man/man7/build.7 projects/binutils-2.17/share/man/man7/ports.7 projects/binutils-2.17/share/man/man9/rman.9 projects/binutils-2.17/share/misc/committers-ports.dot projects/binutils-2.17/share/mk/bsd.own.mk projects/binutils-2.17/sys/amd64/amd64/machdep.c projects/binutils-2.17/sys/amd64/amd64/trap.c projects/binutils-2.17/sys/amd64/include/reg.h projects/binutils-2.17/sys/amd64/linux32/linux.h projects/binutils-2.17/sys/amd64/linux32/linux32_machdep.c projects/binutils-2.17/sys/amd64/linux32/linux32_proto.h projects/binutils-2.17/sys/amd64/linux32/linux32_syscall.h projects/binutils-2.17/sys/amd64/linux32/linux32_sysent.c projects/binutils-2.17/sys/amd64/linux32/linux32_sysvec.c projects/binutils-2.17/sys/amd64/linux32/syscalls.master projects/binutils-2.17/sys/arm/at91/at91_machdep.c projects/binutils-2.17/sys/arm/econa/econa_machdep.c projects/binutils-2.17/sys/arm/sa11x0/assabet_machdep.c projects/binutils-2.17/sys/arm/xscale/i80321/ep80219_machdep.c projects/binutils-2.17/sys/arm/xscale/i80321/iq31244_machdep.c projects/binutils-2.17/sys/arm/xscale/ixp425/avila_machdep.c projects/binutils-2.17/sys/boot/common/ufsread.c projects/binutils-2.17/sys/boot/i386/boot2/boot2.c projects/binutils-2.17/sys/boot/pc98/Makefile projects/binutils-2.17/sys/boot/pc98/boot2/boot2.c projects/binutils-2.17/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c projects/binutils-2.17/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/binutils-2.17/sys/compat/linux/linux_emul.c projects/binutils-2.17/sys/compat/linux/linux_emul.h projects/binutils-2.17/sys/compat/linux/linux_futex.c projects/binutils-2.17/sys/compat/linux/linux_misc.c projects/binutils-2.17/sys/compat/linux/linux_signal.c projects/binutils-2.17/sys/compat/linux/linux_signal.h projects/binutils-2.17/sys/compat/linux/linux_stats.c projects/binutils-2.17/sys/conf/NOTES projects/binutils-2.17/sys/conf/files projects/binutils-2.17/sys/conf/files.amd64 projects/binutils-2.17/sys/conf/files.i386 projects/binutils-2.17/sys/conf/files.pc98 projects/binutils-2.17/sys/conf/kern.pre.mk projects/binutils-2.17/sys/conf/options projects/binutils-2.17/sys/contrib/dev/acpica/changes.txt projects/binutils-2.17/sys/contrib/dev/acpica/common/dmtable.c projects/binutils-2.17/sys/contrib/dev/acpica/common/dmtbdump.c projects/binutils-2.17/sys/contrib/dev/acpica/common/dmtbinfo.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslanalyze.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompile.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompiler.h projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompiler.l projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslcompiler.y projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslmessages.h projects/binutils-2.17/sys/contrib/dev/acpica/compiler/aslpredef.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/asltree.c 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/dttable.c projects/binutils-2.17/sys/contrib/dev/acpica/compiler/dtutils.c projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbcmds.c projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbdisply.c projects/binutils-2.17/sys/contrib/dev/acpica/debugger/dbinput.c projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dsopcode.c projects/binutils-2.17/sys/contrib/dev/acpica/dispatcher/dswload.c projects/binutils-2.17/sys/contrib/dev/acpica/events/evgpe.c projects/binutils-2.17/sys/contrib/dev/acpica/events/evregion.c projects/binutils-2.17/sys/contrib/dev/acpica/events/evxfregn.c projects/binutils-2.17/sys/contrib/dev/acpica/executer/exfldio.c projects/binutils-2.17/sys/contrib/dev/acpica/include/acdebug.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acdisasm.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acdispat.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acglobal.h projects/binutils-2.17/sys/contrib/dev/acpica/include/aclocal.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acoutput.h projects/binutils-2.17/sys/contrib/dev/acpica/include/acpixf.h projects/binutils-2.17/sys/contrib/dev/acpica/include/actbl.h projects/binutils-2.17/sys/contrib/dev/acpica/tables/tbfadt.c projects/binutils-2.17/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h projects/binutils-2.17/sys/contrib/dev/acpica/utilities/utglobal.c projects/binutils-2.17/sys/dev/acpica/Osd/OsdTable.c projects/binutils-2.17/sys/dev/acpica/acpi_resource.c projects/binutils-2.17/sys/dev/ahci/ahci.c projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c projects/binutils-2.17/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c projects/binutils-2.17/sys/dev/ath/if_ath.c projects/binutils-2.17/sys/dev/ath/if_ath_tx.c projects/binutils-2.17/sys/dev/ath/if_ath_tx_ht.c projects/binutils-2.17/sys/dev/ath/if_ath_tx_ht.h projects/binutils-2.17/sys/dev/ath/if_athioctl.h projects/binutils-2.17/sys/dev/bce/if_bce.c projects/binutils-2.17/sys/dev/bce/if_bcefw.h projects/binutils-2.17/sys/dev/bce/if_bcereg.h projects/binutils-2.17/sys/dev/e1000/e1000_80003es2lan.c projects/binutils-2.17/sys/dev/e1000/e1000_80003es2lan.h projects/binutils-2.17/sys/dev/e1000/e1000_82540.c projects/binutils-2.17/sys/dev/e1000/e1000_82541.c projects/binutils-2.17/sys/dev/e1000/e1000_82542.c projects/binutils-2.17/sys/dev/e1000/e1000_82543.c projects/binutils-2.17/sys/dev/e1000/e1000_82571.c projects/binutils-2.17/sys/dev/e1000/e1000_82575.c projects/binutils-2.17/sys/dev/e1000/e1000_82575.h projects/binutils-2.17/sys/dev/e1000/e1000_api.c projects/binutils-2.17/sys/dev/e1000/e1000_api.h projects/binutils-2.17/sys/dev/e1000/e1000_defines.h projects/binutils-2.17/sys/dev/e1000/e1000_hw.h projects/binutils-2.17/sys/dev/e1000/e1000_ich8lan.c projects/binutils-2.17/sys/dev/e1000/e1000_ich8lan.h projects/binutils-2.17/sys/dev/e1000/e1000_mac.c projects/binutils-2.17/sys/dev/e1000/e1000_mac.h projects/binutils-2.17/sys/dev/e1000/e1000_manage.c projects/binutils-2.17/sys/dev/e1000/e1000_manage.h projects/binutils-2.17/sys/dev/e1000/e1000_mbx.c projects/binutils-2.17/sys/dev/e1000/e1000_nvm.c projects/binutils-2.17/sys/dev/e1000/e1000_nvm.h projects/binutils-2.17/sys/dev/e1000/e1000_osdep.c projects/binutils-2.17/sys/dev/e1000/e1000_phy.c projects/binutils-2.17/sys/dev/e1000/e1000_phy.h projects/binutils-2.17/sys/dev/e1000/e1000_regs.h projects/binutils-2.17/sys/dev/e1000/e1000_vf.c projects/binutils-2.17/sys/dev/e1000/e1000_vf.h projects/binutils-2.17/sys/dev/e1000/if_igb.c projects/binutils-2.17/sys/dev/e1000/if_igb.h projects/binutils-2.17/sys/dev/fb/splash.c projects/binutils-2.17/sys/dev/fxp/if_fxp.c projects/binutils-2.17/sys/dev/isp/isp.c projects/binutils-2.17/sys/dev/isp/isp_freebsd.c projects/binutils-2.17/sys/dev/isp/isp_freebsd.h projects/binutils-2.17/sys/dev/isp/isp_library.c projects/binutils-2.17/sys/dev/isp/isp_pci.c projects/binutils-2.17/sys/dev/isp/isp_sbus.c projects/binutils-2.17/sys/dev/isp/ispvar.h projects/binutils-2.17/sys/dev/pci/pci.c projects/binutils-2.17/sys/dev/usb/usbdevs projects/binutils-2.17/sys/dev/usb/wlan/if_run.c projects/binutils-2.17/sys/dev/usb/wlan/if_runreg.h projects/binutils-2.17/sys/dev/usb/wlan/if_runvar.h projects/binutils-2.17/sys/fs/tmpfs/tmpfs.h projects/binutils-2.17/sys/fs/tmpfs/tmpfs_subr.c projects/binutils-2.17/sys/geom/eli/g_eli.c projects/binutils-2.17/sys/geom/part/g_part_pc98.c projects/binutils-2.17/sys/geom/sched/gs_rr.c projects/binutils-2.17/sys/i386/i386/machdep.c projects/binutils-2.17/sys/i386/i386/trap.c projects/binutils-2.17/sys/i386/include/reg.h projects/binutils-2.17/sys/i386/linux/linux.h projects/binutils-2.17/sys/i386/linux/linux_machdep.c projects/binutils-2.17/sys/i386/linux/linux_proto.h projects/binutils-2.17/sys/i386/linux/linux_syscall.h projects/binutils-2.17/sys/i386/linux/linux_sysent.c projects/binutils-2.17/sys/i386/linux/linux_sysvec.c projects/binutils-2.17/sys/i386/linux/syscalls.master projects/binutils-2.17/sys/kern/subr_smp.c projects/binutils-2.17/sys/kern/subr_trap.c projects/binutils-2.17/sys/kern/uipc_socket.c projects/binutils-2.17/sys/kern/vfs_bio.c projects/binutils-2.17/sys/mips/cavium/if_octm.c projects/binutils-2.17/sys/mips/cavium/octe/ethernet-common.c projects/binutils-2.17/sys/mips/cavium/octeon_mp.c projects/binutils-2.17/sys/mips/include/hwfunc.h projects/binutils-2.17/sys/mips/mips/mp_machdep.c projects/binutils-2.17/sys/mips/rmi/xlr_machdep.c projects/binutils-2.17/sys/mips/sibyte/sb_scd.c projects/binutils-2.17/sys/modules/acpi/acpi/Makefile projects/binutils-2.17/sys/modules/linux/Makefile projects/binutils-2.17/sys/modules/usb/Makefile projects/binutils-2.17/sys/net/if.c projects/binutils-2.17/sys/net/netisr.c projects/binutils-2.17/sys/net/rtsock.c projects/binutils-2.17/sys/net/vnet.h projects/binutils-2.17/sys/netinet/ipfw/ip_dummynet.c projects/binutils-2.17/sys/netinet/sctp_asconf.c projects/binutils-2.17/sys/netinet/sctp_input.c projects/binutils-2.17/sys/netinet/sctp_ss_functions.c projects/binutils-2.17/sys/sys/mutex.h projects/binutils-2.17/sys/sys/proc.h projects/binutils-2.17/sys/ufs/ffs/ffs_softdep.c projects/binutils-2.17/sys/ufs/ffs/fs.h projects/binutils-2.17/sys/ufs/ufs/ufs_vnops.c projects/binutils-2.17/sys/vm/vm_kern.c projects/binutils-2.17/sys/vm/vm_meter.c projects/binutils-2.17/sys/vm/vm_object.c projects/binutils-2.17/sys/vm/vm_page.c projects/binutils-2.17/tools/tools/ath/ath_ee_v14_print/ath_ee_v14_print.c projects/binutils-2.17/tools/tools/nanobsd/FlashDevice.sub projects/binutils-2.17/usr.bin/stat/stat.c projects/binutils-2.17/usr.bin/truss/setup.c projects/binutils-2.17/usr.sbin/acpi/acpidb/Makefile projects/binutils-2.17/usr.sbin/acpi/iasl/Makefile projects/binutils-2.17/usr.sbin/config/configvers.h projects/binutils-2.17/usr.sbin/config/mkmakefile.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/Makefile ============================================================================== --- projects/binutils-2.17/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -30,6 +30,7 @@ # delete-old-libs - Delete obsolete libraries. # targets - Print a list of supported TARGET/TARGET_ARCH pairs # for world and kernel targets. +# toolchains - Build a toolchain for all world and kernel targets. # # 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 @@ -307,8 +308,10 @@ make: .PHONY ${MMAKE} install DESTDIR=${MAKEPATH} BINDIR= tinderbox: - @cd ${.CURDIR} && \ - DOING_TINDERBOX=YES ${MAKE} JFLAG=${JFLAG} universe + @cd ${.CURDIR} && ${MAKE} DOING_TINDERBOX=YES universe + +toolchains: + @cd ${.CURDIR} && ${MAKE} UNIVERSE_TARGET=toolchain universe # # universe @@ -328,6 +331,12 @@ TARGET_ARCHES_sun4v?= sparc64 TARGET_ARCHES_${target}?= ${target} .endfor +.if defined(UNIVERSE_TARGET) +MAKE_JUST_WORLDS= YES +.else +UNIVERSE_TARGET?= buildworld +.endif + targets: @echo "Supported TARGET/TARGET_ARCH pairs for world and kernel targets" .for target in ${TARGETS} @@ -361,16 +370,16 @@ universe_${target}_prologue: .for target_arch in ${TARGET_ARCHES_${target}} universe_${target}: universe_${target}_${target_arch} universe_${target}_${target_arch}: universe_${target}_prologue - @echo ">> ${target}.${target_arch} buildworld started on `LC_ALL=C date`" + @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} started on `LC_ALL=C date`" @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ - ${MAKE} ${JFLAG} buildworld \ + ${MAKE} ${JFLAG} ${UNIVERSE_TARGET} \ TARGET=${target} \ TARGET_ARCH=${target_arch} \ - > _.${target}.${target_arch}.buildworld 2>&1 || \ - (echo "${target}.${target_arch} world failed," \ - "check _.${target}.${target_arch}.buildworld for details" | \ + > _.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \ + (echo "${target}.${target_arch} ${UNIVERSE_TARGET} failed," \ + "check _.${target}.${target_arch}.${UNIVERSE_TARGET} for details" | \ ${MAKEFAIL})) - @echo ">> ${target}.${target_arch} buildworld completed on `LC_ALL=C date`" + @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} completed on `LC_ALL=C date`" .endfor .endif .if !defined(MAKE_JUST_WORLDS) Modified: projects/binutils-2.17/Makefile.inc1 ============================================================================== --- projects/binutils-2.17/Makefile.inc1 Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/Makefile.inc1 Wed Feb 16 19:30:29 2011 (r218746) @@ -28,6 +28,17 @@ # /usr/share/mk. These include: # obj depend all install clean cleandepend cleanobj +# You are supposed to define both of these when calling Makefile.inc1 +# directly. However, some old scripts don't. Cope for the moment, but +# issue a new warning for a transition period. +.if defined(TARGET) && !defined(TARGET_ARCH) +.warning "You must pass both TARGET and TARGET_ARCH to Makefile.inc1. Setting TARGET_ARCH=${TARGET}." +TARGET_ARCH=${TARGET} +.endif +.if !defined(TARGET) || !defined(TARGET_ARCH) +.error "Both TARGET and TARGET_ARCH must be defined." +.endif + .include .include @@ -1378,19 +1389,63 @@ check-old: check-old-files check-old-lib showconfig: @${MAKE} -n -f bsd.own.mk -V dummy -dg1 | grep ^MK_ | sort +.if !empty(KRNLOBJDIR) && !empty(KERNCONF) +DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/ + +.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE) +.if exists(${KERNCONFDIR}/${KERNCONF}) +FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \ + ${KERNCONFDIR}/${KERNCONF} +.endif +.endif + +.endif + +.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH}) +DTBOUTPUTPATH= ${.CURDIR} +.endif + +# +# Build 'standalone' Device Tree Blob +# +builddtb: + @if [ "${FDT_DTS_FILE}" = "" ]; then \ + echo "ERROR: FDT_DTS_FILE must be specified!"; \ + exit 1; \ + fi; \ + if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ]; then \ + echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \ + exist!"; \ + exit 1; \ + fi; \ + if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then \ + echo "WARNING: DTB will be placed in the current working \ + directory"; \ + fi + @PATH=${TMPPATH} \ + dtc -O dtb -o \ + ${DTBOUTPUTPATH}/`echo ${FDT_DTS_FILE} | cut -d. -f1`.dtb -b 0 \ + -p 1024 ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ############### .if defined(XDEV) && defined(XDEV_ARCH) +.if ${XDEV} == ${MACHINE} && ${XDEV_ARCH} == ${MACHINE_ARCH} +XDEV_CPUTYPE?=${CPUTYPE} +.else +XDEV_CPUTYPE?=${TARGET_CPUTYPE} +.endif + NOFUN=-DNO_FSCHG -DWITHOUT_HTML -DWITHOUT_INFO -DNO_LINT \ -DWITHOUT_MAN -DWITHOUT_NLS -DWITHOUT_PROFILE \ - -DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS + -DWITHOUT_KERBEROS -DWITHOUT_RESCUE -DNO_WARNS \ + TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} \ + CPUTYPE=${XDEV_CPUTYPE} -XDDIR=${XDEV}-freebsd +XDDIR=${XDEV_ARCH}-freebsd XDTP=/usr/${XDDIR} -CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} \ - TARGET=${XDEV} TARGET_ARCH=${XDEV_ARCH} +CDBENV=MAKEOBJDIRPREFIX=${MAKEOBJDIRPREFIX}/${XDDIR} CDENV= ${CDBENV} \ _SHLIBDIRPREFIX=${XDTP} \ TOOLS_PREFIX=${XDTP} @@ -1412,7 +1467,7 @@ xdev: xdev-build xdev-install xdev-build: _xb-build-tools _xb-cross-tools _xb-build-tools: - ${_+_}cd ${.CURDIR}; \ + ${_+_}@cd ${.CURDIR}; \ ${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools _xb-cross-tools: @@ -1466,41 +1521,3 @@ _xi-links: ../../../../usr/bin/${XDDIR}${OSREL}-$$i; \ done .endif - -.if !empty(KRNLOBJDIR) && !empty(KERNCONF) -DTBOUTPUTPATH= ${KRNLOBJDIR}/${KERNCONF}/ - -.if !defined(FDT_DTS_FILE) || empty(FDT_DTS_FILE) -.if exists(${KERNCONFDIR}/${KERNCONF}) -FDT_DTS_FILE!= awk 'BEGIN {FS="="} /^makeoptions[[:space:]]+FDT_DTS_FILE/ {print $$2}' \ - ${KERNCONFDIR}/${KERNCONF} -.endif -.endif - -.endif - -.if !defined(DTBOUTPUTPATH) || !exists(${DTBOUTPUTPATH}) -DTBOUTPUTPATH= ${.CURDIR} -.endif - -# -# Build 'standalone' Device Tree Blob -# -builddtb: - @if [ "${FDT_DTS_FILE}" = "" ]; then \ - echo "ERROR: FDT_DTS_FILE must be specified!"; \ - exit 1; \ - fi; \ - if [ ! -f ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} ]; then \ - echo "ERROR: Specified DTS file (${FDT_DTS_FILE}) does not \ - exist!"; \ - exit 1; \ - fi; \ - if [ "${DTBOUTPUTPATH}" = "${.CURDIR}" ]; then \ - echo "WARNING: DTB will be placed in the current working \ - directory"; \ - fi - @PATH=${TMPPATH} \ - dtc -O dtb -o \ - ${DTBOUTPUTPATH}/`echo ${FDT_DTS_FILE} | cut -d. -f1`.dtb -b 0 \ - -p 1024 ${.CURDIR}/sys/boot/fdt/dts/${FDT_DTS_FILE} Modified: projects/binutils-2.17/bin/ed/ed.1 ============================================================================== --- projects/binutils-2.17/bin/ed/ed.1 Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/bin/ed/ed.1 Wed Feb 16 19:30:29 2011 (r218746) @@ -231,7 +231,7 @@ The current line (address) in the buffer The last line in the buffer. .It n The -.Em n Ns th, +.Em n Ns th line in the buffer where .Em n @@ -649,7 +649,7 @@ The mark is not cleared until the line i deleted or otherwise modified. .It (.,.)l Print the addressed lines unambiguously. -If a single line fills for than one screen (as might be the case +If a single line fills more than one screen (as might be the case when viewing a binary file, for instance), a .Dq Li --More-- prompt is printed on the last line. Modified: projects/binutils-2.17/bin/sh/arith_yacc.c ============================================================================== --- projects/binutils-2.17/bin/sh/arith_yacc.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/bin/sh/arith_yacc.c Wed Feb 16 19:30:29 2011 (r218746) @@ -125,6 +125,8 @@ static arith_t do_binop(int op, arith_t case ARITH_DIV: if (!b) yyerror("division by zero"); + if (a == ARITH_MIN && b == -1) + yyerror("divide error"); return op == ARITH_REM ? a % b : a / b; case ARITH_MUL: return a * b; Modified: projects/binutils-2.17/bin/sh/shell.h ============================================================================== --- projects/binutils-2.17/bin/sh/shell.h Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/bin/sh/shell.h Wed Feb 16 19:30:29 2011 (r218746) @@ -59,6 +59,8 @@ typedef intmax_t arith_t; #define ARITH_FORMAT_STR "%" PRIdMAX #define atoarith_t(arg) strtoimax(arg, NULL, 0) #define strtoarith_t(nptr, endptr, base) strtoimax(nptr, endptr, base) +#define ARITH_MIN INTMAX_MIN +#define ARITH_MAX INTMAX_MAX typedef void *pointer; #define MKINIT /* empty */ Modified: projects/binutils-2.17/bin/test/test.c ============================================================================== --- projects/binutils-2.17/bin/test/test.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/bin/test/test.c Wed Feb 16 19:30:29 2011 (r218746) @@ -9,6 +9,10 @@ * * This program is in the Public Domain. */ +/* + * Important: This file is used both as a standalone program /bin/test and + * as a builtin for /bin/sh (#define SHELL). + */ #include __FBSDID("$FreeBSD$"); Modified: projects/binutils-2.17/cddl/lib/libzpool/Makefile ============================================================================== --- projects/binutils-2.17/cddl/lib/libzpool/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/cddl/lib/libzpool/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -14,6 +14,9 @@ .if ${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "amd64" || ${MACHINE_ARCH} == "ia64" || ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "powerpc64" .PATH: ${.CURDIR}/../../../sys/cddl/contrib/opensolaris/common/atomic/${MACHINE_ARCH} ATOMIC_SRCS= opensolaris_atomic.S +.if ${MACHINE_ARCH} != "ia64" && ${MACHINE_ARCH} != "sparc64" +ACFLAGS+= -Wa,--noexecstack +.endif .else .PATH: ${.CURDIR}/../../../sys/cddl/compat/opensolaris/kern ATOMIC_SRCS= opensolaris_atomic.c Modified: projects/binutils-2.17/crypto/openssl/ssl/t1_lib.c ============================================================================== --- projects/binutils-2.17/crypto/openssl/ssl/t1_lib.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/crypto/openssl/ssl/t1_lib.c Wed Feb 16 19:30:29 2011 (r218746) @@ -521,6 +521,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, } n2s(data, idsize); dsize -= 2 + idsize; + size -= 2 + idsize; if (dsize < 0) { *al = SSL_AD_DECODE_ERROR; @@ -559,9 +560,14 @@ int ssl_parse_clienthello_tlsext(SSL *s, } /* Read in request_extensions */ + if (size < 2) + { + *al = SSL_AD_DECODE_ERROR; + return 0; + } n2s(data,dsize); size -= 2; - if (dsize > size) + if (dsize != size) { *al = SSL_AD_DECODE_ERROR; return 0; Modified: projects/binutils-2.17/games/fortune/datfiles/fortunes ============================================================================== --- projects/binutils-2.17/games/fortune/datfiles/fortunes Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/games/fortune/datfiles/fortunes Wed Feb 16 19:30:29 2011 (r218746) @@ -38136,10 +38136,6 @@ couldn't compete successfully with poets -- Kilgore Trout (Philip J. Farmer) "Venus on the Half Shell" % -PLATONIC FRIENDSHIP: - What develops when two people get - tired of making love to each other. -% Play Rogue, visit exotic locations, meet strange creatures and kill them. % Modified: projects/binutils-2.17/games/fortune/datfiles/fortunes-o.real ============================================================================== --- projects/binutils-2.17/games/fortune/datfiles/fortunes-o.real Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/games/fortune/datfiles/fortunes-o.real Wed Feb 16 19:30:29 2011 (r218746) @@ -10487,6 +10487,10 @@ Pile driver, n.: Planned Parenthood: The emission Control Center. % +PLATONIC FRIENDSHIP: + What develops when two people get + tired of making love to each other. +% Playing poker with busty Ms. Ware, He announced as he folded with flair, "I had four of a kind, Modified: projects/binutils-2.17/gnu/usr.bin/groff/tmac/mdoc.local ============================================================================== --- projects/binutils-2.17/gnu/usr.bin/groff/tmac/mdoc.local Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/gnu/usr.bin/groff/tmac/mdoc.local Wed Feb 16 19:30:29 2011 (r218746) @@ -74,6 +74,7 @@ .ds doc-default-operating-system FreeBSD\~9.0 . .\" FreeBSD releases not found in doc-common +.ds doc-operating-system-FreeBSD-7.4 7.4 .ds doc-operating-system-FreeBSD-8.2 8.2 .ds doc-operating-system-FreeBSD-9.0 9.0 . Modified: projects/binutils-2.17/lib/libc/gen/glob.3 ============================================================================== --- projects/binutils-2.17/lib/libc/gen/glob.3 Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libc/gen/glob.3 Wed Feb 16 19:30:29 2011 (r218746) @@ -30,7 +30,7 @@ .\" @(#)glob.3 8.3 (Berkeley) 4/16/94 .\" $FreeBSD$ .\" -.Dd September 1, 2004 +.Dd February 15, 2011 .Dt GLOB 3 .Os .Sh NAME @@ -417,7 +417,7 @@ execvp("ls", g.gl_pathv); .Sh SEE ALSO .Xr sh 1 , .Xr fnmatch 3 , -.Xr regexp 3 +.Xr regex 3 .Sh STANDARDS The current implementation of the .Fn glob Modified: projects/binutils-2.17/lib/libc/gen/sysconf.3 ============================================================================== --- projects/binutils-2.17/lib/libc/gen/sysconf.3 Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libc/gen/sysconf.3 Wed Feb 16 19:30:29 2011 (r218746) @@ -28,7 +28,7 @@ .\" @(#)sysconf.3 8.3 (Berkeley) 4/19/94 .\" $FreeBSD$ .\" -.Dd December 14, 2006 +.Dd February 13, 2011 .Dt SYSCONF 3 .Os .Sh NAME @@ -85,6 +85,9 @@ The number of processors currently onlin The maximum number of open files per user id. .It Li _SC_PAGESIZE The size of a system page in bytes. +.It Li _SC_PAGE_SIZE +Equivalent to +.Li _SC_PAGESIZE . .It Li _SC_STREAM_MAX The minimum maximum number of streams that a process may have open at any one time. @@ -160,10 +163,64 @@ otherwise \-1. .It Li _SC_2_UPE Return 1 if the system supports the User Portability Utilities Option, otherwise \-1. +.It Li _SC_AIO_LISTIO_MAX +Maximum number of I/O operations in a single list I/O call supported. +.It Li _SC_AIO_MAX +Maximum number of outstanding asynchronous I/O operations supported. +.It Li _SC_AIO_PRIO_DELTA_MAX +The maximum amount by which a process can decrease its asynchronous I/O +priority level from its own scheduling priority. +.It Li _SC_DELAYTIMER_MAX +Maximum number of timer expiration overruns. +.It Li _SC_MQ_OPEN_MAX +The maximum number of open message queue descriptors a process may hold. +.It Li _SC_RTSIG_MAX +Maximum number of realtime signals reserved for application use. +.It Li _SC_SEM_NSEMS_MAX +Maximum number of semaphores that a process may have. +.It Li _SC_SEM_VALUE_MAX +The maximum value a semaphore may have. +.It Li _SC_SIGQUEUE_MAX +Maximum number of queued signals that a process may send and have pending at +the receiver(s) at any time. +.It Li _SC_TIMER_MAX +Maximum number of timers per process supported. +.It Li _SC_GETGR_R_SIZE_MAX +Suggested initial value for the size of the group entry buffer. +.It Li _SC_GETPW_R_SIZE_MAX +Suggested initial value for the size of the password entry buffer. +.It Li _SC_HOST_NAME_MAX +Maximum length of a host name (not including the terminating null) as +returned from the +.Fn gethostname +function. +.It Li _SC_LOGIN_NAME_MAX +Maximum length of a login name. +.It Li _SC_THREAD_STACK_MIN +Minimum size in bytes of thread stack storage. +.It Li _SC_THREAD_THREADS_MAX +Maximum number of threads that can be created per process. +.It Li _SC_TTY_NAME_MAX +Maximum length of terminal device name. +.It Li _SC_SYMLOOP_MAX +Maximum number of symbolic links that can be reliably traversed in the +resolution of a pathname in the absence of a loop. +.It Li _SC_ATEXIT_MAX +Maximum number of functions that may be registered with +.Fn atexit . +.It Li _SC_XOPEN_VERSION +An integer value greater than or equal to 4, +indicating the version of the X/Open Portability Guide to which this +system conforms. +.It Li _SC_XOPEN_XCU_VERSION +An integer value indicating the version of the XCU Specification to which +this system conforms. .El .Pp These values also exist, but may not be standard: .Bl -tag -width 6n +.It Li _SC_CPUSET_SIZE +Size of the kernel cpuset. .It Li _SC_PHYS_PAGES The number of pages of physical memory. Note that it is possible that the product of this value and the value of Modified: projects/binutils-2.17/lib/libdevinfo/devinfo.h ============================================================================== --- projects/binutils-2.17/lib/libdevinfo/devinfo.h Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libdevinfo/devinfo.h Wed Feb 16 19:30:29 2011 (r218746) @@ -31,7 +31,7 @@ #define _DEVINFO_H_INCLUDED #include -#include +#include #include typedef __uintptr_t devinfo_handle_t; Modified: projects/binutils-2.17/lib/libdevinfo/devinfo_var.h ============================================================================== --- projects/binutils-2.17/lib/libdevinfo/devinfo_var.h Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libdevinfo/devinfo_var.h Wed Feb 16 19:30:29 2011 (r218746) @@ -27,6 +27,7 @@ * $FreeBSD$ */ +#include #include #include Modified: projects/binutils-2.17/lib/liblzma/Makefile ============================================================================== --- projects/binutils-2.17/lib/liblzma/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/liblzma/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -78,6 +78,7 @@ SRCS+= check.c \ .if defined(MACHINE_ARCH) && ${MACHINE_ARCH} == "i386" SRCS+= crc32_x86.S \ crc64_x86.S +ACFLAGS+= -Wa,--noexecstack .else SRCS+= crc32_fast.c \ crc64_fast.c Modified: projects/binutils-2.17/lib/libmd/Makefile ============================================================================== --- projects/binutils-2.17/lib/libmd/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libmd/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -43,11 +43,14 @@ CFLAGS+= -I${.CURDIR} .if exists(${MACHINE_ARCH}/sha.S) SRCS+= sha.S -CFLAGS+= -DSHA1_ASM -DELF +CFLAGS+= -DSHA1_ASM .endif .if exists(${MACHINE_ARCH}/rmd160.S) SRCS+= rmd160.S -CFLAGS+= -DRMD160_ASM -DELF +CFLAGS+= -DRMD160_ASM +.endif +.if exists(${MACHINE_ARCH}/sha.S) || exists(${MACHINE_ARCH}/rmd160.S) +ACFLAGS+= -DELF -Wa,--noexecstack .endif md2hl.c: mdXhl.c Modified: projects/binutils-2.17/lib/libufs/libufs.h ============================================================================== --- projects/binutils-2.17/lib/libufs/libufs.h Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libufs/libufs.h Wed Feb 16 19:30:29 2011 (r218746) @@ -31,34 +31,6 @@ #define __LIBUFS_H__ /* - * libufs macros (internal, non-exported). - */ -#ifdef _LIBUFS -#ifdef _LIBUFS_DEBUGGING -/* - * Trace steps through libufs, to be used at entry and erroneous return. - */ -#define ERROR(uufsd, str) \ -do { \ - fprintf(stderr, "libufs in %s", __func__); \ - if (str != NULL) \ - fprintf(stderr, ": %s", str); \ - if (errno) \ - fprintf(stderr, ": %s", strerror(errno)); \ - fprintf(stderr, "\n"); \ - if ((uufsd) != NULL) \ - (uufsd)->d_error = str; \ -} while (0) -#else /* _LIBUFS_DEBUGGING */ -#define ERROR(uufsd, str) \ -do { \ - if ((uufsd) != NULL) \ - (uufsd)->d_error = str; \ -} while (0) -#endif /* _LIBUFS_DEBUGGING */ -#endif /* _LIBUFS */ - -/* * libufs structures. */ @@ -94,6 +66,30 @@ struct uufsd { #define d_cg d_cgunion.d_cg }; +/* + * libufs macros (internal, non-exported). + */ +#ifdef _LIBUFS +/* + * Trace steps through libufs, to be used at entry and erroneous return. + */ +static inline void +ERROR(struct uufsd *u, const char *str) +{ + +#ifdef _LIBUFS_DEBUGGING + if (str != NULL) { + fprintf(stderr, "libufs: %s", str); + if (errno != 0) + fprintf(stderr, ": %s", strerror(errno)); + fprintf(stderr, "\n"); + } +#endif + if (u != NULL) + u->d_error = str; +} +#endif /* _LIBUFS */ + __BEGIN_DECLS /* Modified: projects/binutils-2.17/lib/libz/Makefile ============================================================================== --- projects/binutils-2.17/lib/libz/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/libz/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -39,12 +39,14 @@ SRCS+= zutil.c .PATH: ${.CURDIR}/contrib/asm686 SRCS+= match.S CFLAGS+= -DASMV -DNO_UNDERLINE +ACFLAGS+= -Wa,--noexecstack .endif .if ${MACHINE_ARCH} == "amd64" .PATH: ${.CURDIR}/contrib/gcc_gvmat64 SRCS+= gvmat64.S CFLAGS+= -DASMV -DNO_UNDERLINE +ACFLAGS+= -Wa,--noexecstack .endif VERSION_DEF= ${.CURDIR}/Versions.def Modified: projects/binutils-2.17/lib/msun/src/e_asin.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/e_asin.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/e_asin.c Wed Feb 16 19:30:29 2011 (r218746) @@ -82,7 +82,7 @@ __ieee754_asin(double x) return x*pio2_hi+x*pio2_lo; return (x-x)/(x-x); /* asin(|x|>1) is NaN */ } else if (ix<0x3fe00000) { /* |x|<0.5 */ - if(ix<0x3e400000) { /* if |x| < 2**-27 */ + if(ix<0x3e500000) { /* if |x| < 2**-26 */ if(huge+x>one) return x;/* return x with inexact if x!=0*/ } t = x*x; Modified: projects/binutils-2.17/lib/msun/src/e_expf.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/e_expf.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/e_expf.c Wed Feb 16 19:30:29 2011 (r218746) @@ -72,7 +72,7 @@ __ieee754_expf(float x) /* default IEEE } x = hi - lo; } - else if(hx < 0x31800000) { /* when |x|<2**-28 */ + else if(hx < 0x39000000) { /* when |x|<2**-14 */ if(huge+x>one) return one+x;/* trigger inexact */ } else k = 0; Modified: projects/binutils-2.17/lib/msun/src/s_atan.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/s_atan.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/s_atan.c Wed Feb 16 19:30:29 2011 (r218746) @@ -87,7 +87,7 @@ atan(double x) if(hx>0) return atanhi[3]+*(volatile double *)&atanlo[3]; else return -atanhi[3]-*(volatile double *)&atanlo[3]; } if (ix < 0x3fdc0000) { /* |x| < 0.4375 */ - if (ix < 0x3e200000) { /* |x| < 2^-29 */ + if (ix < 0x3e400000) { /* |x| < 2^-27 */ if(huge+x>one) return x; /* raise inexact */ } id = -1; Modified: projects/binutils-2.17/lib/msun/src/s_cos.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/s_cos.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/s_cos.c Wed Feb 16 19:30:29 2011 (r218746) @@ -63,7 +63,7 @@ cos(double x) /* |x| ~< pi/4 */ ix &= 0x7fffffff; if(ix <= 0x3fe921fb) { - if(ix<0x3e400000) /* if x < 2**-27 */ + if(ix<0x3e46a09e) /* if x < 2**-27 * sqrt(2) */ if(((int)x)==0) return 1.0; /* generate inexact */ return __kernel_cos(x,z); } Modified: projects/binutils-2.17/lib/msun/src/s_nexttoward.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/s_nexttoward.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/s_nexttoward.c Wed Feb 16 19:30:29 2011 (r218746) @@ -63,8 +63,8 @@ nexttoward(double x, long double y) if(ix<0x00100000) { /* underflow */ t = x*x; if(t!=x) { /* raise underflow flag */ - INSERT_WORDS(y,hx,lx); - return y; + INSERT_WORDS(x,hx,lx); + return x; } } INSERT_WORDS(x,hx,lx); Modified: projects/binutils-2.17/lib/msun/src/s_nexttowardf.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/s_nexttowardf.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/s_nexttowardf.c Wed Feb 16 19:30:29 2011 (r218746) @@ -50,8 +50,8 @@ nexttowardf(float x, long double y) if(ix<0x00800000) { /* underflow */ t = x*x; if(t!=x) { /* raise underflow flag */ - SET_FLOAT_WORD(y,hx); - return y; + SET_FLOAT_WORD(x,hx); + return x; } } SET_FLOAT_WORD(x,hx); Modified: projects/binutils-2.17/lib/msun/src/s_sin.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/s_sin.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/s_sin.c Wed Feb 16 19:30:29 2011 (r218746) @@ -63,7 +63,7 @@ sin(double x) /* |x| ~< pi/4 */ ix &= 0x7fffffff; if(ix <= 0x3fe921fb) { - if(ix<0x3e400000) /* |x| < 2**-27 */ + if(ix<0x3e500000) /* |x| < 2**-26 */ {if((int)x==0) return x;} /* generate inexact */ return __kernel_sin(x,z,0); } Modified: projects/binutils-2.17/lib/msun/src/s_tan.c ============================================================================== --- projects/binutils-2.17/lib/msun/src/s_tan.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/lib/msun/src/s_tan.c Wed Feb 16 19:30:29 2011 (r218746) @@ -62,7 +62,7 @@ tan(double x) /* |x| ~< pi/4 */ ix &= 0x7fffffff; if(ix <= 0x3fe921fb) { - if(ix<0x3e300000) /* x < 2**-28 */ + if(ix<0x3e400000) /* x < 2**-27 */ if((int)x==0) return x; /* generate inexact */ return __kernel_tan(x,z,1); } Modified: projects/binutils-2.17/release/doc/en_US.ISO8859-1/relnotes/article.sgml ============================================================================== --- projects/binutils-2.17/release/doc/en_US.ISO8859-1/relnotes/article.sgml Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/release/doc/en_US.ISO8859-1/relnotes/article.sgml Wed Feb 16 19:30:29 2011 (r218746) @@ -496,9 +496,8 @@ WPA Supplicant has been updated from 0.5.8 to 0.5.10. - A snapshot of xz as of - 12 April 2010 has been added. More information can be found in the - &man.xz.1;, &man.xzdec.1; and &man.lzmainfo.1; manual pages. + xz has been updated + from snapshot as of 12 April 2010 to 5.0.0. Modified: projects/binutils-2.17/sbin/fsck_ffs/fsck.h ============================================================================== --- projects/binutils-2.17/sbin/fsck_ffs/fsck.h Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/fsck_ffs/fsck.h Wed Feb 16 19:30:29 2011 (r218746) @@ -268,6 +268,7 @@ char snapname[BUFSIZ]; /* when doing sna char *cdevname; /* name of device being checked */ long dev_bsize; /* computed value of DEV_BSIZE */ long secsize; /* actual disk sector size */ +long real_dev_bsize; char nflag; /* assume a no response */ char yflag; /* assume a yes response */ int bkgrdflag; /* use a snapshot to run on an active system */ Modified: projects/binutils-2.17/sbin/fsck_ffs/setup.c ============================================================================== --- projects/binutils-2.17/sbin/fsck_ffs/setup.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/fsck_ffs/setup.c Wed Feb 16 19:30:29 2011 (r218746) @@ -446,7 +446,7 @@ sblock_init(void) if (sblk.b_un.b_buf == NULL || asblk.b_un.b_buf == NULL) errx(EEXIT, "cannot allocate space for superblock"); if ((lp = getdisklabel(NULL, fsreadfd))) - dev_bsize = secsize = lp->d_secsize; + real_dev_bsize = dev_bsize = secsize = lp->d_secsize; else dev_bsize = secsize = DEV_BSIZE; } Modified: projects/binutils-2.17/sbin/fsck_ffs/suj.c ============================================================================== --- projects/binutils-2.17/sbin/fsck_ffs/suj.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/fsck_ffs/suj.c Wed Feb 16 19:30:29 2011 (r218746) @@ -28,6 +28,7 @@ __FBSDID("$FreeBSD$"); #include +#include #include #include #include @@ -201,6 +202,11 @@ opendisk(const char *devnam) disk->d_error); } fs = &disk->d_fs; + if (real_dev_bsize == 0 && ioctl(disk->d_fd, DIOCGSECTORSIZE, + &real_dev_bsize) == -1) + real_dev_bsize = secsize; + if (debug) + printf("dev_bsize %ld\n", real_dev_bsize); } /* @@ -2262,7 +2268,7 @@ suj_build(void) rec = (union jrec *)seg->ss_blk; for (i = 0; i < seg->ss_rec.jsr_cnt; off += JREC_SIZE, rec++) { /* skip the segrec. */ - if ((off % DEV_BSIZE) == 0) + if ((off % real_dev_bsize) == 0) continue; switch (rec->rec_jrefrec.jr_op) { case JOP_ADDREF: @@ -2340,7 +2346,7 @@ suj_prune(void) TAILQ_FOREACH_SAFE(seg, &allsegs, ss_next, segn) { if (!discard && newseq++ == seg->ss_rec.jsr_seq) { jrecs += seg->ss_rec.jsr_cnt; - jbytes += seg->ss_rec.jsr_blocks * DEV_BSIZE; + jbytes += seg->ss_rec.jsr_blocks * real_dev_bsize; continue; } discard = 1; @@ -2440,7 +2446,7 @@ jblocks_next(struct jblocks *jblocks, in int freecnt; int blocks; - blocks = bytes / DEV_BSIZE; + blocks = bytes / disk->d_bsize; jext = &jblocks->jb_extent[jblocks->jb_head]; freecnt = jext->je_blocks - jblocks->jb_off; if (freecnt == 0) { @@ -2452,7 +2458,7 @@ jblocks_next(struct jblocks *jblocks, in } if (freecnt > blocks) freecnt = blocks; - *actual = freecnt * DEV_BSIZE; + *actual = freecnt * disk->d_bsize; daddr = jext->je_daddr + jblocks->jb_off; return (daddr); @@ -2466,7 +2472,7 @@ static void jblocks_advance(struct jblocks *jblocks, int bytes) { - jblocks->jb_off += bytes / DEV_BSIZE; + jblocks->jb_off += bytes / disk->d_bsize; } static void @@ -2563,7 +2569,7 @@ restart: } for (rec = (void *)block; size; size -= recsize, rec = (struct jsegrec *)((uintptr_t)rec + recsize)) { - recsize = DEV_BSIZE; + recsize = real_dev_bsize; if (rec->jsr_time != fs->fs_mtime) { if (debug) printf("Rec time %jd != fs mtime %jd\n", @@ -2579,7 +2585,7 @@ restart: continue; } blocks = rec->jsr_blocks; - recsize = blocks * DEV_BSIZE; + recsize = blocks * real_dev_bsize; if (recsize > size) { /* * We may just have run out of buffer, restart @@ -2592,7 +2598,7 @@ restart: if (debug) printf("Found invalid segsize %d > %d\n", recsize, size); - recsize = DEV_BSIZE; + recsize = real_dev_bsize; jblocks_advance(suj_jblocks, recsize); continue; } @@ -2600,15 +2606,15 @@ restart: * Verify that all blocks in the segment are present. */ for (i = 1; i < blocks; i++) { - recn = (void *) - ((uintptr_t)rec) + i * DEV_BSIZE; + recn = (void *)((uintptr_t)rec) + i * + real_dev_bsize; if (recn->jsr_seq == rec->jsr_seq && recn->jsr_time == rec->jsr_time) continue; if (debug) printf("Incomplete record %jd (%d)\n", rec->jsr_seq, i); - recsize = i * DEV_BSIZE; + recsize = i * real_dev_bsize; jblocks_advance(suj_jblocks, recsize); goto restart; } Modified: projects/binutils-2.17/sbin/mdconfig/mdconfig.c ============================================================================== --- projects/binutils-2.17/sbin/mdconfig/mdconfig.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/mdconfig/mdconfig.c Wed Feb 16 19:30:29 2011 (r218746) @@ -373,7 +373,11 @@ md_list(char *units, int opt) found = 1; } gc = &pp->lg_config; - printf("%s", pp->lg_name); + if (nflag && strncmp(pp->lg_name, "md", 2) == 0) + printf("%s", pp->lg_name + 2); + else + printf("%s", pp->lg_name); + if (opt & OPT_VERBOSE || opt & OPT_UNIT) { type = geom_config_get(gc, "type"); if (strcmp(type, "vnode") == 0) Modified: projects/binutils-2.17/sbin/mksnap_ffs/mksnap_ffs.8 ============================================================================== --- projects/binutils-2.17/sbin/mksnap_ffs/mksnap_ffs.8 Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/mksnap_ffs/mksnap_ffs.8 Wed Feb 16 19:30:29 2011 (r218746) @@ -34,7 +34,7 @@ .\" .\" $FreeBSD$ .\" -.Dd May 29, 2009 +.Dd February 14, 2011 .Dt MKSNAP_FFS 8 .Os .Sh NAME @@ -79,3 +79,12 @@ utility first appeared in .Sh CAVEATS The disk full situation is not handled gracefully and may lead to a system panic when no free blocks are found. +.Pp +Every filesystem can have only up to 20 active snapshots. +When this limit is reached, attempting to create more snapshots +fails with +.Er ENOSPC , +and +.Nm +reports that it is +.Dq out of space . Modified: projects/binutils-2.17/sbin/newfs/newfs.8 ============================================================================== --- projects/binutils-2.17/sbin/newfs/newfs.8 Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/newfs/newfs.8 Wed Feb 16 19:30:29 2011 (r218746) @@ -36,7 +36,7 @@ .Nd construct a new UFS1/UFS2 file system .Sh SYNOPSIS .Nm -.Op Fl EJNUlnt +.Op Fl EJNUjlnt .Op Fl L Ar volname .Op Fl O Ar filesystem-type .Op Fl S Ar sector-size @@ -157,6 +157,12 @@ If fewer inodes are desired, a larger nu to create more inodes a smaller number should be given. One inode is required for each distinct file, so this value effectively specifies the average file size on the file system. +.It Fl j +Enable soft updates journaling on the new file system. +This flag is implemented by running the +.Xr tunefs 8 +utility found in the user's +.Dv $PATH . .It Fl l Enable multilabel MAC on the new file system. .It Fl m Ar free-space Modified: projects/binutils-2.17/sbin/newfs/newfs.c ============================================================================== --- projects/binutils-2.17/sbin/newfs/newfs.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/newfs/newfs.c Wed Feb 16 19:30:29 2011 (r218746) @@ -87,6 +87,7 @@ int Nflag; /* run without writing file int Oflag = 2; /* file system format (1 => UFS1, 2 => UFS2) */ int Rflag; /* regression test */ int Uflag; /* enable soft updates for file system */ +int jflag; /* enable soft updates journaling for filesys */ int Xflag = 0; /* exit in middle of newfs for testing */ int Jflag; /* enable gjournal for file system */ int lflag; /* enable multilabel for file system */ @@ -140,7 +141,7 @@ main(int argc, char *argv[]) part_name = 'c'; reserved = 0; while ((ch = getopt(argc, argv, - "EJL:NO:RS:T:UXa:b:c:d:e:f:g:h:i:lm:no:p:r:s:t")) != -1) + "EJL:NO:RS:T:UXa:b:c:d:e:f:g:h:i:jlm:no:p:r:s:t")) != -1) switch (ch) { case 'E': Eflag = 1; @@ -180,6 +181,9 @@ main(int argc, char *argv[]) case 'T': disktype = optarg; break; + case 'j': + jflag = 1; + /* fall through to enable soft updates */ case 'U': Uflag = 1; break; @@ -397,7 +401,11 @@ main(int argc, char *argv[]) rewritelabel(special, lp); } ufs_disk_close(&disk); - exit(0); + if (!jflag) + exit(0); + if (execlp("tunefs", "newfs", "-j", "enable", special, NULL) < 0) + err(1, "Cannot enable soft updates journaling, tunefs"); + /* NOT REACHED */ } void @@ -492,6 +500,7 @@ usage() fprintf(stderr, "\t-g average file size\n"); fprintf(stderr, "\t-h average files per directory\n"); fprintf(stderr, "\t-i number of bytes per inode\n"); + fprintf(stderr, "\t-j enable soft updates journaling\n"); fprintf(stderr, "\t-l enable multilabel MAC\n"); fprintf(stderr, "\t-n do not create .snap directory\n"); fprintf(stderr, "\t-m minimum free space %%\n"); Modified: projects/binutils-2.17/sbin/tunefs/tunefs.c ============================================================================== --- projects/binutils-2.17/sbin/tunefs/tunefs.c Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/sbin/tunefs/tunefs.c Wed Feb 16 19:30:29 2011 (r218746) @@ -688,6 +688,19 @@ journal_findfile(void) return (0); } +static void +dir_clear_block(char *block, off_t off) +{ + struct direct *dp; + + for (; off < sblock.fs_bsize; off += DIRBLKSIZ) { + dp = (struct direct *)&block[off]; + dp->d_ino = 0; + dp->d_reclen = DIRBLKSIZ; + dp->d_type = DT_UNKNOWN; + } +} + /* * Insert the journal at inode 'ino' into directory blk 'blk' at the first * free offset of 'off'. DIRBLKSIZ blocks after off are initialized as @@ -710,13 +723,7 @@ dir_insert(ufs2_daddr_t blk, off_t off, dp->d_type = DT_REG; dp->d_namlen = strlen(SUJ_FILE); bcopy(SUJ_FILE, &dp->d_name, strlen(SUJ_FILE)); - off += DIRBLKSIZ; - for (; off < sblock.fs_bsize; off += DIRBLKSIZ) { - dp = (struct direct *)&block[off]; - dp->d_ino = 0; - dp->d_reclen = DIRBLKSIZ; - dp->d_type = DT_UNKNOWN; - } + dir_clear_block(block, off + DIRBLKSIZ); if (bwrite(&disk, fsbtodb(&sblock, blk), block, sblock.fs_bsize) <= 0) { warn("Failed to write dir block"); return (-1); @@ -733,16 +740,19 @@ dir_extend(ufs2_daddr_t blk, ufs2_daddr_ { char block[MAXBSIZE]; - if (bread(&disk, fsbtodb(&sblock, blk), block, size) <= 0) { + if (bread(&disk, fsbtodb(&sblock, blk), block, + roundup(size, sblock.fs_fsize)) <= 0) { warn("Failed to read dir block"); return (-1); } - if (bwrite(&disk, fsbtodb(&sblock, nblk), block, size) <= 0) { + dir_clear_block(block, size); + if (bwrite(&disk, fsbtodb(&sblock, nblk), block, sblock.fs_bsize) + <= 0) { warn("Failed to write dir block"); return (-1); } - return dir_insert(nblk, size, ino); + return (dir_insert(nblk, size, ino)); } /* Modified: projects/binutils-2.17/secure/lib/libcrypto/Makefile ============================================================================== --- projects/binutils-2.17/secure/lib/libcrypto/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/secure/lib/libcrypto/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -345,6 +345,10 @@ INCSDIR= ${INCLUDEDIR}/openssl CSTD= gnu89 +.if !empty(SRCS:M*.s) +AFLAGS+= --noexecstack +.endif + CLEANFILES= buildinf.h opensslconf.h evp.h buildinf.h: ${.CURDIR}/Makefile Modified: projects/binutils-2.17/share/examples/kld/Makefile ============================================================================== --- projects/binutils-2.17/share/examples/kld/Makefile Wed Feb 16 18:05:10 2011 (r218745) +++ projects/binutils-2.17/share/examples/kld/Makefile Wed Feb 16 19:30:29 2011 (r218746) @@ -67,6 +67,6 @@ # $FreeBSD$ # *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 16:12:56 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 873791065673; Thu, 17 Feb 2011 16:12:56 +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 723648FC12; Thu, 17 Feb 2011 16:12:56 +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 p1HGCufi017245; Thu, 17 Feb 2011 16:12:56 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HGCuIE017236; Thu, 17 Feb 2011 16:12:56 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102171612.p1HGCuIE017236@svn.freebsd.org> From: Alexander Motin Date: Thu, 17 Feb 2011 16:12:56 +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: r218774 - in projects/graid/8: . contrib/bsnmp/snmpd contrib/top contrib/xz gnu/usr.bin lib lib/liblzma lib/librtld_db lib/libusb release/picobsd/floppy.tree/sbin sbin/geom/class/raid s... 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, 17 Feb 2011 16:12:56 -0000 Author: mav Date: Thu Feb 17 16:12:55 2011 New Revision: 218774 URL: http://svn.freebsd.org/changeset/base/218774 Log: MFH r218702, r218705, r218706, r218721, r218722, r218727, r218728, r218732, r218734, r218740. Added: projects/graid/8/sys/geom/raid/md_jmicron.c - copied, changed from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/8/sys/geom/raid/tr_concat.c - copied unchanged from r218706, projects/graid/head/sys/geom/raid/tr_concat.c Modified: projects/graid/8/sbin/geom/class/raid/graid.8 projects/graid/8/sys/conf/files projects/graid/8/sys/geom/raid/g_raid.c projects/graid/8/sys/geom/raid/g_raid.h projects/graid/8/sys/geom/raid/md_intel.c projects/graid/8/sys/modules/geom/geom_raid/Makefile Directory Properties: projects/graid/8/ (props changed) projects/graid/8/COPYRIGHT (props changed) projects/graid/8/LOCKS (props changed) projects/graid/8/MAINTAINERS (props changed) projects/graid/8/Makefile (props changed) projects/graid/8/Makefile.inc1 (props changed) projects/graid/8/ObsoleteFiles.inc (props changed) projects/graid/8/README (props changed) projects/graid/8/UPDATING (props changed) projects/graid/8/bin/ (props changed) projects/graid/8/bin/chio/ (props changed) projects/graid/8/bin/chmod/ (props changed) projects/graid/8/bin/cp/ (props changed) projects/graid/8/bin/csh/ (props changed) projects/graid/8/bin/date/ (props changed) projects/graid/8/bin/echo/ (props changed) projects/graid/8/bin/expr/ (props changed) projects/graid/8/bin/getfacl/ (props changed) projects/graid/8/bin/kill/ (props changed) projects/graid/8/bin/ln/ (props changed) projects/graid/8/bin/ls/ (props changed) projects/graid/8/bin/mv/ (props changed) projects/graid/8/bin/pax/ (props changed) projects/graid/8/bin/pkill/ (props changed) projects/graid/8/bin/ps/ (props changed) projects/graid/8/bin/pwait/ (props changed) projects/graid/8/bin/setfacl/ (props changed) projects/graid/8/bin/sh/ (props changed) projects/graid/8/bin/sleep/ (props changed) projects/graid/8/bin/test/ (props changed) projects/graid/8/cddl/ (props changed) projects/graid/8/cddl/compat/opensolaris/ (props changed) projects/graid/8/cddl/contrib/opensolaris/ (props changed) projects/graid/8/cddl/lib/ (props changed) projects/graid/8/cddl/lib/libnvpair/ (props changed) projects/graid/8/cddl/lib/libzpool/ (props changed) projects/graid/8/cddl/usr.bin/ (props changed) projects/graid/8/cddl/usr.sbin/ (props changed) projects/graid/8/contrib/ (props changed) projects/graid/8/contrib/amd/ (props changed) projects/graid/8/contrib/bc/ (props changed) projects/graid/8/contrib/bind9/ (props changed) projects/graid/8/contrib/binutils/ (props changed) projects/graid/8/contrib/bsnmp/ (props changed) projects/graid/8/contrib/bsnmp/snmpd/bsnmpd.1 (props changed) projects/graid/8/contrib/bzip2/ (props changed) projects/graid/8/contrib/com_err/ (props changed) projects/graid/8/contrib/csup/ (props changed) projects/graid/8/contrib/cvs/ (props changed) projects/graid/8/contrib/diff/ (props changed) projects/graid/8/contrib/ee/ (props changed) projects/graid/8/contrib/expat/ (props changed) projects/graid/8/contrib/file/ (props changed) projects/graid/8/contrib/gcc/ (props changed) projects/graid/8/contrib/gcclibs/ (props changed) projects/graid/8/contrib/gdb/ (props changed) projects/graid/8/contrib/gdtoa/ (props changed) projects/graid/8/contrib/gnu-sort/ (props changed) projects/graid/8/contrib/gperf/ (props changed) projects/graid/8/contrib/groff/ (props changed) projects/graid/8/contrib/ipfilter/ (props changed) projects/graid/8/contrib/less/ (props changed) projects/graid/8/contrib/libbegemot/ (props changed) projects/graid/8/contrib/libf2c/ (props changed) projects/graid/8/contrib/libobjc/ (props changed) projects/graid/8/contrib/libpcap/ (props changed) projects/graid/8/contrib/libreadline/ (props changed) projects/graid/8/contrib/libstdc++/ (props changed) projects/graid/8/contrib/lukemftp/ (props changed) projects/graid/8/contrib/lukemftpd/ (props changed) projects/graid/8/contrib/ncurses/ (props changed) projects/graid/8/contrib/netcat/ (props changed) projects/graid/8/contrib/ngatm/ (props changed) projects/graid/8/contrib/ntp/ (props changed) projects/graid/8/contrib/nvi/ (props changed) projects/graid/8/contrib/one-true-awk/ (props changed) projects/graid/8/contrib/openbsm/ (props changed) projects/graid/8/contrib/openpam/ (props changed) projects/graid/8/contrib/opie/ (props changed) projects/graid/8/contrib/pam_modules/ (props changed) projects/graid/8/contrib/pf/ (props changed) projects/graid/8/contrib/pnpinfo/ (props changed) projects/graid/8/contrib/sendmail/ (props changed) projects/graid/8/contrib/smbfs/ (props changed) projects/graid/8/contrib/tcp_wrappers/ (props changed) projects/graid/8/contrib/tcpdump/ (props changed) projects/graid/8/contrib/tcsh/ (props changed) projects/graid/8/contrib/telnet/ (props changed) projects/graid/8/contrib/texinfo/ (props changed) projects/graid/8/contrib/top/ (props changed) projects/graid/8/contrib/top/install-sh (props changed) projects/graid/8/contrib/traceroute/ (props changed) projects/graid/8/contrib/wpa/ (props changed) projects/graid/8/contrib/xz/ (props changed) projects/graid/8/contrib/xz/AUTHORS (props changed) projects/graid/8/contrib/xz/COPYING (props changed) projects/graid/8/contrib/xz/ChangeLog (props changed) projects/graid/8/contrib/xz/FREEBSD-Xlist (props changed) projects/graid/8/contrib/xz/FREEBSD-upgrade (props changed) projects/graid/8/contrib/xz/README (props changed) projects/graid/8/contrib/xz/THANKS (props changed) projects/graid/8/contrib/xz/TODO (props changed) projects/graid/8/contrib/xz/po/ (props changed) projects/graid/8/contrib/xz/src/ (props changed) projects/graid/8/crypto/ (props changed) projects/graid/8/crypto/heimdal/ (props changed) projects/graid/8/crypto/openssh/ (props changed) projects/graid/8/crypto/openssl/ (props changed) projects/graid/8/etc/ (props changed) projects/graid/8/games/ (props changed) projects/graid/8/games/factor/ (props changed) projects/graid/8/games/fortune/ (props changed) projects/graid/8/games/grdc/ (props changed) projects/graid/8/games/pom/ (props changed) projects/graid/8/gnu/ (props changed) projects/graid/8/gnu/lib/csu/ (props changed) projects/graid/8/gnu/lib/libgcc/ (props changed) projects/graid/8/gnu/lib/libstdc++/ (props changed) projects/graid/8/gnu/usr.bin/ (props changed) projects/graid/8/gnu/usr.bin/Makefile (props changed) projects/graid/8/gnu/usr.bin/dialog/ (props changed) projects/graid/8/gnu/usr.bin/gdb/ (props changed) projects/graid/8/gnu/usr.bin/gdb/kgdb/ (props changed) projects/graid/8/gnu/usr.bin/groff/ (props changed) projects/graid/8/gnu/usr.bin/patch/ (props changed) projects/graid/8/include/ (props changed) projects/graid/8/kerberos5/ (props changed) projects/graid/8/kerberos5/lib/libgssapi_krb5/ (props changed) projects/graid/8/kerberos5/lib/libgssapi_spnego/ (props changed) projects/graid/8/kerberos5/usr.bin/kdestroy/ (props changed) projects/graid/8/kerberos5/usr.bin/kpasswd/ (props changed) projects/graid/8/lib/ (props changed) projects/graid/8/lib/Makefile (props changed) projects/graid/8/lib/Makefile.inc (props changed) projects/graid/8/lib/bind/ (props changed) projects/graid/8/lib/csu/ (props changed) projects/graid/8/lib/libalias/ (props changed) projects/graid/8/lib/libarchive/ (props changed) projects/graid/8/lib/libauditd/ (props changed) projects/graid/8/lib/libautofs/ (props changed) projects/graid/8/lib/libbegemot/ (props changed) projects/graid/8/lib/libbluetooth/ (props changed) projects/graid/8/lib/libbsm/ (props changed) projects/graid/8/lib/libbsnmp/ (props changed) projects/graid/8/lib/libbz2/ (props changed) projects/graid/8/lib/libc/ (props changed) projects/graid/8/lib/libc/stdtime/ (props changed) projects/graid/8/lib/libc_r/ (props changed) projects/graid/8/lib/libcalendar/ (props changed) projects/graid/8/lib/libcam/ (props changed) projects/graid/8/lib/libcom_err/ (props changed) projects/graid/8/lib/libcompat/ (props changed) projects/graid/8/lib/libcrypt/ (props changed) projects/graid/8/lib/libdevinfo/ (props changed) projects/graid/8/lib/libdevstat/ (props changed) projects/graid/8/lib/libdisk/ (props changed) projects/graid/8/lib/libdwarf/ (props changed) projects/graid/8/lib/libedit/ (props changed) projects/graid/8/lib/libelf/ (props changed) projects/graid/8/lib/libexpat/ (props changed) projects/graid/8/lib/libfetch/ (props changed) projects/graid/8/lib/libftpio/ (props changed) projects/graid/8/lib/libgeom/ (props changed) projects/graid/8/lib/libgpib/ (props changed) projects/graid/8/lib/libgssapi/ (props changed) projects/graid/8/lib/libipsec/ (props changed) projects/graid/8/lib/libipx/ (props changed) projects/graid/8/lib/libjail/ (props changed) projects/graid/8/lib/libkiconv/ (props changed) projects/graid/8/lib/libkse/ (props changed) projects/graid/8/lib/libkvm/ (props changed) projects/graid/8/lib/liblzma/ (props changed) projects/graid/8/lib/liblzma/Makefile (props changed) projects/graid/8/lib/liblzma/Symbol.map (props changed) projects/graid/8/lib/liblzma/Versions.def (props changed) projects/graid/8/lib/liblzma/config.h (props changed) projects/graid/8/lib/libmagic/ (props changed) projects/graid/8/lib/libmd/ (props changed) projects/graid/8/lib/libmemstat/ (props changed) projects/graid/8/lib/libmilter/ (props changed) projects/graid/8/lib/libmp/ (props changed) projects/graid/8/lib/libncp/ (props changed) projects/graid/8/lib/libnetgraph/ (props changed) projects/graid/8/lib/libngatm/ (props changed) projects/graid/8/lib/libopie/ (props changed) projects/graid/8/lib/libpam/ (props changed) projects/graid/8/lib/libpcap/ (props changed) projects/graid/8/lib/libpmc/ (props changed) projects/graid/8/lib/libproc/ (props changed) projects/graid/8/lib/libradius/ (props changed) projects/graid/8/lib/librpcsec_gss/ (props changed) projects/graid/8/lib/librpcsvc/ (props changed) projects/graid/8/lib/librt/ (props changed) projects/graid/8/lib/librtld_db/ (props changed) projects/graid/8/lib/librtld_db/Makefile (props changed) projects/graid/8/lib/librtld_db/librtld_db.3 (props changed) projects/graid/8/lib/librtld_db/rtld_db.c (props changed) projects/graid/8/lib/librtld_db/rtld_db.h (props changed) projects/graid/8/lib/libsbuf/ (props changed) projects/graid/8/lib/libsdp/ (props changed) projects/graid/8/lib/libsm/ (props changed) projects/graid/8/lib/libsmb/ (props changed) projects/graid/8/lib/libsmdb/ (props changed) projects/graid/8/lib/libsmutil/ (props changed) projects/graid/8/lib/libstand/ (props changed) projects/graid/8/lib/libtacplus/ (props changed) projects/graid/8/lib/libtelnet/ (props changed) projects/graid/8/lib/libthr/ (props changed) projects/graid/8/lib/libthread_db/ (props changed) projects/graid/8/lib/libufs/ (props changed) projects/graid/8/lib/libugidfw/ (props changed) projects/graid/8/lib/libusb/ (props changed) projects/graid/8/lib/libusb/usb.h (props changed) projects/graid/8/lib/libusbhid/ (props changed) projects/graid/8/lib/libutil/ (props changed) projects/graid/8/lib/libvgl/ (props changed) projects/graid/8/lib/libwrap/ (props changed) projects/graid/8/lib/liby/ (props changed) projects/graid/8/lib/libypclnt/ (props changed) projects/graid/8/lib/libz/ (props changed) projects/graid/8/lib/libz/contrib/ (props changed) projects/graid/8/lib/msun/ (props changed) projects/graid/8/lib/ncurses/ (props changed) projects/graid/8/libexec/ (props changed) projects/graid/8/libexec/ftpd/ (props changed) projects/graid/8/libexec/rtld-elf/ (props changed) projects/graid/8/libexec/tftpd/ (props changed) projects/graid/8/release/ (props changed) projects/graid/8/release/doc/en_US.ISO8859-1/hardware/ (props changed) projects/graid/8/release/picobsd/ (props changed) projects/graid/8/release/picobsd/floppy.tree/sbin/ (props changed) projects/graid/8/release/picobsd/floppy.tree/sbin/dhclient-script (props changed) projects/graid/8/release/picobsd/qemu/ (props changed) projects/graid/8/release/picobsd/tinyware/login/ (props changed) projects/graid/8/release/powerpc/ (props changed) projects/graid/8/rescue/ (props changed) projects/graid/8/sbin/ (props changed) projects/graid/8/sbin/atacontrol/ (props changed) projects/graid/8/sbin/bsdlabel/ (props changed) projects/graid/8/sbin/camcontrol/ (props changed) projects/graid/8/sbin/ddb/ (props changed) projects/graid/8/sbin/devd/ (props changed) projects/graid/8/sbin/devfs/ (props changed) projects/graid/8/sbin/dhclient/ (props changed) projects/graid/8/sbin/dump/ (props changed) projects/graid/8/sbin/dumpfs/ (props changed) projects/graid/8/sbin/fdisk/ (props changed) projects/graid/8/sbin/fsck/ (props changed) projects/graid/8/sbin/fsck_ffs/ (props changed) projects/graid/8/sbin/fsck_msdosfs/ (props changed) projects/graid/8/sbin/fsirand/ (props changed) projects/graid/8/sbin/geom/ (props changed) projects/graid/8/sbin/geom/class/multipath/ (props changed) projects/graid/8/sbin/geom/class/part/ (props changed) projects/graid/8/sbin/geom/class/sched/gsched.8 (props changed) projects/graid/8/sbin/geom/class/stripe/ (props changed) projects/graid/8/sbin/ggate/ (props changed) projects/graid/8/sbin/growfs/ (props changed) projects/graid/8/sbin/hastctl/ (props changed) projects/graid/8/sbin/hastd/ (props changed) projects/graid/8/sbin/ifconfig/ (props changed) projects/graid/8/sbin/ipfw/ (props changed) projects/graid/8/sbin/iscontrol/ (props changed) projects/graid/8/sbin/kldload/ (props changed) projects/graid/8/sbin/kldstat/ (props changed) projects/graid/8/sbin/mdconfig/ (props changed) projects/graid/8/sbin/mksnap_ffs/ (props changed) projects/graid/8/sbin/mount/ (props changed) projects/graid/8/sbin/mount_cd9660/ (props changed) projects/graid/8/sbin/mount_msdosfs/ (props changed) projects/graid/8/sbin/mount_nfs/ (props changed) projects/graid/8/sbin/natd/ (props changed) projects/graid/8/sbin/newfs/ (props changed) projects/graid/8/sbin/newfs_msdos/ (props changed) projects/graid/8/sbin/ping6/ (props changed) projects/graid/8/sbin/reboot/ (props changed) projects/graid/8/sbin/restore/ (props changed) projects/graid/8/sbin/route/ (props changed) projects/graid/8/sbin/routed/ (props changed) projects/graid/8/sbin/setkey/ (props changed) projects/graid/8/sbin/spppcontrol/ (props changed) projects/graid/8/sbin/sysctl/ (props changed) projects/graid/8/sbin/tunefs/ (props changed) projects/graid/8/sbin/umount/ (props changed) projects/graid/8/secure/ (props changed) projects/graid/8/secure/lib/libcrypto/ (props changed) projects/graid/8/secure/lib/libssl/ (props changed) projects/graid/8/secure/usr.bin/bdes/ (props changed) projects/graid/8/secure/usr.bin/openssl/ (props changed) projects/graid/8/share/ (props changed) projects/graid/8/share/dict/ (props changed) projects/graid/8/share/doc/papers/jail/ (props changed) projects/graid/8/share/doc/smm/01.setup/ (props changed) projects/graid/8/share/examples/ (props changed) projects/graid/8/share/examples/etc/ (props changed) projects/graid/8/share/examples/kld/syscall/ (props changed) projects/graid/8/share/man/ (props changed) projects/graid/8/share/man/man1/ (props changed) projects/graid/8/share/man/man3/ (props changed) projects/graid/8/share/man/man4/ (props changed) projects/graid/8/share/man/man5/ (props changed) projects/graid/8/share/man/man7/ (props changed) projects/graid/8/share/man/man8/ (props changed) projects/graid/8/share/man/man9/ (props changed) projects/graid/8/share/misc/ (props changed) projects/graid/8/share/mk/ (props changed) projects/graid/8/share/syscons/ (props changed) projects/graid/8/share/termcap/ (props changed) projects/graid/8/share/timedef/ (props changed) projects/graid/8/share/zoneinfo/ (props changed) projects/graid/8/sys/ (props changed) projects/graid/8/sys/amd64/include/xen/ (props changed) projects/graid/8/sys/cddl/contrib/opensolaris/ (props changed) projects/graid/8/sys/contrib/dev/acpica/ (props changed) projects/graid/8/sys/contrib/pf/ (props changed) projects/graid/8/tools/ (props changed) projects/graid/8/tools/build/mk/ (props changed) projects/graid/8/tools/build/options/ (props changed) projects/graid/8/tools/debugscripts/ (props changed) projects/graid/8/tools/kerneldoc/subsys/ (props changed) projects/graid/8/tools/regression/acct/ (props changed) projects/graid/8/tools/regression/acltools/ (props changed) projects/graid/8/tools/regression/aio/aiotest/ (props changed) projects/graid/8/tools/regression/bin/ (props changed) projects/graid/8/tools/regression/bin/date/ (props changed) projects/graid/8/tools/regression/bin/sh/ (props changed) projects/graid/8/tools/regression/fifo/ (props changed) projects/graid/8/tools/regression/geom/ (props changed) projects/graid/8/tools/regression/lib/libc/ (props changed) projects/graid/8/tools/regression/lib/msun/test-conj.t (props changed) projects/graid/8/tools/regression/mqueue/mqtest1/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest2/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest3/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest4/ (props changed) projects/graid/8/tools/regression/mqueue/mqtest5/ (props changed) projects/graid/8/tools/regression/netinet/ (props changed) projects/graid/8/tools/regression/poll/ (props changed) projects/graid/8/tools/regression/posixsem/ (props changed) projects/graid/8/tools/regression/priv/ (props changed) projects/graid/8/tools/regression/sockets/unix_gc/ (props changed) projects/graid/8/tools/regression/usr.bin/ (props changed) projects/graid/8/tools/regression/usr.bin/pkill/ (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_g.t (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pgrep-_s.t (props changed) projects/graid/8/tools/regression/usr.bin/pkill/pkill-_g.t (props changed) projects/graid/8/tools/regression/usr.bin/sed/ (props changed) projects/graid/8/tools/regression/usr.bin/tr/ (props changed) projects/graid/8/tools/test/ (props changed) projects/graid/8/tools/tools/ (props changed) projects/graid/8/tools/tools/ath/ (props changed) projects/graid/8/tools/tools/ath/common/dumpregs.h (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5210.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5211.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5212.c (props changed) projects/graid/8/tools/tools/ath/common/dumpregs_5416.c (props changed) projects/graid/8/tools/tools/mctest/ (props changed) projects/graid/8/tools/tools/nanobsd/ (props changed) projects/graid/8/tools/tools/netrate/ (props changed) projects/graid/8/tools/tools/netrate/tcpp/ (props changed) projects/graid/8/tools/tools/termcap/termcap.pl (props changed) projects/graid/8/tools/tools/umastat/ (props changed) projects/graid/8/tools/tools/vimage/ (props changed) projects/graid/8/usr.bin/ (props changed) projects/graid/8/usr.bin/apply/ (props changed) projects/graid/8/usr.bin/ar/ (props changed) projects/graid/8/usr.bin/awk/ (props changed) projects/graid/8/usr.bin/biff/ (props changed) projects/graid/8/usr.bin/c89/ (props changed) projects/graid/8/usr.bin/c99/ (props changed) projects/graid/8/usr.bin/calendar/ (props changed) projects/graid/8/usr.bin/catman/ (props changed) projects/graid/8/usr.bin/chpass/Makefile (props changed) projects/graid/8/usr.bin/column/ (props changed) projects/graid/8/usr.bin/comm/ (props changed) projects/graid/8/usr.bin/cpio/ (props changed) projects/graid/8/usr.bin/csup/ (props changed) projects/graid/8/usr.bin/du/ (props changed) projects/graid/8/usr.bin/ee/ (props changed) projects/graid/8/usr.bin/enigma/ (props changed) projects/graid/8/usr.bin/fetch/ (props changed) projects/graid/8/usr.bin/find/ (props changed) projects/graid/8/usr.bin/finger/ (props changed) projects/graid/8/usr.bin/fold/ (props changed) projects/graid/8/usr.bin/fstat/ (props changed) projects/graid/8/usr.bin/gcore/ (props changed) projects/graid/8/usr.bin/getopt/ (props changed) projects/graid/8/usr.bin/gzip/ (props changed) projects/graid/8/usr.bin/hexdump/ (props changed) projects/graid/8/usr.bin/indent/ (props changed) projects/graid/8/usr.bin/jot/ (props changed) projects/graid/8/usr.bin/kdump/ (props changed) projects/graid/8/usr.bin/killall/ (props changed) projects/graid/8/usr.bin/ktrace/ (props changed) projects/graid/8/usr.bin/ldd/ (props changed) projects/graid/8/usr.bin/lex/ (props changed) projects/graid/8/usr.bin/locale/ (props changed) projects/graid/8/usr.bin/locate/ (props changed) projects/graid/8/usr.bin/lockf/ (props changed) projects/graid/8/usr.bin/look/ (props changed) projects/graid/8/usr.bin/mail/ (props changed) projects/graid/8/usr.bin/make/ (props changed) projects/graid/8/usr.bin/makewhatis/ (props changed) projects/graid/8/usr.bin/minigzip/ (props changed) projects/graid/8/usr.bin/ncal/ (props changed) projects/graid/8/usr.bin/netstat/ (props changed) projects/graid/8/usr.bin/pathchk/ (props changed) projects/graid/8/usr.bin/perror/ (props changed) projects/graid/8/usr.bin/procstat/ (props changed) projects/graid/8/usr.bin/rpcgen/ (props changed) projects/graid/8/usr.bin/ruptime/ (props changed) projects/graid/8/usr.bin/script/ (props changed) projects/graid/8/usr.bin/sed/ (props changed) projects/graid/8/usr.bin/sockstat/ (props changed) projects/graid/8/usr.bin/split/ (props changed) projects/graid/8/usr.bin/stat/ (props changed) projects/graid/8/usr.bin/systat/ (props changed) projects/graid/8/usr.bin/tar/ (props changed) projects/graid/8/usr.bin/tftp/ (props changed) projects/graid/8/usr.bin/top/ (props changed) projects/graid/8/usr.bin/touch/ (props changed) projects/graid/8/usr.bin/tr/ (props changed) projects/graid/8/usr.bin/truss/ (props changed) projects/graid/8/usr.bin/uname/ (props changed) projects/graid/8/usr.bin/unifdef/ (props changed) projects/graid/8/usr.bin/uniq/ (props changed) projects/graid/8/usr.bin/unzip/ (props changed) projects/graid/8/usr.bin/uudecode/ (props changed) projects/graid/8/usr.bin/vmstat/ (props changed) projects/graid/8/usr.bin/w/ (props changed) projects/graid/8/usr.bin/whois/ (props changed) projects/graid/8/usr.bin/xinstall/ (props changed) projects/graid/8/usr.bin/xlint/ (props changed) projects/graid/8/usr.bin/xz/ (props changed) projects/graid/8/usr.bin/yacc/ (props changed) projects/graid/8/usr.sbin/ (props changed) projects/graid/8/usr.sbin/IPXrouted/ (props changed) projects/graid/8/usr.sbin/Makefile (props changed) projects/graid/8/usr.sbin/Makefile.inc (props changed) projects/graid/8/usr.sbin/ac/ (props changed) projects/graid/8/usr.sbin/accton/ (props changed) projects/graid/8/usr.sbin/acpi/ (props changed) projects/graid/8/usr.sbin/adduser/ (props changed) projects/graid/8/usr.sbin/amd/ (props changed) projects/graid/8/usr.sbin/ancontrol/ (props changed) projects/graid/8/usr.sbin/apm/ (props changed) projects/graid/8/usr.sbin/apmd/ (props changed) projects/graid/8/usr.sbin/arp/ (props changed) projects/graid/8/usr.sbin/asf/ (props changed) projects/graid/8/usr.sbin/audit/ (props changed) projects/graid/8/usr.sbin/auditd/ (props changed) projects/graid/8/usr.sbin/auditreduce/ (props changed) projects/graid/8/usr.sbin/authpf/ (props changed) projects/graid/8/usr.sbin/bluetooth/ (props changed) projects/graid/8/usr.sbin/bluetooth/bthidcontrol/ (props changed) projects/graid/8/usr.sbin/bluetooth/bthidd/ (props changed) projects/graid/8/usr.sbin/boot0cfg/ (props changed) projects/graid/8/usr.sbin/boot98cfg/ (props changed) projects/graid/8/usr.sbin/bootparamd/ (props changed) projects/graid/8/usr.sbin/bsnmpd/ (props changed) projects/graid/8/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed) projects/graid/8/usr.sbin/btxld/ (props changed) projects/graid/8/usr.sbin/burncd/ (props changed) projects/graid/8/usr.sbin/cdcontrol/ (props changed) projects/graid/8/usr.sbin/chkgrp/ (props changed) projects/graid/8/usr.sbin/chown/ (props changed) projects/graid/8/usr.sbin/chroot/ (props changed) projects/graid/8/usr.sbin/ckdist/ (props changed) projects/graid/8/usr.sbin/clear_locks/ (props changed) projects/graid/8/usr.sbin/config/ (props changed) projects/graid/8/usr.sbin/config/SMM.doc/ (props changed) projects/graid/8/usr.sbin/cpucontrol/ (props changed) projects/graid/8/usr.sbin/crashinfo/ (props changed) projects/graid/8/usr.sbin/cron/ (props changed) projects/graid/8/usr.sbin/crunch/ (props changed) projects/graid/8/usr.sbin/crunch/examples/ (props changed) projects/graid/8/usr.sbin/ctm/ (props changed) projects/graid/8/usr.sbin/cxgbtool/ (props changed) projects/graid/8/usr.sbin/daemon/ (props changed) projects/graid/8/usr.sbin/dconschat/ (props changed) projects/graid/8/usr.sbin/devinfo/ (props changed) projects/graid/8/usr.sbin/digictl/ (props changed) projects/graid/8/usr.sbin/diskinfo/ (props changed) projects/graid/8/usr.sbin/dnssec-dsfromkey/ (props changed) projects/graid/8/usr.sbin/dnssec-keyfromlabel/ (props changed) projects/graid/8/usr.sbin/dnssec-keygen/ (props changed) projects/graid/8/usr.sbin/dnssec-signzone/ (props changed) projects/graid/8/usr.sbin/dumpcis/ (props changed) projects/graid/8/usr.sbin/dumpcis/cardinfo.h (props changed) projects/graid/8/usr.sbin/dumpcis/cis.h (props changed) projects/graid/8/usr.sbin/editmap/ (props changed) projects/graid/8/usr.sbin/edquota/ (props changed) projects/graid/8/usr.sbin/eeprom/ (props changed) projects/graid/8/usr.sbin/extattr/ (props changed) projects/graid/8/usr.sbin/extattrctl/ (props changed) projects/graid/8/usr.sbin/faithd/ (props changed) projects/graid/8/usr.sbin/fdcontrol/ (props changed) projects/graid/8/usr.sbin/fdformat/ (props changed) projects/graid/8/usr.sbin/fdread/ (props changed) projects/graid/8/usr.sbin/fdwrite/ (props changed) projects/graid/8/usr.sbin/fifolog/ (props changed) projects/graid/8/usr.sbin/flowctl/ (props changed) projects/graid/8/usr.sbin/freebsd-update/ (props changed) projects/graid/8/usr.sbin/ftp-proxy/ (props changed) projects/graid/8/usr.sbin/fwcontrol/ (props changed) projects/graid/8/usr.sbin/getfmac/ (props changed) projects/graid/8/usr.sbin/getpmac/ (props changed) projects/graid/8/usr.sbin/gssd/ (props changed) projects/graid/8/usr.sbin/gstat/ (props changed) projects/graid/8/usr.sbin/i2c/ (props changed) projects/graid/8/usr.sbin/ifmcstat/ (props changed) projects/graid/8/usr.sbin/inetd/ (props changed) projects/graid/8/usr.sbin/iostat/ (props changed) projects/graid/8/usr.sbin/ip6addrctl/ (props changed) projects/graid/8/usr.sbin/ipfwpcap/ (props changed) projects/graid/8/usr.sbin/jail/ (props changed) projects/graid/8/usr.sbin/jexec/ (props changed) projects/graid/8/usr.sbin/jls/ (props changed) projects/graid/8/usr.sbin/kbdcontrol/ (props changed) projects/graid/8/usr.sbin/kbdmap/ (props changed) projects/graid/8/usr.sbin/kernbb/ (props changed) projects/graid/8/usr.sbin/keyserv/ (props changed) projects/graid/8/usr.sbin/kgmon/ (props changed) projects/graid/8/usr.sbin/kgzip/ (props changed) projects/graid/8/usr.sbin/kldxref/ (props changed) projects/graid/8/usr.sbin/lastlogin/ (props changed) projects/graid/8/usr.sbin/lmcconfig/ (props changed) projects/graid/8/usr.sbin/lpr/ (props changed) projects/graid/8/usr.sbin/lptcontrol/ (props changed) projects/graid/8/usr.sbin/mailstats/ (props changed) projects/graid/8/usr.sbin/mailwrapper/ (props changed) projects/graid/8/usr.sbin/makefs/ (props changed) projects/graid/8/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/graid/8/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/graid/8/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/graid/8/usr.sbin/makefs/getid.c (props changed) projects/graid/8/usr.sbin/makemap/ (props changed) projects/graid/8/usr.sbin/manctl/ (props changed) projects/graid/8/usr.sbin/memcontrol/ (props changed) projects/graid/8/usr.sbin/mergemaster/ (props changed) projects/graid/8/usr.sbin/mfiutil/ (props changed) projects/graid/8/usr.sbin/mixer/ (props changed) projects/graid/8/usr.sbin/mld6query/ (props changed) projects/graid/8/usr.sbin/mlxcontrol/ (props changed) projects/graid/8/usr.sbin/mount_nwfs/ (props changed) projects/graid/8/usr.sbin/mount_portalfs/ (props changed) projects/graid/8/usr.sbin/mount_smbfs/ (props changed) projects/graid/8/usr.sbin/mountd/ (props changed) projects/graid/8/usr.sbin/moused/ (props changed) projects/graid/8/usr.sbin/mptable/ (props changed) projects/graid/8/usr.sbin/mptutil/ (props changed) projects/graid/8/usr.sbin/mtest/ (props changed) projects/graid/8/usr.sbin/mtree/ (props changed) projects/graid/8/usr.sbin/named/ (props changed) projects/graid/8/usr.sbin/named-checkconf/ (props changed) projects/graid/8/usr.sbin/named-checkzone/ (props changed) projects/graid/8/usr.sbin/named.reload/ (props changed) projects/graid/8/usr.sbin/ndiscvt/ (props changed) projects/graid/8/usr.sbin/ndp/ (props changed) projects/graid/8/usr.sbin/newsyslog/ (props changed) projects/graid/8/usr.sbin/nfscbd/ (props changed) projects/graid/8/usr.sbin/nfsd/ (props changed) projects/graid/8/usr.sbin/nfsdumpstate/ (props changed) projects/graid/8/usr.sbin/nfsrevoke/ (props changed) projects/graid/8/usr.sbin/nfsuserd/ (props changed) projects/graid/8/usr.sbin/ngctl/ (props changed) projects/graid/8/usr.sbin/nghook/ (props changed) projects/graid/8/usr.sbin/nologin/ (props changed) projects/graid/8/usr.sbin/nscd/ (props changed) projects/graid/8/usr.sbin/ntp/ (props changed) projects/graid/8/usr.sbin/nvram/ (props changed) projects/graid/8/usr.sbin/ofwdump/ (props changed) projects/graid/8/usr.sbin/pciconf/ (props changed) projects/graid/8/usr.sbin/periodic/ (props changed) projects/graid/8/usr.sbin/pkg_install/ (props changed) projects/graid/8/usr.sbin/pmcannotate/ (props changed) projects/graid/8/usr.sbin/pmccontrol/ (props changed) projects/graid/8/usr.sbin/pmcstat/ (props changed) projects/graid/8/usr.sbin/pnpinfo/ (props changed) projects/graid/8/usr.sbin/portsnap/ (props changed) projects/graid/8/usr.sbin/powerd/ (props changed) projects/graid/8/usr.sbin/ppp/ (props changed) projects/graid/8/usr.sbin/pppctl/ (props changed) projects/graid/8/usr.sbin/praliases/ (props changed) projects/graid/8/usr.sbin/praudit/ (props changed) projects/graid/8/usr.sbin/procctl/ (props changed) projects/graid/8/usr.sbin/pstat/ (props changed) projects/graid/8/usr.sbin/pw/ (props changed) projects/graid/8/usr.sbin/pwd_mkdb/ (props changed) projects/graid/8/usr.sbin/quot/ (props changed) projects/graid/8/usr.sbin/quotaon/ (props changed) projects/graid/8/usr.sbin/rarpd/ (props changed) projects/graid/8/usr.sbin/repquota/ (props changed) projects/graid/8/usr.sbin/rip6query/ (props changed) projects/graid/8/usr.sbin/rmt/ (props changed) projects/graid/8/usr.sbin/rndc/ (props changed) projects/graid/8/usr.sbin/rndc-confgen/ (props changed) projects/graid/8/usr.sbin/route6d/ (props changed) projects/graid/8/usr.sbin/rpc.lockd/ (props changed) projects/graid/8/usr.sbin/rpc.statd/ (props changed) projects/graid/8/usr.sbin/rpc.umntall/ (props changed) projects/graid/8/usr.sbin/rpc.yppasswdd/ (props changed) projects/graid/8/usr.sbin/rpc.ypupdated/ (props changed) projects/graid/8/usr.sbin/rpc.ypxfrd/ (props changed) projects/graid/8/usr.sbin/rpcbind/ (props changed) projects/graid/8/usr.sbin/rrenumd/ (props changed) projects/graid/8/usr.sbin/rtadvd/ (props changed) projects/graid/8/usr.sbin/rtprio/ (props changed) projects/graid/8/usr.sbin/rtsold/ (props changed) projects/graid/8/usr.sbin/rwhod/ (props changed) projects/graid/8/usr.sbin/sa/ (props changed) projects/graid/8/usr.sbin/sade/ (props changed) projects/graid/8/usr.sbin/sendmail/ (props changed) projects/graid/8/usr.sbin/service/ (props changed) projects/graid/8/usr.sbin/service/Makefile (props changed) projects/graid/8/usr.sbin/service/service.8 (props changed) projects/graid/8/usr.sbin/service/service.sh (props changed) projects/graid/8/usr.sbin/services_mkdb/ (props changed) projects/graid/8/usr.sbin/services_mkdb/Makefile (props changed) projects/graid/8/usr.sbin/services_mkdb/services_mkdb.8 (props changed) projects/graid/8/usr.sbin/services_mkdb/services_mkdb.c (props changed) projects/graid/8/usr.sbin/services_mkdb/uniq.c (props changed) projects/graid/8/usr.sbin/setfib/ (props changed) projects/graid/8/usr.sbin/setfmac/ (props changed) projects/graid/8/usr.sbin/setpmac/ (props changed) projects/graid/8/usr.sbin/sicontrol/ (props changed) projects/graid/8/usr.sbin/smbmsg/ (props changed) projects/graid/8/usr.sbin/snapinfo/ (props changed) projects/graid/8/usr.sbin/spkrtest/ (props changed) projects/graid/8/usr.sbin/spray/ (props changed) projects/graid/8/usr.sbin/sysinstall/ (props changed) projects/graid/8/usr.sbin/syslogd/ (props changed) projects/graid/8/usr.sbin/tcpdchk/ (props changed) projects/graid/8/usr.sbin/tcpdmatch/ (props changed) projects/graid/8/usr.sbin/tcpdrop/ (props changed) projects/graid/8/usr.sbin/tcpdump/ (props changed) projects/graid/8/usr.sbin/timed/ (props changed) projects/graid/8/usr.sbin/traceroute/ (props changed) projects/graid/8/usr.sbin/traceroute6/ (props changed) projects/graid/8/usr.sbin/trpt/ (props changed) projects/graid/8/usr.sbin/tzsetup/ (props changed) projects/graid/8/usr.sbin/uathload/ (props changed) projects/graid/8/usr.sbin/ugidfw/ (props changed) projects/graid/8/usr.sbin/uhsoctl/ (props changed) projects/graid/8/usr.sbin/usbconfig/ (props changed) projects/graid/8/usr.sbin/usbdevs/ (props changed) projects/graid/8/usr.sbin/vidcontrol/ (props changed) projects/graid/8/usr.sbin/vipw/ (props changed) projects/graid/8/usr.sbin/wake/ (props changed) projects/graid/8/usr.sbin/watch/ (props changed) projects/graid/8/usr.sbin/watchdogd/ (props changed) projects/graid/8/usr.sbin/wlandebug/ (props changed) projects/graid/8/usr.sbin/wlconfig/ (props changed) projects/graid/8/usr.sbin/wpa/ (props changed) projects/graid/8/usr.sbin/yp_mkdb/ (props changed) projects/graid/8/usr.sbin/ypbind/ (props changed) projects/graid/8/usr.sbin/yppoll/ (props changed) projects/graid/8/usr.sbin/yppush/ (props changed) projects/graid/8/usr.sbin/ypserv/ (props changed) projects/graid/8/usr.sbin/ypset/ (props changed) projects/graid/8/usr.sbin/zic/ (props changed) projects/graid/8/usr.sbin/zzz/ (props changed) Modified: projects/graid/8/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/8/sbin/geom/class/raid/graid.8 Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sbin/geom/class/raid/graid.8 Thu Feb 17 16:12:55 2011 (r218774) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 13, 2011 +.Dd February 15, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -205,14 +205,21 @@ The format used by Intel RAID BIOS. Supports up to two volumes per array. Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), RAID5 (3+ disks), RAID10 (4 disks). -Configurations not supported by Intel RAID BIOS, but enforsable on your own +Configurations not supported by Intel RAID BIOS, but enforceable on your own risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks). +.It JMicron +The format used by JMicron RAID BIOS. +Supports one volume per array. +Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), +RAID10 (4 disks), CONCAT (2+ disks). +Configurations not supported by JMicron RAID BIOS, but enforceable on your own +risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks), RAID5 (3+ disks). .El .Sh SUPPORTED RAID LEVELS The GEOM RAID class follows a modular design, allowing different RAID levels to be used. Support for the following RAID levels is currently implemented: RAID0, RAID1, -RAID1E, RAID10. +RAID1E, RAID10, SINGLE, CONCAT. .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. .Sh SEE ALSO Modified: projects/graid/8/sys/conf/files ============================================================================== --- projects/graid/8/sys/conf/files Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/conf/files Thu Feb 17 16:12:55 2011 (r218774) @@ -2019,6 +2019,8 @@ geom/raid/g_raid_ctl.c optional geom_ra geom/raid/g_raid_md_if.m optional geom_raid geom/raid/g_raid_tr_if.m optional geom_raid geom/raid/md_intel.c optional geom_raid +geom/raid/md_jmicron.c optional geom_raid +geom/raid/tr_concat.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid geom/raid/tr_raid1e.c optional geom_raid Modified: projects/graid/8/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.c Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/geom/raid/g_raid.c Thu Feb 17 16:12:55 2011 (r218774) @@ -585,6 +585,32 @@ g_raid_get_subdisk(struct g_raid_volume return (NULL); } +struct g_consumer * +g_raid_open_consumer(struct g_raid_softc *sc, const char *name) +{ + struct g_consumer *cp; + struct g_provider *pp; + + g_topology_assert(); + + if (strncmp(name, "/dev/", 5) == 0) + name += 5; + pp = g_provider_by_name(name); + if (pp == NULL) + return (NULL); + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + g_destroy_consumer(cp); + return (NULL); + } + if (g_access(cp, 1, 1, 1) != 0) { + g_detach(cp); + g_destroy_consumer(cp); + return (NULL); + } + return (cp); +} + static u_int g_raid_nrequests(struct g_raid_softc *sc, struct g_consumer *cp) { @@ -652,11 +678,12 @@ g_raid_kill_consumer(struct g_raid_softc struct g_provider *pp; int retaste_wait; - g_topology_assert(); + g_topology_assert_not(); + g_topology_lock(); cp->private = NULL; if (g_raid_consumer_is_busy(sc, cp)) - return; + goto out; pp = cp->provider; retaste_wait = 0; if (cp->acw == 1) { @@ -676,11 +703,13 @@ g_raid_kill_consumer(struct g_raid_softc * after retaste event is sent. */ g_post_event(g_raid_destroy_consumer, cp, M_WAITOK, NULL); - return; + goto out; } G_RAID_DEBUG(1, "Consumer %s destroyed.", pp->name); g_detach(cp); g_destroy_consumer(cp); +out: + g_topology_unlock(); } static void @@ -1228,11 +1257,8 @@ g_raid_disk_done_request(struct bio *bp) if (bp->bio_from != NULL) { bp->bio_from->index--; disk = bp->bio_from->private; - if (disk == NULL) { - g_topology_lock(); + if (disk == NULL) g_raid_kill_consumer(sc, bp->bio_from); - g_topology_unlock(); - } } bp->bio_offset -= sd->sd_offset; @@ -1302,6 +1328,7 @@ g_raid_worker(void *arg) t = now; TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (bioq_first(&vol->v_inflight) == NULL && + vol->v_tr && timevalcmp(&vol->v_last_done, &t, < )) t = vol->v_last_done; } @@ -1868,9 +1895,7 @@ g_raid_destroy_disk(struct g_raid_disk * sc = disk->d_softc; G_RAID_DEBUG1(2, sc, "Destroying disk."); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) { @@ -2228,7 +2253,7 @@ g_raid_md_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_md_classes); - if (c == NULL || c->mdc_priority < class->mdc_priority) + if (c == NULL || c->mdc_priority > class->mdc_priority) LIST_INSERT_HEAD(&g_raid_md_classes, class, mdc_list); else { while ((nc = LIST_NEXT(c, mdc_list)) != NULL && @@ -2261,7 +2286,7 @@ g_raid_tr_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_tr_classes); - if (c == NULL || c->trc_priority < class->trc_priority) + if (c == NULL || c->trc_priority > class->trc_priority) LIST_INSERT_HEAD(&g_raid_tr_classes, class, trc_list); else { while ((nc = LIST_NEXT(c, trc_list)) != NULL && Modified: projects/graid/8/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/8/sys/geom/raid/g_raid.h Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/geom/raid/g_raid.h Thu Feb 17 16:12:55 2011 (r218774) @@ -364,6 +364,8 @@ void g_raid_subdisk_iostart(struct g_rai int g_raid_subdisk_kerneldump(struct g_raid_subdisk *sd, void *virtual, vm_offset_t physical, off_t offset, size_t length); +struct g_consumer *g_raid_open_consumer(struct g_raid_softc *sc, + const char *name); void g_raid_kill_consumer(struct g_raid_softc *sc, struct g_consumer *cp); void g_raid_report_disk_state(struct g_raid_disk *disk); Modified: projects/graid/8/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/8/sys/geom/raid/md_intel.c Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/geom/raid/md_intel.c Thu Feb 17 16:12:55 2011 (r218774) @@ -715,9 +715,9 @@ nofit: TAILQ_REMOVE(&olddisk->d_subdisks, sd, sd_next); TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); sd->sd_disk = disk; - oldpd->pd_disk_pos = -2; - pd->pd_disk_pos = disk_pos; } + oldpd->pd_disk_pos = -2; + pd->pd_disk_pos = disk_pos; /* If it was placeholder -- destroy it. */ if (olddisk->d_state == G_RAID_DISK_S_OFFLINE) { @@ -1327,9 +1327,7 @@ g_raid_md_event_intel(struct g_raid_md_o 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1428,38 +1426,18 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - 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 = -7; - 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 = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", + diskname); + g_topology_unlock(); + error = -4; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; disk = g_raid_create_disk(sc); @@ -1467,13 +1445,11 @@ makedisk: disk->d_consumer = cp; if (cp == NULL) { strcpy(&pd->pd_disk_meta.serial[0], "NONE"); - pd->pd_disk_meta.id = 0; pd->pd_disk_meta.id = 0xffffffff; pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; continue; } cp->private = disk; - g_topology_unlock(); error = g_raid_md_get_label(cp, @@ -1908,9 +1884,7 @@ makedisk: 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1952,37 +1926,18 @@ makedisk: 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.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", 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; - } + pp = cp->provider; g_topology_unlock(); /* Read disk serial. */ @@ -1992,9 +1947,7 @@ makedisk: gctl_error(req, "Can't get serial for provider '%s'.", diskname); - g_topology_lock(); g_raid_kill_consumer(sc, cp); - g_topology_unlock(); error = -7; break; } Copied and modified: projects/graid/8/sys/geom/raid/md_jmicron.c (from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c) ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Tue Feb 15 22:01:39 2011 (r218722, copy source) +++ projects/graid/8/sys/geom/raid/md_jmicron.c Thu Feb 17 16:12:55 2011 (r218774) @@ -91,6 +91,7 @@ struct g_raid_md_jmicron_perdisk { struct jmicron_raid_conf *pd_meta; int pd_disk_pos; int pd_disk_id; + off_t pd_disk_size; }; struct g_raid_md_jmicron_object { @@ -154,7 +155,7 @@ g_raid_md_jmicron_print(struct jmicron_r printf("stripe_shift %d\n", meta->stripe_shift); printf("flags %04x\n", meta->flags); printf("spare "); - for (k = 0; k < 2; k++) + for (k = 0; k < JMICRON_MAX_SPARE; k++) printf(" 0x%08x", meta->spare[k]); printf("\n"); printf("disks "); @@ -247,7 +248,7 @@ jmicron_meta_find_disk(struct jmicron_ra if ((meta->disks[pos] & JMICRON_DISK_MASK) == id) return (pos); } - for (pos = 0; pos < 2; pos++) { + for (pos = 0; pos < JMICRON_MAX_SPARE; pos++) { if ((meta->spare[pos] & JMICRON_DISK_MASK) == id) return (-3); } @@ -389,6 +390,8 @@ g_raid_md_jmicron_supported(int level, i case G_RAID_VOLUME_RL_SINGLE: if (disks != 1) return (0); + if (!force) + return (0); break; case G_RAID_VOLUME_RL_CONCAT: if (disks < 2) @@ -442,23 +445,19 @@ g_raid_md_jmicron_start_disk(struct g_ra if (tmpdisk->d_state != G_RAID_DISK_S_OFFLINE && tmpdisk->d_state != G_RAID_DISK_S_FAILED) continue; -#if 0 /* Make sure this disk is big enough. */ TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { - if (sd->sd_offset + sd->sd_size + 4096 > - (off_t)pd->pd_disk_meta.sectors * 512) { + if (sd->sd_offset + sd->sd_size + 512 > + pd->pd_disk_size) { G_RAID_DEBUG1(1, sc, - "Disk too small (%llu < %llu)", - ((unsigned long long) - pd->pd_disk_meta.sectors) * 512, - (unsigned long long) - sd->sd_offset + sd->sd_size + 4096); + "Disk too small (%ju < %ju)", + pd->pd_disk_size, + sd->sd_offset + sd->sd_size + 512); break; } } if (sd != NULL) continue; -#endif if (tmpdisk->d_state == G_RAID_DISK_S_OFFLINE) { olddisk = tmpdisk; break; @@ -669,7 +668,10 @@ g_raid_md_jmicron_start(struct g_raid_so vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; vol->v_mediasize = size * mdi->mdio_total_disks / 2; } else if (meta->type == JMICRON_T_CONCAT) { - vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; + if (mdi->mdio_total_disks == 1) + vol->v_raid_level = G_RAID_VOLUME_RL_SINGLE; + else + vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; vol->v_mediasize = 0; } else if (meta->type == JMICRON_T_RAID5) { vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; @@ -746,23 +748,26 @@ g_raid_md_jmicron_new_disk(struct g_raid if (g_raid_md_jmicron_start_disk(disk)) g_raid_md_write_jmicron(md, NULL, NULL, NULL); } else { - /* If we haven't started yet - check metadata freshness. */ - if (mdi->mdio_meta == NULL) { - G_RAID_DEBUG1(1, sc, "Newer disk"); + /* + * If we haven't started yet - update common metadata + * to get subdisks details, avoiding data from spare disks. + */ + if (mdi->mdio_meta == NULL || + jmicron_meta_find_disk(mdi->mdio_meta, + mdi->mdio_meta->disk_id) == -3) { if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_JMICRON); mdi->mdio_meta = jmicron_meta_copy(pdmeta); mdi->mdio_total_disks = jmicron_meta_total_disks(pdmeta); - mdi->mdio_disks_present = 1; - } else { - mdi->mdio_disks_present++; - G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", - mdi->mdio_disks_present, - mdi->mdio_total_disks, - jmicron_meta_total_spare(mdi->mdio_meta)); - mdi->mdio_meta->flags |= - pdmeta->flags & JMICRON_F_BADSEC; } + mdi->mdio_meta->flags |= pdmeta->flags & JMICRON_F_BADSEC; + + mdi->mdio_disks_present++; + G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", + mdi->mdio_disks_present, + mdi->mdio_total_disks, + jmicron_meta_total_spare(mdi->mdio_meta)); + /* If we collected all needed disks - start array. */ if (mdi->mdio_disks_present == mdi->mdio_total_disks + jmicron_meta_total_spare(mdi->mdio_meta)) @@ -928,13 +933,13 @@ search: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_meta = meta; if (spare == 2) { -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; } else { pd->pd_disk_pos = -1; pd->pd_disk_id = meta->disk_id; } + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_md_data = (void *)pd; disk->d_consumer = rcp; @@ -987,9 +992,7 @@ g_raid_md_event_jmicron(struct g_raid_md 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1087,38 +1090,18 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - 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 = -7; - 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 = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open '%s'.", + diskname); + g_topology_unlock(); + error = -7; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; @@ -1128,7 +1111,6 @@ makedisk: if (cp == NULL) continue; cp->private = disk; - g_topology_unlock(); /* Read kernel dumping information. */ @@ -1141,7 +1123,7 @@ makedisk: "Dumping not supported by %s.", cp->provider->name); -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + pd->pd_disk_size = pp->mediasize; if (size > pp->mediasize) size = pp->mediasize; if (sectorsize < pp->sectorsize) @@ -1199,7 +1181,7 @@ makedisk: gctl_error(req, "Size too small."); return (-13); } - if (size > 0xffffffffllu * sectorsize) { + if (size > 0xffffffffffffllu * sectorsize) { gctl_error(req, "Size too big."); return (-14); } @@ -1213,7 +1195,8 @@ makedisk: vol->v_strip_size = strip; vol->v_disks_count = numdisks; if (level == G_RAID_VOLUME_RL_RAID0 || - level == G_RAID_VOLUME_RL_CONCAT) + level == G_RAID_VOLUME_RL_CONCAT || + level == G_RAID_VOLUME_RL_SINGLE) vol->v_mediasize = size * numdisks; else if (level == G_RAID_VOLUME_RL_RAID1) vol->v_mediasize = size; @@ -1319,9 +1302,7 @@ makedisk: 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1363,48 +1344,30 @@ makedisk: 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.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", 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(); + pp = cp->provider; pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_consumer = cp; disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; + g_topology_unlock(); /* Read kernel dumping information. */ disk->d_kd.offset = 0; @@ -1470,7 +1433,8 @@ g_raid_md_write_jmicron(struct g_raid_md meta->type = JMICRON_T_RAID1; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E) meta->type = JMICRON_T_RAID01; - else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) + else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT || + vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE) meta->type = JMICRON_T_CONCAT; else meta->type = JMICRON_T_RAID5; Copied: projects/graid/8/sys/geom/raid/tr_concat.c (from r218706, projects/graid/head/sys/geom/raid/tr_concat.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/graid/8/sys/geom/raid/tr_concat.c Thu Feb 17 16:12:55 2011 (r218774, copy of r218706, projects/graid/head/sys/geom/raid/tr_concat.c) @@ -0,0 +1,341 @@ +/*- + * Copyright (c) 2010 Alexander Motin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS 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 AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "geom/raid/g_raid.h" +#include "g_raid_tr_if.h" + +static MALLOC_DEFINE(M_TR_CONCAT, "tr_concat_data", "GEOM_RAID CONCAT data"); + +struct g_raid_tr_concat_object { + struct g_raid_tr_object trso_base; + int trso_starting; + int trso_stopped; +}; + +static g_raid_tr_taste_t g_raid_tr_taste_concat; +static g_raid_tr_event_t g_raid_tr_event_concat; +static g_raid_tr_start_t g_raid_tr_start_concat; +static g_raid_tr_stop_t g_raid_tr_stop_concat; +static g_raid_tr_iostart_t g_raid_tr_iostart_concat; +static g_raid_tr_iodone_t g_raid_tr_iodone_concat; +static g_raid_tr_kerneldump_t g_raid_tr_kerneldump_concat; +static g_raid_tr_free_t g_raid_tr_free_concat; + +static kobj_method_t g_raid_tr_concat_methods[] = { + KOBJMETHOD(g_raid_tr_taste, g_raid_tr_taste_concat), + KOBJMETHOD(g_raid_tr_event, g_raid_tr_event_concat), + KOBJMETHOD(g_raid_tr_start, g_raid_tr_start_concat), + KOBJMETHOD(g_raid_tr_stop, g_raid_tr_stop_concat), + KOBJMETHOD(g_raid_tr_iostart, g_raid_tr_iostart_concat), + KOBJMETHOD(g_raid_tr_iodone, g_raid_tr_iodone_concat), + KOBJMETHOD(g_raid_tr_kerneldump, g_raid_tr_kerneldump_concat), + KOBJMETHOD(g_raid_tr_free, g_raid_tr_free_concat), + { 0, 0 } +}; + +static struct g_raid_tr_class g_raid_tr_concat_class = { + "CONCAT", + g_raid_tr_concat_methods, + sizeof(struct g_raid_tr_concat_object), + .trc_priority = 100 +}; + +static int +g_raid_tr_taste_concat(struct g_raid_tr_object *tr, struct g_raid_volume *volume) +{ + struct g_raid_tr_concat_object *trs; + + trs = (struct g_raid_tr_concat_object *)tr; + if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_SINGLE && + tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_CONCAT) + return (G_RAID_TR_TASTE_FAIL); + trs->trso_starting = 1; + return (G_RAID_TR_TASTE_SUCCEED); +} + +static int +g_raid_tr_update_state_concat(struct g_raid_volume *vol) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + off_t size; + u_int s; + int i, n, f; + + sc = vol->v_softc; + trs = (struct g_raid_tr_concat_object *)vol->v_tr; + if (trs->trso_stopped) + s = G_RAID_VOLUME_S_STOPPED; + else if (trs->trso_starting) + s = G_RAID_VOLUME_S_STARTING; + else { + n = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE); + f = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_FAILED); + if (n + f == vol->v_disks_count) { + if (f == 0) + s = G_RAID_VOLUME_S_OPTIMAL; + else + s = G_RAID_VOLUME_S_SUBOPTIMAL; + } else + s = G_RAID_VOLUME_S_BROKEN; + } + if (s != vol->v_state) { + + /* + * Some metadata modules may not know CONCAT volume + * mediasize until all disks connected. Recalculate. + */ + if (G_RAID_VOLUME_S_ALIVE(s) && + !G_RAID_VOLUME_S_ALIVE(vol->v_state)) { + size = 0; + for (i = 0; i < vol->v_disks_count; i++) { + if (vol->v_subdisks[i].sd_state != + G_RAID_SUBDISK_S_NONE) + size += vol->v_subdisks[i].sd_size; + } + vol->v_mediasize = size; + } + + g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? + 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); +} + +static int +g_raid_tr_event_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd, u_int event) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + int state; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + sc = vol->v_softc; + + state = sd->sd_state; + if (state != G_RAID_SUBDISK_S_NONE && + state != G_RAID_SUBDISK_S_FAILED && + state != G_RAID_SUBDISK_S_ACTIVE) { + G_RAID_DEBUG1(1, sc, + "Promote subdisk %s:%d from %s to ACTIVE.", + vol->v_name, sd->sd_pos, + g_raid_subdisk_state2str(sd->sd_state)); + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); + } + if (state != sd->sd_state && + !trs->trso_starting && !trs->trso_stopped) + g_raid_write_metadata(sc, vol, sd, NULL); + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_start_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_stop_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + trs->trso_stopped = 1; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static void +g_raid_tr_iostart_concat(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + char *addr; + off_t offset, length, remain; + u_int no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && + vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL) { + g_raid_iodone(bp, EIO); + return; + } + if (bp->bio_cmd == BIO_FLUSH) { + g_raid_tr_flush_common(tr, bp); + return; + } + + offset = bp->bio_offset; + remain = bp->bio_length; + addr = bp->bio_data; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", bp->bio_offset)); + bioq_init(&queue); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_offset = offset; + cbp->bio_data = addr; + cbp->bio_length = length; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + bp->bio_offset, bp->bio_length)); + } while (remain > 0); + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + +static int +g_raid_tr_kerneldump_concat(struct g_raid_tr_object *tr, + void *virtual, vm_offset_t physical, off_t boffset, size_t blength) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + char *addr; + off_t offset, length, remain; + int error, no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) + return (ENXIO); + + offset = boffset; + remain = blength; + addr = virtual; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", boffset)); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], + addr, 0, offset, length); + if (error != 0) + return (error); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + boffset, blength)); + } while (remain > 0); + return (0); +} + +static void +g_raid_tr_iodone_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd,struct bio *bp) +{ + struct bio *pbp; + + pbp = bp->bio_parent; + if (pbp->bio_error == 0) + pbp->bio_error = bp->bio_error; + g_destroy_bio(bp); + pbp->bio_inbed++; + if (pbp->bio_children == pbp->bio_inbed) { + pbp->bio_completed = pbp->bio_length; + g_raid_iodone(pbp, bp->bio_error); + } +} + +static int +g_raid_tr_free_concat(struct g_raid_tr_object *tr) +{ + + return (0); +} + +G_RAID_TR_DECLARE(g_raid_tr_concat); Modified: projects/graid/8/sys/modules/geom/geom_raid/Makefile ============================================================================== --- projects/graid/8/sys/modules/geom/geom_raid/Makefile Thu Feb 17 15:36:29 2011 (r218773) +++ projects/graid/8/sys/modules/geom/geom_raid/Makefile Thu Feb 17 16:12:55 2011 (r218774) @@ -9,9 +9,9 @@ SRCS+= bus_if.h device_if.h SRCS+= g_raid_md_if.h g_raid_md_if.c SRCS+= g_raid_tr_if.h g_raid_tr_if.c -SRCS+= md_intel.c +SRCS+= md_intel.c md_jmicron.c -SRCS+= tr_raid0.c tr_raid1.c tr_raid1e.c +SRCS+= tr_concat.c tr_raid0.c tr_raid1.c tr_raid1e.c MFILES= kern/bus_if.m kern/device_if.m MFILES+= geom/raid/g_raid_md_if.m geom/raid/g_raid_tr_if.m From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 16:21: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 4A90F1065670; Thu, 17 Feb 2011 16:21:27 +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 35EE68FC08; Thu, 17 Feb 2011 16:21: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 p1HGLR58017473; Thu, 17 Feb 2011 16:21:27 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HGLQqd017464; Thu, 17 Feb 2011 16:21:26 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201102171621.p1HGLQqd017464@svn.freebsd.org> From: Alexander Motin Date: Thu, 17 Feb 2011 16:21:26 +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: r218775 - in projects/graid/7: . contrib/bsnmp/snmpd contrib/wpa_supplicant gnu/usr.bin/groff/tmac sbin/geom/class/raid share/misc sys/conf sys/geom/raid sys/modules/geom/geom_raid tool... 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, 17 Feb 2011 16:21:27 -0000 Author: mav Date: Thu Feb 17 16:21:26 2011 New Revision: 218775 URL: http://svn.freebsd.org/changeset/base/218775 Log: MFH r218702, r218705, r218706, r218721, r218722, r218727, r218728, r218732, r218734, r218740. Added: projects/graid/7/sys/geom/raid/md_jmicron.c - copied, changed from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/7/sys/geom/raid/tr_concat.c - copied unchanged from r218706, projects/graid/head/sys/geom/raid/tr_concat.c Modified: projects/graid/7/sbin/geom/class/raid/graid.8 projects/graid/7/sys/conf/files projects/graid/7/sys/geom/raid/g_raid.c projects/graid/7/sys/geom/raid/g_raid.h projects/graid/7/sys/geom/raid/md_intel.c projects/graid/7/sys/modules/geom/geom_raid/Makefile Directory Properties: projects/graid/7/ (props changed) projects/graid/7/COPYRIGHT (props changed) projects/graid/7/Makefile (props changed) projects/graid/7/Makefile.inc1 (props changed) projects/graid/7/ObsoleteFiles.inc (props changed) projects/graid/7/UPDATING (props changed) projects/graid/7/bin/ (props changed) projects/graid/7/bin/chflags/ (props changed) projects/graid/7/bin/chio/ (props changed) projects/graid/7/bin/cp/ (props changed) projects/graid/7/bin/csh/ (props changed) projects/graid/7/bin/dd/ (props changed) projects/graid/7/bin/df/ (props changed) projects/graid/7/bin/echo/ (props changed) projects/graid/7/bin/expr/ (props changed) projects/graid/7/bin/kill/ (props changed) projects/graid/7/bin/ln/ (props changed) projects/graid/7/bin/ls/ (props changed) projects/graid/7/bin/pax/ (props changed) projects/graid/7/bin/ps/ (props changed) projects/graid/7/bin/rm/ (props changed) projects/graid/7/bin/sh/ (props changed) projects/graid/7/bin/test/ (props changed) projects/graid/7/cddl/contrib/opensolaris/ (props changed) projects/graid/7/cddl/lib/libzpool/ (props changed) projects/graid/7/contrib/bind9/ (props changed) projects/graid/7/contrib/binutils/ (props changed) projects/graid/7/contrib/bsnmp/ (props changed) projects/graid/7/contrib/bsnmp/snmpd/bsnmpd.1 (props changed) projects/graid/7/contrib/cpio/ (props changed) projects/graid/7/contrib/csup/ (props changed) projects/graid/7/contrib/expat/ (props changed) projects/graid/7/contrib/gcc/ (props changed) projects/graid/7/contrib/gdb/ (props changed) projects/graid/7/contrib/gdtoa/ (props changed) projects/graid/7/contrib/groff/ (props changed) projects/graid/7/contrib/ipfilter/ (props changed) projects/graid/7/contrib/less/ (props changed) projects/graid/7/contrib/libpcap/ (props changed) projects/graid/7/contrib/ncurses/ (props changed) projects/graid/7/contrib/netcat/ (props changed) projects/graid/7/contrib/ntp/ (props changed) projects/graid/7/contrib/nvi/ (props changed) projects/graid/7/contrib/pf/ (props changed) projects/graid/7/contrib/sendmail/ (props changed) projects/graid/7/contrib/smbfs/ (props changed) projects/graid/7/contrib/tcp_wrappers/ (props changed) projects/graid/7/contrib/tcsh/ (props changed) projects/graid/7/contrib/telnet/ (props changed) projects/graid/7/contrib/top/ (props changed) projects/graid/7/contrib/traceroute/ (props changed) projects/graid/7/contrib/wpa_supplicant/ (props changed) projects/graid/7/contrib/wpa_supplicant/wpa_supplicant.conf (props changed) projects/graid/7/crypto/openssh/ (props changed) projects/graid/7/crypto/openssl/ (props changed) projects/graid/7/etc/ (props changed) projects/graid/7/games/factor/ (props changed) projects/graid/7/games/fortune/ (props changed) projects/graid/7/games/grdc/ (props changed) projects/graid/7/gnu/ (props changed) projects/graid/7/gnu/lib/libstdc++/ (props changed) projects/graid/7/gnu/usr.bin/ (props changed) projects/graid/7/gnu/usr.bin/cc/ (props changed) projects/graid/7/gnu/usr.bin/cpio/ (props changed) projects/graid/7/gnu/usr.bin/cvs/ (props changed) projects/graid/7/gnu/usr.bin/gdb/ (props changed) projects/graid/7/gnu/usr.bin/gdb/kgdb/ (props changed) projects/graid/7/gnu/usr.bin/grep/ (props changed) projects/graid/7/gnu/usr.bin/groff/ (props changed) projects/graid/7/gnu/usr.bin/groff/tmac/mdoc.local (props changed) projects/graid/7/gnu/usr.bin/man/ (props changed) projects/graid/7/gnu/usr.bin/sort/ (props changed) projects/graid/7/include/ (props changed) projects/graid/7/kerberos5/ (props changed) projects/graid/7/lib/ (props changed) projects/graid/7/lib/bind/ (props changed) projects/graid/7/lib/csu/ (props changed) projects/graid/7/lib/libarchive/ (props changed) projects/graid/7/lib/libbluetooth/ (props changed) projects/graid/7/lib/libc/ (props changed) projects/graid/7/lib/libc/stdtime/ (props changed) projects/graid/7/lib/libc_r/ (props changed) projects/graid/7/lib/libcam/ (props changed) projects/graid/7/lib/libdisk/ (props changed) projects/graid/7/lib/libdwarf/ (props changed) projects/graid/7/lib/libelf/ (props changed) projects/graid/7/lib/libexpat/ (props changed) projects/graid/7/lib/libfetch/ (props changed) projects/graid/7/lib/libftpio/ (props changed) projects/graid/7/lib/libgeom/ (props changed) projects/graid/7/lib/libgssapi/ (props changed) projects/graid/7/lib/libkse/ (props changed) projects/graid/7/lib/libkvm/ (props changed) projects/graid/7/lib/libmagic/ (props changed) projects/graid/7/lib/libmemstat/ (props changed) projects/graid/7/lib/libpmc/ (props changed) projects/graid/7/lib/libradius/ (props changed) projects/graid/7/lib/libsm/ (props changed) projects/graid/7/lib/libstand/ (props changed) projects/graid/7/lib/libthr/ (props changed) projects/graid/7/lib/libthread_db/ (props changed) projects/graid/7/lib/libufs/ (props changed) projects/graid/7/lib/libutil/ (props changed) projects/graid/7/lib/msun/ (props changed) projects/graid/7/libexec/ (props changed) projects/graid/7/libexec/ftpd/ (props changed) projects/graid/7/libexec/rpc.rquotad/ (props changed) projects/graid/7/libexec/rpc.rstatd/ (props changed) projects/graid/7/libexec/rtld-elf/ (props changed) projects/graid/7/libexec/tftpd/ (props changed) projects/graid/7/release/ (props changed) projects/graid/7/release/doc/ (props changed) projects/graid/7/release/doc/en_US.ISO8859-1/hardware/ (props changed) projects/graid/7/release/picobsd/tinyware/login/ (props changed) projects/graid/7/rescue/ (props changed) projects/graid/7/sbin/ (props changed) projects/graid/7/sbin/atacontrol/ (props changed) projects/graid/7/sbin/bsdlabel/ (props changed) projects/graid/7/sbin/clri/ (props changed) projects/graid/7/sbin/ddb/ (props changed) projects/graid/7/sbin/devd/ (props changed) projects/graid/7/sbin/devfs/ (props changed) projects/graid/7/sbin/dhclient/ (props changed) projects/graid/7/sbin/dumpfs/ (props changed) projects/graid/7/sbin/fdisk/ (props changed) projects/graid/7/sbin/fdisk_pc98/ (props changed) projects/graid/7/sbin/fsck/ (props changed) projects/graid/7/sbin/fsck_ffs/ (props changed) projects/graid/7/sbin/fsck_msdosfs/ (props changed) projects/graid/7/sbin/geom/ (props changed) projects/graid/7/sbin/geom/class/label/ (props changed) projects/graid/7/sbin/geom/class/part/ (props changed) projects/graid/7/sbin/geom/class/stripe/ (props changed) projects/graid/7/sbin/geom/misc/ (props changed) projects/graid/7/sbin/growfs/ (props changed) projects/graid/7/sbin/ifconfig/ (props changed) projects/graid/7/sbin/init/ (props changed) projects/graid/7/sbin/ipf/ (props changed) projects/graid/7/sbin/ipfw/ (props changed) projects/graid/7/sbin/md5/ (props changed) projects/graid/7/sbin/mdconfig/ (props changed) projects/graid/7/sbin/mksnap_ffs/ (props changed) projects/graid/7/sbin/mount/ (props changed) projects/graid/7/sbin/mount_msdosfs/ (props changed) projects/graid/7/sbin/natd/ (props changed) projects/graid/7/sbin/newfs/ (props changed) projects/graid/7/sbin/newfs_msdos/ (props changed) projects/graid/7/sbin/ping6/ (props changed) projects/graid/7/sbin/reboot/ (props changed) projects/graid/7/sbin/restore/ (props changed) projects/graid/7/sbin/route/ (props changed) projects/graid/7/sbin/savecore/ (props changed) projects/graid/7/sbin/sconfig/ (props changed) projects/graid/7/sbin/shutdown/ (props changed) projects/graid/7/sbin/sysctl/ (props changed) projects/graid/7/sbin/tunefs/ (props changed) projects/graid/7/secure/lib/libcrypto/ (props changed) projects/graid/7/secure/lib/libssh/ (props changed) projects/graid/7/secure/lib/libssl/ (props changed) projects/graid/7/secure/libexec/sftp-server/ (props changed) projects/graid/7/secure/usr.bin/bdes/ (props changed) projects/graid/7/secure/usr.bin/openssl/ (props changed) projects/graid/7/secure/usr.bin/ssh/ (props changed) projects/graid/7/secure/usr.sbin/sshd/ (props changed) projects/graid/7/share/ (props changed) projects/graid/7/share/colldef/ (props changed) projects/graid/7/share/dict/ (props changed) projects/graid/7/share/doc/bind9/ (props changed) projects/graid/7/share/doc/papers/jail/ (props changed) projects/graid/7/share/doc/smm/01.setup/ (props changed) projects/graid/7/share/examples/ (props changed) projects/graid/7/share/man/ (props changed) projects/graid/7/share/man/man1/ (props changed) projects/graid/7/share/man/man3/ (props changed) projects/graid/7/share/man/man4/ (props changed) projects/graid/7/share/man/man5/ (props changed) projects/graid/7/share/man/man7/ (props changed) projects/graid/7/share/man/man8/ (props changed) projects/graid/7/share/man/man9/ (props changed) projects/graid/7/share/misc/ (props changed) projects/graid/7/share/misc/iso639 (props changed) projects/graid/7/share/misc/pci_vendors (props changed) projects/graid/7/share/mk/ (props changed) projects/graid/7/share/mklocale/ (props changed) projects/graid/7/share/monetdef/ (props changed) projects/graid/7/share/msgdef/ (props changed) projects/graid/7/share/numericdef/ (props changed) projects/graid/7/share/sendmail/ (props changed) projects/graid/7/share/syscons/ (props changed) projects/graid/7/share/syscons/keymaps/ (props changed) projects/graid/7/share/termcap/ (props changed) projects/graid/7/share/timedef/ (props changed) projects/graid/7/share/zoneinfo/ (props changed) projects/graid/7/sys/ (props changed) projects/graid/7/sys/cddl/contrib/opensolaris/ (props changed) projects/graid/7/sys/contrib/dev/acpica/ (props changed) projects/graid/7/sys/contrib/pf/ (props changed) projects/graid/7/tools/ (props changed) projects/graid/7/tools/build/ (props changed) projects/graid/7/tools/build/options/ (props changed) projects/graid/7/tools/debugscripts/ (props changed) projects/graid/7/tools/regression/acct/ (props changed) projects/graid/7/tools/regression/atm/ (props changed) projects/graid/7/tools/regression/bin/ (props changed) projects/graid/7/tools/regression/bin/date/ (props changed) projects/graid/7/tools/regression/bin/sh/ (props changed) projects/graid/7/tools/regression/file/ (props changed) projects/graid/7/tools/regression/file/flock/ (props changed) projects/graid/7/tools/regression/lib/libc/ (props changed) projects/graid/7/tools/regression/usr.bin/ (props changed) projects/graid/7/tools/regression/usr.bin/jot/ (props changed) projects/graid/7/tools/regression/usr.bin/tr/ (props changed) projects/graid/7/tools/sched/ (props changed) projects/graid/7/tools/test/ (props changed) projects/graid/7/tools/tools/ (props changed) projects/graid/7/tools/tools/aac/ (props changed) projects/graid/7/tools/tools/crypto/ (props changed) projects/graid/7/tools/tools/editing/ (props changed) projects/graid/7/tools/tools/nanobsd/ (props changed) projects/graid/7/tools/tools/nanobsd/FlashDevice.sub (props changed) projects/graid/7/tools/tools/nanobsd/nanobsd.sh (props changed) projects/graid/7/tools/tools/netrate/ (props changed) projects/graid/7/tools/tools/umastat/ (props changed) projects/graid/7/tools/tools/usb/ (props changed) projects/graid/7/usr.bin/ (props changed) projects/graid/7/usr.bin/basename/ (props changed) projects/graid/7/usr.bin/bluetooth/rfcomm_sppd/ (props changed) projects/graid/7/usr.bin/calendar/ (props changed) projects/graid/7/usr.bin/catman/ (props changed) projects/graid/7/usr.bin/cksum/ (props changed) projects/graid/7/usr.bin/comm/ (props changed) projects/graid/7/usr.bin/cpuset/ (props changed) projects/graid/7/usr.bin/csup/ (props changed) projects/graid/7/usr.bin/dirname/ (props changed) projects/graid/7/usr.bin/du/ (props changed) projects/graid/7/usr.bin/fetch/ (props changed) projects/graid/7/usr.bin/file/ (props changed) projects/graid/7/usr.bin/find/ (props changed) projects/graid/7/usr.bin/finger/ (props changed) projects/graid/7/usr.bin/fold/ (props changed) projects/graid/7/usr.bin/fstat/ (props changed) projects/graid/7/usr.bin/gcore/ (props changed) projects/graid/7/usr.bin/gprof/ (props changed) projects/graid/7/usr.bin/gzip/ (props changed) projects/graid/7/usr.bin/hexdump/ (props changed) projects/graid/7/usr.bin/id/ (props changed) projects/graid/7/usr.bin/indent/ (props changed) projects/graid/7/usr.bin/ipcrm/ (props changed) projects/graid/7/usr.bin/ipcs/ (props changed) projects/graid/7/usr.bin/jot/ (props changed) projects/graid/7/usr.bin/kdump/ (props changed) projects/graid/7/usr.bin/ktrace/ (props changed) projects/graid/7/usr.bin/ldd/ (props changed) projects/graid/7/usr.bin/less/ (props changed) projects/graid/7/usr.bin/locate/ (props changed) projects/graid/7/usr.bin/lockf/ (props changed) projects/graid/7/usr.bin/logger/ (props changed) projects/graid/7/usr.bin/make/ (props changed) projects/graid/7/usr.bin/ncal/ (props changed) projects/graid/7/usr.bin/netstat/ (props changed) projects/graid/7/usr.bin/newgrp/ (props changed) projects/graid/7/usr.bin/nsupdate/ (props changed) projects/graid/7/usr.bin/pkill/ (props changed) projects/graid/7/usr.bin/procstat/ (props changed) projects/graid/7/usr.bin/quota/ (props changed) projects/graid/7/usr.bin/rpcgen/ (props changed) projects/graid/7/usr.bin/ruptime/ (props changed) projects/graid/7/usr.bin/script/ (props changed) projects/graid/7/usr.bin/sed/ (props changed) projects/graid/7/usr.bin/shar/ (props changed) projects/graid/7/usr.bin/sockstat/ (props changed) projects/graid/7/usr.bin/stat/ (props changed) projects/graid/7/usr.bin/su/ (props changed) projects/graid/7/usr.bin/systat/ (props changed) projects/graid/7/usr.bin/tail/ (props changed) projects/graid/7/usr.bin/tar/ (props changed) projects/graid/7/usr.bin/tftp/ (props changed) projects/graid/7/usr.bin/tip/ (props changed) projects/graid/7/usr.bin/top/ (props changed) projects/graid/7/usr.bin/truncate/ (props changed) projects/graid/7/usr.bin/truss/ (props changed) projects/graid/7/usr.bin/uname/ (props changed) projects/graid/7/usr.bin/unifdef/ (props changed) projects/graid/7/usr.bin/units/ (props changed) projects/graid/7/usr.bin/uudecode/ (props changed) projects/graid/7/usr.bin/vmstat/ (props changed) projects/graid/7/usr.bin/w/ (props changed) projects/graid/7/usr.bin/wc/ (props changed) projects/graid/7/usr.bin/whereis/ (props changed) projects/graid/7/usr.bin/whois/ (props changed) projects/graid/7/usr.bin/window/ (props changed) projects/graid/7/usr.bin/xargs/ (props changed) projects/graid/7/usr.bin/ypcat/ (props changed) projects/graid/7/usr.bin/ypmatch/ (props changed) projects/graid/7/usr.bin/ypwhich/ (props changed) projects/graid/7/usr.sbin/ (props changed) projects/graid/7/usr.sbin/Makefile (props changed) projects/graid/7/usr.sbin/acpi/ (props changed) projects/graid/7/usr.sbin/adduser/ (props changed) projects/graid/7/usr.sbin/arp/ (props changed) projects/graid/7/usr.sbin/bluetooth/ (props changed) projects/graid/7/usr.sbin/bluetooth/btpand/ (props changed) projects/graid/7/usr.sbin/bluetooth/hcsecd/ (props changed) projects/graid/7/usr.sbin/bluetooth/hcseriald/ (props changed) projects/graid/7/usr.sbin/bluetooth/rfcomm_pppd/ (props changed) projects/graid/7/usr.sbin/bluetooth/sdpd/ (props changed) projects/graid/7/usr.sbin/boot0cfg/ (props changed) projects/graid/7/usr.sbin/bsnmpd/modules/snmp_hostres/hostres_processor_tbl.c (props changed) projects/graid/7/usr.sbin/bsnmpd/modules/snmp_pf/ (props changed) projects/graid/7/usr.sbin/burncd/ (props changed) projects/graid/7/usr.sbin/cdcontrol/ (props changed) projects/graid/7/usr.sbin/chown/ (props changed) projects/graid/7/usr.sbin/chroot/ (props changed) projects/graid/7/usr.sbin/config/ (props changed) projects/graid/7/usr.sbin/config/SMM.doc/ (props changed) projects/graid/7/usr.sbin/cpucontrol/ (props changed) projects/graid/7/usr.sbin/crashinfo/ (props changed) projects/graid/7/usr.sbin/cron/ (props changed) projects/graid/7/usr.sbin/cron/cron/ (props changed) projects/graid/7/usr.sbin/crunch/ (props changed) projects/graid/7/usr.sbin/cxgbtool/ (props changed) projects/graid/7/usr.sbin/eeprom/ (props changed) projects/graid/7/usr.sbin/extattr/ (props changed) projects/graid/7/usr.sbin/faithd/ (props changed) projects/graid/7/usr.sbin/fdcontrol/ (props changed) projects/graid/7/usr.sbin/fdformat/ (props changed) projects/graid/7/usr.sbin/fdread/ (props changed) projects/graid/7/usr.sbin/fdwrite/ (props changed) projects/graid/7/usr.sbin/fifolog/ (props changed) projects/graid/7/usr.sbin/freebsd-update/ (props changed) projects/graid/7/usr.sbin/fwcontrol/ (props changed) projects/graid/7/usr.sbin/gstat/ (props changed) projects/graid/7/usr.sbin/iostat/ (props changed) projects/graid/7/usr.sbin/jail/ (props changed) projects/graid/7/usr.sbin/jexec/ (props changed) projects/graid/7/usr.sbin/jls/ (props changed) projects/graid/7/usr.sbin/lpr/ (props changed) projects/graid/7/usr.sbin/mailwrapper/ (props changed) projects/graid/7/usr.sbin/makefs/ (props changed) projects/graid/7/usr.sbin/makefs/ffs/ffs_bswap.c (props changed) projects/graid/7/usr.sbin/makefs/ffs/ffs_subr.c (props changed) projects/graid/7/usr.sbin/makefs/ffs/ufs_bswap.h (props changed) projects/graid/7/usr.sbin/makefs/getid.c (props changed) projects/graid/7/usr.sbin/mergemaster/ (props changed) projects/graid/7/usr.sbin/mfiutil/ (props changed) projects/graid/7/usr.sbin/mountd/ (props changed) projects/graid/7/usr.sbin/mptutil/ (props changed) projects/graid/7/usr.sbin/mtree/ (props changed) projects/graid/7/usr.sbin/ndiscvt/ (props changed) projects/graid/7/usr.sbin/ndp/ (props changed) projects/graid/7/usr.sbin/newsyslog/ (props changed) projects/graid/7/usr.sbin/nscd/ (props changed) projects/graid/7/usr.sbin/ntp/ (props changed) projects/graid/7/usr.sbin/pciconf/ (props changed) projects/graid/7/usr.sbin/pkg_install/ (props changed) projects/graid/7/usr.sbin/pmccontrol/ (props changed) projects/graid/7/usr.sbin/pmcstat/ (props changed) projects/graid/7/usr.sbin/portsnap/ (props changed) projects/graid/7/usr.sbin/powerd/ (props changed) projects/graid/7/usr.sbin/ppp/ (props changed) projects/graid/7/usr.sbin/pstat/ (props changed) projects/graid/7/usr.sbin/pw/ (props changed) projects/graid/7/usr.sbin/pwd_mkdb/ (props changed) projects/graid/7/usr.sbin/rpc.lockd/ (props changed) projects/graid/7/usr.sbin/rpc.statd/ (props changed) projects/graid/7/usr.sbin/rpc.yppasswdd/ (props changed) projects/graid/7/usr.sbin/rtadvd/ (props changed) projects/graid/7/usr.sbin/rtsold/ (props changed) projects/graid/7/usr.sbin/sade/ (props changed) projects/graid/7/usr.sbin/service/ (props changed) projects/graid/7/usr.sbin/setfib/ (props changed) projects/graid/7/usr.sbin/sysinstall/ (props changed) projects/graid/7/usr.sbin/syslogd/ (props changed) projects/graid/7/usr.sbin/traceroute/ (props changed) projects/graid/7/usr.sbin/traceroute6/ (props changed) projects/graid/7/usr.sbin/tzsetup/ (props changed) projects/graid/7/usr.sbin/ugidfw/ (props changed) projects/graid/7/usr.sbin/wpa/wpa_supplicant/ (props changed) projects/graid/7/usr.sbin/ypserv/ (props changed) projects/graid/7/usr.sbin/zic/ (props changed) Modified: projects/graid/7/sbin/geom/class/raid/graid.8 ============================================================================== --- projects/graid/7/sbin/geom/class/raid/graid.8 Thu Feb 17 16:12:55 2011 (r218774) +++ projects/graid/7/sbin/geom/class/raid/graid.8 Thu Feb 17 16:21:26 2011 (r218775) @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 13, 2011 +.Dd February 15, 2011 .Dt GRAID 8 .Os .Sh NAME @@ -205,14 +205,21 @@ The format used by Intel RAID BIOS. Supports up to two volumes per array. Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), RAID5 (3+ disks), RAID10 (4 disks). -Configurations not supported by Intel RAID BIOS, but enforsable on your own +Configurations not supported by Intel RAID BIOS, but enforceable on your own risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks). +.It JMicron +The format used by JMicron RAID BIOS. +Supports one volume per array. +Supports configurations: RAID0 (2+ disks), RAID1 (2 disks), +RAID10 (4 disks), CONCAT (2+ disks). +Configurations not supported by JMicron RAID BIOS, but enforceable on your own +risk: RAID1 (3+ disks), RAID1E (3+ disks), RAID10 (6+ disks), RAID5 (3+ disks). .El .Sh SUPPORTED RAID LEVELS The GEOM RAID class follows a modular design, allowing different RAID levels to be used. Support for the following RAID levels is currently implemented: RAID0, RAID1, -RAID1E, RAID10. +RAID1E, RAID10, SINGLE, CONCAT. .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. .Sh SEE ALSO Modified: projects/graid/7/sys/conf/files ============================================================================== --- projects/graid/7/sys/conf/files Thu Feb 17 16:12:55 2011 (r218774) +++ projects/graid/7/sys/conf/files Thu Feb 17 16:21:26 2011 (r218775) @@ -1531,6 +1531,8 @@ geom/raid/g_raid_ctl.c optional geom_ra geom/raid/g_raid_md_if.m optional geom_raid geom/raid/g_raid_tr_if.m optional geom_raid geom/raid/md_intel.c optional geom_raid +geom/raid/md_jmicron.c optional geom_raid +geom/raid/tr_concat.c optional geom_raid geom/raid/tr_raid0.c optional geom_raid geom/raid/tr_raid1.c optional geom_raid geom/raid/tr_raid1e.c optional geom_raid Modified: projects/graid/7/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid.c Thu Feb 17 16:12:55 2011 (r218774) +++ projects/graid/7/sys/geom/raid/g_raid.c Thu Feb 17 16:21:26 2011 (r218775) @@ -585,6 +585,32 @@ g_raid_get_subdisk(struct g_raid_volume return (NULL); } +struct g_consumer * +g_raid_open_consumer(struct g_raid_softc *sc, const char *name) +{ + struct g_consumer *cp; + struct g_provider *pp; + + g_topology_assert(); + + if (strncmp(name, "/dev/", 5) == 0) + name += 5; + pp = g_provider_by_name(name); + if (pp == NULL) + return (NULL); + cp = g_new_consumer(sc->sc_geom); + if (g_attach(cp, pp) != 0) { + g_destroy_consumer(cp); + return (NULL); + } + if (g_access(cp, 1, 1, 1) != 0) { + g_detach(cp); + g_destroy_consumer(cp); + return (NULL); + } + return (cp); +} + static u_int g_raid_nrequests(struct g_raid_softc *sc, struct g_consumer *cp) { @@ -652,11 +678,12 @@ g_raid_kill_consumer(struct g_raid_softc struct g_provider *pp; int retaste_wait; - g_topology_assert(); + g_topology_assert_not(); + g_topology_lock(); cp->private = NULL; if (g_raid_consumer_is_busy(sc, cp)) - return; + goto out; pp = cp->provider; retaste_wait = 0; if (cp->acw == 1) { @@ -676,11 +703,13 @@ g_raid_kill_consumer(struct g_raid_softc * after retaste event is sent. */ g_post_event(g_raid_destroy_consumer, cp, M_WAITOK, NULL); - return; + goto out; } G_RAID_DEBUG(1, "Consumer %s destroyed.", pp->name); g_detach(cp); g_destroy_consumer(cp); +out: + g_topology_unlock(); } static void @@ -1227,11 +1256,8 @@ g_raid_disk_done_request(struct bio *bp) if (bp->bio_from != NULL) { bp->bio_from->index--; disk = bp->bio_from->private; - if (disk == NULL) { - g_topology_lock(); + if (disk == NULL) g_raid_kill_consumer(sc, bp->bio_from); - g_topology_unlock(); - } } bp->bio_offset -= sd->sd_offset; @@ -1301,6 +1327,7 @@ g_raid_worker(void *arg) t = now; TAILQ_FOREACH(vol, &sc->sc_volumes, v_next) { if (bioq_first(&vol->v_inflight) == NULL && + vol->v_tr && timevalcmp(&vol->v_last_done, &t, < )) t = vol->v_last_done; } @@ -1867,9 +1894,7 @@ g_raid_destroy_disk(struct g_raid_disk * sc = disk->d_softc; G_RAID_DEBUG1(2, sc, "Destroying disk."); if (disk->d_consumer) { - g_topology_lock(); g_raid_kill_consumer(sc, disk->d_consumer); - g_topology_unlock(); disk->d_consumer = NULL; } TAILQ_FOREACH_SAFE(sd, &disk->d_subdisks, sd_next, tmp) { @@ -2227,7 +2252,7 @@ g_raid_md_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_md_classes); - if (c == NULL || c->mdc_priority < class->mdc_priority) + if (c == NULL || c->mdc_priority > class->mdc_priority) LIST_INSERT_HEAD(&g_raid_md_classes, class, mdc_list); else { while ((nc = LIST_NEXT(c, mdc_list)) != NULL && @@ -2260,7 +2285,7 @@ g_raid_tr_modevent(module_t mod, int typ switch (type) { case MOD_LOAD: c = LIST_FIRST(&g_raid_tr_classes); - if (c == NULL || c->trc_priority < class->trc_priority) + if (c == NULL || c->trc_priority > class->trc_priority) LIST_INSERT_HEAD(&g_raid_tr_classes, class, trc_list); else { while ((nc = LIST_NEXT(c, trc_list)) != NULL && Modified: projects/graid/7/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/7/sys/geom/raid/g_raid.h Thu Feb 17 16:12:55 2011 (r218774) +++ projects/graid/7/sys/geom/raid/g_raid.h Thu Feb 17 16:21:26 2011 (r218775) @@ -364,6 +364,8 @@ void g_raid_subdisk_iostart(struct g_rai int g_raid_subdisk_kerneldump(struct g_raid_subdisk *sd, void *virtual, vm_offset_t physical, off_t offset, size_t length); +struct g_consumer *g_raid_open_consumer(struct g_raid_softc *sc, + const char *name); void g_raid_kill_consumer(struct g_raid_softc *sc, struct g_consumer *cp); void g_raid_report_disk_state(struct g_raid_disk *disk); Modified: projects/graid/7/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/7/sys/geom/raid/md_intel.c Thu Feb 17 16:12:55 2011 (r218774) +++ projects/graid/7/sys/geom/raid/md_intel.c Thu Feb 17 16:21:26 2011 (r218775) @@ -715,9 +715,9 @@ nofit: TAILQ_REMOVE(&olddisk->d_subdisks, sd, sd_next); TAILQ_INSERT_TAIL(&disk->d_subdisks, sd, sd_next); sd->sd_disk = disk; - oldpd->pd_disk_pos = -2; - pd->pd_disk_pos = disk_pos; } + oldpd->pd_disk_pos = -2; + pd->pd_disk_pos = disk_pos; /* If it was placeholder -- destroy it. */ if (olddisk->d_state == G_RAID_DISK_S_OFFLINE) { @@ -1327,9 +1327,7 @@ g_raid_md_event_intel(struct g_raid_md_o 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1428,38 +1426,18 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - 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 = -7; - 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 = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", + diskname); + g_topology_unlock(); + error = -4; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_INTEL, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; disk = g_raid_create_disk(sc); @@ -1467,13 +1445,11 @@ makedisk: disk->d_consumer = cp; if (cp == NULL) { strcpy(&pd->pd_disk_meta.serial[0], "NONE"); - pd->pd_disk_meta.id = 0; pd->pd_disk_meta.id = 0xffffffff; pd->pd_disk_meta.flags = INTEL_F_ASSIGNED; continue; } cp->private = disk; - g_topology_unlock(); error = g_raid_md_get_label(cp, @@ -1908,9 +1884,7 @@ makedisk: 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1952,37 +1926,18 @@ makedisk: 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.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", 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; - } + pp = cp->provider; g_topology_unlock(); /* Read disk serial. */ @@ -1992,9 +1947,7 @@ makedisk: gctl_error(req, "Can't get serial for provider '%s'.", diskname); - g_topology_lock(); g_raid_kill_consumer(sc, cp); - g_topology_unlock(); error = -7; break; } Copied and modified: projects/graid/7/sys/geom/raid/md_jmicron.c (from r218722, projects/graid/head/sys/geom/raid/md_jmicron.c) ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Tue Feb 15 22:01:39 2011 (r218722, copy source) +++ projects/graid/7/sys/geom/raid/md_jmicron.c Thu Feb 17 16:21:26 2011 (r218775) @@ -91,6 +91,7 @@ struct g_raid_md_jmicron_perdisk { struct jmicron_raid_conf *pd_meta; int pd_disk_pos; int pd_disk_id; + off_t pd_disk_size; }; struct g_raid_md_jmicron_object { @@ -154,7 +155,7 @@ g_raid_md_jmicron_print(struct jmicron_r printf("stripe_shift %d\n", meta->stripe_shift); printf("flags %04x\n", meta->flags); printf("spare "); - for (k = 0; k < 2; k++) + for (k = 0; k < JMICRON_MAX_SPARE; k++) printf(" 0x%08x", meta->spare[k]); printf("\n"); printf("disks "); @@ -247,7 +248,7 @@ jmicron_meta_find_disk(struct jmicron_ra if ((meta->disks[pos] & JMICRON_DISK_MASK) == id) return (pos); } - for (pos = 0; pos < 2; pos++) { + for (pos = 0; pos < JMICRON_MAX_SPARE; pos++) { if ((meta->spare[pos] & JMICRON_DISK_MASK) == id) return (-3); } @@ -389,6 +390,8 @@ g_raid_md_jmicron_supported(int level, i case G_RAID_VOLUME_RL_SINGLE: if (disks != 1) return (0); + if (!force) + return (0); break; case G_RAID_VOLUME_RL_CONCAT: if (disks < 2) @@ -442,23 +445,19 @@ g_raid_md_jmicron_start_disk(struct g_ra if (tmpdisk->d_state != G_RAID_DISK_S_OFFLINE && tmpdisk->d_state != G_RAID_DISK_S_FAILED) continue; -#if 0 /* Make sure this disk is big enough. */ TAILQ_FOREACH(sd, &tmpdisk->d_subdisks, sd_next) { - if (sd->sd_offset + sd->sd_size + 4096 > - (off_t)pd->pd_disk_meta.sectors * 512) { + if (sd->sd_offset + sd->sd_size + 512 > + pd->pd_disk_size) { G_RAID_DEBUG1(1, sc, - "Disk too small (%llu < %llu)", - ((unsigned long long) - pd->pd_disk_meta.sectors) * 512, - (unsigned long long) - sd->sd_offset + sd->sd_size + 4096); + "Disk too small (%ju < %ju)", + pd->pd_disk_size, + sd->sd_offset + sd->sd_size + 512); break; } } if (sd != NULL) continue; -#endif if (tmpdisk->d_state == G_RAID_DISK_S_OFFLINE) { olddisk = tmpdisk; break; @@ -669,7 +668,10 @@ g_raid_md_jmicron_start(struct g_raid_so vol->v_raid_level = G_RAID_VOLUME_RL_RAID1E; vol->v_mediasize = size * mdi->mdio_total_disks / 2; } else if (meta->type == JMICRON_T_CONCAT) { - vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; + if (mdi->mdio_total_disks == 1) + vol->v_raid_level = G_RAID_VOLUME_RL_SINGLE; + else + vol->v_raid_level = G_RAID_VOLUME_RL_CONCAT; vol->v_mediasize = 0; } else if (meta->type == JMICRON_T_RAID5) { vol->v_raid_level = G_RAID_VOLUME_RL_RAID5; @@ -746,23 +748,26 @@ g_raid_md_jmicron_new_disk(struct g_raid if (g_raid_md_jmicron_start_disk(disk)) g_raid_md_write_jmicron(md, NULL, NULL, NULL); } else { - /* If we haven't started yet - check metadata freshness. */ - if (mdi->mdio_meta == NULL) { - G_RAID_DEBUG1(1, sc, "Newer disk"); + /* + * If we haven't started yet - update common metadata + * to get subdisks details, avoiding data from spare disks. + */ + if (mdi->mdio_meta == NULL || + jmicron_meta_find_disk(mdi->mdio_meta, + mdi->mdio_meta->disk_id) == -3) { if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_JMICRON); mdi->mdio_meta = jmicron_meta_copy(pdmeta); mdi->mdio_total_disks = jmicron_meta_total_disks(pdmeta); - mdi->mdio_disks_present = 1; - } else { - mdi->mdio_disks_present++; - G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", - mdi->mdio_disks_present, - mdi->mdio_total_disks, - jmicron_meta_total_spare(mdi->mdio_meta)); - mdi->mdio_meta->flags |= - pdmeta->flags & JMICRON_F_BADSEC; } + mdi->mdio_meta->flags |= pdmeta->flags & JMICRON_F_BADSEC; + + mdi->mdio_disks_present++; + G_RAID_DEBUG1(1, sc, "Matching disk (%d of %d+%d up)", + mdi->mdio_disks_present, + mdi->mdio_total_disks, + jmicron_meta_total_spare(mdi->mdio_meta)); + /* If we collected all needed disks - start array. */ if (mdi->mdio_disks_present == mdi->mdio_total_disks + jmicron_meta_total_spare(mdi->mdio_meta)) @@ -928,13 +933,13 @@ search: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_meta = meta; if (spare == 2) { -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; } else { pd->pd_disk_pos = -1; pd->pd_disk_id = meta->disk_id; } + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_md_data = (void *)pd; disk->d_consumer = rcp; @@ -987,9 +992,7 @@ g_raid_md_event_jmicron(struct g_raid_md 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1087,38 +1090,18 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o if (strcmp(diskname, "NONE") == 0) { cp = NULL; pp = NULL; - goto makedisk; - } - if (strncmp(diskname, "/dev/", 5) == 0) - diskname += 5; - g_topology_lock(); - pp = g_provider_by_name(diskname); - if (pp == NULL) { - gctl_error(req, "Provider '%s' not found.", - diskname); - g_topology_unlock(); - error = -7; - 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 = -7; - 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 = -7; - break; + } else { + g_topology_lock(); + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open '%s'.", + diskname); + g_topology_unlock(); + error = -7; + break; + } + pp = cp->provider; } -makedisk: pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = i; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; @@ -1128,7 +1111,6 @@ makedisk: if (cp == NULL) continue; cp->private = disk; - g_topology_unlock(); /* Read kernel dumping information. */ @@ -1141,7 +1123,7 @@ makedisk: "Dumping not supported by %s.", cp->provider->name); -// pd->pd_disk_meta.sectors = pp->mediasize / pp->sectorsize; + pd->pd_disk_size = pp->mediasize; if (size > pp->mediasize) size = pp->mediasize; if (sectorsize < pp->sectorsize) @@ -1199,7 +1181,7 @@ makedisk: gctl_error(req, "Size too small."); return (-13); } - if (size > 0xffffffffllu * sectorsize) { + if (size > 0xffffffffffffllu * sectorsize) { gctl_error(req, "Size too big."); return (-14); } @@ -1213,7 +1195,8 @@ makedisk: vol->v_strip_size = strip; vol->v_disks_count = numdisks; if (level == G_RAID_VOLUME_RL_RAID0 || - level == G_RAID_VOLUME_RL_CONCAT) + level == G_RAID_VOLUME_RL_CONCAT || + level == G_RAID_VOLUME_RL_SINGLE) vol->v_mediasize = size * numdisks; else if (level == G_RAID_VOLUME_RL_RAID1) vol->v_mediasize = size; @@ -1319,9 +1302,7 @@ makedisk: 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; } TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { @@ -1363,48 +1344,30 @@ makedisk: 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.", + cp = g_raid_open_consumer(sc, diskname); + if (cp == NULL) { + gctl_error(req, "Can't open disk '%s'.", 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(); + pp = cp->provider; pd = malloc(sizeof(*pd), M_MD_JMICRON, M_WAITOK | M_ZERO); pd->pd_disk_pos = -3; pd->pd_disk_id = arc4random() & JMICRON_DISK_MASK; + pd->pd_disk_size = pp->mediasize; disk = g_raid_create_disk(sc); disk->d_consumer = cp; disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; + g_topology_unlock(); /* Read kernel dumping information. */ disk->d_kd.offset = 0; @@ -1470,7 +1433,8 @@ g_raid_md_write_jmicron(struct g_raid_md meta->type = JMICRON_T_RAID1; else if (vol->v_raid_level == G_RAID_VOLUME_RL_RAID1E) meta->type = JMICRON_T_RAID01; - else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT) + else if (vol->v_raid_level == G_RAID_VOLUME_RL_CONCAT || + vol->v_raid_level == G_RAID_VOLUME_RL_SINGLE) meta->type = JMICRON_T_CONCAT; else meta->type = JMICRON_T_RAID5; Copied: projects/graid/7/sys/geom/raid/tr_concat.c (from r218706, projects/graid/head/sys/geom/raid/tr_concat.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/graid/7/sys/geom/raid/tr_concat.c Thu Feb 17 16:21:26 2011 (r218775, copy of r218706, projects/graid/head/sys/geom/raid/tr_concat.c) @@ -0,0 +1,341 @@ +/*- + * Copyright (c) 2010 Alexander Motin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS 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 AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "geom/raid/g_raid.h" +#include "g_raid_tr_if.h" + +static MALLOC_DEFINE(M_TR_CONCAT, "tr_concat_data", "GEOM_RAID CONCAT data"); + +struct g_raid_tr_concat_object { + struct g_raid_tr_object trso_base; + int trso_starting; + int trso_stopped; +}; + +static g_raid_tr_taste_t g_raid_tr_taste_concat; +static g_raid_tr_event_t g_raid_tr_event_concat; +static g_raid_tr_start_t g_raid_tr_start_concat; +static g_raid_tr_stop_t g_raid_tr_stop_concat; +static g_raid_tr_iostart_t g_raid_tr_iostart_concat; +static g_raid_tr_iodone_t g_raid_tr_iodone_concat; +static g_raid_tr_kerneldump_t g_raid_tr_kerneldump_concat; +static g_raid_tr_free_t g_raid_tr_free_concat; + +static kobj_method_t g_raid_tr_concat_methods[] = { + KOBJMETHOD(g_raid_tr_taste, g_raid_tr_taste_concat), + KOBJMETHOD(g_raid_tr_event, g_raid_tr_event_concat), + KOBJMETHOD(g_raid_tr_start, g_raid_tr_start_concat), + KOBJMETHOD(g_raid_tr_stop, g_raid_tr_stop_concat), + KOBJMETHOD(g_raid_tr_iostart, g_raid_tr_iostart_concat), + KOBJMETHOD(g_raid_tr_iodone, g_raid_tr_iodone_concat), + KOBJMETHOD(g_raid_tr_kerneldump, g_raid_tr_kerneldump_concat), + KOBJMETHOD(g_raid_tr_free, g_raid_tr_free_concat), + { 0, 0 } +}; + +static struct g_raid_tr_class g_raid_tr_concat_class = { + "CONCAT", + g_raid_tr_concat_methods, + sizeof(struct g_raid_tr_concat_object), + .trc_priority = 100 +}; + +static int +g_raid_tr_taste_concat(struct g_raid_tr_object *tr, struct g_raid_volume *volume) +{ + struct g_raid_tr_concat_object *trs; + + trs = (struct g_raid_tr_concat_object *)tr; + if (tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_SINGLE && + tr->tro_volume->v_raid_level != G_RAID_VOLUME_RL_CONCAT) + return (G_RAID_TR_TASTE_FAIL); + trs->trso_starting = 1; + return (G_RAID_TR_TASTE_SUCCEED); +} + +static int +g_raid_tr_update_state_concat(struct g_raid_volume *vol) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + off_t size; + u_int s; + int i, n, f; + + sc = vol->v_softc; + trs = (struct g_raid_tr_concat_object *)vol->v_tr; + if (trs->trso_stopped) + s = G_RAID_VOLUME_S_STOPPED; + else if (trs->trso_starting) + s = G_RAID_VOLUME_S_STARTING; + else { + n = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE); + f = g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_FAILED); + if (n + f == vol->v_disks_count) { + if (f == 0) + s = G_RAID_VOLUME_S_OPTIMAL; + else + s = G_RAID_VOLUME_S_SUBOPTIMAL; + } else + s = G_RAID_VOLUME_S_BROKEN; + } + if (s != vol->v_state) { + + /* + * Some metadata modules may not know CONCAT volume + * mediasize until all disks connected. Recalculate. + */ + if (G_RAID_VOLUME_S_ALIVE(s) && + !G_RAID_VOLUME_S_ALIVE(vol->v_state)) { + size = 0; + for (i = 0; i < vol->v_disks_count; i++) { + if (vol->v_subdisks[i].sd_state != + G_RAID_SUBDISK_S_NONE) + size += vol->v_subdisks[i].sd_size; + } + vol->v_mediasize = size; + } + + g_raid_event_send(vol, G_RAID_VOLUME_S_ALIVE(s) ? + 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); +} + +static int +g_raid_tr_event_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd, u_int event) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_softc *sc; + struct g_raid_volume *vol; + int state; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + sc = vol->v_softc; + + state = sd->sd_state; + if (state != G_RAID_SUBDISK_S_NONE && + state != G_RAID_SUBDISK_S_FAILED && + state != G_RAID_SUBDISK_S_ACTIVE) { + G_RAID_DEBUG1(1, sc, + "Promote subdisk %s:%d from %s to ACTIVE.", + vol->v_name, sd->sd_pos, + g_raid_subdisk_state2str(sd->sd_state)); + g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_ACTIVE); + } + if (state != sd->sd_state && + !trs->trso_starting && !trs->trso_stopped) + g_raid_write_metadata(sc, vol, sd, NULL); + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_start_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static int +g_raid_tr_stop_concat(struct g_raid_tr_object *tr) +{ + struct g_raid_tr_concat_object *trs; + struct g_raid_volume *vol; + + trs = (struct g_raid_tr_concat_object *)tr; + vol = tr->tro_volume; + trs->trso_starting = 0; + trs->trso_stopped = 1; + g_raid_tr_update_state_concat(vol); + return (0); +} + +static void +g_raid_tr_iostart_concat(struct g_raid_tr_object *tr, struct bio *bp) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + struct bio_queue_head queue; + struct bio *cbp; + char *addr; + off_t offset, length, remain; + u_int no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL && + vol->v_state != G_RAID_VOLUME_S_SUBOPTIMAL) { + g_raid_iodone(bp, EIO); + return; + } + if (bp->bio_cmd == BIO_FLUSH) { + g_raid_tr_flush_common(tr, bp); + return; + } + + offset = bp->bio_offset; + remain = bp->bio_length; + addr = bp->bio_data; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", bp->bio_offset)); + bioq_init(&queue); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + cbp = g_clone_bio(bp); + if (cbp == NULL) + goto failure; + cbp->bio_offset = offset; + cbp->bio_data = addr; + cbp->bio_length = length; + cbp->bio_caller1 = sd; + bioq_insert_tail(&queue, cbp); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + bp->bio_offset, bp->bio_length)); + } while (remain > 0); + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + sd = cbp->bio_caller1; + cbp->bio_caller1 = NULL; + g_raid_subdisk_iostart(sd, cbp); + } + return; +failure: + for (cbp = bioq_first(&queue); cbp != NULL; + cbp = bioq_first(&queue)) { + bioq_remove(&queue, cbp); + g_destroy_bio(cbp); + } + if (bp->bio_error == 0) + bp->bio_error = ENOMEM; + g_raid_iodone(bp, bp->bio_error); +} + +static int +g_raid_tr_kerneldump_concat(struct g_raid_tr_object *tr, + void *virtual, vm_offset_t physical, off_t boffset, size_t blength) +{ + struct g_raid_volume *vol; + struct g_raid_subdisk *sd; + char *addr; + off_t offset, length, remain; + int error, no; + + vol = tr->tro_volume; + if (vol->v_state != G_RAID_VOLUME_S_OPTIMAL) + return (ENXIO); + + offset = boffset; + remain = blength; + addr = virtual; + no = 0; + while (no < vol->v_disks_count && + offset >= vol->v_subdisks[no].sd_size) { + offset -= vol->v_subdisks[no].sd_size; + no++; + } + KASSERT(no < vol->v_disks_count, + ("Request starts after volume end (%ju)", boffset)); + do { + sd = &vol->v_subdisks[no]; + length = MIN(sd->sd_size - offset, remain); + error = g_raid_subdisk_kerneldump(&vol->v_subdisks[no], + addr, 0, offset, length); + if (error != 0) + return (error); + remain -= length; + addr += length; + offset = 0; + no++; + KASSERT(no < vol->v_disks_count || remain == 0, + ("Request ends after volume end (%ju, %ju)", + boffset, blength)); + } while (remain > 0); + return (0); +} + +static void +g_raid_tr_iodone_concat(struct g_raid_tr_object *tr, + struct g_raid_subdisk *sd,struct bio *bp) +{ + struct bio *pbp; + + pbp = bp->bio_parent; + if (pbp->bio_error == 0) + pbp->bio_error = bp->bio_error; + g_destroy_bio(bp); + pbp->bio_inbed++; + if (pbp->bio_children == pbp->bio_inbed) { + pbp->bio_completed = pbp->bio_length; + g_raid_iodone(pbp, bp->bio_error); + } +} + +static int +g_raid_tr_free_concat(struct g_raid_tr_object *tr) +{ + + return (0); +} + +G_RAID_TR_DECLARE(g_raid_tr_concat); Modified: projects/graid/7/sys/modules/geom/geom_raid/Makefile ============================================================================== --- projects/graid/7/sys/modules/geom/geom_raid/Makefile Thu Feb 17 16:12:55 2011 (r218774) +++ projects/graid/7/sys/modules/geom/geom_raid/Makefile Thu Feb 17 16:21:26 2011 (r218775) @@ -9,9 +9,9 @@ SRCS+= bus_if.h device_if.h SRCS+= g_raid_md_if.h g_raid_md_if.c SRCS+= g_raid_tr_if.h g_raid_tr_if.c -SRCS+= md_intel.c +SRCS+= md_intel.c md_jmicron.c -SRCS+= tr_raid0.c tr_raid1.c tr_raid1e.c +SRCS+= tr_concat.c tr_raid0.c tr_raid1.c tr_raid1e.c MFILES= kern/bus_if.m kern/device_if.m MFILES+= geom/raid/g_raid_md_if.m geom/raid/g_raid_tr_if.m From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 21:34: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 41AC6106566B; Thu, 17 Feb 2011 21:34:31 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 1822A8FC12; Thu, 17 Feb 2011 21:34: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 p1HLYUqQ032291; Thu, 17 Feb 2011 21:34:30 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HLYUM2032290; Thu, 17 Feb 2011 21:34:30 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102172134.p1HLYUM2032290@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Thu, 17 Feb 2011 21:34: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: r218781 - projects/pf 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, 17 Feb 2011 21:34:31 -0000 Author: bz Date: Thu Feb 17 21:34:30 2011 New Revision: 218781 URL: http://svn.freebsd.org/changeset/base/218781 Log: Create projects directory for pf work. Added: projects/pf/ From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 21:35:10 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 E8BEA106566C; Thu, 17 Feb 2011 21:35:10 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BF20D8FC0C; Thu, 17 Feb 2011 21:35:10 +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 p1HLZANb032404; Thu, 17 Feb 2011 21:35:10 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HLZAuc032403; Thu, 17 Feb 2011 21:35:10 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102172135.p1HLZAuc032403@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Thu, 17 Feb 2011 21:35:10 +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: r218782 - projects/pf/pf45 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, 17 Feb 2011 21:35:11 -0000 Author: bz Date: Thu Feb 17 21:35:10 2011 New Revision: 218782 URL: http://svn.freebsd.org/changeset/base/218782 Log: Create branch for pf45 import. Discussed with: eri Added: - copied from r218781, head/ Directory Properties: projects/pf/pf45/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 22:05:00 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 C96AB106564A; Thu, 17 Feb 2011 22:05:00 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B20D48FC12; Thu, 17 Feb 2011 22:05:00 +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 p1HM50pQ033155; Thu, 17 Feb 2011 22:05:00 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HM50Ck033152; Thu, 17 Feb 2011 22:05:00 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102172205.p1HM50Ck033152@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Thu, 17 Feb 2011 22:05:00 +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: r218783 - in projects/pf/pf45: contrib/pf/pfctl sys/contrib/pf/net sys/modules/pf sys/modules/pfsync sys/netinet sys/netinet/ipfw sys/netinet6 sys/netipsec sys/sys 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, 17 Feb 2011 22:05:00 -0000 Author: bz Date: Thu Feb 17 22:05:00 2011 New Revision: 218783 URL: http://svn.freebsd.org/changeset/base/218783 Log: Import the latest pf45 patch (with minor whitespace adjustments already) for cleanup and finalizing. Submitted by: eri Discussed with: eri Obtained from: http://docs.FreeBSD.org/cgi/mid.cgi?AANLkTinXNRKSwjuOeQkDTANhSSbHYHZnf4SvaFHbEdrg Added: projects/pf/pf45/sys/contrib/pf/net/pf_lb.c (contents, props changed) projects/pf/pf45/sys/modules/pfsync/ projects/pf/pf45/sys/modules/pfsync/Makefile (contents, props changed) Modified: projects/pf/pf45/contrib/pf/pfctl/parse.y projects/pf/pf45/contrib/pf/pfctl/pf_print_state.c projects/pf/pf45/contrib/pf/pfctl/pfctl.8 projects/pf/pf45/contrib/pf/pfctl/pfctl.c projects/pf/pf45/contrib/pf/pfctl/pfctl.h projects/pf/pf45/contrib/pf/pfctl/pfctl_altq.c projects/pf/pf45/contrib/pf/pfctl/pfctl_optimize.c projects/pf/pf45/contrib/pf/pfctl/pfctl_osfp.c projects/pf/pf45/contrib/pf/pfctl/pfctl_parser.c projects/pf/pf45/contrib/pf/pfctl/pfctl_parser.h projects/pf/pf45/contrib/pf/pfctl/pfctl_qstats.c projects/pf/pf45/contrib/pf/pfctl/pfctl_radix.c projects/pf/pf45/contrib/pf/pfctl/pfctl_table.c projects/pf/pf45/sys/contrib/pf/net/if_pflog.c projects/pf/pf45/sys/contrib/pf/net/if_pflog.h projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c projects/pf/pf45/sys/contrib/pf/net/if_pfsync.h projects/pf/pf45/sys/contrib/pf/net/pf.c projects/pf/pf45/sys/contrib/pf/net/pf_if.c projects/pf/pf45/sys/contrib/pf/net/pf_ioctl.c projects/pf/pf45/sys/contrib/pf/net/pf_mtag.h projects/pf/pf45/sys/contrib/pf/net/pf_norm.c projects/pf/pf45/sys/contrib/pf/net/pf_osfp.c projects/pf/pf45/sys/contrib/pf/net/pf_ruleset.c projects/pf/pf45/sys/contrib/pf/net/pf_table.c projects/pf/pf45/sys/contrib/pf/net/pfvar.h projects/pf/pf45/sys/modules/pf/Makefile projects/pf/pf45/sys/netinet/in_gif.c projects/pf/pf45/sys/netinet/ip_icmp.c projects/pf/pf45/sys/netinet/ipfw/ip_fw2.c projects/pf/pf45/sys/netinet/raw_ip.c projects/pf/pf45/sys/netinet6/icmp6.c projects/pf/pf45/sys/netinet6/in6_gif.c projects/pf/pf45/sys/netipsec/ipsec_input.c projects/pf/pf45/sys/netipsec/ipsec_output.c projects/pf/pf45/sys/netipsec/xform_ipip.c projects/pf/pf45/sys/sys/mbuf.h Modified: projects/pf/pf45/contrib/pf/pfctl/parse.y ============================================================================== --- projects/pf/pf45/contrib/pf/pfctl/parse.y Thu Feb 17 21:35:10 2011 (r218782) +++ projects/pf/pf45/contrib/pf/pfctl/parse.y Thu Feb 17 22:05:00 2011 (r218783) @@ -1,4 +1,4 @@ -/* $OpenBSD: parse.y,v 1.517 2007/02/03 23:26:40 dhartmei Exp $ */ +/* $OpenBSD: parse.y,v 1.554 2008/10/17 12:59:53 henning Exp $ */ /* * Copyright (c) 2001 Markus Friedl. All rights reserved. @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -46,6 +47,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -62,15 +64,8 @@ __FBSDID("$FreeBSD$"); #include "pfctl_parser.h" #include "pfctl.h" -#ifdef __FreeBSD__ -#define HTONL(x) (x) = htonl((__uint32_t)(x)) -#endif - static struct pfctl *pf = NULL; -static FILE *fin = NULL; static int debug = 0; -static int lineno = 1; -static int errors = 0; static int rulestate = 0; static u_int16_t returnicmpdefault = (ICMP_UNREACH << 8) | ICMP_UNREACH_PORT; @@ -80,6 +75,39 @@ static int blockpolicy = PFRULE_DROP; static int require_order = 1; static int default_statelock; +TAILQ_HEAD(files, file) files = TAILQ_HEAD_INITIALIZER(files); +static struct file { + TAILQ_ENTRY(file) entry; + FILE *stream; + char *name; + int lineno; + int errors; +} *file; +struct file *pushfile(const char *, int); +int popfile(void); +int check_file_secrecy(int, const char *); +int yyparse(void); +int yylex(void); +int yyerror(const char *, ...); +int kw_cmp(const void *, const void *); +int lookup(char *); +int lgetc(int); +int lungetc(int); +int findeol(void); + +TAILQ_HEAD(symhead, sym) symhead = TAILQ_HEAD_INITIALIZER(symhead); +struct sym { + TAILQ_ENTRY(sym) entry; + int used; + int persist; + char *nam; + char *val; +}; +int symset(const char *, const char *, int); +char *symget(const char *); + +int atoul(char *, u_long *); + enum { PFCTL_STATE_NONE, PFCTL_STATE_OPTION, @@ -128,7 +156,8 @@ enum { PF_STATE_OPT_MAX, PF_STATE_OPT_NO PF_STATE_OPT_MAX_SRC_STATES, PF_STATE_OPT_MAX_SRC_CONN, PF_STATE_OPT_MAX_SRC_CONN_RATE, PF_STATE_OPT_MAX_SRC_NODES, PF_STATE_OPT_OVERLOAD, PF_STATE_OPT_STATELOCK, - PF_STATE_OPT_TIMEOUT, PF_STATE_OPT_SLOPPY }; + PF_STATE_OPT_TIMEOUT, PF_STATE_OPT_SLOPPY, + PF_STATE_OPT_PFLOW }; enum { PF_SRCTRACK_NONE, PF_SRCTRACK, PF_SRCTRACK_GLOBAL, PF_SRCTRACK_RULE }; @@ -206,12 +235,16 @@ struct filter_opts { char *tag; char *match_tag; u_int8_t match_tag_not; - int rtableid; + u_int rtableid; + struct { + struct node_host *addr; + u_int16_t port; + } divert; } filter_opts; struct antispoof_opts { char *label; - int rtableid; + u_int rtableid; } antispoof_opts; struct scrub_opts { @@ -219,13 +252,17 @@ struct scrub_opts { #define SOM_MINTTL 0x01 #define SOM_MAXMSS 0x02 #define SOM_FRAGCACHE 0x04 +#define SOM_SETTOS 0x08 int nodf; int minttl; int maxmss; + int settos; int fragcache; int randomid; int reassemble_tcp; - int rtableid; + char *match_tag; + u_int8_t match_tag_not; + u_int rtableid; } scrub_opts; struct queue_opts { @@ -260,63 +297,45 @@ struct pool_opts { } pool_opts; -struct node_hfsc_opts hfsc_opts; +struct node_hfsc_opts hfsc_opts; +struct node_state_opt *keep_state_defaults = NULL; -int yyerror(const char *, ...); -int disallow_table(struct node_host *, const char *); -int disallow_urpf_failed(struct node_host *, const char *); -int disallow_alias(struct node_host *, const char *); -int rule_consistent(struct pf_rule *, int); -int filter_consistent(struct pf_rule *, int); -int nat_consistent(struct pf_rule *); -int rdr_consistent(struct pf_rule *); -int process_tabledef(char *, struct table_opts *); -int yyparse(void); -void expand_label_str(char *, size_t, const char *, const char *); -void expand_label_if(const char *, char *, size_t, const char *); -void expand_label_addr(const char *, char *, size_t, u_int8_t, - struct node_host *); -void expand_label_port(const char *, char *, size_t, struct node_port *); -void expand_label_proto(const char *, char *, size_t, u_int8_t); -void expand_label_nr(const char *, char *, size_t); -void expand_label(char *, size_t, const char *, u_int8_t, struct node_host *, - struct node_port *, struct node_host *, struct node_port *, - u_int8_t); -void expand_rule(struct pf_rule *, struct node_if *, struct node_host *, - struct node_proto *, struct node_os*, struct node_host *, - struct node_port *, struct node_host *, struct node_port *, - struct node_uid *, struct node_gid *, struct node_icmp *, - const char *); -int expand_altq(struct pf_altq *, struct node_if *, struct node_queue *, - struct node_queue_bw bwspec, struct node_queue_opt *); -int expand_queue(struct pf_altq *, struct node_if *, struct node_queue *, - struct node_queue_bw, struct node_queue_opt *); -int expand_skip_interface(struct node_if *); +int disallow_table(struct node_host *, const char *); +int disallow_urpf_failed(struct node_host *, const char *); +int disallow_alias(struct node_host *, const char *); +int rule_consistent(struct pf_rule *, int); +int filter_consistent(struct pf_rule *, int); +int nat_consistent(struct pf_rule *); +int rdr_consistent(struct pf_rule *); +int process_tabledef(char *, struct table_opts *); +void expand_label_str(char *, size_t, const char *, const char *); +void expand_label_if(const char *, char *, size_t, const char *); +void expand_label_addr(const char *, char *, size_t, u_int8_t, + struct node_host *); +void expand_label_port(const char *, char *, size_t, + struct node_port *); +void expand_label_proto(const char *, char *, size_t, u_int8_t); +void expand_label_nr(const char *, char *, size_t); +void expand_label(char *, size_t, const char *, u_int8_t, + struct node_host *, struct node_port *, struct node_host *, + struct node_port *, u_int8_t); +void expand_rule(struct pf_rule *, struct node_if *, + struct node_host *, struct node_proto *, struct node_os *, + struct node_host *, struct node_port *, struct node_host *, + struct node_port *, struct node_uid *, struct node_gid *, + struct node_icmp *, const char *); +int expand_altq(struct pf_altq *, struct node_if *, + struct node_queue *, struct node_queue_bw bwspec, + struct node_queue_opt *); +int expand_queue(struct pf_altq *, struct node_if *, + struct node_queue *, struct node_queue_bw, + struct node_queue_opt *); +int expand_skip_interface(struct node_if *); int check_rulestate(int); -int kw_cmp(const void *, const void *); -int lookup(char *); -int lgetc(FILE *); -int lungetc(int); -int findeol(void); -int yylex(void); -int atoul(char *, u_long *); int getservice(char *); int rule_label(struct pf_rule *, char *); -TAILQ_HEAD(symhead, sym) symhead = TAILQ_HEAD_INITIALIZER(symhead); -struct sym { - TAILQ_ENTRY(sym) entries; - int used; - int persist; - char *nam; - char *val; -}; - - -int symset(const char *, const char *, int); -char *symget(const char *); - void mv_rules(struct pf_ruleset *, struct pf_ruleset *); void decide_address_family(struct node_host *, sa_family_t *); void remove_invalid_hosts(struct node_host **, sa_family_t *); @@ -334,10 +353,11 @@ struct loadanchors { typedef struct { union { - u_int32_t number; + int64_t number; + double probability; int i; char *string; - int rtableid; + u_int rtableid; struct { u_int8_t b1; u_int8_t b2; @@ -403,6 +423,10 @@ typedef struct { int lineno; } YYSTYPE; +#define PPORT_RANGE 1 +#define PPORT_STAR 2 +int parseport(char *, struct range *r, int); + #define DYNIF_MULTIADDR(addr) ((addr).type == PF_ADDR_DYNIFTL && \ (!((addr).iflags & PFI_AFLAG_NOALIAS) || \ !isdigit((addr).v.ifname[strlen((addr).v.ifname)-1]))) @@ -417,32 +441,37 @@ typedef struct { %token REASSEMBLE FRAGDROP FRAGCROP ANCHOR NATANCHOR RDRANCHOR BINATANCHOR %token SET OPTIMIZATION TIMEOUT LIMIT LOGINTERFACE BLOCKPOLICY RANDOMID %token REQUIREORDER SYNPROXY FINGERPRINTS NOSYNC DEBUG SKIP HOSTID -%token ANTISPOOF FOR +%token ANTISPOOF FOR INCLUDE %token BITMASK RANDOM SOURCEHASH ROUNDROBIN STATICPORT PROBABILITY %token ALTQ CBQ PRIQ HFSC BANDWIDTH TBRSIZE LINKSHARE REALTIME UPPERLIMIT %token QUEUE PRIORITY QLIMIT RTABLE %token LOAD RULESET_OPTIMIZATION %token STICKYADDRESS MAXSRCSTATES MAXSRCNODES SOURCETRACK GLOBAL RULE -%token MAXSRCCONN MAXSRCCONNRATE OVERLOAD FLUSH SLOPPY -%token TAGGED TAG IFBOUND FLOATING STATEPOLICY ROUTE +%token MAXSRCCONN MAXSRCCONNRATE OVERLOAD FLUSH SLOPPY PFLOW +%token TAGGED TAG IFBOUND FLOATING STATEPOLICY STATEDEFAULTS ROUTE SETTOS +%token DIVERTTO DIVERTREPLY %token STRING +%token NUMBER %token PORTBINARY %type interface if_list if_item_not if_item %type number icmptype icmp6type uid gid %type tos not yesno +%type probability %type no dir af fragcache optimizer %type sourcetrack flush unaryop statelock -%type action nataction natpass scrubaction +%type action nataction natpasslog scrubaction %type flags flag blockspec -%type port rport +%type portplain portstar portrange %type hashkey %type proto proto_list proto_item +%type protoval %type icmpspec %type icmp_list icmp_item %type icmp6_list icmp6_item +%type reticmpspec reticmp6spec %type fromto %type ipportspec from to -%type ipspec xhost host dynaddr host_list +%type ipspec toipspec xhost host dynaddr host_list %type redir_host_list redirspec %type route_host route_host_list routespec %type os xos os_list @@ -451,7 +480,8 @@ typedef struct { %type gids gid_list gid_item %type route %type redirection redirpool -%type label string tag anchorname +%type label stringall tag anchorname +%type string varstring numberstring %type keep %type state_opt_spec state_opt_list state_opt_item %type logquick quick log logopts logopt @@ -474,6 +504,7 @@ typedef struct { %% ruleset : /* empty */ + | ruleset include '\n' | ruleset '\n' | ruleset option '\n' | ruleset scrubrule '\n' @@ -488,7 +519,22 @@ ruleset : /* empty */ | ruleset antispoof '\n' | ruleset tabledef '\n' | '{' fakeanchor '}' '\n'; - | ruleset error '\n' { errors++; } + | ruleset error '\n' { file->errors++; } + ; + +include : INCLUDE STRING { + struct file *nfile; + + if ((nfile = pushfile($2, 0)) == NULL) { + yyerror("failed to include file %s", $2); + free($2); + YYERROR; + } + free($2); + + file = nfile; + lungetc('\n'); + } ; /* @@ -511,7 +557,7 @@ optimizer : string { else if (!strcmp($1, "profile")) $$ = PF_OPTIMIZE_BASIC | PF_OPTIMIZE_PROFILE; else { - yyerror("unknown ruleset-optimization %s", $$); + yyerror("unknown ruleset-optimization %s", $1); YYERROR; } } @@ -536,10 +582,10 @@ option : SET OPTIMIZATION STRING { } } | SET TIMEOUT timeout_spec - | SET TIMEOUT '{' timeout_list '}' + | SET TIMEOUT '{' optnl timeout_list '}' | SET LIMIT limit_spec - | SET LIMIT '{' limit_list '}' - | SET LOGINTERFACE STRING { + | SET LIMIT '{' optnl limit_list '}' + | SET LOGINTERFACE stringall { if (check_rulestate(PFCTL_STATE_OPTION)) { free($3); YYERROR; @@ -552,7 +598,7 @@ option : SET OPTIMIZATION STRING { free($3); } | SET HOSTID number { - if ($3 == 0) { + if ($3 == 0 || $3 > UINT_MAX) { yyerror("hostid must be non-zero"); YYERROR; } @@ -629,9 +675,24 @@ option : SET OPTIMIZATION STRING { YYERROR; } } + | SET STATEDEFAULTS state_opt_list { + if (keep_state_defaults != NULL) { + yyerror("cannot redefine state-defaults"); + YYERROR; + } + keep_state_defaults = $3; + } ; -string : string STRING { +stringall : STRING { $$ = $1; } + | ALL { + if (($$ = strdup("all")) == NULL) { + err(1, "stringall: strdup"); + } + } + ; + +string : STRING string { if (asprintf(&$$, "%s %s", $1, $2) == -1) err(1, "string: asprintf"); free($1); @@ -640,7 +701,27 @@ string : string STRING { | STRING ; -varset : STRING '=' string { +varstring : numberstring varstring { + if (asprintf(&$$, "%s %s", $1, $2) == -1) + err(1, "string: asprintf"); + free($1); + free($2); + } + | numberstring + ; + +numberstring : NUMBER { + char *s; + if (asprintf(&s, "%lld", (long long)$1) == -1) { + yyerror("string: asprintf"); + YYERROR; + } + $$ = s; + } + | STRING + ; + +varset : STRING '=' varstring { if (pf->opts & PF_OPT_VERBOSE) printf("%s = \"%s\"\n", $1, $3); if (symset($1, $3, 0) == -1) @@ -654,14 +735,10 @@ anchorname : STRING { $$ = $1; } | /* empty */ { $$ = NULL; } ; -optnl : optnl '\n' - | - ; - -pfa_anchorlist : pfrule optnl - | anchorrule optnl - | pfa_anchorlist pfrule optnl - | pfa_anchorlist anchorrule optnl +pfa_anchorlist : /* empty */ + | pfa_anchorlist '\n' + | pfa_anchorlist pfrule '\n' + | pfa_anchorlist anchorrule '\n' ; pfa_anchor : '{' @@ -694,6 +771,7 @@ anchorrule : ANCHOR anchorname dir quick filter_opts pfa_anchor { struct pf_rule r; + struct node_proto *proto; if (check_rulestate(PFCTL_STATE_FILTER)) { if ($2) @@ -744,6 +822,55 @@ anchorrule : ANCHOR anchorname dir quick r.prob = $9.prob; r.rtableid = $9.rtableid; + if ($9.tag) + if (strlcpy(r.tagname, $9.tag, + PF_TAG_NAME_SIZE) >= PF_TAG_NAME_SIZE) { + yyerror("tag too long, max %u chars", + PF_TAG_NAME_SIZE - 1); + YYERROR; + } + if ($9.match_tag) + if (strlcpy(r.match_tagname, $9.match_tag, + PF_TAG_NAME_SIZE) >= PF_TAG_NAME_SIZE) { + yyerror("tag too long, max %u chars", + PF_TAG_NAME_SIZE - 1); + YYERROR; + } + r.match_tag_not = $9.match_tag_not; + if (rule_label(&r, $9.label)) + YYERROR; + free($9.label); + r.flags = $9.flags.b1; + r.flagset = $9.flags.b2; + if (($9.flags.b1 & $9.flags.b2) != $9.flags.b1) { + yyerror("flags always false"); + YYERROR; + } + if ($9.flags.b1 || $9.flags.b2 || $8.src_os) { + for (proto = $7; proto != NULL && + proto->proto != IPPROTO_TCP; + proto = proto->next) + ; /* nothing */ + if (proto == NULL && $7 != NULL) { + if ($9.flags.b1 || $9.flags.b2) + yyerror( + "flags only apply to tcp"); + if ($8.src_os) + yyerror( + "OS fingerprinting only " + "applies to tcp"); + YYERROR; + } + } + + r.tos = $9.tos; + + if ($9.keep.action) { + yyerror("cannot specify state handling " + "on anchors"); + YYERROR; + } + if ($9.match_tag) if (strlcpy(r.match_tagname, $9.match_tag, PF_TAG_NAME_SIZE) >= PF_TAG_NAME_SIZE) { @@ -758,8 +885,8 @@ anchorrule : ANCHOR anchorname dir quick expand_rule(&r, $5, NULL, $7, $8.src_os, $8.src.host, $8.src.port, $8.dst.host, $8.dst.port, - 0, 0, 0, pf->astack[pf->asd + 1] ? - pf->alast->name : $2); + $9.uid, $9.gid, $9.icmpspec, + pf->astack[pf->asd + 1] ? pf->alast->name : $2); free($2); pf->astack[pf->asd + 1] = NULL; } @@ -939,8 +1066,20 @@ scrubrule : scrubaction dir logquick int r.min_ttl = $8.minttl; if ($8.maxmss) r.max_mss = $8.maxmss; + if ($8.marker & SOM_SETTOS) { + r.rule_flag |= PFRULE_SET_TOS; + r.set_tos = $8.settos; + } if ($8.fragcache) r.rule_flag |= $8.fragcache; + if ($8.match_tag) + if (strlcpy(r.match_tagname, $8.match_tag, + PF_TAG_NAME_SIZE) >= PF_TAG_NAME_SIZE) { + yyerror("tag too long, max %u chars", + PF_TAG_NAME_SIZE - 1); + YYERROR; + } + r.match_tag_not = $8.match_tag_not; r.rtableid = $8.rtableid; expand_rule(&r, $4, NULL, $6, $7.src_os, @@ -973,30 +1112,38 @@ scrub_opt : NODF { } scrub_opts.nodf = 1; } - | MINTTL number { + | MINTTL NUMBER { if (scrub_opts.marker & SOM_MINTTL) { yyerror("min-ttl cannot be respecified"); YYERROR; } - if ($2 > 255) { + if ($2 < 0 || $2 > 255) { yyerror("illegal min-ttl value %d", $2); YYERROR; } scrub_opts.marker |= SOM_MINTTL; scrub_opts.minttl = $2; } - | MAXMSS number { + | MAXMSS NUMBER { if (scrub_opts.marker & SOM_MAXMSS) { yyerror("max-mss cannot be respecified"); YYERROR; } - if ($2 > 65535) { + if ($2 < 0 || $2 > 65535) { yyerror("illegal max-mss value %d", $2); YYERROR; } scrub_opts.marker |= SOM_MAXMSS; scrub_opts.maxmss = $2; } + | SETTOS tos { + if (scrub_opts.marker & SOM_SETTOS) { + yyerror("set-tos cannot be respecified"); + YYERROR; + } + scrub_opts.marker |= SOM_SETTOS; + scrub_opts.settos = $2; + } | fragcache { if (scrub_opts.marker & SOM_FRAGCACHE) { yyerror("fragcache cannot be respecified"); @@ -1026,15 +1173,17 @@ scrub_opt : NODF { } scrub_opts.randomid = 1; } - | RTABLE number { -#ifndef __FreeBSD__ - if ($2 > RT_TABLEID_MAX || $2 < 0) { + | RTABLE NUMBER { + if ($2 < 0 /* || $2 > RT_TABLEID_MAX */) { yyerror("invalid rtable id"); YYERROR; } -#endif scrub_opts.rtableid = $2; } + | not TAGGED string { + scrub_opts.match_tag = $3; + scrub_opts.match_tag_not = $1; + } ; fragcache : FRAGMENT REASSEMBLE { $$ = 0; /* default */ } @@ -1108,6 +1257,7 @@ antispoof : ANTISPOOF logquick antispoof r.action = PF_DROP; r.direction = PF_IN; r.log = $2.log; + r.logif = $2.logif; r.quick = $2.quick; r.af = $4; if (rule_label(&r, $5.label)) @@ -1128,20 +1278,20 @@ antispoof : ANTISPOOF logquick antispoof } ; -antispoof_ifspc : FOR antispoof_if { $$ = $2; } - | FOR '{' antispoof_iflst '}' { $$ = $3; } +antispoof_ifspc : FOR antispoof_if { $$ = $2; } + | FOR '{' optnl antispoof_iflst '}' { $$ = $4; } ; -antispoof_iflst : antispoof_if { $$ = $1; } - | antispoof_iflst comma antispoof_if { +antispoof_iflst : antispoof_if optnl { $$ = $1; } + | antispoof_iflst comma antispoof_if optnl { $1->tail->next = $3; $1->tail = $3; $$ = $1; } ; -antispoof_if : if_item { $$ = $1; } - | '(' if_item ')' { +antispoof_if : if_item { $$ = $1; } + | '(' if_item ')' { $2->dynamic = 1; $$ = $2; } @@ -1171,13 +1321,11 @@ antispoof_opt : label { } antispoof_opts.label = $1; } - | RTABLE number { -#ifndef __FreeBSD__ - if ($2 > RT_TABLEID_MAX || $2 < 0) { + | RTABLE NUMBER { + if ($2 < 0 /* || $2 > RT_TABLEID_MAX */ ) { yyerror("invalid rtable id"); YYERROR; } -#endif antispoof_opts.rtableid = $2; } ; @@ -1239,6 +1387,8 @@ table_opt : STRING { table_opts.flags |= PFR_TFLAG_CONST; else if (!strcmp($1, "persist")) table_opts.flags |= PFR_TFLAG_PERSIST; + else if (!strcmp($1, "counters")) + table_opts.flags |= PFR_TFLAG_COUNTERS; else { yyerror("invalid table option '%s'", $1); free($1); @@ -1246,15 +1396,19 @@ table_opt : STRING { } free($1); } - | '{' '}' { table_opts.init_addr = 1; } - | '{' host_list '}' { + | '{' optnl '}' { table_opts.init_addr = 1; } + | '{' optnl host_list '}' { struct node_host *n; struct node_tinit *ti; - for (n = $2; n != NULL; n = n->next) { + for (n = $3; n != NULL; n = n->next) { switch (n->addr.type) { case PF_ADDR_ADDRMASK: continue; /* ok */ + case PF_ADDR_RANGE: + yyerror("address ranges are not " + "permitted inside tables"); + break; case PF_ADDR_DYNIFTL: yyerror("dynamic addresses are not " "permitted inside tables"); @@ -1278,7 +1432,7 @@ table_opt : STRING { } if (!(ti = calloc(1, sizeof(*ti)))) err(1, "table_opt: calloc"); - ti->host = $2; + ti->host = $3; SIMPLEQ_INSERT_TAIL(&table_opts.init_nodes, ti, entries); table_opts.init_addr = 1; @@ -1387,24 +1541,24 @@ queue_opt : BANDWIDTH bandwidth { queue_opts.marker |= QOM_BWSPEC; queue_opts.queue_bwspec = $2; } - | PRIORITY number { + | PRIORITY NUMBER { if (queue_opts.marker & QOM_PRIORITY) { yyerror("priority cannot be respecified"); YYERROR; } - if ($2 > 255) { + if ($2 < 0 || $2 > 255) { yyerror("priority out of range: max 255"); YYERROR; } queue_opts.marker |= QOM_PRIORITY; queue_opts.priority = $2; } - | QLIMIT number { + | QLIMIT NUMBER { if (queue_opts.marker & QOM_QLIMIT) { yyerror("qlimit cannot be respecified"); YYERROR; } - if ($2 > 65535) { + if ($2 < 0 || $2 > 65535) { yyerror("qlimit out of range: max 65535"); YYERROR; } @@ -1419,12 +1573,12 @@ queue_opt : BANDWIDTH bandwidth { queue_opts.marker |= QOM_SCHEDULER; queue_opts.scheduler = $1; } - | TBRSIZE number { + | TBRSIZE NUMBER { if (queue_opts.marker & QOM_TBRSIZE) { yyerror("tbrsize cannot be respecified"); YYERROR; } - if ($2 > 65535) { + if ($2 < 0 || $2 > 65535) { yyerror("tbrsize too big: max 65535"); YYERROR; } @@ -1467,6 +1621,14 @@ bandwidth : STRING { free($1); $$.bw_absolute = (u_int32_t)bps; } + | NUMBER { + if ($1 < 0 || $1 > UINT_MAX) { + yyerror("bandwidth number too big"); + YYERROR; + } + $$.bw_percent = 0; + $$.bw_absolute = $1; + } ; scheduler : CBQ { @@ -1563,8 +1725,12 @@ hfscopts_item : LINKSHARE bandwidth { hfsc_opts.linkshare.m2 = $2; hfsc_opts.linkshare.used = 1; } - | LINKSHARE '(' bandwidth comma number comma bandwidth ')' + | LINKSHARE '(' bandwidth comma NUMBER comma bandwidth ')' { + if ($5 < 0 || $5 > INT_MAX) { + yyerror("timing in curve out of range"); + YYERROR; + } if (hfsc_opts.linkshare.used) { yyerror("linkshare already specified"); YYERROR; @@ -1582,8 +1748,12 @@ hfscopts_item : LINKSHARE bandwidth { hfsc_opts.realtime.m2 = $2; hfsc_opts.realtime.used = 1; } - | REALTIME '(' bandwidth comma number comma bandwidth ')' + | REALTIME '(' bandwidth comma NUMBER comma bandwidth ')' { + if ($5 < 0 || $5 > INT_MAX) { + yyerror("timing in curve out of range"); + YYERROR; + } if (hfsc_opts.realtime.used) { yyerror("realtime already specified"); YYERROR; @@ -1601,8 +1771,12 @@ hfscopts_item : LINKSHARE bandwidth { hfsc_opts.upperlimit.m2 = $2; hfsc_opts.upperlimit.used = 1; } - | UPPERLIMIT '(' bandwidth comma number comma bandwidth ')' + | UPPERLIMIT '(' bandwidth comma NUMBER comma bandwidth ')' { + if ($5 < 0 || $5 > INT_MAX) { + yyerror("timing in curve out of range"); + YYERROR; + } if (hfsc_opts.upperlimit.used) { yyerror("upperlimit already specified"); YYERROR; @@ -1632,11 +1806,11 @@ hfscopts_item : LINKSHARE bandwidth { qassign : /* empty */ { $$ = NULL; } | qassign_item { $$ = $1; } - | '{' qassign_list '}' { $$ = $2; } + | '{' optnl qassign_list '}' { $$ = $3; } ; -qassign_list : qassign_item { $$ = $1; } - | qassign_list comma qassign_item { +qassign_list : qassign_item optnl { $$ = $1; } + | qassign_list comma qassign_item optnl { $1->tail->next = $3; $1->tail = $3; $$ = $1; @@ -1670,6 +1844,7 @@ pfrule : action dir logquick interface int srctrack = 0; int statelock = 0; int adaptive = 0; + int defaults = 0; if (check_rulestate(PFCTL_STATE_FILTER)) YYERROR; @@ -1752,13 +1927,16 @@ pfrule : action dir logquick interface r.tos = $9.tos; r.keep_state = $9.keep.action; + o = $9.keep.options; /* 'keep state' by default on pass rules. */ if (!r.keep_state && !r.action && - !($9.marker & FOM_KEEP)) + !($9.marker & FOM_KEEP)) { r.keep_state = PF_STATE_NORMAL; + o = keep_state_defaults; + defaults = 1; + } - o = $9.keep.options; while (o) { struct node_state_opt *p = o; @@ -1899,6 +2077,15 @@ pfrule : action dir logquick interface } r.rule_flag |= PFRULE_STATESLOPPY; break; + case PF_STATE_OPT_PFLOW: + if (r.rule_flag & PFRULE_PFLOW) { + yyerror("state pflow " + "option: multiple " + "definitions"); + YYERROR; + } + r.rule_flag |= PFRULE_PFLOW; + break; case PF_STATE_OPT_TIMEOUT: if (o->data.timeout.number == PFTM_ADAPTIVE_START || @@ -1916,7 +2103,8 @@ pfrule : action dir logquick interface o->data.timeout.seconds; } o = o->next; - free(p); + if (!defaults) + free(p); } /* 'flags S/SA' by default on stateful rules */ @@ -2035,6 +2223,34 @@ pfrule : action dir logquick interface } free($9.queues.pqname); } +#ifdef __FreeBSD__ + r.divert.port = $9.divert.port; +#else + if ((r.divert.port = $9.divert.port)) { + if (r.direction == PF_OUT) { + if ($9.divert.addr) { + yyerror("address specified " + "for outgoing divert"); + YYERROR; + } + bzero(&r.divert.addr, + sizeof(r.divert.addr)); + } else { + if (!$9.divert.addr) { + yyerror("no address specified " + "for incoming divert"); + YYERROR; + } + if ($9.divert.addr->af != r.af) { + yyerror("address family " + "mismatch for divert"); + YYERROR; + } + r.divert.addr = + $9.divert.addr->addr.v.a.addr; + } + } +#endif expand_rule(&r, $4, $5.host, $7, $8.src_os, $8.src.host, $8.src.port, $8.dst.host, $8.dst.port, @@ -2088,13 +2304,13 @@ filter_opt : USER uids { filter_opts.marker |= FOM_ICMP; filter_opts.icmpspec = $1; } - | tos { + | TOS tos { if (filter_opts.marker & FOM_TOS) { yyerror("tos cannot be redefined"); YYERROR; } filter_opts.marker |= FOM_TOS; - filter_opts.tos = $1; + filter_opts.tos = $2; } | keep { if (filter_opts.marker & FOM_KEEP) { @@ -2132,39 +2348,84 @@ filter_opt : USER uids { filter_opts.match_tag = $3; filter_opts.match_tag_not = $1; } - | PROBABILITY STRING { - char *e; - double p = strtod($2, &e); + | PROBABILITY probability { + double p; - if (*e == '%') { - p *= 0.01; - e++; + p = floor($2 * UINT_MAX + 0.5); + if (p < 0.0 || p > UINT_MAX) { + yyerror("invalid probability: %lf", p); + YYERROR; } - if (*e) { - yyerror("invalid probability: %s", $2); - free($2); + filter_opts.prob = (u_int32_t)p; + if (filter_opts.prob == 0) + filter_opts.prob = 1; + } + | RTABLE NUMBER { + if ($2 < 0 /* || $2 > RT_TABLEID_MAX */ ) { + yyerror("invalid rtable id"); YYERROR; } - p = floor(p * (UINT_MAX+1.0) + 0.5); - if (p < 1.0 || p >= (UINT_MAX+1.0)) { - yyerror("invalid probability: %s", $2); + filter_opts.rtableid = $2; + } + | DIVERTTO portplain { +#ifdef __FreeBSD__ + filter_opts.divert.port = $2.a; + if (!filter_opts.divert.port) { + yyerror("invalid divert port: %u", ntohs($2.a)); + YYERROR; + } +#endif + } + | DIVERTTO STRING PORT portplain { +#ifndef __FreeBSD__ + if ((filter_opts.divert.addr = host($2)) == NULL) { + yyerror("could not parse divert address: %s", + $2); free($2); YYERROR; } - filter_opts.prob = (u_int32_t)p; +#else + if ($2) +#endif free($2); - } - | RTABLE number { -#ifndef __FreeBSD__ - if ($2 > RT_TABLEID_MAX || $2 < 0) { - yyerror("invalid rtable id"); + filter_opts.divert.port = $4.a; + if (!filter_opts.divert.port) { + yyerror("invalid divert port: %u", ntohs($4.a)); YYERROR; } + } + | DIVERTREPLY { +#ifdef __FreeBSD__ + yyerror("divert-reply has no meaning in FreeBSD pf(4)"); + YYERROR; +#else + filter_opts.divert.port = 1; /* some random value */ #endif - filter_opts.rtableid = $2; } ; +probability : STRING { + char *e; + double p = strtod($1, &e); + + if (*e == '%') { + p *= 0.01; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Feb 17 22:48:23 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 17AEC106564A; Thu, 17 Feb 2011 22:48:23 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 06DF48FC13; Thu, 17 Feb 2011 22:48:23 +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 p1HMmMG8034182; Thu, 17 Feb 2011 22:48:22 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1HMmMqL034180; Thu, 17 Feb 2011 22:48:22 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102172248.p1HMmMqL034180@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Thu, 17 Feb 2011 22:48: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: r218784 - projects/pf/pf45/sys/contrib/pf/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: Thu, 17 Feb 2011 22:48:23 -0000 Author: bz Date: Thu Feb 17 22:48:22 2011 New Revision: 218784 URL: http://svn.freebsd.org/changeset/base/218784 Log: Cleanup whitspace. Modified: projects/pf/pf45/sys/contrib/pf/net/if_pflog.c Modified: projects/pf/pf45/sys/contrib/pf/net/if_pflog.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/if_pflog.c Thu Feb 17 22:05:00 2011 (r218783) +++ projects/pf/pf45/sys/contrib/pf/net/if_pflog.c Thu Feb 17 22:48:22 2011 (r218784) @@ -57,27 +57,27 @@ __FBSDID("$FreeBSD$"); #else /* ! __FreeBSD__ */ #include "bpfilter.h" #include "pflog.h" -#endif +#endif /* __FreeBSD__ */ #include #include #include #include #include - #ifdef __FreeBSD__ - #include - #include - #include - #include - #include - #else +#ifdef __FreeBSD__ +#include +#include +#include +#include +#include +#else #include #endif #include - #ifdef __FreeBSD__ - #include - #endif +#ifdef __FreeBSD__ +#include +#endif #include #include #include @@ -99,11 +99,11 @@ __FBSDID("$FreeBSD$"); #include #include - #ifdef INET - #ifdef __FreeBSD__ - #include - #endif - #endif +#ifdef __FreeBSD__ +#ifdef INET +#include +#endif /* INET */ +#endif /* __FreeBSD__ */ #define PFLOGMTU (32768 + MHLEN + MLEN) @@ -122,18 +122,18 @@ int pflogoutput(struct ifnet *, struct m #endif int pflogioctl(struct ifnet *, u_long, caddr_t); void pflogstart(struct ifnet *); - #ifdef __FreeBSD__ - static int pflog_clone_create(struct if_clone *, int, caddr_t); - static void pflog_clone_destroy(struct ifnet *); - #else +#ifdef __FreeBSD__ +static int pflog_clone_create(struct if_clone *, int, caddr_t); +static void pflog_clone_destroy(struct ifnet *); +#else int pflog_clone_create(struct if_clone *, int); int pflog_clone_destroy(struct ifnet *); #endif LIST_HEAD(, pflog_softc) pflogif_list; - #ifdef __FreeBSD__ - IFC_SIMPLE_DECLARE(pflog, 1); - #else +#ifdef __FreeBSD__ +IFC_SIMPLE_DECLARE(pflog, 1); +#else struct if_clone pflog_cloner = IF_CLONE_INITIALIZER("pflog", pflog_clone_create, pflog_clone_destroy); #endif @@ -150,10 +150,10 @@ pflogattach(int npflog) if_clone_attach(&pflog_cloner); } - #ifdef __FreeBSD__ - static int - pflog_clone_create(struct if_clone *ifc, int unit, caddr_t param) - #else +#ifdef __FreeBSD__ +static int +pflog_clone_create(struct if_clone *ifc, int unit, caddr_t param) +#else int pflog_clone_create(struct if_clone *ifc, int unit) #endif @@ -170,14 +170,14 @@ pflog_clone_create(struct if_clone *ifc, return (ENOMEM); pflogif->sc_unit = unit; - #ifdef __FreeBSD__ - ifp = pflogif->sc_ifp = if_alloc(IFT_PFLOG); - if (ifp == NULL) { - free(pflogif, M_DEVBUF); - return (ENOSPC); - } - if_initname(ifp, ifc->ifc_name, unit); - #else +#ifdef __FreeBSD__ + ifp = pflogif->sc_ifp = if_alloc(IFT_PFLOG); + if (ifp == NULL) { + free(pflogif, M_DEVBUF); + return (ENOSPC); + } + if_initname(ifp, ifc->ifc_name, unit); +#else ifp = &pflogif->sc_if; snprintf(ifp->if_xname, sizeof ifp->if_xname, "pflog%d", unit); #endif @@ -205,24 +205,24 @@ pflog_clone_create(struct if_clone *ifc, #endif s = splnet(); - #ifdef __FreeBSD__ +#ifdef __FreeBSD__ /* XXX: Why pf(4) lock?! Better add a pflog lock?! */ - PF_LOCK(); - #endif + PF_LOCK(); +#endif LIST_INSERT_HEAD(&pflogif_list, pflogif, sc_list); pflogifs[unit] = ifp; - #ifdef __FreeBSD__ - PF_UNLOCK(); - #endif +#ifdef __FreeBSD__ + PF_UNLOCK(); +#endif splx(s); return (0); } - #ifdef __FreeBSD__ - static void - pflog_clone_destroy(struct ifnet *ifp) - #else +#ifdef __FreeBSD__ +static void +pflog_clone_destroy(struct ifnet *ifp) +#else int pflog_clone_destroy(struct ifnet *ifp) #endif @@ -231,23 +231,23 @@ pflog_clone_destroy(struct ifnet *ifp) int s; s = splnet(); - #ifdef __FreeBSD__ - PF_LOCK(); - #endif +#ifdef __FreeBSD__ + PF_LOCK(); +#endif pflogifs[pflogif->sc_unit] = NULL; LIST_REMOVE(pflogif, sc_list); - #ifdef __FreeBSD__ - PF_UNLOCK(); - #endif +#ifdef __FreeBSD__ + PF_UNLOCK(); +#endif splx(s); #if NBPFILTER > 0 bpfdetach(ifp); #endif if_detach(ifp); - #ifdef __FreeBSD__ - if_free(ifp); - #endif +#ifdef __FreeBSD__ + if_free(ifp); +#endif free(pflogif, M_DEVBUF); #ifndef __FreeBSD__ return (0); @@ -261,17 +261,17 @@ void pflogstart(struct ifnet *ifp) { struct mbuf *m; - #ifndef __FreeBSD__ +#ifndef __FreeBSD__ int s; #endif for (;;) { - #ifdef __FreeBSD__ - IF_LOCK(&ifp->if_snd); - _IF_DROP(&ifp->if_snd); - _IF_DEQUEUE(&ifp->if_snd, m); - IF_UNLOCK(&ifp->if_snd); - #else +#ifdef __FreeBSD__ + IF_LOCK(&ifp->if_snd); + _IF_DROP(&ifp->if_snd); + _IF_DEQUEUE(&ifp->if_snd, m); + IF_UNLOCK(&ifp->if_snd); +#else s = splnet(); IF_DROP(&ifp->if_snd); IF_DEQUEUE(&ifp->if_snd, m); @@ -303,12 +303,12 @@ pflogioctl(struct ifnet *ifp, u_long cmd { switch (cmd) { case SIOCSIFFLAGS: - #ifdef __FreeBSD__ - if (ifp->if_flags & IFF_UP) - ifp->if_drv_flags |= IFF_DRV_RUNNING; - else - ifp->if_drv_flags &= ~IFF_DRV_RUNNING; - #else +#ifdef __FreeBSD__ + if (ifp->if_flags & IFF_UP) + ifp->if_drv_flags |= IFF_DRV_RUNNING; + else + ifp->if_drv_flags &= ~IFF_DRV_RUNNING; +#else if (ifp->if_flags & IFF_UP) ifp->if_flags |= IFF_RUNNING; else @@ -355,13 +355,13 @@ pflog_packet(struct pfi_kif *kif, struct sizeof(hdr.ruleset)); } if (rm->log & PF_LOG_SOCKET_LOOKUP && !pd->lookup.done) - #ifdef __FreeBSD__ - /* - * XXX: This should not happen as we force an early lookup - * via debug.pfugidhack - */ - ; /* empty */ - #else +#ifdef __FreeBSD__ + /* + * XXX: This should not happen as we force an early lookup + * via debug.pfugidhack + */ + ; /* empty */ +#else pd->lookup.done = pf_socket_lookup(dir, pd); #endif if (pd->lookup.done > 0) { @@ -387,9 +387,9 @@ pflog_packet(struct pfi_kif *kif, struct ifn->if_opackets++; ifn->if_obytes += m->m_pkthdr.len; - #ifdef __FreeBSD__ - BPF_MTAP2(ifn, &hdr, PFLOG_HDRLEN, m); - #else +#ifdef __FreeBSD__ + BPF_MTAP2(ifn, &hdr, PFLOG_HDRLEN, m); +#else bpf_mtap_hdr(ifn->if_bpf, (char *)&hdr, PFLOG_HDRLEN, m, BPF_DIRECTION_OUT); #endif @@ -398,38 +398,38 @@ pflog_packet(struct pfi_kif *kif, struct return (0); } - #ifdef __FreeBSD__ - static int - pflog_modevent(module_t mod, int type, void *data) - { - int error = 0; - - switch (type) { - case MOD_LOAD: - pflogattach(1); - PF_LOCK(); - pflog_packet_ptr = pflog_packet; - PF_UNLOCK(); - break; - case MOD_UNLOAD: - PF_LOCK(); - pflog_packet_ptr = NULL; - PF_UNLOCK(); - if_clone_detach(&pflog_cloner); - break; - default: - error = EINVAL; - break; - } - - return error; - } - - static moduledata_t pflog_mod = { "pflog", pflog_modevent, 0 }; - - #define PFLOG_MODVER 1 - - DECLARE_MODULE(pflog, pflog_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY); - MODULE_VERSION(pflog, PFLOG_MODVER); - MODULE_DEPEND(pflog, pf, PF_MODVER, PF_MODVER, PF_MODVER); - #endif /* __FreeBSD__ */ +#ifdef __FreeBSD__ +static int +pflog_modevent(module_t mod, int type, void *data) +{ + int error = 0; + + switch (type) { + case MOD_LOAD: + pflogattach(1); + PF_LOCK(); + pflog_packet_ptr = pflog_packet; + PF_UNLOCK(); + break; + case MOD_UNLOAD: + PF_LOCK(); + pflog_packet_ptr = NULL; + PF_UNLOCK(); + if_clone_detach(&pflog_cloner); + break; + default: + error = EINVAL; + break; + } + + return error; +} + +static moduledata_t pflog_mod = { "pflog", pflog_modevent, 0 }; + +#define PFLOG_MODVER 1 + +DECLARE_MODULE(pflog, pflog_mod, SI_SUB_PROTO_IFATTACHDOMAIN, SI_ORDER_ANY); +MODULE_VERSION(pflog, PFLOG_MODVER); +MODULE_DEPEND(pflog, pf, PF_MODVER, PF_MODVER, PF_MODVER); +#endif /* __FreeBSD__ */ From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 16:00:26 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 D09D7106566C; Fri, 18 Feb 2011 16:00:26 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BD74C8FC15; Fri, 18 Feb 2011 16:00:26 +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 p1IG0QoU063391; Fri, 18 Feb 2011 16:00:26 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IG0QTt063389; Fri, 18 Feb 2011 16:00:26 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102181600.p1IG0QTt063389@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 18 Feb 2011 16:00:26 +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: r218804 - projects/pf/pf45/sys/contrib/pf/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: Fri, 18 Feb 2011 16:00:26 -0000 Author: bz Date: Fri Feb 18 16:00:26 2011 New Revision: 218804 URL: http://svn.freebsd.org/changeset/base/218804 Log: Cleanup whitespace. Modified: projects/pf/pf45/sys/contrib/pf/net/pf.c Modified: projects/pf/pf45/sys/contrib/pf/net/pf.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/pf.c Fri Feb 18 15:52:57 2011 (r218803) +++ projects/pf/pf45/sys/contrib/pf/net/pf.c Fri Feb 18 16:00:26 2011 (r218804) @@ -48,27 +48,27 @@ __FBSDID("$FreeBSD$"); #include "opt_pf.h" #ifdef DEV_BPF -#define NBPFILTER DEV_BPF +#define NBPFILTER DEV_BPF #else -#define NBPFILTER 0 +#define NBPFILTER 0 #endif #ifdef DEV_PFLOG -#define NPFLOG DEV_PFLOG +#define NPFLOG DEV_PFLOG #else -#define NPFLOG 0 +#define NPFLOG 0 #endif #ifdef DEV_PFSYNC -#define NPFSYNC DEV_PFSYNC +#define NPFSYNC DEV_PFSYNC #else -#define NPFSYNC 0 +#define NPFSYNC 0 #endif #ifdef DEV_PFLOW -#define NPFLOW DEV_PFLOW +#define NPFLOW DEV_PFLOW #else -#define NPFLOW 0 +#define NPFLOW 0 #endif #else @@ -90,7 +90,7 @@ __FBSDID("$FreeBSD$"); #include #include #include -#define betoh64 be64toh +#define betoh64 be64toh #else #include #endif @@ -165,14 +165,14 @@ __FBSDID("$FreeBSD$"); #include #include #include - + extern int ip_optcopy(struct ip *, struct ip *); #endif #ifdef __FreeBSD__ -#define DPFPRINTF(n, x) if (V_pf_status.debug >= (n)) printf x +#define DPFPRINTF(n, x) if (V_pf_status.debug >= (n)) printf x #else -#define DPFPRINTF(n, x) if (pf_status.debug >= (n)) printf x +#define DPFPRINTF(n, x) if (pf_status.debug >= (n)) printf x #endif /* @@ -195,22 +195,22 @@ VNET_DEFINE(int, altqs_inactive_open) VNET_DEFINE(u_int32_t, ticket_pabuf); VNET_DEFINE(MD5_CTX, pf_tcp_secret_ctx); -#define V_pf_tcp_secret_ctx VNET(pf_tcp_secret_ctx) +#define V_pf_tcp_secret_ctx VNET(pf_tcp_secret_ctx) VNET_DEFINE(u_char, pf_tcp_secret[16]); -#define V_pf_tcp_secret VNET(pf_tcp_secret) +#define V_pf_tcp_secret VNET(pf_tcp_secret) VNET_DEFINE(int, pf_tcp_secret_init); -#define V_pf_tcp_secret_init VNET(pf_tcp_secret_init) +#define V_pf_tcp_secret_init VNET(pf_tcp_secret_init) VNET_DEFINE(int, pf_tcp_iss_off); -#define V_pf_tcp_iss_off VNET(pf_tcp_iss_off) +#define V_pf_tcp_iss_off VNET(pf_tcp_iss_off) struct pf_anchor_stackframe { - struct pf_ruleset *rs; - struct pf_rule *r; - struct pf_anchor_node *parent; - struct pf_anchor *child; + struct pf_ruleset *rs; + struct pf_rule *r; + struct pf_anchor_node *parent; + struct pf_anchor *child; }; VNET_DEFINE(struct pf_anchor_stackframe, pf_anchor_stack[64]); -#define V_pf_anchor_stack VNET(pf_anchor_stack) +#define V_pf_anchor_stack VNET(pf_anchor_stack) VNET_DEFINE(uma_zone_t, pf_src_tree_pl); VNET_DEFINE(uma_zone_t, pf_rule_pl); @@ -269,8 +269,8 @@ void pf_change_icmp(struct pf_addr *, u_int16_t *, u_int16_t *, u_int16_t *, u_int16_t *, u_int8_t, sa_family_t); #ifdef __FreeBSD__ - void pf_send_tcp(struct mbuf *, - const struct pf_rule *, sa_family_t, +void pf_send_tcp(struct mbuf *, + const struct pf_rule *, sa_family_t, #else void pf_send_tcp(const struct pf_rule *, sa_family_t, #endif @@ -363,9 +363,9 @@ int pf_check_congestion(struct ifqueu #ifdef __FreeBSD__ int in4_cksum(struct mbuf *m, u_int8_t nxt, int off, int len); - -VNET_DECLARE(int, pf_end_threads); - + +VNET_DECLARE(int, pf_end_threads); + VNET_DEFINE(struct pf_pool_limit, pf_pool_limits[PF_LIMIT_MAX]); #else extern struct pool pfr_ktable_pl; @@ -387,24 +387,24 @@ struct pf_pool_limit pf_pool_limits[PF_L #define PACKET_LOOPED() \ (pd.pf_mtag->flags & PF_PACKET_LOOPED) -#define STATE_LOOKUP(i, k, d, s, m, pt) \ - do { \ - s = pf_find_state(i, k, d, m, pt); \ - if (s == NULL || (s)->timeout == PFTM_PURGE) \ - return (PF_DROP); \ +#define STATE_LOOKUP(i, k, d, s, m, pt) \ + do { \ + s = pf_find_state(i, k, d, m, pt); \ + if (s == NULL || (s)->timeout == PFTM_PURGE) \ + return (PF_DROP); \ if (PPACKET_LOOPED()) \ return (PF_PASS); \ - if (d == PF_OUT && \ - (((s)->rule.ptr->rt == PF_ROUTETO && \ - (s)->rule.ptr->direction == PF_OUT) || \ - ((s)->rule.ptr->rt == PF_REPLYTO && \ - (s)->rule.ptr->direction == PF_IN)) && \ - (s)->rt_kif != NULL && \ - (s)->rt_kif != i) \ - return (PF_PASS); \ - } while (0) + if (d == PF_OUT && \ + (((s)->rule.ptr->rt == PF_ROUTETO && \ + (s)->rule.ptr->direction == PF_OUT) || \ + ((s)->rule.ptr->rt == PF_REPLYTO && \ + (s)->rule.ptr->direction == PF_IN)) && \ + (s)->rt_kif != NULL && \ + (s)->rt_kif != i) \ + return (PF_PASS); \ + } while (0) #else -#define STATE_LOOKUP(i, k, d, s, m) \ +#define STATE_LOOKUP(i, k, d, s, m) \ do { \ s = pf_find_state(i, k, d, m); \ if (s == NULL || (s)->timeout == PFTM_PURGE) \ @@ -421,14 +421,14 @@ struct pf_pool_limit pf_pool_limits[PF_L #endif #ifdef __FreeBSD__ -#define BOUND_IFACE(r, k) \ +#define BOUND_IFACE(r, k) \ ((r)->rule_flag & PFRULE_IFBOUND) ? (k) : V_pfi_all #else -#define BOUND_IFACE(r, k) \ +#define BOUND_IFACE(r, k) \ ((r)->rule_flag & PFRULE_IFBOUND) ? (k) : pfi_all #endif -#define STATE_INC_COUNTERS(s) \ +#define STATE_INC_COUNTERS(s) \ do { \ s->rule.ptr->states_cur++; \ s->rule.ptr->states_tot++; \ @@ -442,7 +442,7 @@ struct pf_pool_limit pf_pool_limits[PF_L } \ } while (0) -#define STATE_DEC_COUNTERS(s) \ +#define STATE_DEC_COUNTERS(s) \ do { \ if (s->nat_rule.ptr != NULL) \ s->nat_rule.ptr->states_cur--; \ @@ -1333,7 +1333,7 @@ pf_purge_thread(void *v) { int nloops = 0, s; #ifdef __FreeBSD__ - int locked; + int locked; #endif CURVNET_SET((struct vnet *)v); @@ -1342,42 +1342,42 @@ pf_purge_thread(void *v) tsleep(pf_purge_thread, PWAIT, "pftm", 1 * hz); #ifdef __FreeBSD__ - sx_slock(&V_pf_consistency_lock); - PF_LOCK(); - locked = 0; - - if (V_pf_end_threads) { - PF_UNLOCK(); - sx_sunlock(&V_pf_consistency_lock); - sx_xlock(&V_pf_consistency_lock); - PF_LOCK(); - - pf_purge_expired_states(V_pf_status.states, 1); - pf_purge_expired_fragments(); - pf_purge_expired_src_nodes(1); - V_pf_end_threads++; - - sx_xunlock(&V_pf_consistency_lock); - PF_UNLOCK(); - wakeup(pf_purge_thread); - kproc_exit(0); - } + sx_slock(&V_pf_consistency_lock); + PF_LOCK(); + locked = 0; + + if (V_pf_end_threads) { + PF_UNLOCK(); + sx_sunlock(&V_pf_consistency_lock); + sx_xlock(&V_pf_consistency_lock); + PF_LOCK(); + + pf_purge_expired_states(V_pf_status.states, 1); + pf_purge_expired_fragments(); + pf_purge_expired_src_nodes(1); + V_pf_end_threads++; + + sx_xunlock(&V_pf_consistency_lock); + PF_UNLOCK(); + wakeup(pf_purge_thread); + kproc_exit(0); + } #endif s = splsoftnet(); /* process a fraction of the state table every second */ #ifdef __FreeBSD__ - if(!pf_purge_expired_states(1 + (V_pf_status.states - / V_pf_default_rule.timeout[PFTM_INTERVAL]), 0)) { - PF_UNLOCK(); - sx_sunlock(&V_pf_consistency_lock); - sx_xlock(&V_pf_consistency_lock); - PF_LOCK(); - locked = 1; - - pf_purge_expired_states(1 + (V_pf_status.states - / V_pf_default_rule.timeout[PFTM_INTERVAL]), 1); - } + if (!pf_purge_expired_states(1 + (V_pf_status.states / + V_pf_default_rule.timeout[PFTM_INTERVAL]), 0)) { + PF_UNLOCK(); + sx_sunlock(&V_pf_consistency_lock); + sx_xlock(&V_pf_consistency_lock); + PF_LOCK(); + locked = 1; + + pf_purge_expired_states(1 + (V_pf_status.states / + V_pf_default_rule.timeout[PFTM_INTERVAL]), 1); + } #else pf_purge_expired_states(1 + (pf_status.states / pf_default_rule.timeout[PFTM_INTERVAL])); @@ -1395,13 +1395,13 @@ pf_purge_thread(void *v) } splx(s); - #ifdef __FreeBSD__ - PF_UNLOCK(); - if (locked) - sx_xunlock(&V_pf_consistency_lock); - else - sx_sunlock(&V_pf_consistency_lock); - #endif +#ifdef __FreeBSD__ + PF_UNLOCK(); + if (locked) + sx_xunlock(&V_pf_consistency_lock); + else + sx_sunlock(&V_pf_consistency_lock); +#endif } CURVNET_RESTORE(); } @@ -1419,12 +1419,12 @@ pf_state_expires(const struct pf_state * return (time_second); if (state->timeout == PFTM_UNTIL_PACKET) return (0); - #ifdef __FreeBSD__ - KASSERT(state->timeout != PFTM_UNLINKED, - ("pf_state_expires: timeout == PFTM_UNLINKED")); - KASSERT((state->timeout < PFTM_MAX), - ("pf_state_expires: timeout > PFTM_MAX")); - #else +#ifdef __FreeBSD__ + KASSERT(state->timeout != PFTM_UNLINKED, + ("pf_state_expires: timeout == PFTM_UNLINKED")); + KASSERT((state->timeout < PFTM_MAX), + ("pf_state_expires: timeout > PFTM_MAX")); +#else KASSERT(state->timeout != PFTM_UNLINKED); KASSERT(state->timeout < PFTM_MAX); #endif @@ -1481,10 +1481,10 @@ pf_purge_expired_src_nodes(int waslocked if (cur->states <= 0 && cur->expire <= time_second) { if (! locked) { - #ifdef __FreeBSD__ - if (!sx_try_upgrade(&V_pf_consistency_lock)) - return (0); - #else +#ifdef __FreeBSD__ + if (!sx_try_upgrade(&V_pf_consistency_lock)) + return (0); +#else rw_enter_write(&pf_consistency_lock); #endif next = RB_NEXT(pf_src_tree, @@ -1567,18 +1567,18 @@ void pf_unlink_state(struct pf_state *cur) { #ifdef __FreeBSD__ - if (cur->local_flags & PFSTATE_EXPIRING) - return; - cur->local_flags |= PFSTATE_EXPIRING; + if (cur->local_flags & PFSTATE_EXPIRING) + return; + cur->local_flags |= PFSTATE_EXPIRING; #else splassert(IPL_SOFTNET); - #endif +#endif if (cur->src.state == PF_TCPS_PROXY_DST) { /* XXX wire key the right one? */ - #ifdef __FreeBSD__ - pf_send_tcp(NULL, cur->rule.ptr, cur->key[PF_SK_WIRE]->af, - #else +#ifdef __FreeBSD__ + pf_send_tcp(NULL, cur->rule.ptr, cur->key[PF_SK_WIRE]->af, +#else pf_send_tcp(cur->rule.ptr, cur->key[PF_SK_WIRE]->af, #endif &cur->key[PF_SK_WIRE]->addr[1], @@ -1634,8 +1634,8 @@ pf_free_state(struct pf_state *cur) return; #endif #ifdef __FreeBSD__ - KASSERT(cur->timeout == PFTM_UNLINKED, - ("pf_free_state: cur->timeout != PFTM_UNLINKED")); + KASSERT(cur->timeout == PFTM_UNLINKED, + ("pf_free_state: cur->timeout != PFTM_UNLINKED")); #else KASSERT(cur->timeout == PFTM_UNLINKED); #endif @@ -1679,9 +1679,9 @@ pf_purge_expired_states(u_int32_t maxche { static struct pf_state *cur = NULL; struct pf_state *next; - #ifdef __FreeBSD__ - int locked = waslocked; - #else +#ifdef __FreeBSD__ + int locked = waslocked; +#else int locked = 0; #endif @@ -1703,10 +1703,10 @@ pf_purge_expired_states(u_int32_t maxche if (cur->timeout == PFTM_UNLINKED) { /* free unlinked state */ if (! locked) { - #ifdef __FreeBSD__ - if (!sx_try_upgrade(&V_pf_consistency_lock)) - return (0); - #else +#ifdef __FreeBSD__ + if (!sx_try_upgrade(&V_pf_consistency_lock)) + return (0); +#else rw_enter_write(&pf_consistency_lock); #endif locked = 1; @@ -1716,10 +1716,10 @@ pf_purge_expired_states(u_int32_t maxche /* unlink and free expired state */ pf_unlink_state(cur); if (! locked) { - #ifdef __FreeBSD__ - if (!sx_try_upgrade(&V_pf_consistency_lock)) - return (0); - #else +#ifdef __FreeBSD__ + if (!sx_try_upgrade(&V_pf_consistency_lock)) + return (0); +#else rw_enter_write(&pf_consistency_lock); #endif locked = 1; @@ -1729,12 +1729,12 @@ pf_purge_expired_states(u_int32_t maxche cur = next; } - #ifdef __FreeBSD__ - if (!waslocked && locked) - sx_downgrade(&V_pf_consistency_lock); - - return (1); - #else +#ifdef __FreeBSD__ + if (!waslocked && locked) + sx_downgrade(&V_pf_consistency_lock); + + return (1); +#else if (locked) rw_exit_write(&pf_consistency_lock); #endif @@ -2217,14 +2217,14 @@ pf_modulate_sack(struct mbuf *m, int off { int hlen = (th->th_off << 2) - sizeof(*th), thoptlen = hlen; #ifdef __FreeBSD__ - u_int8_t opts[TCP_MAXOLEN], *opt = opts; + u_int8_t opts[TCP_MAXOLEN], *opt = opts; #else u_int8_t opts[MAX_TCPOPTLEN], *opt = opts; #endif int copyback = 0, i, olen; struct sackblk sack; -#define TCPOLEN_SACKLEN (TCPOLEN_SACK + 2) +#define TCPOLEN_SACKLEN (TCPOLEN_SACK + 2) if (hlen < TCPOLEN_SACKLEN || !pf_pull_hdr(m, off + sizeof(*th), opts, hlen, NULL, NULL, pd->af)) return 0; @@ -2264,9 +2264,9 @@ pf_modulate_sack(struct mbuf *m, int off } if (copyback) - #ifdef __FreeBSD__ - m_copyback(m, off + sizeof(*th), thoptlen, (caddr_t)opts); - #else +#ifdef __FreeBSD__ + m_copyback(m, off + sizeof(*th), thoptlen, (caddr_t)opts); +#else m_copyback(m, off + sizeof(*th), thoptlen, opts); #endif return (copyback); @@ -2294,32 +2294,30 @@ pf_send_tcp(const struct pf_rule *r, sa_ struct tcphdr *th; char *opt; #ifdef __FreeBSD__ - struct pf_mtag *pf_mtag; -#endif - -#ifdef __FreeBSD__ - KASSERT( + struct pf_mtag *pf_mtag; + + KASSERT( #ifdef INET - af == AF_INET + af == AF_INET #else - 0 + 0 #endif - || + || #ifdef INET6 - af == AF_INET6 + af == AF_INET6 #else - 0 -#endif - , ("Unsupported AF %d", af)); - len = 0; - th = NULL; - #ifdef INET - h = NULL; - #endif - #ifdef INET6 - h6 = NULL; - #endif - #endif + 0 +#endif + , ("Unsupported AF %d", af)); + len = 0; + th = NULL; +#ifdef INET + h = NULL; +#endif +#ifdef INET6 + h6 = NULL; +#endif +#endif /* __FreeBSD__ */ /* maximum segment size tcp option */ tlen = sizeof(struct tcphdr); @@ -2343,10 +2341,10 @@ pf_send_tcp(const struct pf_rule *r, sa_ m = m_gethdr(M_DONTWAIT, MT_HEADER); if (m == NULL) return; - #ifdef __FreeBSD__ - #ifdef MAC +#ifdef __FreeBSD__ +#ifdef MAC mac_netinet_firewall_send(m); - #endif +#endif if ((pf_mtag = pf_get_mtag(m)) == NULL) { m_freem(m); return; @@ -2362,16 +2360,16 @@ pf_send_tcp(const struct pf_rule *r, sa_ #endif if (r != NULL && r->rtableid >= 0) - #ifdef __FreeBSD__ - { - M_SETFIB(m, r->rtableid); +#ifdef __FreeBSD__ + { + M_SETFIB(m, r->rtableid); pf_mtag->rtableid = r->rtableid; - #else +#else m->m_pkthdr.pf.rtableid = r->rtableid; - #endif +#endif #ifdef __FreeBSD__ - } - #endif + } +#endif #ifdef ALTQ if (r != NULL && r->qid) { @@ -2448,8 +2446,8 @@ pf_send_tcp(const struct pf_rule *r, sa_ h->ip_hl = sizeof(*h) >> 2; h->ip_tos = IPTOS_LOWDELAY; #ifdef __FreeBSD__ - h->ip_off = V_path_mtu_discovery ? IP_DF : 0; - h->ip_len = len; + h->ip_off = V_path_mtu_discovery ? IP_DF : 0; + h->ip_len = len; h->ip_ttl = ttl ? ttl : V_ip_defttl; #else h->ip_len = htons(len); @@ -2458,12 +2456,12 @@ pf_send_tcp(const struct pf_rule *r, sa_ #endif h->ip_sum = 0; if (eh == NULL) { - #ifdef __FreeBSD__ - PF_UNLOCK(); - ip_output(m, (void *)NULL, (void *)NULL, 0, - (void *)NULL, (void *)NULL); - PF_LOCK(); - #else /* ! __FreeBSD__ */ +#ifdef __FreeBSD__ + PF_UNLOCK(); + ip_output(m, (void *)NULL, (void *)NULL, 0, + (void *)NULL, (void *)NULL); + PF_LOCK(); +#else /* ! __FreeBSD__ */ ip_output(m, (void *)NULL, (void *)NULL, 0, (void *)NULL, (void *)NULL); #endif @@ -2483,13 +2481,13 @@ pf_send_tcp(const struct pf_rule *r, sa_ bcopy(eh->ether_dhost, e->ether_shost, ETHER_ADDR_LEN); bcopy(eh->ether_shost, e->ether_dhost, ETHER_ADDR_LEN); e->ether_type = eh->ether_type; - #ifdef __FreeBSD__ - PF_UNLOCK(); - /* XXX_IMPORT: later */ - ip_output(m, (void *)NULL, &ro, 0, - (void *)NULL, (void *)NULL); - PF_LOCK(); - #else /* ! __FreeBSD__ */ +#ifdef __FreeBSD__ + PF_UNLOCK(); + /* XXX_IMPORT: later */ + ip_output(m, (void *)NULL, &ro, 0, + (void *)NULL, (void *)NULL); + PF_LOCK(); +#else /* ! __FreeBSD__ */ ip_output(m, (void *)NULL, &ro, IP_ROUTETOETHER, (void *)NULL, (void *)NULL); #endif @@ -2505,11 +2503,11 @@ pf_send_tcp(const struct pf_rule *r, sa_ h6->ip6_vfc |= IPV6_VERSION; h6->ip6_hlim = IPV6_DEFHLIM; - #ifdef __FreeBSD__ - PF_UNLOCK(); - ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL); - PF_LOCK(); - #else +#ifdef __FreeBSD__ + PF_UNLOCK(); + ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL); + PF_LOCK(); +#else ip6_output(m, NULL, NULL, 0, NULL, NULL, NULL); #endif break; @@ -2523,14 +2521,14 @@ pf_send_icmp(struct mbuf *m, u_int8_t ty { struct mbuf *m0; #ifdef __FreeBSD__ - struct ip *ip; + struct ip *ip; struct pf_mtag *pf_mtag; #endif #ifdef __FreeBSD__ - m0 = m_copypacket(m, M_DONTWAIT); - if (m0 == NULL) - return; + m0 = m_copypacket(m, M_DONTWAIT); + if (m0 == NULL) + return; #else if ((m0 = m_copy(m, 0, M_COPYALL)) == NULL) return; @@ -2539,22 +2537,22 @@ pf_send_icmp(struct mbuf *m, u_int8_t ty #ifdef __FreeBSD__ if ((pf_mtag = pf_get_mtag(m0)) == NULL) return; - /* XXX: revisit */ - m0->m_flags |= M_SKIP_FIREWALL; + /* XXX: revisit */ + m0->m_flags |= M_SKIP_FIREWALL; #else m0->m_pkthdr.pf.flags |= PF_TAG_GENERATED; #endif if (r->rtableid >= 0) #ifdef __FreeBSD__ - { - M_SETFIB(m0, r->rtableid); + { + M_SETFIB(m0, r->rtableid); pf_mtag->rtableid = r->rtableid; #else m0->m_pkthdr.pf.rtableid = r->rtableid; #endif #ifdef __FreeBSD__ - } + } #endif #ifdef ALTQ @@ -2575,13 +2573,13 @@ pf_send_icmp(struct mbuf *m, u_int8_t ty #ifdef INET case AF_INET: #ifdef __FreeBSD__ - /* icmp_error() expects host byte ordering */ - ip = mtod(m0, struct ip *); - NTOHS(ip->ip_len); - NTOHS(ip->ip_off); - PF_UNLOCK(); - icmp_error(m0, type, code, 0, 0); - PF_LOCK(); + /* icmp_error() expects host byte ordering */ + ip = mtod(m0, struct ip *); + NTOHS(ip->ip_len); + NTOHS(ip->ip_off); + PF_UNLOCK(); + icmp_error(m0, type, code, 0, 0); + PF_LOCK(); #else icmp_error(m0, type, code, 0, 0); #endif @@ -2590,11 +2588,11 @@ pf_send_icmp(struct mbuf *m, u_int8_t ty #ifdef INET6 case AF_INET6: #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif icmp6_error(m0, type, code, 0); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif break; #endif /* INET6 */ @@ -2768,7 +2766,7 @@ pf_tag_packet(struct mbuf *m, int tag, i if (tag > 0) #ifdef __FreeBSD__ - pf_mtag->tag = tag; + pf_mtag->tag = tag; #else m->m_pkthdr.pf.tag = tag; #endif @@ -2938,7 +2936,7 @@ pf_socket_lookup(int direction, struct p struct pf_addr *saddr, *daddr; u_int16_t sport, dport; #ifdef __FreeBSD__ - struct inpcbinfo *pi; + struct inpcbinfo *pi; #else struct inpcbtable *tb; #endif @@ -2950,14 +2948,14 @@ pf_socket_lookup(int direction, struct p pd->lookup.gid = GID_MAX; pd->lookup.pid = NO_PID; - #ifdef __FreeBSD__ - if (inp_arg != NULL) { - INP_LOCK_ASSERT(inp_arg); - pd->lookup.uid = inp_arg->inp_cred->cr_uid; - pd->lookup.gid = inp_arg->inp_cred->cr_groups[0]; - return (1); - } - #endif +#ifdef __FreeBSD__ + if (inp_arg != NULL) { + INP_LOCK_ASSERT(inp_arg); + pd->lookup.uid = inp_arg->inp_cred->cr_uid; + pd->lookup.gid = inp_arg->inp_cred->cr_groups[0]; + return (1); + } +#endif switch (pd->proto) { case IPPROTO_TCP: @@ -2965,9 +2963,9 @@ pf_socket_lookup(int direction, struct p return (-1); sport = pd->hdr.tcp->th_sport; dport = pd->hdr.tcp->th_dport; - #ifdef __FreeBSD__ - pi = &V_tcbinfo; - #else +#ifdef __FreeBSD__ + pi = &V_tcbinfo; +#else tb = &tcbtable; #endif break; @@ -2976,9 +2974,9 @@ pf_socket_lookup(int direction, struct p return (-1); sport = pd->hdr.udp->uh_sport; dport = pd->hdr.udp->uh_dport; - #ifdef __FreeBSD__ - pi = &V_udbinfo; - #else +#ifdef __FreeBSD__ + pi = &V_udbinfo; +#else tb = &udbtable; #endif break; @@ -3000,19 +2998,19 @@ pf_socket_lookup(int direction, struct p switch (pd->af) { #ifdef INET case AF_INET: - #ifdef __FreeBSD__ - INP_INFO_RLOCK(pi); /* XXX LOR */ - inp = in_pcblookup_hash(pi, saddr->v4, sport, daddr->v4, - dport, 0, NULL); - if (inp == NULL) { - inp = in_pcblookup_hash(pi, saddr->v4, sport, - daddr->v4, dport, INPLOOKUP_WILDCARD, NULL); - if(inp == NULL) { - INP_INFO_RUNLOCK(pi); - return (-1); - } - } - #else +#ifdef __FreeBSD__ + INP_INFO_RLOCK(pi); /* XXX LOR */ + inp = in_pcblookup_hash(pi, saddr->v4, sport, daddr->v4, + dport, 0, NULL); + if (inp == NULL) { + inp = in_pcblookup_hash(pi, saddr->v4, sport, + daddr->v4, dport, INPLOOKUP_WILDCARD, NULL); + if (inp == NULL) { + INP_INFO_RUNLOCK(pi); + return (-1); + } + } +#else inp = in_pcbhashlookup(tb, saddr->v4, sport, daddr->v4, dport); if (inp == NULL) { inp = in_pcblookup_listen(tb, daddr->v4, dport, 0, @@ -3025,19 +3023,19 @@ pf_socket_lookup(int direction, struct p #endif /* INET */ #ifdef INET6 case AF_INET6: - #ifdef __FreeBSD__ - INP_INFO_RLOCK(pi); - inp = in6_pcblookup_hash(pi, &saddr->v6, sport, - &daddr->v6, dport, 0, NULL); - if (inp == NULL) { - inp = in6_pcblookup_hash(pi, &saddr->v6, sport, - &daddr->v6, dport, INPLOOKUP_WILDCARD, NULL); - if (inp == NULL) { - INP_INFO_RUNLOCK(pi); - return (-1); - } - } - #else +#ifdef __FreeBSD__ + INP_INFO_RLOCK(pi); + inp = in6_pcblookup_hash(pi, &saddr->v6, sport, + &daddr->v6, dport, 0, NULL); + if (inp == NULL) { + inp = in6_pcblookup_hash(pi, &saddr->v6, sport, + &daddr->v6, dport, INPLOOKUP_WILDCARD, NULL); + if (inp == NULL) { + INP_INFO_RUNLOCK(pi); + return (-1); + } + } +#else inp = in6_pcbhashlookup(tb, &saddr->v6, sport, &daddr->v6, dport); if (inp == NULL) { @@ -3054,9 +3052,9 @@ pf_socket_lookup(int direction, struct p return (-1); } #ifdef __FreeBSD__ - pd->lookup.uid = inp->inp_cred->cr_uid; - pd->lookup.gid = inp->inp_cred->cr_groups[0]; - INP_INFO_RUNLOCK(pi); + pd->lookup.uid = inp->inp_cred->cr_uid; + pd->lookup.gid = inp->inp_cred->cr_groups[0]; + INP_INFO_RUNLOCK(pi); #else pd->lookup.uid = inp->inp_socket->so_euid; pd->lookup.gid = inp->inp_socket->so_egid; @@ -3176,13 +3174,13 @@ pf_calc_mss(struct pf_addr *addr, sa_fam dst->sin_family = AF_INET; dst->sin_len = sizeof(*dst); dst->sin_addr = addr->v4; - #ifdef __FreeBSD__ - #ifdef RTF_PRCLONING - rtalloc_ign(&ro, (RTF_CLONING | RTF_PRCLONING)); - #else /* !RTF_PRCLONING */ - in_rtalloc_ign(&ro, 0, 0); - #endif - #else /* ! __FreeBSD__ */ +#ifdef __FreeBSD__ +#ifdef RTF_PRCLONING + rtalloc_ign(&ro, (RTF_CLONING | RTF_PRCLONING)); +#else /* !RTF_PRCLONING */ + in_rtalloc_ign(&ro, 0, 0); +#endif +#else /* ! __FreeBSD__ */ rtalloc_noclone(&ro, NO_CLONING); #endif rt = ro.ro_rt; @@ -3196,14 +3194,14 @@ pf_calc_mss(struct pf_addr *addr, sa_fam dst6->sin6_family = AF_INET6; dst6->sin6_len = sizeof(*dst6); dst6->sin6_addr = addr->v6; - #ifdef __FreeBSD__ - #ifdef RTF_PRCLONING - rtalloc_ign((struct route *)&ro6, - (RTF_CLONING | RTF_PRCLONING)); - #else /* !RTF_PRCLONING */ - rtalloc_ign((struct route *)&ro6, 0); - #endif - #else /* ! __FreeBSD__ */ +#ifdef __FreeBSD__ +#ifdef RTF_PRCLONING + rtalloc_ign((struct route *)&ro6, + (RTF_CLONING | RTF_PRCLONING)); +#else /* !RTF_PRCLONING */ + rtalloc_ign((struct route *)&ro6, 0); +#endif +#else /* ! __FreeBSD__ */ rtalloc_noclone((struct route *)&ro6, NO_CLONING); #endif rt = ro6.ro_rt; @@ -3340,16 +3338,16 @@ pf_test_rule(struct pf_rule **rm, struct return (PF_DROP); } - #ifdef __FreeBSD__ - if (inp != NULL) - pd->lookup.done = pf_socket_lookup(direction, pd, inp); - else if (V_debug_pfugidhack) { - PF_UNLOCK(); - DPFPRINTF(PF_DEBUG_MISC, ("pf: unlocked lookup\n")); - pd->lookup.done = pf_socket_lookup(direction, pd, inp); - PF_LOCK(); - } - #endif +#ifdef __FreeBSD__ + if (inp != NULL) + pd->lookup.done = pf_socket_lookup(direction, pd, inp); + else if (V_debug_pfugidhack) { + PF_UNLOCK(); + DPFPRINTF(PF_DEBUG_MISC, ("pf: unlocked lookup\n")); + pd->lookup.done = pf_socket_lookup(direction, pd, inp); + PF_LOCK(); + } +#endif switch (pd->proto) { case IPPROTO_TCP: @@ -3571,9 +3569,9 @@ pf_test_rule(struct pf_rule **rm, struct r = TAILQ_NEXT(r, entries); /* tcp/udp only. uid.op always 0 in other cases */ else if (r->uid.op && (pd->lookup.done || (pd->lookup.done = - #ifdef __FreeBSD__ - pf_socket_lookup(direction, pd, inp), 1)) && - #else +#ifdef __FreeBSD__ + pf_socket_lookup(direction, pd, inp), 1)) && +#else pf_socket_lookup(direction, pd), 1)) && #endif !pf_match_uid(r->uid.op, r->uid.uid[0], r->uid.uid[1], @@ -3581,9 +3579,9 @@ pf_test_rule(struct pf_rule **rm, struct r = TAILQ_NEXT(r, entries); /* tcp/udp only. gid.op always 0 in other cases */ else if (r->gid.op && (pd->lookup.done || (pd->lookup.done = - #ifdef __FreeBSD__ - pf_socket_lookup(direction, pd, inp), 1)) && - #else +#ifdef __FreeBSD__ + pf_socket_lookup(direction, pd, inp), 1)) && +#else pf_socket_lookup(direction, pd), 1)) && #endif !pf_match_gid(r->gid.op, r->gid.gid[0], r->gid.gid[1], @@ -3686,9 +3684,9 @@ pf_test_rule(struct pf_rule **rm, struct ack++; if (th->th_flags & TH_FIN) ack++; - #ifdef __FreeBSD__ - pf_send_tcp(m, r, af, pd->dst, - #else +#ifdef __FreeBSD__ + pf_send_tcp(m, r, af, pd->dst, +#else pf_send_tcp(r, af, pd->dst, #endif pd->src, th->th_dport, th->th_sport, @@ -3995,9 +3993,9 @@ pf_create_state(struct pf_rule *r, struc mss = pf_calc_mss(pd->src, pd->af, mss); mss = pf_calc_mss(pd->dst, pd->af, mss); s->src.mss = mss; - #ifdef __FreeBSD__ +#ifdef __FreeBSD__ pf_send_tcp(NULL, r, pd->af, pd->dst, pd->src, th->th_dport, - #else +#else pf_send_tcp(r, pd->af, pd->dst, pd->src, th->th_dport, #endif th->th_sport, s->src.seqhi, ntohl(th->th_seq) + 1, @@ -4291,7 +4289,7 @@ pf_tcp_track_full(struct pf_state_peer * } -#define MAXACKWINDOW (0xffff + 1500) /* 1500 is an arbitrary fudge factor */ +#define MAXACKWINDOW (0xffff + 1500) /* 1500 is an arbitrary fudge factor */ if (SEQ_GEQ(src->seqhi, end) && /* Last octet inside other's window space */ SEQ_GEQ(seq, src->seqlo - (dst->max_win << dws)) && @@ -4786,9 +4784,9 @@ pf_test_state_udp(struct pf_state **stat } #ifdef __FreeBSD__ - STATE_LOOKUP(kif, &key, direction, *state, m, pd->pf_mtag); + STATE_LOOKUP(kif, &key, direction, *state, m, pd->pf_mtag); #else - STATE_LOOKUP(kif, &key, direction, *state, m); + STATE_LOOKUP(kif, &key, direction, *state, m); #endif if (direction == (*state)->direction) { @@ -5314,12 +5312,12 @@ pf_test_state_icmp(struct pf_state **sta m_copyback(m, off, sizeof(struct icmp6_hdr), #ifdef __FreeBSD__ - (caddr_t) + (caddr_t) #endif pd->hdr.icmp6); m_copyback(m, ipoff2, sizeof(h2_6), #ifdef __FreeBSD__ - (caddr_t) + (caddr_t) #endif &h2_6); break; @@ -5517,12 +5515,12 @@ pf_test_state_icmp(struct pf_state **sta *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 16:01: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 4A8AC10656AB; Fri, 18 Feb 2011 16:01:15 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 389928FC1B; Fri, 18 Feb 2011 16:01: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 p1IG1F1D063464; Fri, 18 Feb 2011 16:01:15 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IG1FVe063462; Fri, 18 Feb 2011 16:01:15 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102181601.p1IG1FVe063462@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 18 Feb 2011 16:01: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: r218805 - projects/pf/pf45/contrib/pf/pfctl 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, 18 Feb 2011 16:01:15 -0000 Author: bz Date: Fri Feb 18 16:01:14 2011 New Revision: 218805 URL: http://svn.freebsd.org/changeset/base/218805 Log: Make compile on all architectures. Modified: projects/pf/pf45/contrib/pf/pfctl/pfctl.c Modified: projects/pf/pf45/contrib/pf/pfctl/pfctl.c ============================================================================== --- projects/pf/pf45/contrib/pf/pfctl/pfctl.c Fri Feb 18 16:00:26 2011 (r218804) +++ projects/pf/pf45/contrib/pf/pfctl/pfctl.c Fri Feb 18 16:01:14 2011 (r218805) @@ -691,10 +691,10 @@ pfctl_id_kill_states(int dev, const char } memset(&psk, 0, sizeof(psk)); - if ((sscanf(state_kill[1], "%llx/%x", + if ((sscanf(state_kill[1], "%jx/%x", &psk.psk_pfcmp.id, &psk.psk_pfcmp.creatorid)) == 2) HTONL(psk.psk_pfcmp.creatorid); - else if ((sscanf(state_kill[1], "%llx", &psk.psk_pfcmp.id)) == 1) { + else if ((sscanf(state_kill[1], "%jx", &psk.psk_pfcmp.id)) == 1) { psk.psk_pfcmp.creatorid = 0; } else { warnx("wrong id format specified"); From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 16:01: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 F36D0106566C; Fri, 18 Feb 2011 16:01:49 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E1A898FC0C; Fri, 18 Feb 2011 16:01: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 p1IG1n4P063513; Fri, 18 Feb 2011 16:01:49 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IG1n2R063511; Fri, 18 Feb 2011 16:01:49 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102181601.p1IG1n2R063511@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 18 Feb 2011 16:01: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: r218806 - projects/pf/pf45/sys/contrib/pf/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: Fri, 18 Feb 2011 16:01:50 -0000 Author: bz Date: Fri Feb 18 16:01:49 2011 New Revision: 218806 URL: http://svn.freebsd.org/changeset/base/218806 Log: Add missing V_irtualization. Modified: projects/pf/pf45/sys/contrib/pf/net/pf_ioctl.c Modified: projects/pf/pf45/sys/contrib/pf/net/pf_ioctl.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/pf_ioctl.c Fri Feb 18 16:01:14 2011 (r218805) +++ projects/pf/pf45/sys/contrib/pf/net/pf_ioctl.c Fri Feb 18 16:01:49 2011 (r218806) @@ -890,7 +890,7 @@ pf_begin_altq(u_int32_t *ticket) return (error); #ifdef __FreeBSD__ *ticket = ++V_ticket_altqs_inactive; - altqs_inactive_open = 1; + V_altqs_inactive_open = 1; #else *ticket = ++ticket_altqs_inactive; altqs_inactive_open = 1; @@ -930,7 +930,11 @@ pf_rollback_altq(u_int32_t ticket) pool_put(&pf_altq_pl, altq); #endif } +#ifdef __FreeBSD__ + V_altqs_inactive_open = 0; +#else altqs_inactive_open = 0; +#endif return (error); } @@ -1020,7 +1024,11 @@ pf_commit_altq(u_int32_t ticket) } splx(s); +#ifdef __FreeBSD__ + V_altqs_inactive_open = 0; +#else altqs_inactive_open = 0; +#endif return (error); } From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 16:02: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 3B2091065672; Fri, 18 Feb 2011 16:02:18 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2937D8FC08; Fri, 18 Feb 2011 16:02: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 p1IG2I6H063568; Fri, 18 Feb 2011 16:02:18 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IG2I0R063567; Fri, 18 Feb 2011 16:02:18 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102181602.p1IG2I0R063567@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 18 Feb 2011 16:02: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: r218807 - projects/pf/pf45/sys/contrib/pf/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: Fri, 18 Feb 2011 16:02:18 -0000 Author: bz Date: Fri Feb 18 16:02:17 2011 New Revision: 218807 URL: http://svn.freebsd.org/changeset/base/218807 Log: Add missing header file (though we might not use it). Added: projects/pf/pf45/sys/contrib/pf/net/if_pflow.h (contents, props changed) Added: projects/pf/pf45/sys/contrib/pf/net/if_pflow.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/pf/pf45/sys/contrib/pf/net/if_pflow.h Fri Feb 18 16:02:17 2011 (r218807) @@ -0,0 +1,126 @@ +/* $OpenBSD: if_pflow.h,v 1.5 2009/02/27 11:09:36 gollo Exp $ */ + +/* + * Copyright (c) 2008 Henning Brauer + * Copyright (c) 2008 Joerg Goltermann + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN + * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT + * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * + * $FreeBSD$ + */ + +#ifndef _NET_IF_PFLOW_H_ +#define _NET_IF_PFLOW_H_ + +#define PFLOW_ID_LEN sizeof(u_int64_t) + +#define PFLOW_MAXFLOWS 30 +#define PFLOW_VERSION 5 +#define PFLOW_ENGINE_TYPE 42 +#define PFLOW_ENGINE_ID 42 +#define PFLOW_MAXBYTES 0xffffffff +#define PFLOW_TIMEOUT 30 + +struct pflow_flow { + u_int32_t src_ip; + u_int32_t dest_ip; + u_int32_t nexthop_ip; + u_int16_t if_index_in; + u_int16_t if_index_out; + u_int32_t flow_packets; + u_int32_t flow_octets; + u_int32_t flow_start; + u_int32_t flow_finish; + u_int16_t src_port; + u_int16_t dest_port; + u_int8_t pad1; + u_int8_t tcp_flags; + u_int8_t protocol; + u_int8_t tos; + u_int16_t src_as; + u_int16_t dest_as; + u_int8_t src_mask; + u_int8_t dest_mask; + u_int16_t pad2; +} __packed; + +#ifdef _KERNEL + +extern int pflow_ok; + +struct pflow_softc { + struct ifnet sc_if; + struct ifnet *sc_pflow_ifp; + + unsigned int sc_count; + unsigned int sc_maxcount; + u_int64_t sc_gcounter; + struct ip_moptions sc_imo; +#ifdef __FreeBSD__ + struct callout sc_tmo; +#else + struct timeout sc_tmo; +#endif + struct in_addr sc_sender_ip; + u_int16_t sc_sender_port; + struct in_addr sc_receiver_ip; + u_int16_t sc_receiver_port; + struct mbuf *sc_mbuf; /* current cumulative mbuf */ + SLIST_ENTRY(pflow_softc) sc_next; +}; + +extern struct pflow_softc *pflowif; + +#endif /* _KERNEL */ + +struct pflow_header { + u_int16_t version; + u_int16_t count; + u_int32_t uptime_ms; + u_int32_t time_sec; + u_int32_t time_nanosec; + u_int32_t flow_sequence; + u_int8_t engine_type; + u_int8_t engine_id; + u_int8_t reserved1; + u_int8_t reserved2; +} __packed; + +#define PFLOW_HDRLEN sizeof(struct pflow_header) + +struct pflowstats { + u_int64_t pflow_flows; + u_int64_t pflow_packets; + u_int64_t pflow_onomem; + u_int64_t pflow_oerrors; +}; + +/* + * Configuration structure for SIOCSETPFLOW SIOCGETPFLOW + */ +struct pflowreq { + struct in_addr sender_ip; + struct in_addr receiver_ip; + u_int16_t receiver_port; + u_int16_t addrmask; +#define PFLOW_MASK_SRCIP 0x01 +#define PFLOW_MASK_DSTIP 0x02 +#define PFLOW_MASK_DSTPRT 0x04 +}; + +#ifdef _KERNEL +int export_pflow(struct pf_state *); +int pflow_sysctl(int *, u_int, void *, size_t *, void *, size_t); +#endif /* _KERNEL */ + +#endif /* _NET_IF_PFLOW_H_ */ From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 16:13: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 A0EFA106564A; Fri, 18 Feb 2011 16:13:59 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8E46E8FC12; Fri, 18 Feb 2011 16:13: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 p1IGDxrc063911; Fri, 18 Feb 2011 16:13:59 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IGDxfo063909; Fri, 18 Feb 2011 16:13:59 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102181613.p1IGDxfo063909@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 18 Feb 2011 16:13: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: r218808 - projects/pf/pf45/sys/contrib/pf/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: Fri, 18 Feb 2011 16:13:59 -0000 Author: bz Date: Fri Feb 18 16:13:59 2011 New Revision: 218808 URL: http://svn.freebsd.org/changeset/base/218808 Log: Whitespace cleanup. Modified: projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Modified: projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Fri Feb 18 16:02:17 2011 (r218807) +++ projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Fri Feb 18 16:13:59 2011 (r218808) @@ -855,7 +855,7 @@ pfsync_state_import(struct pfsync_state return (0); - cleanup: +cleanup: error = ENOMEM; if (skw == sks) sks = NULL; @@ -871,7 +871,7 @@ pfsync_state_import(struct pfsync_state pool_put(&pf_state_key_pl, sks); #endif - cleanup_state: /* pf_state_insert frees the state keys */ +cleanup_state: /* pf_state_insert frees the state keys */ if (st) { #ifdef __FreeBSD__ if (st->dst.scrub) @@ -1072,7 +1072,7 @@ pfsync_in_clr(struct pfsync_pkt *pkt, st } } #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); @@ -1098,7 +1098,7 @@ pfsync_in_ins(struct pfsync_pkt *pkt, st s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) { sp = &sa[i]; @@ -1127,7 +1127,7 @@ pfsync_in_ins(struct pfsync_pkt *pkt, st } } #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); @@ -1155,7 +1155,7 @@ pfsync_in_iack(struct pfsync_pkt *pkt, s s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) { ia = &iaa[i]; @@ -1171,7 +1171,7 @@ pfsync_in_iack(struct pfsync_pkt *pkt, s pfsync_deferred(st, 0); } #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); /* @@ -1239,7 +1239,7 @@ pfsync_in_upd(struct pfsync_pkt *pkt, st s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) { sp = &sa[i]; @@ -1315,7 +1315,7 @@ pfsync_in_upd(struct pfsync_pkt *pkt, st st->pfsync_time = time_second; } #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); @@ -1346,7 +1346,7 @@ pfsync_in_upd_c(struct pfsync_pkt *pkt, s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) { up = &ua[i]; @@ -1421,7 +1421,7 @@ pfsync_in_upd_c(struct pfsync_pkt *pkt, st->pfsync_time = time_second; } #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); @@ -1490,7 +1490,7 @@ pfsync_in_del(struct pfsync_pkt *pkt, st s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) { sp = &sa[i]; @@ -1507,7 +1507,7 @@ pfsync_in_del(struct pfsync_pkt *pkt, st pf_unlink_state(st); } #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); @@ -1534,7 +1534,7 @@ pfsync_in_del_c(struct pfsync_pkt *pkt, s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) { sp = &sa[i]; @@ -1552,7 +1552,7 @@ pfsync_in_del_c(struct pfsync_pkt *pkt, pf_unlink_state(st); } #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif splx(s); @@ -1668,12 +1668,12 @@ pfsync_in_tdb(struct pfsync_pkt *pkt, st s = splsoftnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif for (i = 0; i < count; i++) pfsync_update_net_tdb(&tp[i]); #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); #endif @@ -1714,7 +1714,7 @@ pfsync_update_net_tdb(struct pfsync_tdb splx(s); return; - bad: +bad: #ifdef __FreeBSD__ if (V_pf_status.debug >= PF_DEBUG_MISC) #else @@ -1980,8 +1980,8 @@ pfsyncioctl(struct ifnet *ifp, u_long cm #endif printf("pfsync: requesting bulk update\n"); #ifdef __FreeBSD__ - callout_reset(&sc->sc_bulkfail_tmo, 5 * hz, - pfsync_bulk_fail, V_pfsyncif); + callout_reset(&sc->sc_bulkfail_tmo, 5 * hz, + pfsync_bulk_fail, V_pfsyncif); #else timeout_add_sec(&sc->sc_bulkfail_tmo, 5); #endif @@ -2342,20 +2342,20 @@ pfsync_sendout(void) if (ip_output(m, NULL, NULL, IP_RAWOUTPUT, &sc->sc_imo, NULL) == 0) #ifdef __FreeBSD__ { - PF_LOCK(); + PF_LOCK(); #endif pfsyncstats.pfsyncs_opackets++; #ifdef __FreeBSD__ - } + } #endif else #ifdef __FreeBSD__ - { - PF_LOCK(); + { + PF_LOCK(); #endif pfsyncstats.pfsyncs_oerrors++; #ifdef __FreeBSD__ - } + } #endif /* start again */ @@ -2372,7 +2372,7 @@ pfsync_insert_state(struct pf_state *st) #endif #ifdef __FreeBSD__ - PF_ASSERT(MA_OWNED); + PF_ASSERT(MA_OWNED); #else splassert(IPL_SOFTNET); #endif @@ -2397,8 +2397,8 @@ pfsync_insert_state(struct pf_state *st) if (sc->sc_len == PFSYNC_MINPKT) #ifdef __FreeBSD__ - callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, - V_pfsyncif); + callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, + V_pfsyncif); #else timeout_add_sec(&sc->sc_tmo, 1); #endif @@ -2424,7 +2424,7 @@ pfsync_defer(struct pf_state *st, struct struct pfsync_deferral *pd; #ifdef __FreeBSD__ - PF_ASSERT(MA_OWNED); + PF_ASSERT(MA_OWNED); #else splassert(IPL_SOFTNET); #endif @@ -2471,7 +2471,7 @@ pfsync_undefer(struct pfsync_deferral *p int s; #ifdef __FreeBSD__ - PF_ASSERT(MA_OWNED); + PF_ASSERT(MA_OWNED); #else splassert(IPL_SOFTNET); #endif @@ -2511,11 +2511,11 @@ pfsync_defer_tmo(void *arg) s = splsoftnet(); #ifdef __FreeBSD__ CURVNET_SET(pd->pd_m->m_pkthdr.rcvif); /* XXX */ - PF_LOCK(); + PF_LOCK(); #endif pfsync_undefer(arg, 0); #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); CURVNET_RESTORE(); #endif splx(s); @@ -2554,7 +2554,7 @@ pfsync_update_state(struct pf_state *st) int sync = 0; #ifdef __FreeBSD__ - PF_ASSERT(MA_OWNED); + PF_ASSERT(MA_OWNED); #else splassert(IPL_SOFTNET); #endif @@ -2572,8 +2572,8 @@ pfsync_update_state(struct pf_state *st) if (sc->sc_len == PFSYNC_MINPKT) #ifdef __FreeBSD__ - callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, - V_pfsyncif); + callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, + V_pfsyncif); #else timeout_add_sec(&sc->sc_tmo, 1); #endif @@ -2637,7 +2637,7 @@ pfsync_request_update(u_int32_t creatori nlen += sizeof(struct pfsync_subheader); #ifdef __FreeBSD__ - if (sc->sc_len + nlen > sc->sc_ifp->if_mtu) { + if (sc->sc_len + nlen > sc->sc_ifp->if_mtu) { #else if (sc->sc_len + nlen > sc->sc_if.if_mtu) { #endif @@ -2704,7 +2704,7 @@ pfsync_delete_state(struct pf_state *st) #endif #ifdef __FreeBSD__ - PF_ASSERT(MA_OWNED); + PF_ASSERT(MA_OWNED); #else splassert(IPL_SOFTNET); #endif @@ -2722,8 +2722,8 @@ pfsync_delete_state(struct pf_state *st) if (sc->sc_len == PFSYNC_MINPKT) #ifdef __FreeBSD__ - callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, - V_pfsyncif); + callout_reset(&sc->sc_tmo, 1 * hz, pfsync_timeout, + V_pfsyncif); #else timeout_add_sec(&sc->sc_tmo, 1); #endif @@ -2765,7 +2765,7 @@ pfsync_clear_states(u_int32_t creatorid, #endif #ifdef __FreeBSD__ - PF_ASSERT(MA_OWNED); + PF_ASSERT(MA_OWNED); #else splassert(IPL_SOFTNET); #endif @@ -3000,7 +3000,7 @@ pfsync_bulk_update(void *arg) s = splsoftnet(); #ifdef __FreeBSD__ CURVNET_SET(sc->sc_ifp->if_vnet); - PF_LOCK(); + PF_LOCK(); #endif do { if (st->sync_state == PFSYNC_S_NONE && @@ -3021,8 +3021,8 @@ pfsync_bulk_update(void *arg) if (i > 0 && TAILQ_EMPTY(&sc->sc_qs[PFSYNC_S_UPD])) { sc->sc_bulk_next = st; #ifdef __FreeBSD__ - callout_reset(&sc->sc_bulk_tmo, 1, - pfsync_bulk_fail, sc); + callout_reset(&sc->sc_bulk_tmo, 1, + pfsync_bulk_fail, sc); #else timeout_add(&sc->sc_bulk_tmo, 1); #endif @@ -3037,7 +3037,7 @@ pfsync_bulk_update(void *arg) out: #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); CURVNET_RESTORE(); #endif splx(s); @@ -3085,8 +3085,8 @@ pfsync_bulk_fail(void *arg) if (sc->sc_bulk_tries++ < PFSYNC_MAX_BULKTRIES) { /* Try again */ #ifdef __FreeBSD__ - callout_reset(&sc->sc_bulkfail_tmo, 5 * hz, - pfsync_bulk_fail, V_pfsyncif); + callout_reset(&sc->sc_bulkfail_tmo, 5 * hz, + pfsync_bulk_fail, V_pfsyncif); #else timeout_add_sec(&sc->sc_bulkfail_tmo, 5); #endif @@ -3154,11 +3154,11 @@ pfsync_send_plus(void *plus, size_t plus s = splnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif pfsync_sendout(); #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); } @@ -3222,11 +3222,11 @@ pfsync_timeout(void *arg) s = splnet(); #ifdef __FreeBSD__ - PF_LOCK(); + PF_LOCK(); #endif pfsync_sendout(); #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); @@ -3244,7 +3244,7 @@ pfsyncintr(void) #endif { #ifdef __FreeBSD__ - struct pfsync_softc *sc = arg; + struct pfsync_softc *sc = arg; #endif int s; @@ -3252,7 +3252,7 @@ pfsyncintr(void) if (sc == NULL) return; - CURVNET_SET(sc->sc_ifp->if_vnet); + CURVNET_SET(sc->sc_ifp->if_vnet); #endif pfsync_ints++; @@ -3262,12 +3262,12 @@ pfsyncintr(void) #endif pfsync_sendout(); #ifdef __FreeBSD__ - PF_UNLOCK(); + PF_UNLOCK(); #endif splx(s); #ifdef __FreeBSD__ - CURVNET_RESTORE(); + CURVNET_RESTORE(); #endif } @@ -3342,15 +3342,15 @@ vnet_pfsync_init(const void *unused) panic("%s: swi_add %d", __func__, error); pfsync_state_import_ptr = pfsync_state_import; - pfsync_up_ptr = pfsync_up; - pfsync_insert_state_ptr = pfsync_insert_state; - pfsync_update_state_ptr = pfsync_update_state; - pfsync_delete_state_ptr = pfsync_delete_state; - pfsync_clear_states_ptr = pfsync_clear_states; - pfsync_state_in_use_ptr = pfsync_state_in_use; - pfsync_defer_ptr = pfsync_defer; + pfsync_up_ptr = pfsync_up; + pfsync_insert_state_ptr = pfsync_insert_state; + pfsync_update_state_ptr = pfsync_update_state; + pfsync_delete_state_ptr = pfsync_delete_state; + pfsync_clear_states_ptr = pfsync_clear_states; + pfsync_state_in_use_ptr = pfsync_state_in_use; + pfsync_defer_ptr = pfsync_defer; - return (0); + return (0); } static int @@ -3370,7 +3370,7 @@ vnet_pfsync_uninit(const void *unused) if_clone_detach(&pfsync_cloner); - return (0); + return (0); } /* Define startup order. */ @@ -3383,7 +3383,7 @@ vnet_pfsync_uninit(const void *unused) * VNET_SYSINIT is called for each existing vnet and each new vnet. */ VNET_SYSINIT(vnet_pfsync_init, PFSYNC_SYSINIT_ORDER, PFSYNC_VNET_ORDER, - vnet_pfsync_init, NULL); + vnet_pfsync_init, NULL); /* * Closing up shop. These are done in REVERSE ORDER, @@ -3391,7 +3391,7 @@ VNET_SYSINIT(vnet_pfsync_init, PFSYNC_SY * VNET_SYSUNINIT is called for each exiting vnet as it exits. */ VNET_SYSUNINIT(vnet_pfsync_uninit, PFSYNC_SYSINIT_ORDER, PFSYNC_VNET_ORDER, - vnet_pfsync_uninit, NULL); + vnet_pfsync_uninit, NULL); static int pfsync_modevent(module_t mod, int type, void *data) { From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 16:21:10 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 229D0106566B; Fri, 18 Feb 2011 16:21:10 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0F5918FC0A; Fri, 18 Feb 2011 16:21:10 +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 p1IGL9gh064166; Fri, 18 Feb 2011 16:21:09 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IGL9Gi064164; Fri, 18 Feb 2011 16:21:09 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102181621.p1IGL9Gi064164@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Fri, 18 Feb 2011 16:21:09 +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: r218809 - projects/pf/pf45/sys/contrib/pf/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: Fri, 18 Feb 2011 16:21:10 -0000 Author: bz Date: Fri Feb 18 16:21:09 2011 New Revision: 218809 URL: http://svn.freebsd.org/changeset/base/218809 Log: V_irtulize pfsyncstats (and minor other V_correction). Note: the sysctl handler function stays "notyet" so far. Modified: projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Modified: projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Fri Feb 18 16:13:59 2011 (r218808) +++ projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Fri Feb 18 16:21:09 2011 (r218809) @@ -301,18 +301,17 @@ struct pfsync_softc { #ifndef __FreeBSD__ struct pfsync_softc *pfsyncif = NULL; struct pfsyncstats pfsyncstats; +#define V_pfsyncstats pfsyncstats #endif #ifdef __FreeBSD__ VNET_DEFINE(struct pfsync_softc *, pfsyncif) = NULL; #define V_pfsyncif VNET(pfsyncif) VNET_DEFINE(struct pfsyncstats, pfsyncstats); #define V_pfsyncstats VNET(pfsyncstats) -#ifdef notyet -SYSCTL_DECL(_net_inet_pfsync); -SYSCTL_STRUCT(_net_inet_pfsync, 0, stats, CTLFLAG_RW, - &pfsyncstats, pfsyncstats, +SYSCTL_DECL(_net_pfsync); +SYSCTL_VNET_STRUCT(_net_pfsync, 0, stats, CTLFLAG_RW, + &VNET_NAME(pfsyncstats), pfsyncstats, "PFSYNC statistics (struct pfsyncstats, net/if_pfsync.h)"); -#endif static void pfsyncintr(void *); struct pfsync_swi { @@ -910,7 +909,7 @@ pfsync_input(struct mbuf *m, ...) int offset; int rv; - pfsyncstats.pfsyncs_ipackets++; + V_pfsyncstats.pfsyncs_ipackets++; /* verify that we have a sync interface configured */ #ifdef __FreeBSD__ @@ -922,7 +921,7 @@ pfsync_input(struct mbuf *m, ...) /* verify that the packet came in on the right interface */ if (sc->sc_sync_if != m->m_pkthdr.rcvif) { - pfsyncstats.pfsyncs_badif++; + V_pfsyncstats.pfsyncs_badif++; goto done; } @@ -935,19 +934,19 @@ pfsync_input(struct mbuf *m, ...) #endif /* verify that the IP TTL is 255. */ if (ip->ip_ttl != PFSYNC_DFLTTL) { - pfsyncstats.pfsyncs_badttl++; + V_pfsyncstats.pfsyncs_badttl++; goto done; } offset = ip->ip_hl << 2; if (m->m_pkthdr.len < offset + sizeof(*ph)) { - pfsyncstats.pfsyncs_hdrops++; + V_pfsyncstats.pfsyncs_hdrops++; goto done; } if (offset + sizeof(*ph) > m->m_len) { if (m_pullup(m, offset + sizeof(*ph)) == NULL) { - pfsyncstats.pfsyncs_hdrops++; + V_pfsyncstats.pfsyncs_hdrops++; return; } ip = mtod(m, struct ip *); @@ -956,7 +955,7 @@ pfsync_input(struct mbuf *m, ...) /* verify the version */ if (ph->version != PFSYNC_VERSION) { - pfsyncstats.pfsyncs_badver++; + V_pfsyncstats.pfsyncs_badver++; goto done; } @@ -985,7 +984,7 @@ pfsync_input(struct mbuf *m, ...) offset += sizeof(subh); if (subh.action >= PFSYNC_ACT_MAX) { - pfsyncstats.pfsyncs_badact++; + V_pfsyncstats.pfsyncs_badact++; goto done; } @@ -1017,7 +1016,7 @@ pfsync_in_clr(struct pfsync_pkt *pkt, st mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } clr = (struct pfsync_clr *)(mp->m_data + offp); @@ -1091,7 +1090,7 @@ pfsync_in_ins(struct pfsync_pkt *pkt, st mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } sa = (struct pfsync_state *)(mp->m_data + offp); @@ -1117,7 +1116,7 @@ pfsync_in_ins(struct pfsync_pkt *pkt, st printf("pfsync_input: PFSYNC5_ACT_INS: " "invalid value\n"); } - pfsyncstats.pfsyncs_badval++; + V_pfsyncstats.pfsyncs_badval++; continue; } @@ -1148,7 +1147,7 @@ pfsync_in_iack(struct pfsync_pkt *pkt, s mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } iaa = (struct pfsync_ins_ack *)(mp->m_data + offp); @@ -1232,7 +1231,7 @@ pfsync_in_upd(struct pfsync_pkt *pkt, st mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } sa = (struct pfsync_state *)(mp->m_data + offp); @@ -1256,7 +1255,7 @@ pfsync_in_upd(struct pfsync_pkt *pkt, st printf("pfsync_input: PFSYNC_ACT_UPD: " "invalid value\n"); } - pfsyncstats.pfsyncs_badval++; + V_pfsyncstats.pfsyncs_badval++; continue; } @@ -1267,7 +1266,7 @@ pfsync_in_upd(struct pfsync_pkt *pkt, st if (st == NULL) { /* insert the update */ if (pfsync_state_import(sp, 0)) - pfsyncstats.pfsyncs_badstate++; + V_pfsyncstats.pfsyncs_badstate++; continue; } @@ -1301,7 +1300,7 @@ pfsync_in_upd(struct pfsync_pkt *pkt, st sfail, betoh64(st->id), ntohl(st->creatorid)); } - pfsyncstats.pfsyncs_stale++; + V_pfsyncstats.pfsyncs_stale++; pfsync_update_state(st); schednetisr(NETISR_PFSYNC); @@ -1339,7 +1338,7 @@ pfsync_in_upd_c(struct pfsync_pkt *pkt, mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } ua = (struct pfsync_upd_c *)(mp->m_data + offp); @@ -1364,7 +1363,7 @@ pfsync_in_upd_c(struct pfsync_pkt *pkt, "PFSYNC_ACT_UPD_C: " "invalid value\n"); } - pfsyncstats.pfsyncs_badval++; + V_pfsyncstats.pfsyncs_badval++; continue; } @@ -1407,7 +1406,7 @@ pfsync_in_upd_c(struct pfsync_pkt *pkt, betoh64(st->id), ntohl(st->creatorid)); } - pfsyncstats.pfsyncs_stale++; + V_pfsyncstats.pfsyncs_stale++; pfsync_update_state(st); schednetisr(NETISR_PFSYNC); @@ -1441,7 +1440,7 @@ pfsync_in_ureq(struct pfsync_pkt *pkt, s mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } ura = (struct pfsync_upd_req *)(mp->m_data + offp); @@ -1457,7 +1456,7 @@ pfsync_in_ureq(struct pfsync_pkt *pkt, s else { st = pf_find_state_byid(&id_key); if (st == NULL) { - pfsyncstats.pfsyncs_badstate++; + V_pfsyncstats.pfsyncs_badstate++; continue; } if (ISSET(st->state_flags, PFSTATE_NOSYNC)) @@ -1483,7 +1482,7 @@ pfsync_in_del(struct pfsync_pkt *pkt, st mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } sa = (struct pfsync_state *)(mp->m_data + offp); @@ -1500,7 +1499,7 @@ pfsync_in_del(struct pfsync_pkt *pkt, st st = pf_find_state_byid(&id_key); if (st == NULL) { - pfsyncstats.pfsyncs_badstate++; + V_pfsyncstats.pfsyncs_badstate++; continue; } SET(st->state_flags, PFSTATE_NOSYNC); @@ -1527,7 +1526,7 @@ pfsync_in_del_c(struct pfsync_pkt *pkt, mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } sa = (struct pfsync_del_c *)(mp->m_data + offp); @@ -1544,7 +1543,7 @@ pfsync_in_del_c(struct pfsync_pkt *pkt, st = pf_find_state_byid(&id_key); if (st == NULL) { - pfsyncstats.pfsyncs_badstate++; + V_pfsyncstats.pfsyncs_badstate++; continue; } @@ -1578,7 +1577,7 @@ pfsync_in_bus(struct pfsync_pkt *pkt, st mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } bus = (struct pfsync_bus *)(mp->m_data + offp); @@ -1661,7 +1660,7 @@ pfsync_in_tdb(struct pfsync_pkt *pkt, st mp = m_pulldown(m, offset, len, &offp); if (mp == NULL) { - pfsyncstats.pfsyncs_badlen++; + V_pfsyncstats.pfsyncs_badlen++; return (-1); } tp = (struct pfsync_tdb *)(mp->m_data + offp); @@ -1722,7 +1721,7 @@ bad: #endif printf("pfsync_insert: PFSYNC_ACT_TDB_UPD: " "invalid value\n"); - pfsyncstats.pfsyncs_badstate++; + V_pfsyncstats.pfsyncs_badstate++; return; } #endif @@ -1733,7 +1732,7 @@ pfsync_in_eof(struct pfsync_pkt *pkt, st { /* check if we are at the right place in the packet */ if (offset != m->m_pkthdr.len - sizeof(struct pfsync_eof)) - pfsyncstats.pfsyncs_badact++; + V_pfsyncstats.pfsyncs_badact++; /* we're done. free and let the caller return */ m_freem(m); @@ -1743,7 +1742,7 @@ pfsync_in_eof(struct pfsync_pkt *pkt, st int pfsync_in_error(struct pfsync_pkt *pkt, struct mbuf *m, int offset, int count) { - pfsyncstats.pfsyncs_badact++; + V_pfsyncstats.pfsyncs_badact++; m_freem(m); return (-1); @@ -2161,7 +2160,7 @@ pfsync_sendout(void) #else sc->sc_if.if_oerrors++; #endif - pfsyncstats.pfsyncs_onomem++; + V_pfsyncstats.pfsyncs_onomem++; pfsync_drop(sc); return; } @@ -2188,7 +2187,7 @@ pfsync_sendout(void) #else sc->sc_if.if_oerrors++; #endif - pfsyncstats.pfsyncs_onomem++; + V_pfsyncstats.pfsyncs_onomem++; pfsync_drop(sc); return; } @@ -2344,7 +2343,7 @@ pfsync_sendout(void) { PF_LOCK(); #endif - pfsyncstats.pfsyncs_opackets++; + V_pfsyncstats.pfsyncs_opackets++; #ifdef __FreeBSD__ } #endif @@ -2353,7 +2352,7 @@ pfsync_sendout(void) { PF_LOCK(); #endif - pfsyncstats.pfsyncs_oerrors++; + V_pfsyncstats.pfsyncs_oerrors++; #ifdef __FreeBSD__ } #endif @@ -3285,7 +3284,7 @@ pfsync_sysctl(int *name, u_int namelen, if (newp != NULL) return (EPERM); return (sysctl_struct(oldp, oldlenp, newp, newlen, - &pfsyncstats, sizeof(pfsyncstats))); + &V_pfsyncstats, sizeof(V_pfsyncstats))); default: return (ENOPROTOOPT); } @@ -3336,7 +3335,7 @@ vnet_pfsync_init(const void *unused) pfsyncattach(0); - error = swi_add(NULL, "pfsync", pfsyncintr, pfsyncif, + error = swi_add(NULL, "pfsync", pfsyncintr, V_pfsyncif, SWI_NET, INTR_MPSAFE, &pfsync_swi.pfsync_swi_cookie); if (error) panic("%s: swi_add %d", __func__, error); From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 20:25: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 8900C106564A; Fri, 18 Feb 2011 20:25: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 72B558FC0C; Fri, 18 Feb 2011 20:25: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 p1IKPVrd070825; Fri, 18 Feb 2011 20:25:31 GMT (envelope-from dim@svn.freebsd.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1IKPUZt070795; Fri, 18 Feb 2011 20:25:30 GMT (envelope-from dim@svn.freebsd.org) Message-Id: <201102182025.p1IKPUZt070795@svn.freebsd.org> From: Dimitry Andric Date: Fri, 18 Feb 2011 20:25: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: r218817 - in projects/binutils-2.17: . contrib/top etc/mtree etc/namedb include share/man/man4 share/mk sys/amd64/include sys/arm/arm sys/arm/include sys/boot/forth sys/conf sys/dev/ath... 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, 18 Feb 2011 20:25:31 -0000 Author: dim Date: Fri Feb 18 20:25:30 2011 New Revision: 218817 URL: http://svn.freebsd.org/changeset/base/218817 Log: Sync: merge r218746 through r218816 from ^/head. Added: projects/binutils-2.17/share/man/man4/cxgbe.4 - copied unchanged from r218808, head/share/man/man4/cxgbe.4 projects/binutils-2.17/sys/dev/cxgbe/ - copied from r218808, head/sys/dev/cxgbe/ projects/binutils-2.17/sys/modules/cxgbe/ - copied from r218808, head/sys/modules/cxgbe/ projects/binutils-2.17/tools/tools/nanobsd/Files/root/update - copied unchanged from r218816, head/tools/tools/nanobsd/Files/root/update projects/binutils-2.17/usr.sbin/bsdinstall/ - copied from r218808, head/usr.sbin/bsdinstall/ Modified: projects/binutils-2.17/UPDATING projects/binutils-2.17/etc/mtree/BSD.include.dist projects/binutils-2.17/etc/mtree/BSD.usr.dist projects/binutils-2.17/etc/namedb/named.conf projects/binutils-2.17/include/Makefile projects/binutils-2.17/share/man/man4/Makefile projects/binutils-2.17/share/man/man4/altq.4 projects/binutils-2.17/share/man/man4/mos.4 projects/binutils-2.17/share/man/man4/vlan.4 projects/binutils-2.17/sys/amd64/include/pmap.h projects/binutils-2.17/sys/arm/arm/elf_machdep.c projects/binutils-2.17/sys/arm/include/pmap.h projects/binutils-2.17/sys/boot/forth/loader.conf projects/binutils-2.17/sys/conf/NOTES projects/binutils-2.17/sys/conf/files projects/binutils-2.17/sys/conf/kern.pre.mk projects/binutils-2.17/sys/dev/ath/ath_hal/ah_internal.h projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/binutils-2.17/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.c projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.h projects/binutils-2.17/sys/dev/ath/if_ath.c projects/binutils-2.17/sys/dev/ath/if_ath_tx_ht.c projects/binutils-2.17/sys/dev/dc/if_dc.c projects/binutils-2.17/sys/dev/dc/if_dcreg.h projects/binutils-2.17/sys/dev/flash/mx25l.c projects/binutils-2.17/sys/dev/mps/mps.c projects/binutils-2.17/sys/dev/mps/mps_sas.c projects/binutils-2.17/sys/dev/mps/mpsvar.h projects/binutils-2.17/sys/dev/re/if_re.c projects/binutils-2.17/sys/dev/sound/usb/uaudio.c projects/binutils-2.17/sys/dev/usb/net/if_mos.c projects/binutils-2.17/sys/fs/nfsclient/nfs_clvfsops.c projects/binutils-2.17/sys/fs/portalfs/portal_vnops.c projects/binutils-2.17/sys/i386/include/pmap.h projects/binutils-2.17/sys/ia64/include/pmap.h projects/binutils-2.17/sys/kern/kern_descrip.c projects/binutils-2.17/sys/kern/sys_socket.c projects/binutils-2.17/sys/kern/uipc_socket.c projects/binutils-2.17/sys/kern/uipc_syscalls.c projects/binutils-2.17/sys/kern/uipc_usrreq.c projects/binutils-2.17/sys/mips/include/pmap.h projects/binutils-2.17/sys/modules/Makefile projects/binutils-2.17/sys/net/if.c projects/binutils-2.17/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.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/netinet/sctp_input.c projects/binutils-2.17/sys/netinet/sctp_peeloff.c projects/binutils-2.17/sys/netipsec/key.c projects/binutils-2.17/sys/netipsec/xform.h projects/binutils-2.17/sys/netipsec/xform_ah.c projects/binutils-2.17/sys/netipsec/xform_esp.c projects/binutils-2.17/sys/nfsclient/bootp_subr.c projects/binutils-2.17/sys/nfsclient/krpc_subr.c projects/binutils-2.17/sys/nfsclient/nfs_diskless.c projects/binutils-2.17/sys/nfsclient/nfs_vfsops.c projects/binutils-2.17/sys/pci/if_rlreg.h projects/binutils-2.17/sys/powerpc/include/pmap.h projects/binutils-2.17/sys/rpc/clnt_dg.c projects/binutils-2.17/sys/rpc/clnt_vc.c projects/binutils-2.17/sys/rpc/rpc_generic.c projects/binutils-2.17/sys/rpc/svc_dg.c projects/binutils-2.17/sys/rpc/svc_generic.c projects/binutils-2.17/sys/rpc/svc_vc.c projects/binutils-2.17/sys/sparc64/include/pmap.h projects/binutils-2.17/sys/sun4v/include/pmap.h projects/binutils-2.17/sys/vm/vm_page.c projects/binutils-2.17/tools/tools/sysbuild/sysbuild.sh projects/binutils-2.17/usr.bin/calendar/calendar.h projects/binutils-2.17/usr.bin/calendar/calendars/ru_RU.KOI8-R/calendar.orthodox (contents, props changed) projects/binutils-2.17/usr.bin/calendar/paskha.c projects/binutils-2.17/usr.sbin/Makefile projects/binutils-2.17/usr.sbin/nfsd/nfsd.c projects/binutils-2.17/usr.sbin/pc-sysinstall/backend-partmanager/create-part.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions-localize.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/functions.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/backend/parseconfig.sh projects/binutils-2.17/usr.sbin/pc-sysinstall/conf/pc-sysinstall.conf projects/binutils-2.17/usr.sbin/pc-sysinstall/examples/README projects/binutils-2.17/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh projects/binutils-2.17/usr.sbin/sysinstall/devices.c projects/binutils-2.17/usr.sbin/uathload/Makefile 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/UPDATING ============================================================================== --- projects/binutils-2.17/UPDATING Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/UPDATING Fri Feb 18 20:25:30 2011 (r218817) @@ -22,6 +22,16 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110218: + IPsec's HMAC_SHA256-512 support has been fixed to be RFC4868 + compliant, and will now use half of hash for authentication. + This will break interoperability with all stacks (including all + actual FreeBSD versions) who implement + draft-ietf-ipsec-ciph-sha-256-00 (they use 96 bits of hash for + authentication). + The only workaround with such peers is to use another HMAC + algorithm for IPsec ("phase 2") authentication. + 20110207: Remove the uio_yield prototype and symbol. This function has been misnamed since it was introduced and should not be Modified: projects/binutils-2.17/etc/mtree/BSD.include.dist ============================================================================== --- projects/binutils-2.17/etc/mtree/BSD.include.dist Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/etc/mtree/BSD.include.dist Fri Feb 18 20:25:30 2011 (r218817) @@ -106,6 +106,8 @@ .. iicbus .. + io + .. lmc .. mfi Modified: projects/binutils-2.17/etc/mtree/BSD.usr.dist ============================================================================== --- projects/binutils-2.17/etc/mtree/BSD.usr.dist Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/etc/mtree/BSD.usr.dist Fri Feb 18 20:25:30 2011 (r218817) @@ -32,6 +32,8 @@ .. .. libexec + bsdinstall + .. lpr ru .. Modified: projects/binutils-2.17/etc/namedb/named.conf ============================================================================== --- projects/binutils-2.17/etc/namedb/named.conf Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/etc/namedb/named.conf Fri Feb 18 20:25:30 2011 (r218817) @@ -109,14 +109,6 @@ zone "arpa" { }; notify no; }; -zone "in-addr.arpa" { - type slave; - file "/etc/namedb/slave/in-addr.arpa.slave"; - masters { - 192.5.5.241; // F.ROOT-SERVERS.NET. - }; - notify no; -}; */ /* Serving the following zones locally will prevent any queries Modified: projects/binutils-2.17/include/Makefile ============================================================================== --- projects/binutils-2.17/include/Makefile Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/include/Makefile Fri Feb 18 20:25:30 2011 (r218817) @@ -40,7 +40,7 @@ LDIRS= bsm cam geom net net80211 netatal LSUBDIRS= cam/ata cam/scsi \ dev/acpica dev/an dev/bktr dev/firewire dev/hwpmc \ - dev/ic dev/iicbus ${_dev_ieee488} dev/lmc dev/mfi dev/ofw \ + dev/ic dev/iicbus ${_dev_ieee488} dev/io dev/lmc dev/mfi dev/ofw \ dev/pbio ${_dev_powermac_nvram} dev/ppbus dev/smbus \ dev/speaker dev/usb dev/utopia dev/vkbd dev/wi \ fs/devfs fs/fdescfs fs/fifofs fs/msdosfs fs/nfs fs/ntfs fs/nullfs \ Modified: projects/binutils-2.17/share/man/man4/Makefile ============================================================================== --- projects/binutils-2.17/share/man/man4/Makefile Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/share/man/man4/Makefile Fri Feb 18 20:25:30 2011 (r218817) @@ -83,6 +83,7 @@ MAN= aac.4 \ crypto.4 \ cue.4 \ cxgb.4 \ + cxgbe.4 \ cy.4 \ da.4 \ dc.4 \ @@ -221,6 +222,7 @@ MAN= aac.4 \ mmc.4 \ mmcsd.4 \ mn.4 \ + mos.4 \ mouse.4 \ mps.4 \ mpt.4 \ Modified: projects/binutils-2.17/share/man/man4/altq.4 ============================================================================== --- projects/binutils-2.17/share/man/man4/altq.4 Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/share/man/man4/altq.4 Fri Feb 18 20:25:30 2011 (r218817) @@ -127,6 +127,7 @@ They have been applied to the following .Xr bfe 4 , .Xr bge 4 , .Xr cas 4 , +.Xr cxgbe 4 , .Xr dc 4 , .Xr de 4 , .Xr ed 4 , Copied: projects/binutils-2.17/share/man/man4/cxgbe.4 (from r218808, head/share/man/man4/cxgbe.4) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/binutils-2.17/share/man/man4/cxgbe.4 Fri Feb 18 20:25:30 2011 (r218817, copy of r218808, head/share/man/man4/cxgbe.4) @@ -0,0 +1,167 @@ +.\" Copyright (c) 2011, Chelsio Inc +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions are met: +.\" +.\" 1. Redistributions of source code must retain the above copyright notice, +.\" this list of conditions and the following disclaimer. +.\" +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" 3. Neither the name of the Chelsio Inc nor the names of its +.\" contributors may be used to endorse or promote products derived from +.\" this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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. +.\" +.\" * Other names and brands may be claimed as the property of others. +.\" +.\" $FreeBSD$ +.\" +.Dd February 14, 2011 +.Dt CXGBE 4 +.Os +.Sh NAME +.Nm cxgbe +.Nd "Chelsio T4 10Gb and 1Gb Ethernet adapter driver" +.Sh SYNOPSIS +To compile this driver into the kernel, +place the following lines in your +kernel configuration file: +.Bd -ragged -offset indent +.Cd "device cxgbe" +.Ed +.Pp +To load the driver as a +module at boot time, place the following line in +.Xr loader.conf 5 : +.Bd -literal -offset indent +if_cxgbe_load="YES" +.Ed +.Sh DESCRIPTION +The +.Nm +driver provides support for PCI Express Ethernet adapters based on +the Chelsio Terminator 4 (T4) ASIC. +The driver supprts Jumbo Frames, Transmit/Receive checksum offload, +TCP segmentation offload (TSO), Large Receive Offload (LRO), VLAN +tag insertion/extraction, VLAN checksum offload, VLAN TSO, and +Receive Side Steering (RSS). + +For further hardware information and questions related to hardware +requirements, see +.Pa http://www.chelsio.com/ . +.Pp +For more information on configuring this device, see +.Xr ifconfig 8 . +.Sh HARDWARE +The +.Nm +driver supports 10Gb and 1Gb Ethernet adapters based on the T4 ASIC: +.Pp +.Bl -bullet -compact +.It +Chelsio T420-CR +.It +Chelsio T422-CR +.It +Chelsio T440-CR +.It +Chelsio T420-BCH +.It +Chelsio T440-BCH +.It +Chelsio T440-CH +.It +Chelsio T420-SO +.It +Chelsio T420-CX +.It +Chelsio T420-BT +.It +Chelsio T404-BT +.El +.Sh LOADER TUNABLES +Tunables can be set at the +.Xr loader 8 +prompt before booting the kernel or stored in +.Xr loader.conf 5 . +.Bl -tag -width indent +.It Va hw.cxgbe.max_ntxq_10G_port +The maximum number of tx queues to use for a 10Gb port. +The default value is 8. +.It Va hw.cxgbe.max_nrxq_10G_port +The maximum number of rx queues to use for a 10Gb port. +The default value is 8. +.It Va hw.cxgbe.max_ntxq_1G_port +The maximum number of tx queues to use for a 1Gb port. +The default value is 2. +.It Va hw.cxgbe.max_nrxq_1G_port +The maximum number of rx queues to use for a 1Gb port. +The default value is 2. +.It Va hw.cxgbe.holdoff_timer_idx_10G +.It Va hw.cxgbe.holdoff_timer_idx_1G +The timer index value to use to delay interrupts. +The holdoff timer list has the values 1, 5, 10, 50, 100, and 200 +by default (all values are in microseconds) and the index selects a +value from this list. +The default value is 1 for both 10Gb and 1Gb ports, which means the +timer value is 5us. +.It Va hw.cxgbe.holdoff_pktc_idx_10G +.It Va hw.cxgbe.holdoff_pktc_idx_1G +The packet-count index value to use to delay interrupts. +The packet-count list has the values 1, 8, 16, and 32 by default +and the index selects a value from this list. +The default value is 2 for both 10Gb and 1Gb ports, which means 16 +packets (or the holdoff timer going off) before an interrupt is +generated. +.It Va hw.cxgbe.qsize_txq +The size, in number of entries, of the descriptor ring used for a tx +queue. +A buf_ring of the same size is also allocated for additional +software queuing. See +.Xr ifnet 9 . +The default value is 1024. +.It Va hw.cxgbe.qsize_rxq +The size, in number of entries, of the descriptor ring used for an +rx queue. +The default value is 1024. +.Sh SUPPORT +For general information and support, +go to the Chelsio support website at: +.Pa http://www.chelsio.com/ . +.Pp +If an issue is identified with this driver with a supported adapter, +email all the specific information related to the issue to +.Aq support@chelsio.com . +.Sh SEE ALSO +.Xr altq 4 , +.Xr arp 4 , +.Xr cxgb 4 , +.Xr netintro 4 , +.Xr ng_ether 4 , +.Xr ifconfig 8 +.Sh HISTORY +The +.Nm +device driver first appeared in +.Fx 9.0 +.Sh AUTHORS +.An -nosplit +The +.Nm +driver was written by +.An Navdeep Parhar Aq np@FreeBSD.org . Modified: projects/binutils-2.17/share/man/man4/mos.4 ============================================================================== --- projects/binutils-2.17/share/man/man4/mos.4 Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/share/man/man4/mos.4 Fri Feb 18 20:25:30 2011 (r218817) @@ -28,6 +28,7 @@ kernel configuration file: .Bd -ragged -offset indent .Cd "device uhci" .Cd "device ohci" +.Cd "device ehci" .Cd "device usb" .Cd "device miibus" .Cd "device mos" @@ -72,6 +73,7 @@ driver include: .Bl -bullet -compact .It Sitecom LN030 +.El .Sh SEE ALSO .Xr altq 4 , .Xr arp 4 , Modified: projects/binutils-2.17/share/man/man4/vlan.4 ============================================================================== --- projects/binutils-2.17/share/man/man4/vlan.4 Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/share/man/man4/vlan.4 Fri Feb 18 20:25:30 2011 (r218817) @@ -128,6 +128,7 @@ in the hardware is limited to the follow .Xr bce 4 , .Xr bge 4 , .Xr cxgb 4 , +.Xr cxgbe 4 , .Xr em 4 , .Xr igb 4 , .Xr ixgb 4 , Modified: projects/binutils-2.17/sys/amd64/include/pmap.h ============================================================================== --- projects/binutils-2.17/sys/amd64/include/pmap.h Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/amd64/include/pmap.h Fri Feb 18 20:25:30 2011 (r218817) @@ -251,8 +251,6 @@ struct pmap { pml4_entry_t *pm_pml4; /* KVA of level 4 page table */ TAILQ_HEAD(,pv_chunk) pm_pvchunk; /* list of mappings in pmap */ cpumask_t pm_active; /* active on cpus */ - uint32_t pm_gen_count; /* generation count (pmap lock dropped) */ - u_int pm_retries; /* spare u_int here due to padding */ struct pmap_statistics pm_stats; /* pmap statistics */ vm_page_t pm_root; /* spare page table pages */ Modified: projects/binutils-2.17/sys/arm/arm/elf_machdep.c ============================================================================== --- projects/binutils-2.17/sys/arm/arm/elf_machdep.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/arm/arm/elf_machdep.c Fri Feb 18 20:25:30 2011 (r218817) @@ -169,9 +169,7 @@ elf_reloc_internal(linker_file_t lf, Elf addr = lookup(lf, symidx, 1); if (addr == 0) return -1; - if (*where != addr) - *where = addr; - + *where += addr; break; case R_ARM_COPY: /* none */ Modified: projects/binutils-2.17/sys/arm/include/pmap.h ============================================================================== --- projects/binutils-2.17/sys/arm/include/pmap.h Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/arm/include/pmap.h Fri Feb 18 20:25:30 2011 (r218817) @@ -134,8 +134,6 @@ struct pmap { struct l1_ttable *pm_l1; struct l2_dtable *pm_l2[L2_SIZE]; pd_entry_t *pm_pdir; /* KVA of page directory */ - uint32_t pm_gen_count; /* generation count (pmap lock dropped) */ - u_int pm_retries; cpumask_t pm_active; /* active on cpus */ struct pmap_statistics pm_stats; /* pmap statictics */ TAILQ_HEAD(,pv_entry) pm_pvlist; /* list of mappings in pmap */ Modified: projects/binutils-2.17/sys/boot/forth/loader.conf ============================================================================== --- projects/binutils-2.17/sys/boot/forth/loader.conf Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/boot/forth/loader.conf Fri Feb 18 20:25:30 2011 (r218817) @@ -252,6 +252,7 @@ pf_load="NO" # packet filter ### Networking drivers ##################################### ############################################################## +bridgestp_load="NO" # if_bridge(4) support miibus_load="NO" # miibus support, needed for some drivers if_ae_load="NO" # Attansic/Atheros L2 FastEthernet if_age_load="NO" # Attansic/Atheros L1 Gigabit Ethernet @@ -264,8 +265,10 @@ if_axe_load="NO" # ASIX Electronics AX8 if_bce_load="NO" # Broadcom NetXtreme II Gigabit Ethernet if_bfe_load="NO" # Broadcom BCM4401 if_bge_load="NO" # Broadcom BCM570x PCI Gigabit Ethernet +if_bridge_load="NO" # if_bridge(4) devices if_bwi_load="NO" # Broadcom BCM53xx IEEE 802.11b/g wireness NICs if_bwn_load="NO" # Broadcom BCM43xx IEEE 802.11 wireless NICs +if_carp_load="NO" # carp(4) devices if_cas_load="NO" # Sun Cassini/Cassini+ and NS DP83065 Saturn if_cm_load="NO" # SMC (90c26, 90c56, 90c66) if_cs_load="NO" # Crystal Semiconductor CS8920 @@ -296,6 +299,7 @@ if_iwn_load="NO" # Intel Wireless WiFi if_ixgb_load="NO" # Intel PRO/10Gb Ethernet if_ixgbe_load="NO" # Intel PRO/10Gb Ethernet PCI Express if_jme_load="NO" # JMicron JMC250 Gigabit/JMC260 Fast Ethernet +if_lagg_load="NO" # lagg(4) devices if_le_load="NO" # AMD Am7900 LANCE and Am79C9xx PCnet if_lge_load="NO" # Level 1 LXT1001 NetCellerator PCI Gigabit # Ethernet Modified: projects/binutils-2.17/sys/conf/NOTES ============================================================================== --- projects/binutils-2.17/sys/conf/NOTES Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/conf/NOTES Fri Feb 18 20:25:30 2011 (r218817) @@ -1902,6 +1902,8 @@ device xmphy # XaQti XMAC II # cas: Sun Cassini/Cassini+ and National Semiconductor DP83065 Saturn # cm: Arcnet SMC COM90c26 / SMC COM90c56 # (and SMC COM90c66 in '56 compatibility mode) adapters. +# cxgbe: Support for PCI express 10Gb/1Gb adapters based on the Chelsio T4 +# (Terminator 4) ASIC. # dc: Support for PCI fast ethernet adapters based on the DEC/Intel 21143 # and various workalikes including: # the ADMtek AL981 Comet and AN985 Centaur, the ASIX Electronics @@ -2073,6 +2075,7 @@ device wb # Winbond W89C840F device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'') # PCI Ethernet NICs. +device cxgbe # Chelsio T4 10GbE PCIe adapter device de # DEC/Intel DC21x4x (``Tulip'') device em # Intel Pro/1000 Gigabit Ethernet device igb # Intel Pro/1000 PCIE Gigabit Ethernet Modified: projects/binutils-2.17/sys/conf/files ============================================================================== --- projects/binutils-2.17/sys/conf/files Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/conf/files Fri Feb 18 20:25:30 2011 (r218817) @@ -853,6 +853,12 @@ dev/cxgb/sys/uipc_mvec.c optional cxgb p compile-with "${NORMAL_C} -I$S/dev/cxgb" dev/cxgb/cxgb_t3fw.c optional cxgb cxgb_t3fw \ compile-with "${NORMAL_C} -I$S/dev/cxgb" +dev/cxgbe/t4_main.c optional cxgbe pci \ + compile-with "${NORMAL_C} -I$S/dev/cxgbe" +dev/cxgbe/t4_sge.c optional cxgbe pci \ + compile-with "${NORMAL_C} -I$S/dev/cxgbe" +dev/cxgbe/common/t4_hw.c optional cxgbe pci \ + compile-with "${NORMAL_C} -I$S/dev/cxgbe" dev/cy/cy.c optional cy dev/cy/cy_isa.c optional cy isa dev/cy/cy_pci.c optional cy pci @@ -1815,10 +1821,11 @@ dev/usb/net/if_cdce.c optional cdce dev/usb/net/if_cue.c optional cue dev/usb/net/if_ipheth.c optional ipheth dev/usb/net/if_kue.c optional kue +dev/usb/net/if_mos.c optional mos dev/usb/net/if_rue.c optional rue dev/usb/net/if_udav.c optional udav -dev/usb/net/usb_ethernet.c optional aue | axe | cdce | cue | kue | rue | \ - udav +dev/usb/net/usb_ethernet.c optional aue | axe | cdce | cue | kue | mos | \ + rue | udav dev/usb/net/uhso.c optional uhso # # USB WLAN drivers Modified: projects/binutils-2.17/sys/conf/kern.pre.mk ============================================================================== --- projects/binutils-2.17/sys/conf/kern.pre.mk Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/conf/kern.pre.mk Fri Feb 18 20:25:30 2011 (r218817) @@ -82,8 +82,8 @@ INCLUDES+= -I$S/dev/twa # ... and XFS INCLUDES+= -I$S/gnu/fs/xfs/FreeBSD -I$S/gnu/fs/xfs/FreeBSD/support -I$S/gnu/fs/xfs -# ... and the same for cxgb -INCLUDES+= -I$S/dev/cxgb +# ... and the same for cxgb and cxgbe +INCLUDES+= -I$S/dev/cxgb -I$S/dev/cxgbe .endif Modified: projects/binutils-2.17/sys/dev/ath/ath_hal/ah_internal.h ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_hal/ah_internal.h Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_hal/ah_internal.h Fri Feb 18 20:25:30 2011 (r218817) @@ -408,14 +408,15 @@ extern HAL_BOOL ath_hal_getTxQProps(stru HAL_TXQ_INFO *qInfo, const HAL_TX_QUEUE_INFO *qi); typedef enum { - HAL_ANI_PRESENT, /* is ANI support present */ - HAL_ANI_NOISE_IMMUNITY_LEVEL, /* set level */ - HAL_ANI_OFDM_WEAK_SIGNAL_DETECTION, /* enable/disable */ - HAL_ANI_CCK_WEAK_SIGNAL_THR, /* enable/disable */ - HAL_ANI_FIRSTEP_LEVEL, /* set level */ - HAL_ANI_SPUR_IMMUNITY_LEVEL, /* set level */ - HAL_ANI_MODE = 6, /* 0 => manual, 1 => auto (XXX do not change) */ - HAL_ANI_PHYERR_RESET, /* reset phy error stats */ + HAL_ANI_PRESENT = 0x1, /* is ANI support present */ + HAL_ANI_NOISE_IMMUNITY_LEVEL = 0x2, /* set level */ + HAL_ANI_OFDM_WEAK_SIGNAL_DETECTION = 0x4, /* enable/disable */ + HAL_ANI_CCK_WEAK_SIGNAL_THR = 0x8, /* enable/disable */ + HAL_ANI_FIRSTEP_LEVEL = 0x10, /* set level */ + HAL_ANI_SPUR_IMMUNITY_LEVEL = 0x20, /* set level */ + HAL_ANI_MODE = 0x40, /* 0 => manual, 1 => auto (XXX do not change) */ + HAL_ANI_PHYERR_RESET =0x80, /* reset phy error stats */ + HAL_ANI_ALL = 0xff } HAL_ANI_CMD; #define HAL_SPUR_VAL_MASK 0x3FFF Modified: projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416.h ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416.h Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416.h Fri Feb 18 20:25:30 2011 (r218817) @@ -87,6 +87,8 @@ struct ath_hal_5416 { uint32_t ah_rx_chainmask; uint32_t ah_tx_chainmask; + HAL_ANI_CMD ah_ani_function; + struct ar5416PerCal ah_cal; /* periodic calibration state */ struct ar5416NfLimits nf_2g; Modified: projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c Fri Feb 18 20:25:30 2011 (r218817) @@ -177,7 +177,7 @@ ar5416AniControl(struct ath_hal *ah, HAL OS_MARK(ah, AH_MARK_ANI_CONTROL, cmd); - switch (cmd) { + switch (cmd & AH5416(ah)->ah_ani_function) { case HAL_ANI_NOISE_IMMUNITY_LEVEL: { u_int level = param; @@ -354,13 +354,15 @@ ar5416AniOfdmErrTrigger(struct ath_hal * aniState = ahp->ah_curani; params = aniState->params; /* First, raise noise immunity level, up to max */ - if (aniState->noiseImmunityLevel+1 < params->maxNoiseImmunityLevel) { + if ((AH5416(ah)->ah_ani_function & HAL_ANI_NOISE_IMMUNITY_LEVEL) && + (aniState->noiseImmunityLevel+1 < params->maxNoiseImmunityLevel)) { ar5416AniControl(ah, HAL_ANI_NOISE_IMMUNITY_LEVEL, aniState->noiseImmunityLevel + 1); return; } /* then, raise spur immunity level, up to max */ - if (aniState->spurImmunityLevel+1 < params->maxSpurImmunityLevel) { + if ((AH5416(ah)->ah_ani_function & HAL_ANI_SPUR_IMMUNITY_LEVEL) && + (aniState->spurImmunityLevel+1 < params->maxSpurImmunityLevel)) { ar5416AniControl(ah, HAL_ANI_SPUR_IMMUNITY_LEVEL, aniState->spurImmunityLevel + 1); return; Modified: projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c Fri Feb 18 20:25:30 2011 (r218817) @@ -58,7 +58,7 @@ ar5416AniSetup(struct ath_hal *ah) .period = 100, }; /* NB: ANI is not enabled yet */ - ar5212AniAttach(ah, &aniparams, &aniparams, AH_FALSE); + ar5416AniAttach(ah, &aniparams, &aniparams, AH_FALSE); } /* @@ -168,6 +168,9 @@ ar5416InitState(struct ath_hal_5416 *ahp */ AH5416(ah)->ah_rx_chainmask = AR5416_DEFAULT_RXCHAINMASK; AH5416(ah)->ah_tx_chainmask = AR5416_DEFAULT_TXCHAINMASK; + + /* Enable all ANI functions to begin with */ + AH5416(ah)->ah_ani_function = HAL_ANI_ALL; } uint32_t Modified: projects/binutils-2.17/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c Fri Feb 18 20:25:30 2011 (r218817) @@ -68,8 +68,34 @@ static void ar9280WriteIni(struct ath_ha static void ar9280AniSetup(struct ath_hal *ah) { - /* NB: disable ANI for reliable RIFS rx */ - ar5416AniAttach(ah, AH_NULL, AH_NULL, AH_FALSE); + /* + * These are the parameters from the AR5416 ANI code; + * they likely need quite a bit of adjustment for the + * AR9280. + */ + static const struct ar5212AniParams aniparams = { + .maxNoiseImmunityLevel = 4, /* levels 0..4 */ + .totalSizeDesired = { -55, -55, -55, -55, -62 }, + .coarseHigh = { -14, -14, -14, -14, -12 }, + .coarseLow = { -64, -64, -64, -64, -70 }, + .firpwr = { -78, -78, -78, -78, -80 }, + .maxSpurImmunityLevel = 2, + .cycPwrThr1 = { 2, 4, 6 }, + .maxFirstepLevel = 2, /* levels 0..2 */ + .firstep = { 0, 4, 8 }, + .ofdmTrigHigh = 500, + .ofdmTrigLow = 200, + .cckTrigHigh = 200, + .cckTrigLow = 100, + .rssiThrHigh = 40, + .rssiThrLow = 7, + .period = 100, + }; + /* NB: disable ANI noise immmunity for reliable RIFS rx */ + AH5416(ah)->ah_ani_function &= ~ HAL_ANI_NOISE_IMMUNITY_LEVEL; + + /* NB: ANI is not enabled yet */ + ar5416AniAttach(ah, &aniparams, &aniparams, AH_FALSE); } /* Modified: projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.c ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.c Fri Feb 18 20:25:30 2011 (r218817) @@ -426,18 +426,19 @@ update_stats(struct ath_softc *sc, struc const int size_bin = size_to_bin(frame_size); const int size = bin_to_size(size_bin); int tt, tries_so_far; + int is_ht40 = (an->an_node.ni_htcap & IEEE80211_HTCAP_CHWIDTH40); if (!IS_RATE_DEFINED(sn, rix0)) return; tt = calc_usecs_unicast_packet(sc, size, rix0, short_tries, - MIN(tries0, tries) - 1); + MIN(tries0, tries) - 1, is_ht40); tries_so_far = tries0; if (tries1 && tries_so_far < tries) { if (!IS_RATE_DEFINED(sn, rix1)) return; tt += calc_usecs_unicast_packet(sc, size, rix1, short_tries, - MIN(tries1 + tries_so_far, tries) - tries_so_far - 1); + MIN(tries1 + tries_so_far, tries) - tries_so_far - 1, is_ht40); tries_so_far += tries1; } @@ -445,7 +446,7 @@ update_stats(struct ath_softc *sc, struc if (!IS_RATE_DEFINED(sn, rix2)) return; tt += calc_usecs_unicast_packet(sc, size, rix2, short_tries, - MIN(tries2 + tries_so_far, tries) - tries_so_far - 1); + MIN(tries2 + tries_so_far, tries) - tries_so_far - 1, is_ht40); tries_so_far += tries2; } @@ -453,7 +454,7 @@ update_stats(struct ath_softc *sc, struc if (!IS_RATE_DEFINED(sn, rix3)) return; tt += calc_usecs_unicast_packet(sc, size, rix3, short_tries, - MIN(tries3 + tries_so_far, tries) - tries_so_far - 1); + MIN(tries3 + tries_so_far, tries) - tries_so_far - 1, is_ht40); } if (sn->stats[size_bin][rix0].total_packets < ssc->smoothing_minpackets) { @@ -765,7 +766,8 @@ ath_rate_ctl_reset(struct ath_softc *sc, if ((mask & 1) == 0) continue; printf(" %d/%d", dot11rate(rt, rix), - calc_usecs_unicast_packet(sc, 1600, rix, 0,0)); + calc_usecs_unicast_packet(sc, 1600, rix, 0,0, + (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40))); } printf("\n"); } @@ -794,7 +796,8 @@ ath_rate_ctl_reset(struct ath_softc *sc, sn->stats[y][rix].last_tx = 0; sn->stats[y][rix].perfect_tx_time = - calc_usecs_unicast_packet(sc, size, rix, 0, 0); + calc_usecs_unicast_packet(sc, size, rix, 0, 0, + (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40)); sn->stats[y][rix].average_tx_time = sn->stats[y][rix].perfect_tx_time; } Modified: projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.h ============================================================================== --- projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.h Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/ath_rate/sample/sample.h Fri Feb 18 20:25:30 2011 (r218817) @@ -115,7 +115,9 @@ struct sample_node { */ static unsigned calc_usecs_unicast_packet(struct ath_softc *sc, int length, - int rix, int short_retries, int long_retries) { + int rix, int short_retries, + int long_retries, int is_ht40) +{ const HAL_RATE_TABLE *rt = sc->sc_currates; struct ifnet *ifp = sc->sc_ifp; struct ieee80211com *ic = ifp->if_l2com; @@ -198,7 +200,7 @@ static unsigned calc_usecs_unicast_packe /* XXX assumes short preamble */ /* XXX assumes HT/20; the node info isn't yet available here */ - ctsduration += ath_hal_pkt_txtime(sc->sc_ah, rt, length, rix, 0, AH_TRUE); + ctsduration += ath_hal_pkt_txtime(sc->sc_ah, rt, length, rix, 0, is_ht40); if (cts) /* SIFS + ACK */ ctsduration += rt->info[cix].spAckDuration; @@ -209,7 +211,7 @@ static unsigned calc_usecs_unicast_packe /* XXX assumes short preamble */ /* XXX assumes HT/20; the node info isn't yet available here */ - tt += (long_retries+1)*ath_hal_pkt_txtime(sc->sc_ah, rt, length, rix, 0, AH_TRUE); + tt += (long_retries+1)*ath_hal_pkt_txtime(sc->sc_ah, rt, length, rix, 0, is_ht40); tt += (long_retries+1)*(t_sifs + rt->info[rix].spAckDuration); for (x = 0; x <= short_retries + long_retries; x++) { Modified: projects/binutils-2.17/sys/dev/ath/if_ath.c ============================================================================== --- projects/binutils-2.17/sys/dev/ath/if_ath.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/if_ath.c Fri Feb 18 20:25:30 2011 (r218817) @@ -635,7 +635,10 @@ ath_attach(u_int16_t devid, struct ath_s | IEEE80211_HTC_AMPDU /* A-MPDU tx/rx */ | IEEE80211_HTC_AMSDU /* A-MSDU tx/rx */ | IEEE80211_HTCAP_MAXAMSDU_3839 /* max A-MSDU length */ + /* At the present time, the hardware doesn't support short-GI in 20mhz mode */ +#if 0 | IEEE80211_HTCAP_SHORTGI20 /* short GI in 20MHz */ +#endif | IEEE80211_HTCAP_SMPS_OFF; /* SM power save off */ ; Modified: projects/binutils-2.17/sys/dev/ath/if_ath_tx_ht.c ============================================================================== --- projects/binutils-2.17/sys/dev/ath/if_ath_tx_ht.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/ath/if_ath_tx_ht.c Fri Feb 18 20:25:30 2011 (r218817) @@ -119,8 +119,13 @@ ath_rateseries_setup(struct ath_softc *s series[i].RateFlags |= HAL_RATESERIES_RTS_CTS; if (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40) series[i].RateFlags |= HAL_RATESERIES_2040; - if (ni->ni_htcap & IEEE80211_HTCAP_SHORTGI20 || - ni->ni_htcap & IEEE80211_HTCAP_SHORTGI40) + + /* + * The hardware only supports short-gi in 40mhz mode - + * if later hardware supports it in 20mhz mode, be sure + * to add the relevant check here. + */ + if (ni->ni_htcap & IEEE80211_HTCAP_SHORTGI40) series[i].RateFlags |= HAL_RATESERIES_HALFGI; /* XXX should this check the short preamble value should be set for legacy rates? -adrian */ Modified: projects/binutils-2.17/sys/dev/dc/if_dc.c ============================================================================== --- projects/binutils-2.17/sys/dev/dc/if_dc.c Fri Feb 18 19:07:16 2011 (r218816) +++ projects/binutils-2.17/sys/dev/dc/if_dc.c Fri Feb 18 20:25:30 2011 (r218817) @@ -287,11 +287,11 @@ static void dc_reset(struct dc_softc *); static int dc_list_rx_init(struct dc_softc *); static int dc_list_tx_init(struct dc_softc *); -static void dc_read_srom(struct dc_softc *, int); -static void dc_parse_21143_srom(struct dc_softc *); -static void dc_decode_leaf_sia(struct dc_softc *, struct dc_eblock_sia *); -static void dc_decode_leaf_mii(struct dc_softc *, struct dc_eblock_mii *); -static void dc_decode_leaf_sym(struct dc_softc *, struct dc_eblock_sym *); +static int dc_read_srom(struct dc_softc *, int); +static int dc_parse_21143_srom(struct dc_softc *); +static int dc_decode_leaf_sia(struct dc_softc *, struct dc_eblock_sia *); +static int dc_decode_leaf_mii(struct dc_softc *, struct dc_eblock_mii *); +static int dc_decode_leaf_sym(struct dc_softc *, struct dc_eblock_sym *); static void dc_apply_fixup(struct dc_softc *, int); static int dc_check_multiport(struct dc_softc *); @@ -944,23 +944,45 @@ static void dc_miibus_statchg(device_t dev) { struct dc_softc *sc; + struct ifnet *ifp; struct mii_data *mii; struct ifmedia *ifm; sc = device_get_softc(dev); - if (DC_IS_ADMTEK(sc)) - return; mii = device_get_softc(sc->dc_miibus); + ifp = sc->dc_ifp; + if (mii == NULL || ifp == NULL || + (ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) + return; + ifm = &mii->mii_media; if (DC_IS_DAVICOM(sc) && IFM_SUBTYPE(ifm->ifm_media) == IFM_HPNA_1) { dc_setcfg(sc, ifm->ifm_media); sc->dc_if_media = ifm->ifm_media; - } else { - dc_setcfg(sc, mii->mii_media_active); - sc->dc_if_media = mii->mii_media_active; + return; + } + + sc->dc_link = 0; + if ((mii->mii_media_status & (IFM_ACTIVE | IFM_AVALID)) == + (IFM_ACTIVE | IFM_AVALID)) { + switch (IFM_SUBTYPE(mii->mii_media_active)) { + case IFM_10_T: + case IFM_100_TX: + sc->dc_link = 1; + break; + default: + break; + } } + if (sc->dc_link == 0) + return; + + sc->dc_if_media = mii->mii_media_active; + if (DC_IS_ADMTEK(sc)) + return; + dc_setcfg(sc, mii->mii_media_active); } /* @@ -1404,8 +1426,6 @@ dc_setcfg(struct dc_softc *sc, int media if (!DC_IS_DAVICOM(sc)) DC_SETBIT(sc, DC_NETCFG, DC_NETCFG_PORTSEL); DC_CLRBIT(sc, DC_10BTCTRL, 0xFFFF); - if (DC_IS_INTEL(sc)) - dc_apply_fixup(sc, IFM_AUTO); } else { if (DC_IS_PNIC(sc)) { DC_PN_GPIO_SETBIT(sc, DC_PN_GPIO_SPEEDSEL); @@ -1415,10 +1435,6 @@ dc_setcfg(struct dc_softc *sc, int media DC_SETBIT(sc, DC_NETCFG, DC_NETCFG_PORTSEL); DC_SETBIT(sc, DC_NETCFG, DC_NETCFG_PCS); DC_SETBIT(sc, DC_NETCFG, DC_NETCFG_SCRAMBLER); - if (DC_IS_INTEL(sc)) - dc_apply_fixup(sc, - (media & IFM_GMASK) == IFM_FDX ? - IFM_100_TX | IFM_FDX : IFM_100_TX); } } @@ -1442,8 +1458,6 @@ dc_setcfg(struct dc_softc *sc, int media if (!DC_IS_DAVICOM(sc)) DC_SETBIT(sc, DC_NETCFG, DC_NETCFG_PORTSEL); DC_CLRBIT(sc, DC_10BTCTRL, 0xFFFF); - if (DC_IS_INTEL(sc)) - dc_apply_fixup(sc, IFM_AUTO); } else { if (DC_IS_PNIC(sc)) { DC_PN_GPIO_CLRBIT(sc, DC_PN_GPIO_SPEEDSEL); @@ -1463,9 +1477,6 @@ dc_setcfg(struct dc_softc *sc, int media DC_SETBIT(sc, DC_SIARESET, DC_SIA_RESET); DC_CLRBIT(sc, DC_10BTCTRL, DC_TCTL_AUTONEGENBL); - dc_apply_fixup(sc, - (media & IFM_GMASK) == IFM_FDX ? - IFM_10_T | IFM_FDX : IFM_10_T); DELAY(20000); } } @@ -1537,7 +1548,7 @@ dc_reset(struct dc_softc *sc) */ if (DC_IS_INTEL(sc)) { DC_SETBIT(sc, DC_SIARESET, DC_SIA_RESET); - CSR_WRITE_4(sc, DC_10BTCTRL, 0); + CSR_WRITE_4(sc, DC_10BTCTRL, 0xFFFFFFFF); CSR_WRITE_4(sc, DC_WATCHDOG, 0); } } @@ -1616,12 +1627,16 @@ dc_apply_fixup(struct dc_softc *sc, int } } -static void +static int dc_decode_leaf_sia(struct dc_softc *sc, struct dc_eblock_sia *l) { struct dc_mediainfo *m; m = malloc(sizeof(struct dc_mediainfo), M_DEVBUF, M_NOWAIT | M_ZERO); + if (m == NULL) { + device_printf(sc->dc_dev, "Could not allocate mediainfo\n"); + return (ENOMEM); + } switch (l->dc_sia_code & ~DC_SIA_CODE_EXT) { case DC_SIA_CODE_10BT: m->dc_media = IFM_10_T; @@ -1658,14 +1673,19 @@ dc_decode_leaf_sia(struct dc_softc *sc, sc->dc_mi = m; sc->dc_pmode = DC_PMODE_SIA; + return (0); } -static void +static int dc_decode_leaf_sym(struct dc_softc *sc, struct dc_eblock_sym *l) { struct dc_mediainfo *m; m = malloc(sizeof(struct dc_mediainfo), M_DEVBUF, M_NOWAIT | M_ZERO); + if (m == NULL) { + device_printf(sc->dc_dev, "Could not allocate mediainfo\n"); + return (ENOMEM); + } if (l->dc_sym_code == DC_SYM_CODE_100BT) m->dc_media = IFM_100_TX; @@ -1679,15 +1699,20 @@ dc_decode_leaf_sym(struct dc_softc *sc, sc->dc_mi = m; sc->dc_pmode = DC_PMODE_SYM; + return (0); } -static void +static int dc_decode_leaf_mii(struct dc_softc *sc, struct dc_eblock_mii *l) { struct dc_mediainfo *m; u_int8_t *p; m = malloc(sizeof(struct dc_mediainfo), M_DEVBUF, M_NOWAIT | M_ZERO); + if (m == NULL) { + device_printf(sc->dc_dev, "Could not allocate mediainfo\n"); + return (ENOMEM); + } /* We abuse IFM_AUTO to represent MII. */ m->dc_media = IFM_AUTO; m->dc_gp_len = l->dc_gpr_len; @@ -1702,24 +1727,30 @@ dc_decode_leaf_mii(struct dc_softc *sc, m->dc_next = sc->dc_mi; sc->dc_mi = m; + return (0); } -static void +static int dc_read_srom(struct dc_softc *sc, int bits) { int size; - size = 2 << bits; + size = DC_ROM_SIZE(bits); sc->dc_srom = malloc(size, M_DEVBUF, M_NOWAIT); + if (sc->dc_srom == NULL) { + device_printf(sc->dc_dev, "Could not allocate SROM buffer\n"); + return (ENOMEM); + } dc_read_eeprom(sc, (caddr_t)sc->dc_srom, 0, (size / 2), 0); + return (0); } -static void +static int dc_parse_21143_srom(struct dc_softc *sc) { struct dc_leaf_hdr *lhdr; struct dc_eblock_hdr *hdr; - int have_mii, i, loff; + int error, have_mii, i, loff; char *ptr; have_mii = 0; @@ -1746,20 +1777,21 @@ dc_parse_21143_srom(struct dc_softc *sc) */ ptr = (char *)lhdr; ptr += sizeof(struct dc_leaf_hdr) - 1; + error = 0; for (i = 0; i < lhdr->dc_mcnt; i++) { hdr = (struct dc_eblock_hdr *)ptr; switch (hdr->dc_type) { case DC_EBLOCK_MII: - dc_decode_leaf_mii(sc, (struct dc_eblock_mii *)hdr); + error = dc_decode_leaf_mii(sc, (struct dc_eblock_mii *)hdr); break; case DC_EBLOCK_SIA: if (! have_mii) - dc_decode_leaf_sia(sc, + error = dc_decode_leaf_sia(sc, (struct dc_eblock_sia *)hdr); break; case DC_EBLOCK_SYM: if (! have_mii) - dc_decode_leaf_sym(sc, + error = dc_decode_leaf_sym(sc, (struct dc_eblock_sym *)hdr); break; default: @@ -1769,6 +1801,7 @@ dc_parse_21143_srom(struct dc_softc *sc) ptr += (hdr->dc_len & 0x7F); ptr++; } + return (error); } static void @@ -1793,6 +1826,7 @@ dc_attach(device_t dev) u_int32_t command; struct dc_softc *sc; struct ifnet *ifp; + struct dc_mediainfo *m; u_int32_t reg, revision; int error, i, mac_offset, phy, rid, tmp; u_int8_t *mac; @@ -1835,6 +1869,7 @@ dc_attach(device_t dev) sc->dc_info = dc_devtype(dev); revision = pci_get_revid(dev); + error = 0; /* Get the eeprom width, but PNIC and XIRCOM have diff eeprom */ if (sc->dc_info->dc_devid != DC_DEVID(DC_VENDORID_LO, DC_DEVICEID_82C168) && @@ -1848,7 +1883,9 @@ dc_attach(device_t dev) sc->dc_flags |= DC_TX_POLL | DC_TX_USE_TX_INTR; sc->dc_flags |= DC_REDUCED_MII_POLL; /* Save EEPROM contents so we can parse them later. */ - dc_read_srom(sc, sc->dc_romwidth); + error = dc_read_srom(sc, sc->dc_romwidth); + if (error != 0) + goto fail; break; case DC_DEVID(DC_VENDORID_DAVICOM, DC_DEVICEID_DM9009): case DC_DEVID(DC_VENDORID_DAVICOM, DC_DEVICEID_DM9100): @@ -1867,7 +1904,9 @@ dc_attach(device_t dev) sc->dc_flags |= DC_TX_USE_TX_INTR; sc->dc_flags |= DC_TX_ADMTEK_WAR; sc->dc_pmode = DC_PMODE_MII; - dc_read_srom(sc, sc->dc_romwidth); + error = dc_read_srom(sc, sc->dc_romwidth); + if (error != 0) + goto fail; break; case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AN983): case DC_DEVID(DC_VENDORID_ADMTEK, DC_DEVICEID_AN985): @@ -1934,6 +1973,12 @@ dc_attach(device_t dev) sc->dc_flags |= DC_TX_STORENFWD | DC_TX_INTR_ALWAYS; sc->dc_flags |= DC_PNIC_RX_BUG_WAR; sc->dc_pnic_rx_buf = malloc(DC_RXLEN * 5, M_DEVBUF, M_NOWAIT); + if (sc->dc_pnic_rx_buf == NULL) { + device_printf(sc->dc_dev, + "Could not allocate PNIC RX buffer\n"); + error = ENOMEM; + goto fail; + } if (revision < DC_REVISION_82C169) sc->dc_pmode = DC_PMODE_SYM; break; @@ -1959,7 +2004,9 @@ dc_attach(device_t dev) sc->dc_flags |= DC_TX_INTR_ALWAYS; sc->dc_flags |= DC_REDUCED_MII_POLL; sc->dc_pmode = DC_PMODE_MII; - dc_read_srom(sc, sc->dc_romwidth); + error = dc_read_srom(sc, sc->dc_romwidth); + if (error != 0) + goto fail; break; default: device_printf(dev, "unknown device: %x\n", @@ -1990,9 +2037,11 @@ dc_attach(device_t dev) * The tricky ones are the Macronix/PNIC II and the * Intel 21143. */ - if (DC_IS_INTEL(sc)) - dc_parse_21143_srom(sc); - else if (DC_IS_MACRONIX(sc) || DC_IS_PNICII(sc)) { + if (DC_IS_INTEL(sc)) { + error = dc_parse_21143_srom(sc); + if (error != 0) + goto fail; + } else if (DC_IS_MACRONIX(sc) || DC_IS_PNICII(sc)) { if (sc->dc_type == DC_TYPE_98713) sc->dc_pmode = DC_PMODE_MII; else @@ -2071,8 +2120,24 @@ dc_attach(device_t dev) if ((sc->dc_eaddr[0] == 0 && (sc->dc_eaddr[1] & ~0xffff) == 0) || (sc->dc_eaddr[0] == 0xffffffff && (sc->dc_eaddr[1] & 0xffff) == 0xffff)) { - if (dc_check_multiport(sc) == 0) + error = dc_check_multiport(sc); *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 21:39:11 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 74CA31065674; Fri, 18 Feb 2011 21:39:11 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5E6738FC18; Fri, 18 Feb 2011 21:39:11 +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 p1ILdBOQ073333; Fri, 18 Feb 2011 21:39:11 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1ILdBsf073313; Fri, 18 Feb 2011 21:39:11 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201102182139.p1ILdBsf073313@svn.freebsd.org> From: Marcel Moolenaar Date: Fri, 18 Feb 2011 21:39:11 +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: r218823 - in projects/altix: lib/libstand sys/amd64/acpica sys/amd64/amd64 sys/amd64/conf sys/amd64/ia32 sys/amd64/include sys/amd64/linux32 sys/arm/arm sys/arm/at91 sys/arm/conf sys/ar... 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, 18 Feb 2011 21:39:11 -0000 Author: marcel Date: Fri Feb 18 21:39:09 2011 New Revision: 218823 URL: http://svn.freebsd.org/changeset/base/218823 Log: Merge svn+ssh://svn.freebsd.org/base/head@218816 Added: projects/altix/sys/boot/pc98/pc98boot/ - copied from r218816, head/sys/boot/pc98/pc98boot/ projects/altix/sys/boot/powerpc/ps3/ - copied from r218816, head/sys/boot/powerpc/ps3/ projects/altix/sys/compat/linux/linux_fork.c - copied unchanged from r218816, head/sys/compat/linux/linux_fork.c projects/altix/sys/conf/ldscript.mips.octeon1 - copied unchanged from r218816, head/sys/conf/ldscript.mips.octeon1 projects/altix/sys/contrib/dev/acpica/compiler/aslbtypes.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/compiler/aslbtypes.c projects/altix/sys/contrib/dev/acpica/compiler/asluuid.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/compiler/asluuid.c projects/altix/sys/contrib/dev/acpica/compiler/aslwalks.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/compiler/aslwalks.c projects/altix/sys/contrib/dev/acpica/compiler/dtexpress.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/compiler/dtexpress.c projects/altix/sys/contrib/dev/acpica/debugger/dbmethod.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/debugger/dbmethod.c projects/altix/sys/contrib/dev/acpica/debugger/dbnames.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/debugger/dbnames.c projects/altix/sys/contrib/dev/acpica/dispatcher/dsargs.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/dispatcher/dsargs.c projects/altix/sys/contrib/dev/acpica/dispatcher/dscontrol.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/dispatcher/dscontrol.c projects/altix/sys/contrib/dev/acpica/dispatcher/dswload2.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/dispatcher/dswload2.c projects/altix/sys/contrib/dev/acpica/events/evxfgpe.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/events/evxfgpe.c projects/altix/sys/contrib/dev/acpica/utilities/utdecode.c - copied unchanged from r218816, head/sys/contrib/dev/acpica/utilities/utdecode.c projects/altix/sys/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu - copied unchanged from r218816, head/sys/contrib/dev/wpi/iwlwifi-3945-15.32.2.9.fw.uu projects/altix/sys/dev/ath/ath_hal/ah_diagcodes.h - copied unchanged from r218816, head/sys/dev/ath/ath_hal/ah_diagcodes.h projects/altix/sys/dev/ath/ath_hal/ar9001/ - copied from r218816, head/sys/dev/ath/ath_hal/ar9001/ projects/altix/sys/dev/ath/ath_hal/ar9002/ - copied from r218816, head/sys/dev/ath/ath_hal/ar9002/ projects/altix/sys/dev/ath/ath_hal/ar9003/ - copied from r218816, head/sys/dev/ath/ath_hal/ar9003/ projects/altix/sys/dev/ath/ath_rate/sample/tx_schedules.h - copied unchanged from r218816, head/sys/dev/ath/ath_rate/sample/tx_schedules.h projects/altix/sys/dev/ath/if_ath_debug.c - copied unchanged from r218816, head/sys/dev/ath/if_ath_debug.c projects/altix/sys/dev/ath/if_ath_debug.h - copied unchanged from r218816, head/sys/dev/ath/if_ath_debug.h projects/altix/sys/dev/ath/if_ath_misc.h - copied unchanged from r218816, head/sys/dev/ath/if_ath_misc.h projects/altix/sys/dev/ath/if_ath_tx.c - copied unchanged from r218816, head/sys/dev/ath/if_ath_tx.c projects/altix/sys/dev/ath/if_ath_tx.h - copied unchanged from r218816, head/sys/dev/ath/if_ath_tx.h projects/altix/sys/dev/ath/if_ath_tx_ht.c - copied unchanged from r218816, head/sys/dev/ath/if_ath_tx_ht.c projects/altix/sys/dev/ath/if_ath_tx_ht.h - copied unchanged from r218816, head/sys/dev/ath/if_ath_tx_ht.h projects/altix/sys/dev/cxgbe/ - copied from r218816, head/sys/dev/cxgbe/ projects/altix/sys/dev/mii/rdcphy.c - copied unchanged from r218816, head/sys/dev/mii/rdcphy.c projects/altix/sys/dev/mii/rdcphyreg.h - copied unchanged from r218816, head/sys/dev/mii/rdcphyreg.h projects/altix/sys/dev/usb/net/if_mos.c - copied unchanged from r218816, head/sys/dev/usb/net/if_mos.c projects/altix/sys/dev/usb/net/if_mosreg.h - copied unchanged from r218816, head/sys/dev/usb/net/if_mosreg.h projects/altix/sys/dev/vte/ - copied from r218816, head/sys/dev/vte/ projects/altix/sys/kern/kern_hhook.c - copied unchanged from r218816, head/sys/kern/kern_hhook.c projects/altix/sys/kern/kern_khelp.c - copied unchanged from r218816, head/sys/kern/kern_khelp.c projects/altix/sys/mips/cavium/if_octm.c - copied unchanged from r218816, head/sys/mips/cavium/if_octm.c projects/altix/sys/mips/mips/uma_machdep.c - copied unchanged from r218816, head/sys/mips/mips/uma_machdep.c projects/altix/sys/mips/rmi/dev/iic/ - copied from r218816, head/sys/mips/rmi/dev/iic/ projects/altix/sys/modules/cc/cc_chd/ - copied from r218816, head/sys/modules/cc/cc_chd/ projects/altix/sys/modules/cc/cc_hd/ - copied from r218816, head/sys/modules/cc/cc_hd/ projects/altix/sys/modules/cc/cc_vegas/ - copied from r218816, head/sys/modules/cc/cc_vegas/ projects/altix/sys/modules/cxgbe/ - copied from r218816, head/sys/modules/cxgbe/ projects/altix/sys/modules/khelp/ - copied from r218816, head/sys/modules/khelp/ projects/altix/sys/modules/usb/mos/ - copied from r218816, head/sys/modules/usb/mos/ projects/altix/sys/modules/vte/ - copied from r218816, head/sys/modules/vte/ projects/altix/sys/netinet/cc/cc_chd.c - copied unchanged from r218816, head/sys/netinet/cc/cc_chd.c projects/altix/sys/netinet/cc/cc_hd.c - copied unchanged from r218816, head/sys/netinet/cc/cc_hd.c projects/altix/sys/netinet/cc/cc_vegas.c - copied unchanged from r218816, head/sys/netinet/cc/cc_vegas.c projects/altix/sys/netinet/khelp/ - copied from r218816, head/sys/netinet/khelp/ projects/altix/sys/netinet/sctp_ss_functions.c - copied unchanged from r218816, head/sys/netinet/sctp_ss_functions.c projects/altix/sys/powerpc/ps3/ - copied from r218816, head/sys/powerpc/ps3/ projects/altix/sys/sys/hhook.h - copied unchanged from r218816, head/sys/sys/hhook.h projects/altix/sys/sys/khelp.h - copied unchanged from r218816, head/sys/sys/khelp.h projects/altix/sys/sys/module_khelp.h - copied unchanged from r218816, head/sys/sys/module_khelp.h projects/altix/sys/x86/include/_inttypes.h - copied unchanged from r218816, head/sys/x86/include/_inttypes.h projects/altix/sys/x86/include/bus.h - copied unchanged from r218816, head/sys/x86/include/bus.h projects/altix/sys/x86/x86/busdma_machdep.c - copied, changed from r218816, head/sys/x86/x86/busdma_machdep.c projects/altix/sys/x86/x86/tsc.c - copied unchanged from r218816, head/sys/x86/x86/tsc.c Deleted: projects/altix/sys/amd64/amd64/busdma_machdep.c projects/altix/sys/amd64/amd64/tsc.c projects/altix/sys/arm/conf/SKYEYE projects/altix/sys/conf/ldscript.mips.octeon1.32 projects/altix/sys/conf/ldscript.mips.octeon1.64 projects/altix/sys/conf/ldscript.mips.octeon1.n32 projects/altix/sys/contrib/dev/wpi/iwlwifi-3945-2.14.4.fw.uu projects/altix/sys/dev/ath/ath_hal/ar5416/ar9160.ini projects/altix/sys/dev/ath/ath_hal/ar5416/ar9160_attach.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar9280.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar9280.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar9280_attach.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar9280v1.ini projects/altix/sys/dev/ath/ath_hal/ar5416/ar9280v2.ini projects/altix/sys/dev/ath/ath_hal/ar5416/ar9285.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar9285.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar9285.ini projects/altix/sys/dev/ath/ath_hal/ar5416/ar9285_attach.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar9285_reset.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar9285v2.ini projects/altix/sys/dev/cxgb/ulp/tom/cxgb_vm.c projects/altix/sys/dev/cxgb/ulp/tom/cxgb_vm.h projects/altix/sys/i386/i386/busdma_machdep.c projects/altix/sys/i386/i386/tsc.c projects/altix/sys/mips/conf/OCTEON1-32 projects/altix/sys/netinet/sctp_cc_functions.h Modified: projects/altix/lib/libstand/Makefile projects/altix/sys/amd64/acpica/acpi_machdep.c projects/altix/sys/amd64/amd64/amd64_mem.c projects/altix/sys/amd64/amd64/apic_vector.S projects/altix/sys/amd64/amd64/cpu_switch.S projects/altix/sys/amd64/amd64/elf_machdep.c projects/altix/sys/amd64/amd64/exception.S projects/altix/sys/amd64/amd64/fpu.c projects/altix/sys/amd64/amd64/genassym.c projects/altix/sys/amd64/amd64/identcpu.c projects/altix/sys/amd64/amd64/legacy.c projects/altix/sys/amd64/amd64/machdep.c projects/altix/sys/amd64/amd64/mem.c projects/altix/sys/amd64/amd64/mp_machdep.c projects/altix/sys/amd64/amd64/sys_machdep.c projects/altix/sys/amd64/amd64/trap.c projects/altix/sys/amd64/amd64/uio_machdep.c projects/altix/sys/amd64/amd64/vm_machdep.c projects/altix/sys/amd64/conf/XENHVM projects/altix/sys/amd64/ia32/ia32_reg.c projects/altix/sys/amd64/ia32/ia32_signal.c projects/altix/sys/amd64/include/_inttypes.h projects/altix/sys/amd64/include/_limits.h projects/altix/sys/amd64/include/_stdint.h projects/altix/sys/amd64/include/atomic.h projects/altix/sys/amd64/include/bus.h projects/altix/sys/amd64/include/cpu.h projects/altix/sys/amd64/include/elf.h projects/altix/sys/amd64/include/memdev.h projects/altix/sys/amd64/include/pcb.h projects/altix/sys/amd64/include/pmap.h projects/altix/sys/amd64/include/reg.h projects/altix/sys/amd64/include/vmparam.h projects/altix/sys/amd64/linux32/linux.h projects/altix/sys/amd64/linux32/linux32_machdep.c projects/altix/sys/amd64/linux32/linux32_proto.h projects/altix/sys/amd64/linux32/linux32_syscall.h projects/altix/sys/amd64/linux32/linux32_sysent.c projects/altix/sys/amd64/linux32/linux32_sysvec.c projects/altix/sys/amd64/linux32/syscalls.master projects/altix/sys/arm/arm/elf_machdep.c projects/altix/sys/arm/arm/locore.S projects/altix/sys/arm/arm/mem.c projects/altix/sys/arm/arm/sys_machdep.c projects/altix/sys/arm/arm/uio_machdep.c projects/altix/sys/arm/arm/vm_machdep.c projects/altix/sys/arm/at91/at91_machdep.c projects/altix/sys/arm/at91/at91_pmc.c projects/altix/sys/arm/at91/at91_st.c projects/altix/sys/arm/at91/at91rm9200.c projects/altix/sys/arm/at91/if_ate.c projects/altix/sys/arm/at91/if_macb.c projects/altix/sys/arm/at91/uart_bus_at91usart.c projects/altix/sys/arm/at91/uart_cpu_at91rm9200usart.c projects/altix/sys/arm/at91/uart_dev_at91usart.c projects/altix/sys/arm/econa/econa_machdep.c projects/altix/sys/arm/econa/ehci_ebus.c projects/altix/sys/arm/econa/ohci_ec.c projects/altix/sys/arm/include/_limits.h projects/altix/sys/arm/include/_stdint.h projects/altix/sys/arm/include/_types.h projects/altix/sys/arm/include/elf.h projects/altix/sys/arm/include/fdt.h projects/altix/sys/arm/include/memdev.h projects/altix/sys/arm/include/metadata.h projects/altix/sys/arm/include/pmap.h projects/altix/sys/arm/include/proc.h projects/altix/sys/arm/include/vmparam.h projects/altix/sys/arm/mv/gpio.c projects/altix/sys/arm/mv/ic.c projects/altix/sys/arm/mv/mv_machdep.c projects/altix/sys/arm/mv/mv_pci.c projects/altix/sys/arm/mv/timer.c projects/altix/sys/arm/s3c2xx0/s3c24x0_clk.c projects/altix/sys/arm/s3c2xx0/s3c24x0_machdep.c projects/altix/sys/arm/s3c2xx0/std.ln2410sbc projects/altix/sys/arm/sa11x0/assabet_machdep.c projects/altix/sys/arm/xscale/i80321/ep80219_machdep.c projects/altix/sys/arm/xscale/i80321/iq31244_machdep.c projects/altix/sys/arm/xscale/i8134x/crb_machdep.c projects/altix/sys/arm/xscale/ixp425/avila_gpio.c projects/altix/sys/arm/xscale/ixp425/avila_machdep.c projects/altix/sys/arm/xscale/pxa/pxa_machdep.c projects/altix/sys/boot/arm/at91/boot0/linker.cfg projects/altix/sys/boot/arm/at91/linker.cfg projects/altix/sys/boot/common/loader.8 projects/altix/sys/boot/common/ufsread.c projects/altix/sys/boot/efi/libefi/efinet.c projects/altix/sys/boot/efi/libefi/efipart.c projects/altix/sys/boot/fdt/dts/db78100.dts projects/altix/sys/boot/ficl/Makefile projects/altix/sys/boot/forth/beastie.4th projects/altix/sys/boot/forth/loader.conf projects/altix/sys/boot/i386/Makefile.inc projects/altix/sys/boot/i386/boot2/Makefile projects/altix/sys/boot/i386/boot2/boot2.c projects/altix/sys/boot/i386/gptboot/Makefile projects/altix/sys/boot/i386/gptzfsboot/Makefile projects/altix/sys/boot/i386/zfsboot/Makefile projects/altix/sys/boot/pc98/Makefile projects/altix/sys/boot/pc98/Makefile.inc projects/altix/sys/boot/pc98/boot2/Makefile projects/altix/sys/boot/pc98/boot2/boot2.c projects/altix/sys/boot/powerpc/Makefile projects/altix/sys/boot/powerpc/ofw/ldscript.powerpc projects/altix/sys/boot/zfs/Makefile projects/altix/sys/cam/ata/ata_xpt.c projects/altix/sys/cam/cam_periph.c projects/altix/sys/cam/cam_xpt.c projects/altix/sys/cam/scsi/scsi_da.c projects/altix/sys/cam/scsi/scsi_pass.c projects/altix/sys/cddl/compat/opensolaris/kern/opensolaris_atomic.c projects/altix/sys/cddl/compat/opensolaris/kern/opensolaris_kobj.c projects/altix/sys/cddl/compat/opensolaris/kern/opensolaris_kstat.c projects/altix/sys/cddl/compat/opensolaris/sys/atomic.h projects/altix/sys/cddl/compat/opensolaris/sys/cyclic_impl.h projects/altix/sys/cddl/compat/opensolaris/sys/types.h projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio.h projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/txg.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/altix/sys/cddl/dev/cyclic/cyclic.c projects/altix/sys/cddl/dev/cyclic/i386/cyclic_machdep.c projects/altix/sys/cddl/dev/dtrace/amd64/dtrace_subr.c projects/altix/sys/cddl/dev/dtrace/i386/dtrace_subr.c projects/altix/sys/compat/freebsd32/freebsd32.h projects/altix/sys/compat/freebsd32/freebsd32_misc.c projects/altix/sys/compat/ia32/ia32_sysvec.c projects/altix/sys/compat/ia32/ia32_util.h projects/altix/sys/compat/linprocfs/linprocfs.c projects/altix/sys/compat/linux/linux_emul.c projects/altix/sys/compat/linux/linux_emul.h projects/altix/sys/compat/linux/linux_file.c projects/altix/sys/compat/linux/linux_futex.c projects/altix/sys/compat/linux/linux_futex.h projects/altix/sys/compat/linux/linux_ioctl.c projects/altix/sys/compat/linux/linux_ioctl.h projects/altix/sys/compat/linux/linux_misc.c projects/altix/sys/compat/linux/linux_misc.h projects/altix/sys/compat/linux/linux_signal.c projects/altix/sys/compat/linux/linux_signal.h projects/altix/sys/compat/linux/linux_stats.c projects/altix/sys/compat/ndis/hal_var.h projects/altix/sys/compat/ndis/kern_ndis.c projects/altix/sys/compat/ndis/ndis_var.h projects/altix/sys/compat/ndis/ntoskrnl_var.h projects/altix/sys/compat/ndis/subr_ndis.c projects/altix/sys/compat/ndis/subr_ntoskrnl.c projects/altix/sys/conf/Makefile.mips projects/altix/sys/conf/NOTES projects/altix/sys/conf/files projects/altix/sys/conf/files.amd64 projects/altix/sys/conf/files.i386 projects/altix/sys/conf/files.mips projects/altix/sys/conf/files.pc98 projects/altix/sys/conf/files.powerpc projects/altix/sys/conf/kern.mk projects/altix/sys/conf/kern.pre.mk projects/altix/sys/conf/ldscript.mips.cfe projects/altix/sys/conf/ldscript.mips.mips64 (contents, props changed) projects/altix/sys/conf/ldscript.powerpc projects/altix/sys/conf/ldscript.powerpc64 projects/altix/sys/conf/ldscript.sparc64 projects/altix/sys/conf/makeLINT.mk projects/altix/sys/conf/options projects/altix/sys/conf/options.i386 projects/altix/sys/conf/options.powerpc projects/altix/sys/contrib/dev/acpica/acpica_prep.sh projects/altix/sys/contrib/dev/acpica/changes.txt (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/adfile.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/adisasm.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/adwalk.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/dmextern.c projects/altix/sys/contrib/dev/acpica/common/dmrestag.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/dmtable.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/dmtbdump.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/dmtbinfo.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/common/getopt.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslanalyze.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslcodegen.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslcompile.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslcompiler.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslcompiler.l (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslcompiler.y (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asldefine.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslerror.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslfiles.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslfold.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslglobal.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asllength.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asllisting.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslload.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asllookup.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslmain.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslmap.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslmessages.h projects/altix/sys/contrib/dev/acpica/compiler/aslopcodes.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asloperands.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslopt.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslpredef.c projects/altix/sys/contrib/dev/acpica/compiler/aslresource.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslrestype1.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslrestype1i.c projects/altix/sys/contrib/dev/acpica/compiler/aslrestype2.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslrestype2d.c projects/altix/sys/contrib/dev/acpica/compiler/aslrestype2e.c projects/altix/sys/contrib/dev/acpica/compiler/aslrestype2q.c projects/altix/sys/contrib/dev/acpica/compiler/aslrestype2w.c projects/altix/sys/contrib/dev/acpica/compiler/aslstartup.c projects/altix/sys/contrib/dev/acpica/compiler/aslstubs.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asltransform.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asltree.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/asltypes.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/aslutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/compiler/dtcompile.c projects/altix/sys/contrib/dev/acpica/compiler/dtcompiler.h projects/altix/sys/contrib/dev/acpica/compiler/dtfield.c projects/altix/sys/contrib/dev/acpica/compiler/dtio.c projects/altix/sys/contrib/dev/acpica/compiler/dtsubtable.c projects/altix/sys/contrib/dev/acpica/compiler/dttable.c projects/altix/sys/contrib/dev/acpica/compiler/dttemplate.c projects/altix/sys/contrib/dev/acpica/compiler/dttemplate.h projects/altix/sys/contrib/dev/acpica/compiler/dtutils.c projects/altix/sys/contrib/dev/acpica/debugger/dbcmds.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbdisply.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbexec.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbfileio.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbhistry.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbinput.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbstats.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/debugger/dbxface.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmbuffer.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmnames.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmobject.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmopcode.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmresrc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmresrcl.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmresrcs.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/disassembler/dmwalk.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsfield.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsinit.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsmethod.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsmthdat.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsobject.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsopcode.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dsutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dswexec.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dswload.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dswscope.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/dispatcher/dswstate.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evevent.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evgpe.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evgpeblk.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evgpeinit.c projects/altix/sys/contrib/dev/acpica/events/evgpeutil.c projects/altix/sys/contrib/dev/acpica/events/evmisc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evregion.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evrgnini.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evsci.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evxface.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evxfevnt.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/events/evxfregn.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exconfig.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exconvrt.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/excreate.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exdebug.c projects/altix/sys/contrib/dev/acpica/executer/exdump.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exfield.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exfldio.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exmisc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exmutex.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exnames.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exoparg1.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exoparg2.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exoparg3.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exoparg6.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exprep.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exregion.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exresnte.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exresolv.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exresop.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exstore.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exstoren.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exstorob.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exsystem.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/executer/exutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/hardware/hwacpi.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/hardware/hwgpe.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/hardware/hwpci.c projects/altix/sys/contrib/dev/acpica/hardware/hwregs.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/hardware/hwsleep.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/hardware/hwtimer.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/hardware/hwvalid.c projects/altix/sys/contrib/dev/acpica/hardware/hwxface.c projects/altix/sys/contrib/dev/acpica/include/acapps.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/accommon.h projects/altix/sys/contrib/dev/acpica/include/acconfig.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acdebug.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acdisasm.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acdispat.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acevents.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acexcep.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acglobal.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/achware.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acinterp.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/aclocal.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acmacros.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acnames.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acnamesp.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acobject.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acopcode.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acoutput.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acparser.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acpi.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acpiosxf.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acpixf.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acpredef.h projects/altix/sys/contrib/dev/acpica/include/acresrc.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acrestyp.h projects/altix/sys/contrib/dev/acpica/include/acstruct.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/actables.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/actbl.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/actbl1.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/actbl2.h projects/altix/sys/contrib/dev/acpica/include/actypes.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/acutils.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/amlcode.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/amlresrc.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/platform/acenv.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/platform/acfreebsd.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/include/platform/acgcc.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsaccess.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsalloc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsdump.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsdumpdv.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nseval.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsinit.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsload.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsnames.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsobject.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsparse.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nspredef.c projects/altix/sys/contrib/dev/acpica/namespace/nsrepair.c projects/altix/sys/contrib/dev/acpica/namespace/nsrepair2.c projects/altix/sys/contrib/dev/acpica/namespace/nssearch.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nswalk.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsxfeval.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsxfname.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/namespace/nsxfobj.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/osunixxf.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psargs.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psloop.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psopcode.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psparse.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psscope.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/pstree.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/pswalk.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/parser/psxface.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsaddr.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rscalc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rscreate.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsdump.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsinfo.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsio.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsirq.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rslist.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsmemory.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsmisc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/resources/rsxface.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tables/tbfadt.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tables/tbfind.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tables/tbinstal.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tables/tbutils.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tables/tbxface.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tables/tbxfroot.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/tools/acpiexec/aecommon.h (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utalloc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utcache.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utcopy.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utdebug.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utdelete.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/uteval.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utglobal.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utids.c projects/altix/sys/contrib/dev/acpica/utilities/utinit.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utlock.c projects/altix/sys/contrib/dev/acpica/utilities/utmath.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utmisc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utmutex.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utobject.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utosi.c projects/altix/sys/contrib/dev/acpica/utilities/utresrc.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utstate.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/uttrack.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utxface.c (contents, props changed) projects/altix/sys/contrib/dev/acpica/utilities/utxferror.c projects/altix/sys/contrib/dev/wpi/LICENSE projects/altix/sys/contrib/octeon-sdk/cvmx-app-init.h projects/altix/sys/contrib/octeon-sdk/cvmx-helper-board.c projects/altix/sys/contrib/octeon-sdk/cvmx-helper-rgmii.c projects/altix/sys/contrib/octeon-sdk/cvmx-mgmt-port.c projects/altix/sys/contrib/octeon-sdk/cvmx-mgmt-port.h projects/altix/sys/contrib/octeon-sdk/cvmx-pcie.c projects/altix/sys/contrib/pf/net/pf_osfp.c projects/altix/sys/ddb/db_capture.c projects/altix/sys/dev/aac/aac.c projects/altix/sys/dev/aac/aac_cam.c projects/altix/sys/dev/aac/aacvar.h projects/altix/sys/dev/acpi_support/acpi_fujitsu.c projects/altix/sys/dev/acpi_support/acpi_ibm.c projects/altix/sys/dev/acpi_support/atk0110.c projects/altix/sys/dev/acpica/Osd/OsdInterrupt.c projects/altix/sys/dev/acpica/Osd/OsdSchedule.c projects/altix/sys/dev/acpica/Osd/OsdTable.c projects/altix/sys/dev/acpica/acpi.c projects/altix/sys/dev/acpica/acpi_battery.c projects/altix/sys/dev/acpica/acpi_button.c projects/altix/sys/dev/acpica/acpi_cmbat.c projects/altix/sys/dev/acpica/acpi_cpu.c projects/altix/sys/dev/acpica/acpi_ec.c projects/altix/sys/dev/acpica/acpi_hpet.c projects/altix/sys/dev/acpica/acpi_pci.c projects/altix/sys/dev/acpica/acpi_resource.c projects/altix/sys/dev/acpica/acpi_smbat.c projects/altix/sys/dev/acpica/acpi_video.c projects/altix/sys/dev/acpica/acpiio.h projects/altix/sys/dev/acpica/acpivar.h projects/altix/sys/dev/adlink/adlink.c projects/altix/sys/dev/ae/if_ae.c projects/altix/sys/dev/ae/if_aevar.h projects/altix/sys/dev/age/if_age.c projects/altix/sys/dev/age/if_agevar.h projects/altix/sys/dev/ahci/ahci.c projects/altix/sys/dev/alc/if_alc.c projects/altix/sys/dev/alc/if_alcreg.h projects/altix/sys/dev/alc/if_alcvar.h projects/altix/sys/dev/ale/if_ale.c projects/altix/sys/dev/ale/if_alevar.h projects/altix/sys/dev/ata/ata-pci.h projects/altix/sys/dev/ata/chipsets/ata-intel.c projects/altix/sys/dev/ath/ath_hal/ah.c projects/altix/sys/dev/ath/ath_hal/ah.h projects/altix/sys/dev/ath/ath_hal/ah_debug.h projects/altix/sys/dev/ath/ath_hal/ah_devid.h projects/altix/sys/dev/ath/ath_hal/ah_eeprom.h projects/altix/sys/dev/ath/ath_hal/ah_eeprom_v14.c projects/altix/sys/dev/ath/ath_hal/ah_eeprom_v14.h projects/altix/sys/dev/ath/ath_hal/ah_eeprom_v4k.c projects/altix/sys/dev/ath/ath_hal/ah_eeprom_v4k.h projects/altix/sys/dev/ath/ath_hal/ah_internal.h projects/altix/sys/dev/ath/ath_hal/ar5210/ar5210.h projects/altix/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c projects/altix/sys/dev/ath/ath_hal/ar5210/ar5210_misc.c projects/altix/sys/dev/ath/ath_hal/ar5210/ar5210_xmit.c projects/altix/sys/dev/ath/ath_hal/ar5211/ar5211.h projects/altix/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c projects/altix/sys/dev/ath/ath_hal/ar5211/ar5211_misc.c projects/altix/sys/dev/ath/ath_hal/ar5211/ar5211_xmit.c projects/altix/sys/dev/ath/ath_hal/ar5212/ar5212.h projects/altix/sys/dev/ath/ath_hal/ar5212/ar5212_ani.c projects/altix/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c projects/altix/sys/dev/ath/ath_hal/ar5212/ar5212_keycache.c projects/altix/sys/dev/ath/ath_hal/ar5212/ar5212_misc.c projects/altix/sys/dev/ath/ath_hal/ar5212/ar5212_xmit.c projects/altix/sys/dev/ath/ath_hal/ar5312/ar5312_attach.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar2133.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416phy.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416reg.h projects/altix/sys/dev/ath/ath_rate/amrr/amrr.c projects/altix/sys/dev/ath/ath_rate/onoe/onoe.c projects/altix/sys/dev/ath/ath_rate/sample/sample.c projects/altix/sys/dev/ath/ath_rate/sample/sample.h projects/altix/sys/dev/ath/if_ath.c projects/altix/sys/dev/ath/if_athioctl.h projects/altix/sys/dev/ath/if_athrate.h projects/altix/sys/dev/ath/if_athvar.h projects/altix/sys/dev/atkbdc/atkbd_atkbdc.c projects/altix/sys/dev/atkbdc/atkbdc.c projects/altix/sys/dev/atkbdc/atkbdc_isa.c projects/altix/sys/dev/atkbdc/atkbdcreg.h projects/altix/sys/dev/atkbdc/psm.c projects/altix/sys/dev/bce/if_bce.c projects/altix/sys/dev/bce/if_bcefw.h projects/altix/sys/dev/bce/if_bcereg.h projects/altix/sys/dev/bge/if_bge.c projects/altix/sys/dev/buslogic/bt.c projects/altix/sys/dev/bwi/if_bwi.c projects/altix/sys/dev/bwn/if_bwn.c projects/altix/sys/dev/cs/if_cs.c projects/altix/sys/dev/cs/if_csreg.h projects/altix/sys/dev/cs/if_csvar.h projects/altix/sys/dev/cxgb/cxgb_main.c projects/altix/sys/dev/cxgb/cxgb_sge.c projects/altix/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb_cm.c projects/altix/sys/dev/cxgb/ulp/tom/cxgb_cpl_socket.c projects/altix/sys/dev/cxgb/ulp/tom/cxgb_ddp.c projects/altix/sys/dev/cxgb/ulp/tom/cxgb_tom.c projects/altix/sys/dev/dc/dcphy.c projects/altix/sys/dev/dc/if_dc.c projects/altix/sys/dev/dc/if_dcreg.h projects/altix/sys/dev/dc/pnphy.c projects/altix/sys/dev/drm/drm_irq.c projects/altix/sys/dev/drm/via_dmablit.c projects/altix/sys/dev/e1000/e1000_80003es2lan.c projects/altix/sys/dev/e1000/e1000_80003es2lan.h projects/altix/sys/dev/e1000/e1000_82540.c projects/altix/sys/dev/e1000/e1000_82541.c projects/altix/sys/dev/e1000/e1000_82542.c projects/altix/sys/dev/e1000/e1000_82543.c projects/altix/sys/dev/e1000/e1000_82571.c projects/altix/sys/dev/e1000/e1000_82575.c projects/altix/sys/dev/e1000/e1000_82575.h projects/altix/sys/dev/e1000/e1000_api.c projects/altix/sys/dev/e1000/e1000_api.h projects/altix/sys/dev/e1000/e1000_defines.h projects/altix/sys/dev/e1000/e1000_hw.h projects/altix/sys/dev/e1000/e1000_ich8lan.c projects/altix/sys/dev/e1000/e1000_ich8lan.h projects/altix/sys/dev/e1000/e1000_mac.c projects/altix/sys/dev/e1000/e1000_mac.h projects/altix/sys/dev/e1000/e1000_manage.c projects/altix/sys/dev/e1000/e1000_manage.h projects/altix/sys/dev/e1000/e1000_mbx.c projects/altix/sys/dev/e1000/e1000_nvm.c projects/altix/sys/dev/e1000/e1000_nvm.h projects/altix/sys/dev/e1000/e1000_osdep.c projects/altix/sys/dev/e1000/e1000_phy.c projects/altix/sys/dev/e1000/e1000_phy.h projects/altix/sys/dev/e1000/e1000_regs.h projects/altix/sys/dev/e1000/e1000_vf.c projects/altix/sys/dev/e1000/e1000_vf.h projects/altix/sys/dev/e1000/if_em.c projects/altix/sys/dev/e1000/if_igb.c projects/altix/sys/dev/e1000/if_igb.h projects/altix/sys/dev/e1000/if_lem.c projects/altix/sys/dev/ed/if_ed.c projects/altix/sys/dev/en/midway.c projects/altix/sys/dev/fatm/if_fatm.c projects/altix/sys/dev/fb/splash.c projects/altix/sys/dev/fdt/fdt_common.c projects/altix/sys/dev/fdt/fdt_pci.c projects/altix/sys/dev/fdt/fdtbus.c projects/altix/sys/dev/flash/mx25l.c projects/altix/sys/dev/fxp/if_fxp.c projects/altix/sys/dev/hifn/hifn7751.c projects/altix/sys/dev/ichsmb/ichsmb_pci.c projects/altix/sys/dev/ichwd/ichwd.c projects/altix/sys/dev/ichwd/ichwd.h projects/altix/sys/dev/ieee488/ibfoo.c projects/altix/sys/dev/if_ndis/if_ndis.c projects/altix/sys/dev/if_ndis/if_ndis_pccard.c projects/altix/sys/dev/if_ndis/if_ndis_pci.c projects/altix/sys/dev/if_ndis/if_ndis_usb.c projects/altix/sys/dev/iicbus/ds1775.c projects/altix/sys/dev/iicbus/max6690.c projects/altix/sys/dev/iscsi/initiator/isc_sm.c projects/altix/sys/dev/iscsi/initiator/iscsi.c projects/altix/sys/dev/isp/isp.c projects/altix/sys/dev/isp/isp_freebsd.c projects/altix/sys/dev/isp/isp_freebsd.h projects/altix/sys/dev/isp/isp_library.c projects/altix/sys/dev/isp/isp_pci.c projects/altix/sys/dev/isp/isp_sbus.c projects/altix/sys/dev/isp/ispvar.h projects/altix/sys/dev/ispfw/asm_2322.h projects/altix/sys/dev/ispfw/asm_2400.h projects/altix/sys/dev/ispfw/asm_2500.h projects/altix/sys/dev/iwi/if_iwi.c projects/altix/sys/dev/iwn/if_iwn.c projects/altix/sys/dev/ixgbe/ixgbe.c projects/altix/sys/dev/ixgbe/ixgbe.h projects/altix/sys/dev/ixgbe/ixgbe_82599.c projects/altix/sys/dev/ixgbe/ixgbe_api.h projects/altix/sys/dev/ixgbe/ixgbe_common.c projects/altix/sys/dev/ixgbe/ixgbe_common.h projects/altix/sys/dev/ixgbe/ixgbe_mbx.c projects/altix/sys/dev/ixgbe/ixgbe_type.h projects/altix/sys/dev/ixgbe/ixv.h projects/altix/sys/dev/jme/if_jme.c projects/altix/sys/dev/jme/if_jmereg.h projects/altix/sys/dev/jme/if_jmevar.h projects/altix/sys/dev/le/if_le_pci.c projects/altix/sys/dev/lmc/if_lmc.c projects/altix/sys/dev/malo/if_malo_pci.c projects/altix/sys/dev/md/md.c projects/altix/sys/dev/mem/memdev.c projects/altix/sys/dev/mem/memutil.c projects/altix/sys/dev/mfi/mfi_cam.c projects/altix/sys/dev/mii/atphy.c projects/altix/sys/dev/mii/brgphy.c projects/altix/sys/dev/mii/ciphy.c projects/altix/sys/dev/mii/e1000phy.c projects/altix/sys/dev/mii/ip1000phy.c projects/altix/sys/dev/mii/jmphy.c projects/altix/sys/dev/mii/jmphyreg.h projects/altix/sys/dev/mii/mii_physubr.c projects/altix/sys/dev/mii/miidevs projects/altix/sys/dev/mii/nsgphy.c projects/altix/sys/dev/mii/rgephy.c projects/altix/sys/dev/mii/rlphy.c projects/altix/sys/dev/mii/xmphy.c projects/altix/sys/dev/mmc/mmc.c projects/altix/sys/dev/mps/mps.c projects/altix/sys/dev/mps/mps_sas.c projects/altix/sys/dev/mps/mpsvar.h projects/altix/sys/dev/mpt/mpt.c projects/altix/sys/dev/mpt/mpt_cam.c projects/altix/sys/dev/mpt/mpt_pci.c projects/altix/sys/dev/mpt/mpt_raid.c projects/altix/sys/dev/msk/if_msk.c projects/altix/sys/dev/mwl/mwlhal.c projects/altix/sys/dev/mxge/if_mxge.c projects/altix/sys/dev/nfe/if_nfe.c projects/altix/sys/dev/nfe/if_nfevar.h projects/altix/sys/dev/patm/if_patm_attach.c projects/altix/sys/dev/pccbb/pccbb.c projects/altix/sys/dev/pci/pci.c projects/altix/sys/dev/pci/vga_pci.c projects/altix/sys/dev/pty/pty.c projects/altix/sys/dev/puc/pucdata.c projects/altix/sys/dev/ral/rt2560.c projects/altix/sys/dev/ral/rt2661.c projects/altix/sys/dev/random/randomdev.c projects/altix/sys/dev/re/if_re.c projects/altix/sys/dev/siba/siba_bwn.c projects/altix/sys/dev/siis/siis.c projects/altix/sys/dev/siis/siis.h projects/altix/sys/dev/sio/sio.c projects/altix/sys/dev/sis/if_sis.c projects/altix/sys/dev/sis/if_sisreg.h projects/altix/sys/dev/sound/pci/atiixp.c projects/altix/sys/dev/sound/pci/csa.c projects/altix/sys/dev/sound/pci/emu10k1.c projects/altix/sys/dev/sound/pci/emu10kx.c projects/altix/sys/dev/sound/pci/hda/hdac.c projects/altix/sys/dev/sound/pci/ich.c projects/altix/sys/dev/sound/pcm/buffer.c projects/altix/sys/dev/sound/pcm/sound.c projects/altix/sys/dev/sound/usb/uaudio.c projects/altix/sys/dev/ste/if_ste.c projects/altix/sys/dev/tsec/if_tsec_fdt.c projects/altix/sys/dev/txp/if_txp.c projects/altix/sys/dev/uart/uart_bus_fdt.c projects/altix/sys/dev/uart/uart_cpu_amd64.c projects/altix/sys/dev/uart/uart_cpu_i386.c projects/altix/sys/dev/uart/uart_cpu_pc98.c projects/altix/sys/dev/uart/uart_tty.c projects/altix/sys/dev/usb/controller/at91dci.c projects/altix/sys/dev/usb/controller/at91dci_atmelarm.c projects/altix/sys/dev/usb/controller/atmegadci.c projects/altix/sys/dev/usb/controller/atmegadci_atmelarm.c projects/altix/sys/dev/usb/controller/avr32dci.c projects/altix/sys/dev/usb/controller/ehci.c projects/altix/sys/dev/usb/controller/ehci_ixp4xx.c projects/altix/sys/dev/usb/controller/ehci_mv.c projects/altix/sys/dev/usb/controller/ehci_pci.c projects/altix/sys/dev/usb/controller/musb_otg.c projects/altix/sys/dev/usb/controller/musb_otg_atmelarm.c projects/altix/sys/dev/usb/controller/ohci.c projects/altix/sys/dev/usb/controller/ohci_atmelarm.c projects/altix/sys/dev/usb/controller/ohci_pci.c projects/altix/sys/dev/usb/controller/ohci_s3c24x0.c projects/altix/sys/dev/usb/controller/uhci.c projects/altix/sys/dev/usb/controller/uhci_pci.c projects/altix/sys/dev/usb/controller/usb_controller.c projects/altix/sys/dev/usb/controller/uss820dci.c projects/altix/sys/dev/usb/controller/uss820dci_atmelarm.c projects/altix/sys/dev/usb/controller/xhci.c projects/altix/sys/dev/usb/controller/xhci.h projects/altix/sys/dev/usb/controller/xhci_pci.c projects/altix/sys/dev/usb/input/atp.c projects/altix/sys/dev/usb/input/uhid.c projects/altix/sys/dev/usb/input/ukbd.c projects/altix/sys/dev/usb/input/ums.c projects/altix/sys/dev/usb/misc/udbp.c projects/altix/sys/dev/usb/misc/ufm.c projects/altix/sys/dev/usb/net/if_aue.c projects/altix/sys/dev/usb/net/if_axe.c projects/altix/sys/dev/usb/net/if_cdce.c projects/altix/sys/dev/usb/net/if_cue.c projects/altix/sys/dev/usb/net/if_ipheth.c projects/altix/sys/dev/usb/net/if_kue.c projects/altix/sys/dev/usb/net/if_rue.c projects/altix/sys/dev/usb/net/if_udav.c projects/altix/sys/dev/usb/net/usb_ethernet.c projects/altix/sys/dev/usb/quirk/usb_quirk.c projects/altix/sys/dev/usb/serial/u3g.c projects/altix/sys/dev/usb/serial/uark.c projects/altix/sys/dev/usb/serial/ubsa.c projects/altix/sys/dev/usb/serial/ubser.c projects/altix/sys/dev/usb/serial/uchcom.c projects/altix/sys/dev/usb/serial/ucycom.c projects/altix/sys/dev/usb/serial/ufoma.c projects/altix/sys/dev/usb/serial/uftdi.c projects/altix/sys/dev/usb/serial/ugensa.c projects/altix/sys/dev/usb/serial/uipaq.c projects/altix/sys/dev/usb/serial/ulpt.c projects/altix/sys/dev/usb/serial/umct.c projects/altix/sys/dev/usb/serial/umodem.c projects/altix/sys/dev/usb/serial/umoscom.c projects/altix/sys/dev/usb/serial/uplcom.c projects/altix/sys/dev/usb/serial/usb_serial.c projects/altix/sys/dev/usb/serial/uslcom.c projects/altix/sys/dev/usb/serial/uvisor.c projects/altix/sys/dev/usb/serial/uvscom.c projects/altix/sys/dev/usb/storage/umass.c projects/altix/sys/dev/usb/storage/urio.c projects/altix/sys/dev/usb/storage/ustorage_fs.c projects/altix/sys/dev/usb/template/usb_template.c projects/altix/sys/dev/usb/template/usb_template_cdce.c projects/altix/sys/dev/usb/template/usb_template_msc.c projects/altix/sys/dev/usb/template/usb_template_mtp.c projects/altix/sys/dev/usb/usb_busdma.c projects/altix/sys/dev/usb/usb_compat_linux.c projects/altix/sys/dev/usb/usb_core.c projects/altix/sys/dev/usb/usb_debug.c projects/altix/sys/dev/usb/usb_dev.c projects/altix/sys/dev/usb/usb_device.c projects/altix/sys/dev/usb/usb_dynamic.c projects/altix/sys/dev/usb/usb_error.c projects/altix/sys/dev/usb/usb_freebsd.h projects/altix/sys/dev/usb/usb_generic.c projects/altix/sys/dev/usb/usb_handle_request.c projects/altix/sys/dev/usb/usb_hid.c projects/altix/sys/dev/usb/usb_hub.c projects/altix/sys/dev/usb/usb_lookup.c projects/altix/sys/dev/usb/usb_mbuf.c projects/altix/sys/dev/usb/usb_msctest.c projects/altix/sys/dev/usb/usb_parse.c projects/altix/sys/dev/usb/usb_pf.c projects/altix/sys/dev/usb/usb_pf.h projects/altix/sys/dev/usb/usb_process.c projects/altix/sys/dev/usb/usb_process.h projects/altix/sys/dev/usb/usb_request.c projects/altix/sys/dev/usb/usb_transfer.c projects/altix/sys/dev/usb/usb_util.c projects/altix/sys/dev/usb/usbdevs projects/altix/sys/dev/usb/wlan/if_rum.c projects/altix/sys/dev/usb/wlan/if_run.c projects/altix/sys/dev/usb/wlan/if_runreg.h projects/altix/sys/dev/usb/wlan/if_runvar.h projects/altix/sys/dev/usb/wlan/if_ural.c projects/altix/sys/dev/wi/if_wi.c projects/altix/sys/dev/wpi/if_wpi.c projects/altix/sys/dev/xen/balloon/balloon.c projects/altix/sys/dev/xen/blkfront/blkfront.c projects/altix/sys/dev/xen/console/console.c projects/altix/sys/dev/xen/netback/netback.c projects/altix/sys/dev/xen/netfront/netfront.c projects/altix/sys/dev/xen/xenpci/evtchn.c projects/altix/sys/fs/devfs/devfs_devs.c projects/altix/sys/fs/devfs/devfs_rule.c projects/altix/sys/fs/devfs/devfs_vnops.c projects/altix/sys/fs/ext2fs/ext2_alloc.c projects/altix/sys/fs/ext2fs/ext2_dinode.h projects/altix/sys/fs/ext2fs/ext2_lookup.c projects/altix/sys/fs/ext2fs/ext2_mount.h projects/altix/sys/fs/ext2fs/ext2_subr.c projects/altix/sys/fs/ext2fs/ext2_vfsops.c projects/altix/sys/fs/ext2fs/ext2fs.h projects/altix/sys/fs/ext2fs/inode.h projects/altix/sys/fs/nfs/nfs.h projects/altix/sys/fs/nfs/nfs_commonsubs.c projects/altix/sys/fs/nfs/nfs_var.h projects/altix/sys/fs/nfs/nfsdport.h projects/altix/sys/fs/nfs/nfsport.h projects/altix/sys/fs/nfsclient/nfs_clvfsops.c projects/altix/sys/fs/nfsclient/nfsmount.h projects/altix/sys/fs/nfsserver/nfs_nfsdcache.c projects/altix/sys/fs/nfsserver/nfs_nfsdkrpc.c projects/altix/sys/fs/nfsserver/nfs_nfsdport.c projects/altix/sys/fs/nfsserver/nfs_nfsdserv.c projects/altix/sys/fs/nfsserver/nfs_nfsdsocket.c projects/altix/sys/fs/nfsserver/nfs_nfsdstate.c projects/altix/sys/fs/portalfs/portal_vnops.c projects/altix/sys/fs/procfs/procfs_dbregs.c projects/altix/sys/fs/procfs/procfs_fpregs.c projects/altix/sys/fs/procfs/procfs_map.c projects/altix/sys/fs/procfs/procfs_regs.c projects/altix/sys/fs/tmpfs/tmpfs.h projects/altix/sys/fs/tmpfs/tmpfs_subr.c projects/altix/sys/fs/tmpfs/tmpfs_vnops.c projects/altix/sys/geom/eli/g_eli.c projects/altix/sys/geom/geom_ctl.c projects/altix/sys/geom/geom_disk.c projects/altix/sys/geom/journal/g_journal.c projects/altix/sys/geom/nop/g_nop.c projects/altix/sys/geom/part/g_part.c projects/altix/sys/geom/part/g_part.h projects/altix/sys/geom/part/g_part_bsd.c projects/altix/sys/geom/part/g_part_ebr.c projects/altix/sys/geom/part/g_part_gpt.c projects/altix/sys/geom/part/g_part_mbr.c projects/altix/sys/geom/part/g_part_pc98.c projects/altix/sys/geom/raid3/g_raid3.c projects/altix/sys/geom/sched/g_sched.c projects/altix/sys/geom/sched/gs_rr.c projects/altix/sys/i386/conf/GENERIC projects/altix/sys/i386/conf/XBOX projects/altix/sys/i386/conf/XEN projects/altix/sys/i386/i386/apic_vector.s projects/altix/sys/i386/i386/i686_mem.c projects/altix/sys/i386/i386/identcpu.c projects/altix/sys/i386/i386/legacy.c projects/altix/sys/i386/i386/machdep.c projects/altix/sys/i386/i386/mem.c projects/altix/sys/i386/i386/pmap.c projects/altix/sys/i386/i386/sys_machdep.c projects/altix/sys/i386/i386/trap.c projects/altix/sys/i386/i386/uio_machdep.c projects/altix/sys/i386/i386/vm86bios.s projects/altix/sys/i386/i386/vm_machdep.c projects/altix/sys/i386/include/_inttypes.h projects/altix/sys/i386/include/_limits.h projects/altix/sys/i386/include/_stdint.h projects/altix/sys/i386/include/_types.h projects/altix/sys/i386/include/atomic.h projects/altix/sys/i386/include/bus.h projects/altix/sys/i386/include/cpu.h projects/altix/sys/i386/include/elf.h projects/altix/sys/i386/include/memdev.h projects/altix/sys/i386/include/pcpu.h projects/altix/sys/i386/include/pmap.h projects/altix/sys/i386/include/reg.h projects/altix/sys/i386/include/segments.h projects/altix/sys/i386/include/vmparam.h projects/altix/sys/i386/include/xen/hypercall.h projects/altix/sys/i386/include/xen/xen-os.h projects/altix/sys/i386/include/xen/xenpmap.h projects/altix/sys/i386/include/xen/xenvar.h projects/altix/sys/i386/isa/npx.c projects/altix/sys/i386/linux/imgact_linux.c projects/altix/sys/i386/linux/linux.h projects/altix/sys/i386/linux/linux_machdep.c projects/altix/sys/i386/linux/linux_proto.h projects/altix/sys/i386/linux/linux_syscall.h projects/altix/sys/i386/linux/linux_sysent.c projects/altix/sys/i386/linux/linux_sysvec.c projects/altix/sys/i386/linux/syscalls.master projects/altix/sys/i386/xen/clock.c projects/altix/sys/i386/xen/mp_machdep.c projects/altix/sys/i386/xen/pmap.c projects/altix/sys/i386/xen/xen_machdep.c projects/altix/sys/ia64/acpica/OsdEnvironment.c projects/altix/sys/ia64/conf/GENERIC projects/altix/sys/ia64/ia64/machdep.c projects/altix/sys/ia64/ia64/mem.c projects/altix/sys/ia64/ia64/uio_machdep.c projects/altix/sys/ia64/include/_limits.h projects/altix/sys/ia64/include/_stdint.h projects/altix/sys/ia64/include/elf.h projects/altix/sys/ia64/include/float.h projects/altix/sys/ia64/include/memdev.h projects/altix/sys/ia64/include/pmap.h projects/altix/sys/ia64/include/vmparam.h projects/altix/sys/kern/imgact_elf.c projects/altix/sys/kern/init_main.c projects/altix/sys/kern/kern_clocksource.c projects/altix/sys/kern/kern_conf.c projects/altix/sys/kern/kern_context.c projects/altix/sys/kern/kern_descrip.c projects/altix/sys/kern/kern_et.c projects/altix/sys/kern/kern_exec.c projects/altix/sys/kern/kern_fail.c projects/altix/sys/kern/kern_fork.c projects/altix/sys/kern/kern_intr.c projects/altix/sys/kern/kern_jail.c projects/altix/sys/kern/kern_kthread.c projects/altix/sys/kern/kern_linker.c projects/altix/sys/kern/kern_lock.c projects/altix/sys/kern/kern_malloc.c projects/altix/sys/kern/kern_mib.c projects/altix/sys/kern/kern_ntptime.c projects/altix/sys/kern/kern_proc.c projects/altix/sys/kern/kern_resource.c projects/altix/sys/kern/kern_sig.c projects/altix/sys/kern/kern_sx.c projects/altix/sys/kern/kern_synch.c projects/altix/sys/kern/kern_sysctl.c projects/altix/sys/kern/kern_tc.c projects/altix/sys/kern/kern_thread.c projects/altix/sys/kern/kern_umtx.c projects/altix/sys/kern/sched_4bsd.c projects/altix/sys/kern/sched_ule.c projects/altix/sys/kern/subr_acl_nfs4.c projects/altix/sys/kern/subr_autoconf.c projects/altix/sys/kern/subr_bus.c projects/altix/sys/kern/subr_busdma.c (contents, props changed) projects/altix/sys/kern/subr_clock.c projects/altix/sys/kern/subr_devstat.c projects/altix/sys/kern/subr_kobj.c projects/altix/sys/kern/subr_lock.c projects/altix/sys/kern/subr_log.c projects/altix/sys/kern/subr_module.c projects/altix/sys/kern/subr_param.c projects/altix/sys/kern/subr_pcpu.c projects/altix/sys/kern/subr_sleepqueue.c projects/altix/sys/kern/subr_smp.c projects/altix/sys/kern/subr_trap.c projects/altix/sys/kern/subr_turnstile.c projects/altix/sys/kern/subr_uio.c projects/altix/sys/kern/subr_witness.c projects/altix/sys/kern/sys_pipe.c projects/altix/sys/kern/sys_process.c projects/altix/sys/kern/sys_socket.c projects/altix/sys/kern/sysv_msg.c projects/altix/sys/kern/sysv_sem.c projects/altix/sys/kern/sysv_shm.c projects/altix/sys/kern/tty.c projects/altix/sys/kern/tty_tty.c projects/altix/sys/kern/uipc_cow.c projects/altix/sys/kern/uipc_socket.c projects/altix/sys/kern/uipc_syscalls.c projects/altix/sys/kern/uipc_usrreq.c projects/altix/sys/kern/vfs_bio.c projects/altix/sys/kern/vfs_mount.c projects/altix/sys/kern/vfs_mountroot.c projects/altix/sys/kern/vfs_subr.c projects/altix/sys/kern/vfs_vnops.c projects/altix/sys/mips/adm5120/adm5120_machdep.c projects/altix/sys/mips/alchemy/alchemy_machdep.c projects/altix/sys/mips/atheros/ar71xx_machdep.c projects/altix/sys/mips/atheros/ar91xxreg.h projects/altix/sys/mips/cavium/ciu.c projects/altix/sys/mips/cavium/cryptocteon/cavium_crypto.c projects/altix/sys/mips/cavium/cvmx_config.h projects/altix/sys/mips/cavium/files.octeon1 projects/altix/sys/mips/cavium/octe/ethernet-common.c projects/altix/sys/mips/cavium/octe/ethernet-defines.h projects/altix/sys/mips/cavium/octe/ethernet-rx.c projects/altix/sys/mips/cavium/octe/ethernet-tx.c projects/altix/sys/mips/cavium/octe/ethernet.c projects/altix/sys/mips/cavium/octeon_machdep.c projects/altix/sys/mips/cavium/octeon_mp.c projects/altix/sys/mips/cavium/octeon_wdog.c projects/altix/sys/mips/cavium/octopci.c projects/altix/sys/mips/cavium/uart_bus_octeonusart.c projects/altix/sys/mips/cavium/usb/octusb.c projects/altix/sys/mips/cavium/usb/octusb_octeon.c projects/altix/sys/mips/conf/MALTA64 projects/altix/sys/mips/conf/OCTEON1 projects/altix/sys/mips/conf/SENTRY5 projects/altix/sys/mips/conf/SWARM projects/altix/sys/mips/conf/SWARM64 projects/altix/sys/mips/conf/SWARM64_SMP projects/altix/sys/mips/conf/SWARM_SMP projects/altix/sys/mips/conf/XLR projects/altix/sys/mips/conf/XLR64 projects/altix/sys/mips/conf/XLRN32 projects/altix/sys/mips/idt/idt_machdep.c projects/altix/sys/mips/include/_inttypes.h projects/altix/sys/mips/include/_limits.h projects/altix/sys/mips/include/_stdint.h projects/altix/sys/mips/include/_types.h projects/altix/sys/mips/include/cpufunc.h projects/altix/sys/mips/include/elf.h projects/altix/sys/mips/include/hwfunc.h projects/altix/sys/mips/include/md_var.h projects/altix/sys/mips/include/memdev.h projects/altix/sys/mips/include/param.h projects/altix/sys/mips/include/pmap.h projects/altix/sys/mips/include/proc.h projects/altix/sys/mips/include/pte.h projects/altix/sys/mips/include/sf_buf.h projects/altix/sys/mips/include/vmparam.h projects/altix/sys/mips/malta/malta_machdep.c projects/altix/sys/mips/mips/dump_machdep.c projects/altix/sys/mips/mips/elf_trampoline.c projects/altix/sys/mips/mips/exception.S projects/altix/sys/mips/mips/inckern.S projects/altix/sys/mips/mips/machdep.c projects/altix/sys/mips/mips/mem.c projects/altix/sys/mips/mips/mp_machdep.c projects/altix/sys/mips/mips/pmap.c projects/altix/sys/mips/mips/swtch.S projects/altix/sys/mips/mips/tick.c projects/altix/sys/mips/mips/trap.c projects/altix/sys/mips/mips/uio_machdep.c projects/altix/sys/mips/mips/vm_machdep.c projects/altix/sys/mips/rmi/board.c projects/altix/sys/mips/rmi/board.h projects/altix/sys/mips/rmi/dev/nlge/if_nlge.c projects/altix/sys/mips/rmi/dev/xlr/rge.c projects/altix/sys/mips/rmi/files.xlr projects/altix/sys/mips/rmi/fmn.c projects/altix/sys/mips/rmi/iodi.c projects/altix/sys/mips/rmi/pic.h projects/altix/sys/mips/rmi/std.xlr projects/altix/sys/mips/rmi/tick.c projects/altix/sys/mips/rmi/xlr_i2c.c projects/altix/sys/mips/rmi/xlr_machdep.c projects/altix/sys/mips/rmi/xlr_pci.c projects/altix/sys/mips/rmi/xls_ehci.c projects/altix/sys/mips/sentry5/s5_machdep.c projects/altix/sys/mips/sibyte/sb_machdep.c projects/altix/sys/mips/sibyte/sb_scd.c projects/altix/sys/modules/Makefile projects/altix/sys/modules/acpi/acpi/Makefile projects/altix/sys/modules/aha/Makefile projects/altix/sys/modules/ahb/Makefile projects/altix/sys/modules/ath/Makefile projects/altix/sys/modules/cc/Makefile projects/altix/sys/modules/linux/Makefile projects/altix/sys/modules/mem/Makefile projects/altix/sys/modules/mii/Makefile projects/altix/sys/modules/usb/Makefile projects/altix/sys/modules/wpifw/Makefile projects/altix/sys/net/bpf_zerocopy.c projects/altix/sys/net/flowtable.c projects/altix/sys/net/if.c projects/altix/sys/net/if.h projects/altix/sys/net/if_enc.c projects/altix/sys/net/if_llatbl.h projects/altix/sys/net/if_media.h projects/altix/sys/net/netisr.c projects/altix/sys/net/route.c projects/altix/sys/net/rtsock.c projects/altix/sys/net/vnet.c projects/altix/sys/net/vnet.h projects/altix/sys/net80211/ieee80211_amrr.c projects/altix/sys/net80211/ieee80211_freebsd.c projects/altix/sys/net80211/ieee80211_ioctl.c projects/altix/sys/net80211/ieee80211_mesh.c projects/altix/sys/net80211/ieee80211_node.c projects/altix/sys/net80211/ieee80211_scan.c projects/altix/sys/netgraph/bluetooth/common/ng_bluetooth.c projects/altix/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c projects/altix/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c projects/altix/sys/netgraph/bluetooth/socket/ng_btsocket_hci_raw.c projects/altix/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c projects/altix/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap_raw.c projects/altix/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c projects/altix/sys/netgraph/bluetooth/socket/ng_btsocket_sco.c projects/altix/sys/netgraph/ng_socket.c projects/altix/sys/netinet/cc.h projects/altix/sys/netinet/cc/cc.c projects/altix/sys/netinet/cc/cc_cubic.c projects/altix/sys/netinet/cc/cc_htcp.c projects/altix/sys/netinet/cc/cc_newreno.c projects/altix/sys/netinet/if_atm.c projects/altix/sys/netinet/if_ether.c projects/altix/sys/netinet/in_pcb.c projects/altix/sys/netinet/ip_divert.c projects/altix/sys/netinet/ip_output.c projects/altix/sys/netinet/ipfw/ip_dn_io.c projects/altix/sys/netinet/ipfw/ip_dummynet.c projects/altix/sys/netinet/ipfw/ip_fw_dynamic.c projects/altix/sys/netinet/raw_ip.c projects/altix/sys/netinet/sctp.h projects/altix/sys/netinet/sctp_asconf.c projects/altix/sys/netinet/sctp_asconf.h projects/altix/sys/netinet/sctp_auth.c projects/altix/sys/netinet/sctp_auth.h projects/altix/sys/netinet/sctp_bsd_addr.c projects/altix/sys/netinet/sctp_bsd_addr.h projects/altix/sys/netinet/sctp_cc_functions.c projects/altix/sys/netinet/sctp_constants.h projects/altix/sys/netinet/sctp_crc32.c projects/altix/sys/netinet/sctp_crc32.h projects/altix/sys/netinet/sctp_dtrace_declare.h projects/altix/sys/netinet/sctp_dtrace_define.h projects/altix/sys/netinet/sctp_header.h projects/altix/sys/netinet/sctp_indata.c projects/altix/sys/netinet/sctp_indata.h projects/altix/sys/netinet/sctp_input.c projects/altix/sys/netinet/sctp_input.h projects/altix/sys/netinet/sctp_lock_bsd.h projects/altix/sys/netinet/sctp_os.h projects/altix/sys/netinet/sctp_os_bsd.h projects/altix/sys/netinet/sctp_output.c projects/altix/sys/netinet/sctp_output.h projects/altix/sys/netinet/sctp_pcb.c projects/altix/sys/netinet/sctp_pcb.h projects/altix/sys/netinet/sctp_peeloff.c projects/altix/sys/netinet/sctp_peeloff.h projects/altix/sys/netinet/sctp_structs.h projects/altix/sys/netinet/sctp_sysctl.c projects/altix/sys/netinet/sctp_sysctl.h projects/altix/sys/netinet/sctp_timer.c projects/altix/sys/netinet/sctp_timer.h projects/altix/sys/netinet/sctp_uio.h projects/altix/sys/netinet/sctp_usrreq.c projects/altix/sys/netinet/sctp_var.h projects/altix/sys/netinet/sctputil.c projects/altix/sys/netinet/sctputil.h projects/altix/sys/netinet/tcp_hostcache.c projects/altix/sys/netinet/tcp_input.c projects/altix/sys/netinet/tcp_lro.c projects/altix/sys/netinet/tcp_lro.h projects/altix/sys/netinet/tcp_output.c projects/altix/sys/netinet/tcp_reass.c projects/altix/sys/netinet/tcp_sack.c projects/altix/sys/netinet/tcp_subr.c projects/altix/sys/netinet/tcp_syncache.c projects/altix/sys/netinet/tcp_syncache.h projects/altix/sys/netinet/tcp_timer.c projects/altix/sys/netinet/tcp_usrreq.c projects/altix/sys/netinet/tcp_var.h projects/altix/sys/netinet/udp.h projects/altix/sys/netinet/udp_usrreq.c projects/altix/sys/netinet/udp_var.h projects/altix/sys/netinet6/in6_ifattach.c projects/altix/sys/netinet6/nd6.c projects/altix/sys/netinet6/sctp6_usrreq.c projects/altix/sys/netinet6/sctp6_var.h projects/altix/sys/netipsec/key.c projects/altix/sys/netipsec/xform.h projects/altix/sys/netipsec/xform_ah.c projects/altix/sys/netipsec/xform_esp.c projects/altix/sys/netsmb/smb_dev.h projects/altix/sys/netsmb/smb_subr.c projects/altix/sys/netsmb/smb_subr.h projects/altix/sys/nfs/nfs_lock.c projects/altix/sys/nfs/nfs_mountcommon.h projects/altix/sys/nfs/nfs_nfssvc.c projects/altix/sys/nfs/nfssvc.h projects/altix/sys/nfsclient/bootp_subr.c projects/altix/sys/nfsclient/krpc_subr.c projects/altix/sys/nfsclient/nfs_diskless.c projects/altix/sys/nfsclient/nfs_vfsops.c projects/altix/sys/nfsclient/nfsmount.h projects/altix/sys/nfsserver/nfs.h projects/altix/sys/nfsserver/nfs_serv.c projects/altix/sys/nfsserver/nfs_srvsubs.c projects/altix/sys/nlm/nlm_advlock.c projects/altix/sys/nlm/nlm_prot_impl.c projects/altix/sys/pc98/cbus/sio.c projects/altix/sys/pc98/include/_inttypes.h projects/altix/sys/pc98/include/bus.h projects/altix/sys/pc98/pc98/machdep.c projects/altix/sys/pci/if_rlreg.h projects/altix/sys/powerpc/aim/machdep.c projects/altix/sys/powerpc/aim/mmu_oea.c projects/altix/sys/powerpc/aim/mmu_oea64.c projects/altix/sys/powerpc/aim/moea64_native.c projects/altix/sys/powerpc/aim/nexus.c projects/altix/sys/powerpc/aim/slb.c projects/altix/sys/powerpc/aim/trap.c projects/altix/sys/powerpc/aim/vm_machdep.c projects/altix/sys/powerpc/booke/machdep.c projects/altix/sys/powerpc/booke/platform_bare.c projects/altix/sys/powerpc/booke/pmap.c projects/altix/sys/powerpc/booke/vm_machdep.c projects/altix/sys/powerpc/conf/GENERIC64 projects/altix/sys/powerpc/conf/NOTES projects/altix/sys/powerpc/cpufreq/dfs.c projects/altix/sys/powerpc/cpufreq/pcr.c projects/altix/sys/powerpc/include/_inttypes.h projects/altix/sys/powerpc/include/_limits.h projects/altix/sys/powerpc/include/_stdint.h projects/altix/sys/powerpc/include/_types.h projects/altix/sys/powerpc/include/elf.h projects/altix/sys/powerpc/include/fdt.h projects/altix/sys/powerpc/include/float.h projects/altix/sys/powerpc/include/intr_machdep.h projects/altix/sys/powerpc/include/memdev.h projects/altix/sys/powerpc/include/metadata.h projects/altix/sys/powerpc/include/openpicvar.h projects/altix/sys/powerpc/include/pmap.h projects/altix/sys/powerpc/include/pte.h projects/altix/sys/powerpc/include/spr.h projects/altix/sys/powerpc/include/vmparam.h projects/altix/sys/powerpc/mambo/mambo_openpic.c projects/altix/sys/powerpc/mpc85xx/atpic.c projects/altix/sys/powerpc/mpc85xx/isa.c projects/altix/sys/powerpc/mpc85xx/nexus.c projects/altix/sys/powerpc/mpc85xx/openpic_fdt.c projects/altix/sys/powerpc/mpc85xx/pci_fdt.c projects/altix/sys/powerpc/ofw/ofw_pcib_pci.c projects/altix/sys/powerpc/ofw/ofw_pcibus.c projects/altix/sys/powerpc/ofw/ofw_real.c projects/altix/sys/powerpc/powermac/ata_kauai.c projects/altix/sys/powerpc/powermac/cpcht.c projects/altix/sys/powerpc/powermac/fcu.c projects/altix/sys/powerpc/powermac/grackle.c projects/altix/sys/powerpc/powermac/gracklevar.h projects/altix/sys/powerpc/powermac/hrowpic.c projects/altix/sys/powerpc/powermac/macgpio.c projects/altix/sys/powerpc/powermac/macio.c projects/altix/sys/powerpc/powermac/openpic_macio.c projects/altix/sys/powerpc/powermac/uninorth.c projects/altix/sys/powerpc/powermac/uninorthpci.c projects/altix/sys/powerpc/powermac/uninorthvar.h projects/altix/sys/powerpc/powerpc/elf32_machdep.c projects/altix/sys/powerpc/powerpc/elf64_machdep.c projects/altix/sys/powerpc/powerpc/exec_machdep.c projects/altix/sys/powerpc/powerpc/intr_machdep.c projects/altix/sys/powerpc/powerpc/mem.c projects/altix/sys/powerpc/powerpc/openpic.c projects/altix/sys/powerpc/powerpc/pic_if.m projects/altix/sys/powerpc/powerpc/uio_machdep.c projects/altix/sys/powerpc/psim/openpic_iobus.c projects/altix/sys/rpc/clnt_dg.c projects/altix/sys/rpc/clnt_vc.c projects/altix/sys/rpc/rpc_generic.c projects/altix/sys/rpc/svc.c projects/altix/sys/rpc/svc_dg.c projects/altix/sys/rpc/svc_generic.c projects/altix/sys/rpc/svc_vc.c projects/altix/sys/security/mac/mac_framework.c projects/altix/sys/security/mac/mac_process.c projects/altix/sys/security/mac_seeotheruids/mac_seeotheruids.c projects/altix/sys/sparc64/include/_limits.h projects/altix/sys/sparc64/include/_stdint.h projects/altix/sys/sparc64/include/asmacros.h projects/altix/sys/sparc64/include/cpufunc.h projects/altix/sys/sparc64/include/elf.h projects/altix/sys/sparc64/include/float.h projects/altix/sys/sparc64/include/intr_machdep.h projects/altix/sys/sparc64/include/memdev.h projects/altix/sys/sparc64/include/pmap.h projects/altix/sys/sparc64/include/tsb.h projects/altix/sys/sparc64/include/vmparam.h projects/altix/sys/sparc64/pci/apb.c projects/altix/sys/sparc64/pci/fire.c projects/altix/sys/sparc64/pci/ofw_pcib.c projects/altix/sys/sparc64/pci/psycho.c projects/altix/sys/sparc64/pci/schizo.c projects/altix/sys/sparc64/sbus/sbus.c projects/altix/sys/sparc64/sparc64/db_trace.c projects/altix/sys/sparc64/sparc64/exception.S projects/altix/sys/sparc64/sparc64/genassym.c projects/altix/sys/sparc64/sparc64/intr_machdep.c projects/altix/sys/sparc64/sparc64/machdep.c projects/altix/sys/sparc64/sparc64/mem.c projects/altix/sys/sparc64/sparc64/mp_machdep.c projects/altix/sys/sparc64/sparc64/pmap.c projects/altix/sys/sparc64/sparc64/support.S projects/altix/sys/sparc64/sparc64/tick.c projects/altix/sys/sparc64/sparc64/tlb.c projects/altix/sys/sparc64/sparc64/tsb.c projects/altix/sys/sparc64/sparc64/uio_machdep.c projects/altix/sys/sparc64/sparc64/vm_machdep.c projects/altix/sys/sun4v/include/_limits.h projects/altix/sys/sun4v/include/_stdint.h projects/altix/sys/sun4v/include/elf.h projects/altix/sys/sun4v/include/float.h projects/altix/sys/sun4v/include/memdev.h projects/altix/sys/sun4v/include/pmap.h projects/altix/sys/sun4v/include/vmparam.h projects/altix/sys/sun4v/sun4v/db_interface.c projects/altix/sys/sun4v/sun4v/db_trace.c projects/altix/sys/sun4v/sun4v/machdep.c projects/altix/sys/sun4v/sun4v/pmap.c projects/altix/sys/sun4v/sun4v/uio_machdep.c projects/altix/sys/sun4v/sun4v/vm_machdep.c projects/altix/sys/sys/_umtx.h projects/altix/sys/sys/bus.h projects/altix/sys/sys/cdefs.h projects/altix/sys/sys/copyright.h projects/altix/sys/sys/diskmbr.h projects/altix/sys/sys/fail.h projects/altix/sys/sys/gpt.h projects/altix/sys/sys/imgact.h projects/altix/sys/sys/link_elf.h projects/altix/sys/sys/linker.h projects/altix/sys/sys/memrange.h projects/altix/sys/sys/mount.h projects/altix/sys/sys/msgbuf.h projects/altix/sys/sys/mutex.h projects/altix/sys/sys/osd.h projects/altix/sys/sys/param.h projects/altix/sys/sys/pioctl.h projects/altix/sys/sys/priority.h projects/altix/sys/sys/proc.h projects/altix/sys/sys/ptrace.h projects/altix/sys/sys/sched.h projects/altix/sys/sys/sleepqueue.h projects/altix/sys/sys/sysctl.h projects/altix/sys/sys/sysent.h projects/altix/sys/sys/taskqueue.h projects/altix/sys/sys/turnstile.h projects/altix/sys/sys/uio.h projects/altix/sys/sys/umtx.h projects/altix/sys/sys/vmmeter.h projects/altix/sys/sys/vnode.h projects/altix/sys/ufs/ffs/ffs_alloc.c projects/altix/sys/ufs/ffs/ffs_rawread.c projects/altix/sys/ufs/ffs/ffs_snapshot.c projects/altix/sys/ufs/ffs/ffs_softdep.c projects/altix/sys/ufs/ffs/ffs_vfsops.c projects/altix/sys/ufs/ffs/fs.h projects/altix/sys/ufs/ffs/softdep.h projects/altix/sys/ufs/ufs/ufs_acl.c projects/altix/sys/ufs/ufs/ufs_inode.c projects/altix/sys/ufs/ufs/ufs_quota.c projects/altix/sys/ufs/ufs/ufs_vnops.c projects/altix/sys/ufs/ufs/ufsmount.h projects/altix/sys/vm/device_pager.c projects/altix/sys/vm/memguard.c projects/altix/sys/vm/phys_pager.c projects/altix/sys/vm/pmap.h projects/altix/sys/vm/sg_pager.c projects/altix/sys/vm/swap_pager.c projects/altix/sys/vm/uma_core.c projects/altix/sys/vm/vm_contig.c projects/altix/sys/vm/vm_extern.h projects/altix/sys/vm/vm_fault.c projects/altix/sys/vm/vm_glue.c projects/altix/sys/vm/vm_kern.c projects/altix/sys/vm/vm_map.c projects/altix/sys/vm/vm_map.h projects/altix/sys/vm/vm_meter.c projects/altix/sys/vm/vm_object.c projects/altix/sys/vm/vm_object.h projects/altix/sys/vm/vm_page.c projects/altix/sys/vm/vm_page.h projects/altix/sys/vm/vm_pageout.c projects/altix/sys/vm/vm_pager.c projects/altix/sys/vm/vm_pager.h projects/altix/sys/vm/vm_phys.c projects/altix/sys/vm/vm_reserv.c projects/altix/sys/x86/acpica/OsdEnvironment.c projects/altix/sys/x86/isa/atrtc.c projects/altix/sys/x86/x86/io_apic.c projects/altix/sys/x86/x86/local_apic.c projects/altix/sys/x86/x86/mca.c projects/altix/sys/x86/x86/nexus.c projects/altix/sys/xen/evtchn/evtchn.c projects/altix/sys/xen/xenbus/xenbusb.c projects/altix/sys/xen/xenstore/xenstore.c Directory Properties: projects/altix/lib/libstand/ (props changed) projects/altix/sys/ (props changed) projects/altix/sys/amd64/include/xen/ (props changed) projects/altix/sys/cddl/contrib/opensolaris/ (props changed) projects/altix/sys/contrib/dev/acpica/ (props changed) projects/altix/sys/contrib/octeon-sdk/ (props changed) projects/altix/sys/contrib/pf/ (props changed) projects/altix/sys/contrib/x86emu/ (props changed) Modified: projects/altix/lib/libstand/Makefile ============================================================================== --- projects/altix/lib/libstand/Makefile Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/lib/libstand/Makefile Fri Feb 18 21:39:09 2011 (r218823) @@ -22,10 +22,7 @@ CFLAGS+= -I${.CURDIR} .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" CFLAGS+= -mpreferred-stack-boundary=2 -CFLAGS+= -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -.endif -.if ${MACHINE_CPUARCH} == "i386" -CFLAGS+= -mno-sse3 +CFLAGS+= -mno-mmx -mno-3dnow -mno-sse -mno-sse2 -mno-sse3 -msoft-float .endif .if ${MACHINE} == "pc98" CFLAGS+= -Os Modified: projects/altix/sys/amd64/acpica/acpi_machdep.c ============================================================================== --- projects/altix/sys/amd64/acpica/acpi_machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/acpica/acpi_machdep.c Fri Feb 18 21:39:09 2011 (r218823) @@ -68,7 +68,7 @@ acpi_machdep_init(device_t dev) if (intr_model != ACPI_INTR_PIC) acpi_SetIntrModel(intr_model); - SYSCTL_ADD_UINT(&sc->acpi_sysctl_ctx, + SYSCTL_ADD_INT(&sc->acpi_sysctl_ctx, SYSCTL_CHILDREN(sc->acpi_sysctl_tree), OID_AUTO, "reset_video", CTLFLAG_RW, &acpi_reset_video, 0, "Call the VESA reset BIOS vector on the resume path"); Modified: projects/altix/sys/amd64/amd64/amd64_mem.c ============================================================================== --- projects/altix/sys/amd64/amd64/amd64_mem.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/amd64_mem.c Fri Feb 18 21:39:09 2011 (r218823) @@ -311,6 +311,8 @@ amd64_mrstoreone(void *arg) mrd = sc->mr_desc; + critical_enter(); + /* Disable PGE. */ cr4 = rcr4(); load_cr4(cr4 & ~CR4_PGE); @@ -399,6 +401,8 @@ amd64_mrstoreone(void *arg) /* Restore caches and PGE. */ load_cr0(cr0); load_cr4(cr4); + + critical_exit(); } /* Modified: projects/altix/sys/amd64/amd64/apic_vector.S ============================================================================== --- projects/altix/sys/amd64/amd64/apic_vector.S Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/apic_vector.S Fri Feb 18 21:39:09 2011 (r218823) @@ -58,17 +58,15 @@ IDTVEC(vec_name) ; \ FAKE_MCOUNT(TF_RIP(%rsp)) ; \ movq lapic, %rdx ; /* pointer to local APIC */ \ movl LA_ISR + 16 * (index)(%rdx), %eax ; /* load ISR */ \ - bsrl %eax, %eax ; /* index of highset set bit in ISR */ \ - jz 2f ; \ + bsrl %eax, %eax ; /* index of highest set bit in ISR */ \ + jz 1f ; \ addl $(32 * index),%eax ; \ -1: ; \ movq %rsp, %rsi ; \ movl %eax, %edi ; /* pass the IRQ */ \ call lapic_handle_intr ; \ +1: ; \ MEXITCOUNT ; \ - jmp doreti ; \ -2: movl $-1, %eax ; /* send a vector of -1 */ \ - jmp 1b + jmp doreti /* * Handle "spurious INTerrupts". Modified: projects/altix/sys/amd64/amd64/cpu_switch.S ============================================================================== --- projects/altix/sys/amd64/amd64/cpu_switch.S Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/cpu_switch.S Fri Feb 18 21:39:09 2011 (r218823) @@ -94,7 +94,7 @@ END(cpu_throw) ENTRY(cpu_switch) /* Switch to new thread. First, save context. */ movq TD_PCB(%rdi),%r8 - movb $1,PCB_FULL_IRET(%r8) + orl $PCB_FULL_IRET,PCB_FLAGS(%r8) movq (%rsp),%rax /* Hardware registers */ movq %r15,PCB_R15(%r8) Modified: projects/altix/sys/amd64/amd64/elf_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/elf_machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/elf_machdep.c Fri Feb 18 21:39:09 2011 (r218823) @@ -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/altix/sys/amd64/amd64/exception.S ============================================================================== --- projects/altix/sys/amd64/amd64/exception.S Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/exception.S Fri Feb 18 21:39:09 2011 (r218823) @@ -170,7 +170,7 @@ alltraps: jz alltraps_testi /* already running with kernel GS.base */ swapgs movq PCPU(CURPCB),%rdi - movb $0,PCB_FULL_IRET(%rdi) + andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) movw %fs,TF_FS(%rsp) movw %gs,TF_GS(%rsp) movw %es,TF_ES(%rsp) @@ -243,7 +243,7 @@ alltraps_noen: jz 1f /* already running with kernel GS.base */ swapgs movq PCPU(CURPCB),%rdi - movb $0,PCB_FULL_IRET(%rdi) + andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) 1: movw %fs,TF_FS(%rsp) movw %gs,TF_GS(%rsp) movw %es,TF_ES(%rsp) @@ -294,7 +294,7 @@ IDTVEC(page) jz 1f /* already running with kernel GS.base */ swapgs movq PCPU(CURPCB),%rdi - movb $0,PCB_FULL_IRET(%rdi) + andl $~PCB_FULL_IRET,PCB_FLAGS(%rdi) 1: movq %cr2,%rdi /* preserve %cr2 before .. */ movq %rdi,TF_ADDR(%rsp) /* enabling interrupts. */ movw %fs,TF_FS(%rsp) @@ -324,7 +324,7 @@ IDTVEC(prot) jz 2f /* already running with kernel GS.base */ 1: swapgs 2: movq PCPU(CURPCB),%rdi - movb $1,PCB_FULL_IRET(%rdi) /* always full iret from GPF */ + orl $PCB_FULL_IRET,PCB_FLAGS(%rdi) /* always full iret from GPF */ movw %fs,TF_FS(%rsp) movw %gs,TF_GS(%rsp) movw %es,TF_ES(%rsp) @@ -356,7 +356,7 @@ IDTVEC(fast_syscall) movw %es,TF_ES(%rsp) movw %ds,TF_DS(%rsp) movq PCPU(CURPCB),%r11 - movb $0,PCB_FULL_IRET(%r11) + andl $~PCB_FULL_IRET,PCB_FLAGS(%r11) sti movq $KUDSEL,TF_SS(%rsp) movq $KUCSEL,TF_CS(%rsp) @@ -380,7 +380,6 @@ IDTVEC(fast_syscall) movq %rsp,%rdi call syscall movq PCPU(CURPCB),%rax - andq $~PCB_FULLCTX,PCB_FLAGS(%rax) MEXITCOUNT jmp doreti @@ -662,8 +661,8 @@ doreti_exit: */ testb $SEL_RPL_MASK,TF_CS(%rsp) jz ld_regs - cmpb $0,PCB_FULL_IRET(%r8) - je ld_regs + testl $PCB_FULL_IRET,PCB_FLAGS(%r8) + jz ld_regs testl $TF_HASSEGS,TF_FLAGS(%rsp) je set_segs Modified: projects/altix/sys/amd64/amd64/fpu.c ============================================================================== --- projects/altix/sys/amd64/amd64/fpu.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/fpu.c Fri Feb 18 21:39:09 2011 (r218823) @@ -426,7 +426,11 @@ fpudna(void) fxrstor(&fpu_initialstate); if (pcb->pcb_initial_fpucw != __INITIAL_FPUCW__) fldcw(pcb->pcb_initial_fpucw); - fpuuserinited(curthread); + if (PCB_USER_FPU(pcb)) + set_pcb_flags(pcb, + PCB_FPUINITDONE | PCB_USERFPUINITDONE); + else + set_pcb_flags(pcb, PCB_FPUINITDONE); } else fxrstor(pcb->pcb_save); critical_exit(); @@ -441,7 +445,7 @@ fpudrop() KASSERT(td == curthread, ("fpudrop: fpcurthread != curthread")); CRITICAL_ASSERT(td); PCPU_SET(fpcurthread, NULL); - td->td_pcb->pcb_flags &= ~PCB_FPUINITDONE; + clear_pcb_flags(td->td_pcb, PCB_FPUINITDONE); start_emulating(); } @@ -481,8 +485,10 @@ fpuuserinited(struct thread *td) pcb = td->td_pcb; if (PCB_USER_FPU(pcb)) - pcb->pcb_flags |= PCB_FPUINITDONE; - pcb->pcb_flags |= PCB_USERFPUINITDONE; + set_pcb_flags(pcb, + PCB_FPUINITDONE | PCB_USERFPUINITDONE); + else + set_pcb_flags(pcb, PCB_FPUINITDONE); } /* @@ -498,7 +504,7 @@ fpusetregs(struct thread *td, struct sav if (td == PCPU_GET(fpcurthread) && PCB_USER_FPU(pcb)) { fxrstor(addr); critical_exit(); - pcb->pcb_flags |= PCB_FPUINITDONE | PCB_USERFPUINITDONE; + set_pcb_flags(pcb, PCB_FPUINITDONE | PCB_USERFPUINITDONE); } else { critical_exit(); bcopy(addr, &td->td_pcb->pcb_user_save, sizeof(*addr)); @@ -607,8 +613,8 @@ fpu_kern_enter(struct thread *td, struct fpuexit(td); ctx->prev = pcb->pcb_save; pcb->pcb_save = &ctx->hwstate; - pcb->pcb_flags |= PCB_KERNFPU; - pcb->pcb_flags &= ~PCB_FPUINITDONE; + set_pcb_flags(pcb, PCB_KERNFPU); + clear_pcb_flags(pcb, PCB_FPUINITDONE); return (0); } @@ -624,16 +630,16 @@ fpu_kern_leave(struct thread *td, struct critical_exit(); pcb->pcb_save = ctx->prev; if (pcb->pcb_save == &pcb->pcb_user_save) { - if ((pcb->pcb_flags & PCB_USERFPUINITDONE) != 0) - pcb->pcb_flags |= PCB_FPUINITDONE; - else - pcb->pcb_flags &= ~PCB_FPUINITDONE; - pcb->pcb_flags &= ~PCB_KERNFPU; + if ((pcb->pcb_flags & PCB_USERFPUINITDONE) != 0) { + set_pcb_flags(pcb, PCB_FPUINITDONE); + clear_pcb_flags(pcb, PCB_KERNFPU); + } else + clear_pcb_flags(pcb, PCB_FPUINITDONE | PCB_KERNFPU); } else { if ((ctx->flags & FPU_KERN_CTX_FPUINITDONE) != 0) - pcb->pcb_flags |= PCB_FPUINITDONE; + set_pcb_flags(pcb, PCB_FPUINITDONE); else - pcb->pcb_flags &= ~PCB_FPUINITDONE; + clear_pcb_flags(pcb, PCB_FPUINITDONE); KASSERT(!PCB_USER_FPU(pcb), ("unpaired fpu_kern_leave")); } return (0); @@ -650,7 +656,7 @@ fpu_kern_thread(u_int flags) KASSERT(pcb->pcb_save == &pcb->pcb_user_save, ("mangled pcb_save")); KASSERT(PCB_USER_FPU(pcb), ("recursive call")); - pcb->pcb_flags |= PCB_KERNFPU; + set_pcb_flags(pcb, PCB_KERNFPU); return (0); } Modified: projects/altix/sys/amd64/amd64/genassym.c ============================================================================== --- projects/altix/sys/amd64/amd64/genassym.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/genassym.c Fri Feb 18 21:39:09 2011 (r218823) @@ -145,23 +145,22 @@ ASSYM(PCB_DR2, offsetof(struct pcb, pcb_ ASSYM(PCB_DR3, offsetof(struct pcb, pcb_dr3)); ASSYM(PCB_DR6, offsetof(struct pcb, pcb_dr6)); ASSYM(PCB_DR7, offsetof(struct pcb, pcb_dr7)); +ASSYM(PCB_GDT, offsetof(struct pcb, pcb_gdt)); +ASSYM(PCB_IDT, offsetof(struct pcb, pcb_idt)); +ASSYM(PCB_LDT, offsetof(struct pcb, pcb_ldt)); +ASSYM(PCB_TR, offsetof(struct pcb, pcb_tr)); ASSYM(PCB_FLAGS, offsetof(struct pcb, pcb_flags)); ASSYM(PCB_ONFAULT, offsetof(struct pcb, pcb_onfault)); ASSYM(PCB_GS32SD, offsetof(struct pcb, pcb_gs32sd)); ASSYM(PCB_TSSP, offsetof(struct pcb, pcb_tssp)); ASSYM(PCB_SAVEFPU, offsetof(struct pcb, pcb_save)); ASSYM(PCB_SAVEFPU_SIZE, sizeof(struct savefpu)); -ASSYM(PCB_FULL_IRET, offsetof(struct pcb, pcb_full_iret)); -ASSYM(PCB_GDT, offsetof(struct pcb, pcb_gdt)); -ASSYM(PCB_IDT, offsetof(struct pcb, pcb_idt)); -ASSYM(PCB_LDT, offsetof(struct pcb, pcb_ldt)); -ASSYM(PCB_TR, offsetof(struct pcb, pcb_tr)); ASSYM(PCB_USERFPU, offsetof(struct pcb, pcb_user_save)); ASSYM(PCB_SIZE, sizeof(struct pcb)); +ASSYM(PCB_FULL_IRET, PCB_FULL_IRET); ASSYM(PCB_DBREGS, PCB_DBREGS); -ASSYM(PCB_32BIT, PCB_32BIT); ASSYM(PCB_GS32BIT, PCB_GS32BIT); -ASSYM(PCB_FULLCTX, PCB_FULLCTX); +ASSYM(PCB_32BIT, PCB_32BIT); ASSYM(COMMON_TSS_RSP0, offsetof(struct amd64tss, tss_rsp0)); Modified: projects/altix/sys/amd64/amd64/identcpu.c ============================================================================== --- projects/altix/sys/amd64/amd64/identcpu.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/identcpu.c Fri Feb 18 21:39:09 2011 (r218823) @@ -109,6 +109,8 @@ static int hw_clockrate; SYSCTL_INT(_hw, OID_AUTO, clockrate, CTLFLAG_RD, &hw_clockrate, 0, "CPU instruction clock rate"); +static eventhandler_tag tsc_post_tag; + static char cpu_brand[48]; static struct { @@ -392,28 +394,6 @@ printcpuinfo(void) * If this CPU supports P-state invariant TSC then * mention the capability. */ - switch (cpu_vendor_id) { - case CPU_VENDOR_AMD: - if ((amd_pminfo & AMDPM_TSC_INVARIANT) || - CPUID_TO_FAMILY(cpu_id) >= 0x10 || - cpu_id == 0x60fb2) - tsc_is_invariant = 1; - break; - case CPU_VENDOR_INTEL: - if ((amd_pminfo & AMDPM_TSC_INVARIANT) || - (CPUID_TO_FAMILY(cpu_id) == 0x6 && - CPUID_TO_MODEL(cpu_id) >= 0xe) || - (CPUID_TO_FAMILY(cpu_id) == 0xf && - CPUID_TO_MODEL(cpu_id) >= 0x3)) - tsc_is_invariant = 1; - break; - case CPU_VENDOR_CENTAUR: - if (CPUID_TO_FAMILY(cpu_id) == 0x6 && - CPUID_TO_MODEL(cpu_id) >= 0xf && - (rdmsr(0x1203) & 0x100000000ULL) == 0) - tsc_is_invariant = 1; - break; - } if (tsc_is_invariant) printf("\n TSC: P-state invariant"); @@ -455,21 +435,29 @@ panicifcpuunsupported(void) /* Update TSC freq with the value indicated by the caller. */ static void -tsc_freq_changed(void *arg, const struct cf_level *level, int status) +tsc_freq_changed(void *arg __unused, const struct cf_level *level, int status) { - /* - * If there was an error during the transition or - * TSC is P-state invariant, don't do anything. - */ - if (status != 0 || tsc_is_invariant) + + /* If there was an error during the transition, don't do anything. */ + if (status != 0) return; /* Total setting for this level gives the new frequency in MHz. */ hw_clockrate = level->total_set.freq; } -EVENTHANDLER_DEFINE(cpufreq_post_change, tsc_freq_changed, NULL, - EVENTHANDLER_PRI_ANY); +static void +hook_tsc_freq(void *arg __unused) +{ + + if (tsc_is_invariant) + return; + + tsc_post_tag = EVENTHANDLER_REGISTER(cpufreq_post_change, + tsc_freq_changed, NULL, EVENTHANDLER_PRI_ANY); +} + +SYSINIT(hook_tsc_freq, SI_SUB_CONFIGURE, SI_ORDER_ANY, hook_tsc_freq, NULL); /* * Final stage of CPU identification. Modified: projects/altix/sys/amd64/amd64/legacy.c ============================================================================== --- projects/altix/sys/amd64/amd64/legacy.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/legacy.c Fri Feb 18 21:39:09 2011 (r218823) @@ -47,6 +47,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -313,9 +314,19 @@ cpu_read_ivar(device_t dev, device_t chi { struct cpu_device *cpdev; - if (index != CPU_IVAR_PCPU) + switch (index) { + case CPU_IVAR_PCPU: + cpdev = device_get_ivars(child); + *result = (uintptr_t)cpdev->cd_pcpu; + break; + case CPU_IVAR_NOMINAL_MHZ: + if (tsc_is_invariant) { + *result = (uintptr_t)(tsc_freq / 1000000); + break; + } + /* FALLTHROUGH */ + default: return (ENOENT); - cpdev = device_get_ivars(child); - *result = (uintptr_t)cpdev->cd_pcpu; + } return (0); } Modified: projects/altix/sys/amd64/amd64/machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/machdep.c Fri Feb 18 21:39:09 2011 (r218823) @@ -51,7 +51,6 @@ __FBSDID("$FreeBSD$"); #include "opt_isa.h" #include "opt_kstack_pages.h" #include "opt_maxmem.h" -#include "opt_msgbuf.h" #include "opt_perfmon.h" #include "opt_sched.h" #include "opt_kdtrace.h" @@ -74,7 +73,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -196,8 +194,6 @@ struct pcpu __pcpu[MAXCPU]; struct mtx icu_lock; -struct mem_range_softc mem_range_softc; - struct mtx dt_lock; /* lock for GDT and LDT */ static void @@ -303,6 +299,7 @@ void sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) { struct sigframe sf, *sfp; + struct pcb *pcb; struct proc *p; struct thread *td; struct sigacts *psp; @@ -312,6 +309,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, int oonstack; td = curthread; + pcb = td->td_pcb; p = td->td_proc; PROC_LOCK_ASSERT(p, MA_OWNED); sig = ksi->ksi_signo; @@ -331,8 +329,11 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, sf.sf_uc.uc_mcontext.mc_len = sizeof(sf.sf_uc.uc_mcontext); /* magic */ get_fpcontext(td, &sf.sf_uc.uc_mcontext); fpstate_drop(td); - sf.sf_uc.uc_mcontext.mc_fsbase = td->td_pcb->pcb_fsbase; - sf.sf_uc.uc_mcontext.mc_gsbase = td->td_pcb->pcb_gsbase; + sf.sf_uc.uc_mcontext.mc_fsbase = pcb->pcb_fsbase; + sf.sf_uc.uc_mcontext.mc_gsbase = pcb->pcb_gsbase; + bzero(sf.sf_uc.uc_mcontext.mc_spare, + sizeof(sf.sf_uc.uc_mcontext.mc_spare)); + bzero(sf.sf_uc.__spare__, sizeof(sf.sf_uc.__spare__)); /* Allocate space for the signal handler context. */ if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack && @@ -354,6 +355,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, /* Build the argument list for the signal handler. */ regs->tf_rdi = sig; /* arg 1 in %rdi */ regs->tf_rdx = (register_t)&sfp->sf_uc; /* arg 3 in %rdx */ + bzero(&sf.sf_si, sizeof(sf.sf_si)); if (SIGISMEMBER(psp->ps_siginfo, sig)) { /* Signal handler installed with SA_SIGINFO. */ regs->tf_rsi = (register_t)&sfp->sf_si; /* arg 2 in %rsi */ @@ -384,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; @@ -392,7 +394,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, regs->tf_fs = _ufssel; regs->tf_gs = _ugssel; regs->tf_flags = TF_HASSEGS; - td->td_pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); PROC_LOCK(p); mtx_lock(&psp->ps_mtx); } @@ -416,13 +418,17 @@ sigreturn(td, uap) } */ *uap; { ucontext_t uc; - struct proc *p = td->td_proc; + struct pcb *pcb; + struct proc *p; struct trapframe *regs; ucontext_t *ucp; long rflags; int cs, error, ret; ksiginfo_t ksi; + pcb = td->td_pcb; + p = td->td_proc; + error = copyin(uap->sigcntxp, &uc, sizeof(uc)); if (error != 0) { uprintf("pid %d (%s): sigreturn copyin failed\n", @@ -481,8 +487,8 @@ sigreturn(td, uap) return (ret); } bcopy(&ucp->uc_mcontext.mc_rdi, regs, sizeof(*regs)); - td->td_pcb->pcb_fsbase = ucp->uc_mcontext.mc_fsbase; - td->td_pcb->pcb_gsbase = ucp->uc_mcontext.mc_gsbase; + pcb->pcb_fsbase = ucp->uc_mcontext.mc_fsbase; + pcb->pcb_gsbase = ucp->uc_mcontext.mc_gsbase; #if defined(COMPAT_43) if (ucp->uc_mcontext.mc_onstack & 1) @@ -492,8 +498,7 @@ sigreturn(td, uap) #endif kern_sigprocmask(td, SIG_SETMASK, &ucp->uc_sigmask, NULL, 0); - td->td_pcb->pcb_flags |= PCB_FULLCTX; - td->td_pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); return (EJUSTRETURN); } @@ -538,6 +543,10 @@ cpu_est_clockrate(int cpu_id, uint64_t * if (pcpu_find(cpu_id) == NULL || rate == NULL) return (EINVAL); + /* If TSC is P-state invariant, DELAY(9) based logic fails. */ + if (tsc_is_invariant) + return (EOPNOTSUPP); + /* If we're booting, trust the rate calibrated moments ago. */ if (cold) { *rate = tsc_freq; @@ -564,13 +573,7 @@ cpu_est_clockrate(int cpu_id, uint64_t * thread_unlock(curthread); #endif - /* - * Calculate the difference in readings, convert to Mhz, and - * subtract 0.5% of the total. Empirical testing has shown that - * overhead in DELAY() works out to approximately this value. - */ - tsc2 -= tsc1; - *rate = tsc2 * 1000 - tsc2 * 5; + *rate = (tsc2 - tsc1) * 1000; return (0); } @@ -860,9 +863,9 @@ exec_setregs(struct thread *td, struct i pcb->pcb_fsbase = 0; pcb->pcb_gsbase = 0; - pcb->pcb_flags &= ~(PCB_32BIT | PCB_GS32BIT); + clear_pcb_flags(pcb, PCB_32BIT | PCB_GS32BIT); pcb->pcb_initial_fpucw = __INITIAL_FPUCW__; - pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); bzero((char *)regs, sizeof(struct trapframe)); regs->tf_rip = imgp->entry_addr; @@ -876,6 +879,7 @@ exec_setregs(struct thread *td, struct i regs->tf_fs = _ufssel; regs->tf_gs = _ugssel; regs->tf_flags = TF_HASSEGS; + td->td_retval[1] = 0; /* * Reset the hardware debug registers if they were in use. @@ -896,7 +900,7 @@ exec_setregs(struct thread *td, struct i */ reset_dbregs(); } - pcb->pcb_flags &= ~PCB_DBREGS; + clear_pcb_flags(pcb, PCB_DBREGS); } /* @@ -1503,7 +1507,7 @@ do_next: * calculation, etc.). */ while (phys_avail[pa_indx - 1] + PAGE_SIZE + - round_page(MSGBUF_SIZE) >= phys_avail[pa_indx]) { + round_page(msgbufsize) >= phys_avail[pa_indx]) { physmem -= atop(phys_avail[pa_indx] - phys_avail[pa_indx - 1]); phys_avail[pa_indx--] = 0; phys_avail[pa_indx--] = 0; @@ -1512,7 +1516,7 @@ do_next: Maxmem = atop(phys_avail[pa_indx]); /* Trim off space for the message buffer. */ - phys_avail[pa_indx] -= round_page(MSGBUF_SIZE); + phys_avail[pa_indx] -= round_page(msgbufsize); /* Map the message buffer. */ msgbufp = (struct msgbuf *)PHYS_TO_DMAP(phys_avail[pa_indx]); @@ -1527,12 +1531,14 @@ hammer_time(u_int64_t modulep, u_int64_t struct nmi_pcpu *np; u_int64_t msr; char *env; + size_t kstack0_sz; thread0.td_kstack = physfree + KERNBASE; - bzero((void *)thread0.td_kstack, KSTACK_PAGES * PAGE_SIZE); - physfree += KSTACK_PAGES * PAGE_SIZE; - thread0.td_pcb = (struct pcb *) - (thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1; + thread0.td_kstack_pages = KSTACK_PAGES; + kstack0_sz = thread0.td_kstack_pages * PAGE_SIZE; + bzero((void *)thread0.td_kstack, kstack0_sz); + physfree += kstack0_sz; + thread0.td_pcb = (struct pcb *)(thread0.td_kstack + kstack0_sz) - 1; /* * This may be done better later if it gets more high level @@ -1674,8 +1680,8 @@ hammer_time(u_int64_t modulep, u_int64_t initializecpucache(); /* make an initial tss so cpu can get interrupt stack on syscall! */ - common_tss[0].tss_rsp0 = thread0.td_kstack + \ - KSTACK_PAGES * PAGE_SIZE - sizeof(struct pcb); + common_tss[0].tss_rsp0 = thread0.td_kstack + + kstack0_sz - sizeof(struct pcb); /* Ensure the stack is aligned to 16 bytes */ common_tss[0].tss_rsp0 &= ~0xFul; PCPU_SET(rsp0, common_tss[0].tss_rsp0); @@ -1713,7 +1719,7 @@ hammer_time(u_int64_t modulep, u_int64_t /* now running on new page tables, configured,and u/iom is accessible */ - msgbufinit(msgbufp, MSGBUF_SIZE); + msgbufinit(msgbufp, msgbufsize); fpuinit(); /* transfer to user mode */ @@ -1836,6 +1842,12 @@ fill_regs(struct thread *td, struct reg struct trapframe *tp; tp = td->td_frame; + return (fill_frame_regs(tp, regs)); +} + +int +fill_frame_regs(struct trapframe *tp, struct reg *regs) +{ regs->r_r15 = tp->tf_r15; regs->r_r14 = tp->tf_r14; regs->r_r13 = tp->tf_r13; @@ -1906,8 +1918,8 @@ set_regs(struct thread *td, struct reg * tp->tf_fs = regs->r_fs; tp->tf_gs = regs->r_gs; tp->tf_flags = TF_HASSEGS; + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); } - td->td_pcb->pcb_flags |= PCB_FULLCTX; return (0); } @@ -1998,8 +2010,10 @@ set_fpregs(struct thread *td, struct fpr int get_mcontext(struct thread *td, mcontext_t *mcp, int flags) { + struct pcb *pcb; struct trapframe *tp; + pcb = td->td_pcb; tp = td->td_frame; PROC_LOCK(curthread->td_proc); mcp->mc_onstack = sigonstack(tp->tf_rsp); @@ -2037,8 +2051,9 @@ get_mcontext(struct thread *td, mcontext mcp->mc_flags = tp->tf_flags; mcp->mc_len = sizeof(*mcp); get_fpcontext(td, mcp); - mcp->mc_fsbase = td->td_pcb->pcb_fsbase; - mcp->mc_gsbase = td->td_pcb->pcb_gsbase; + mcp->mc_fsbase = pcb->pcb_fsbase; + mcp->mc_gsbase = pcb->pcb_gsbase; + bzero(mcp->mc_spare, sizeof(mcp->mc_spare)); return (0); } @@ -2051,10 +2066,12 @@ get_mcontext(struct thread *td, mcontext int set_mcontext(struct thread *td, const mcontext_t *mcp) { + struct pcb *pcb; struct trapframe *tp; long rflags; int ret; + pcb = td->td_pcb; tp = td->td_frame; if (mcp->mc_len != sizeof(*mcp) || (mcp->mc_flags & ~_MC_FLAG_MASK) != 0) @@ -2091,11 +2108,10 @@ set_mcontext(struct thread *td, const mc tp->tf_gs = mcp->mc_gs; } if (mcp->mc_flags & _MC_HASBASES) { - td->td_pcb->pcb_fsbase = mcp->mc_fsbase; - td->td_pcb->pcb_gsbase = mcp->mc_gsbase; + pcb->pcb_fsbase = mcp->mc_fsbase; + pcb->pcb_gsbase = mcp->mc_gsbase; } - td->td_pcb->pcb_flags |= PCB_FULLCTX; - td->td_pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); return (0); } @@ -2149,8 +2165,8 @@ fpstate_drop(struct thread *td) * sendsig() is the only caller of fpugetuserregs()... perhaps we just * have too many layers. */ - curthread->td_pcb->pcb_flags &= ~(PCB_FPUINITDONE | - PCB_USERFPUINITDONE); + clear_pcb_flags(curthread->td_pcb, + PCB_FPUINITDONE | PCB_USERFPUINITDONE); critical_exit(); } @@ -2264,7 +2280,7 @@ set_dbregs(struct thread *td, struct dbr pcb->pcb_dr6 = dbregs->dr[6]; pcb->pcb_dr7 = dbregs->dr[7]; - pcb->pcb_flags |= PCB_DBREGS; + set_pcb_flags(pcb, PCB_DBREGS); } return (0); Modified: projects/altix/sys/amd64/amd64/mem.c ============================================================================== --- projects/altix/sys/amd64/amd64/mem.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/mem.c Fri Feb 18 21:39:09 2011 (r218823) @@ -72,6 +72,8 @@ __FBSDID("$FreeBSD$"); */ MALLOC_DEFINE(M_MEMDESC, "memdesc", "memory range descriptors"); +struct mem_range_softc mem_range_softc; + /* ARGSUSED */ int memrw(struct cdev *dev, struct uio *uio, int flags) @@ -214,10 +216,3 @@ memioctl(struct cdev *dev __unused, u_lo } return (error); } - -void -dev_mem_md_init(void) -{ - if (mem_range_softc.mr_op != NULL) - mem_range_softc.mr_op->init(&mem_range_softc); -} Modified: projects/altix/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/mp_machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/mp_machdep.c Fri Feb 18 21:39:09 2011 (r218823) @@ -1045,23 +1045,23 @@ u_int ipi_global; u_int ipi_page; u_int ipi_range; u_int ipi_range_size; -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_global, CTLFLAG_RW, &ipi_global, 0, ""); -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_page, CTLFLAG_RW, &ipi_page, 0, ""); -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_range, CTLFLAG_RW, &ipi_range, 0, ""); -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_range_size, CTLFLAG_RW, &ipi_range_size, - 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_global, CTLFLAG_RW, &ipi_global, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_page, CTLFLAG_RW, &ipi_page, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_range, CTLFLAG_RW, &ipi_range, 0, ""); +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_range_size, CTLFLAG_RW, + &ipi_range_size, 0, ""); u_int ipi_masked_global; u_int ipi_masked_page; u_int ipi_masked_range; u_int ipi_masked_range_size; -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_masked_global, CTLFLAG_RW, +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_global, CTLFLAG_RW, &ipi_masked_global, 0, ""); -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_masked_page, CTLFLAG_RW, +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_page, CTLFLAG_RW, &ipi_masked_page, 0, ""); -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_masked_range, CTLFLAG_RW, +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_range, CTLFLAG_RW, &ipi_masked_range, 0, ""); -SYSCTL_INT(_debug_xhits, OID_AUTO, ipi_masked_range_size, CTLFLAG_RW, +SYSCTL_UINT(_debug_xhits, OID_AUTO, ipi_masked_range_size, CTLFLAG_RW, &ipi_masked_range_size, 0, ""); #endif /* COUNT_XINVLTLB_HITS */ Modified: projects/altix/sys/amd64/amd64/sys_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/sys_machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/sys_machdep.c Fri Feb 18 21:39:09 2011 (r218823) @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -58,9 +59,24 @@ __FBSDID("$FreeBSD$"); #include +#define MAX_LD 8192 + int max_ldt_segment = 1024; -#define LD_PER_PAGE 512 -#define NULL_LDT_BASE ((caddr_t)NULL) +SYSCTL_INT(_machdep, OID_AUTO, max_ldt_segment, CTLFLAG_RDTUN, + &max_ldt_segment, 0, + "Maximum number of allowed LDT segments in the single address space"); + +static void +max_ldt_segment_init(void *arg __unused) +{ + + TUNABLE_INT_FETCH("machdep.max_ldt_segment", &max_ldt_segment); + if (max_ldt_segment <= 0) + max_ldt_segment = 1; + if (max_ldt_segment > MAX_LD) + max_ldt_segment = MAX_LD; +} +SYSINIT(maxldt, SI_SUB_VM_CONF, SI_ORDER_ANY, max_ldt_segment_init, NULL); #ifdef notyet #ifdef SMP @@ -95,29 +111,23 @@ sysarch_ldt(struct thread *td, struct sy largs = &la; } else largs = (struct i386_ldt_args *)uap->parms; - if (largs->num > max_ldt_segment || largs->num <= 0) - return (EINVAL); switch (uap->op) { case I386_GET_LDT: error = amd64_get_ldt(td, largs); break; case I386_SET_LDT: - td->td_pcb->pcb_full_iret = 1; + if (largs->descs != NULL && largs->num > max_ldt_segment) + return (EINVAL); + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); if (largs->descs != NULL) { - lp = (struct user_segment_descriptor *) - kmem_alloc(kernel_map, largs->num * - sizeof(struct user_segment_descriptor)); - if (lp == NULL) { - error = ENOMEM; - break; - } + lp = malloc(largs->num * sizeof(struct + user_segment_descriptor), M_TEMP, M_WAITOK); error = copyin(largs->descs, lp, largs->num * sizeof(struct user_segment_descriptor)); if (error == 0) error = amd64_set_ldt(td, largs, lp); - kmem_free(kernel_map, (vm_offset_t)lp, largs->num * - sizeof(struct user_segment_descriptor)); + free(lp, M_TEMP); } else { error = amd64_set_ldt(td, largs, NULL); } @@ -133,7 +143,7 @@ update_gdt_gsbase(struct thread *td, uin if (td != curthread) return; - td->td_pcb->pcb_full_iret = 1; + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); critical_enter(); sd = PCPU_GET(gs32p); sd->sd_lobase = base & 0xffffff; @@ -148,7 +158,7 @@ update_gdt_fsbase(struct thread *td, uin if (td != curthread) return; - td->td_pcb->pcb_full_iret = 1; + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); critical_enter(); sd = PCPU_GET(fs32p); sd->sd_lobase = base & 0xffffff; @@ -204,7 +214,7 @@ sysarch(td, uap) if (!error) { pcb->pcb_fsbase = i386base; td->td_frame->tf_fs = _ufssel; - pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); update_gdt_fsbase(td, i386base); } break; @@ -216,7 +226,7 @@ sysarch(td, uap) error = copyin(uap->parms, &i386base, sizeof(i386base)); if (!error) { pcb->pcb_gsbase = i386base; - pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); td->td_frame->tf_gs = _ugssel; update_gdt_gsbase(td, i386base); } @@ -230,7 +240,7 @@ sysarch(td, uap) if (!error) { if (a64base < VM_MAXUSER_ADDRESS) { pcb->pcb_fsbase = a64base; - pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); td->td_frame->tf_fs = _ufssel; } else error = EINVAL; @@ -246,7 +256,7 @@ sysarch(td, uap) if (!error) { if (a64base < VM_MAXUSER_ADDRESS) { pcb->pcb_gsbase = a64base; - pcb->pcb_full_iret = 1; + set_pcb_flags(pcb, PCB_FULL_IRET); td->td_frame->tf_gs = _ugssel; } else error = EINVAL; @@ -533,13 +543,13 @@ amd64_set_ldt(td, uap, descs) uap->start, uap->num, (void *)uap->descs); #endif - td->td_pcb->pcb_full_iret = 1; + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); p = td->td_proc; if (descs == NULL) { /* Free descriptors */ if (uap->start == 0 && uap->num == 0) uap->num = max_ldt_segment; - if (uap->num <= 0) + if (uap->num == 0) return (EINVAL); if ((pldt = mdp->md_ldt) == NULL || uap->start >= max_ldt_segment) @@ -559,7 +569,7 @@ amd64_set_ldt(td, uap, descs) /* verify range of descriptors to modify */ largest_ld = uap->start + uap->num; if (uap->start >= max_ldt_segment || - uap->num < 0 || largest_ld > max_ldt_segment) + largest_ld > max_ldt_segment) return (EINVAL); } Modified: projects/altix/sys/amd64/amd64/trap.c ============================================================================== --- projects/altix/sys/amd64/amd64/trap.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/trap.c Fri Feb 18 21:39:09 2011 (r218823) @@ -249,38 +249,8 @@ trap(struct trapframe *frame) if (type == T_DTRACE_PROBE || type == T_DTRACE_RET || type == T_BPTFLT) { struct reg regs; - - regs.r_r15 = frame->tf_r15; - regs.r_r14 = frame->tf_r14; - regs.r_r13 = frame->tf_r13; - regs.r_r12 = frame->tf_r12; - regs.r_r11 = frame->tf_r11; - regs.r_r10 = frame->tf_r10; - regs.r_r9 = frame->tf_r9; - regs.r_r8 = frame->tf_r8; - regs.r_rdi = frame->tf_rdi; - regs.r_rsi = frame->tf_rsi; - regs.r_rbp = frame->tf_rbp; - regs.r_rbx = frame->tf_rbx; - regs.r_rdx = frame->tf_rdx; - regs.r_rcx = frame->tf_rcx; - regs.r_rax = frame->tf_rax; - regs.r_rip = frame->tf_rip; - regs.r_cs = frame->tf_cs; - regs.r_rflags = frame->tf_rflags; - regs.r_rsp = frame->tf_rsp; - regs.r_ss = frame->tf_ss; - if (frame->tf_flags & TF_HASSEGS) { - regs.r_ds = frame->tf_ds; - regs.r_es = frame->tf_es; - regs.r_fs = frame->tf_fs; - regs.r_gs = frame->tf_gs; - } else { - regs.r_ds = 0; - regs.r_es = 0; - regs.r_fs = 0; - regs.r_gs = 0; - } + + fill_frame_regs(frame, ®s); if (type == T_DTRACE_PROBE && dtrace_fasttrap_probe_ptr != NULL && dtrace_fasttrap_probe_ptr(®s) == 0) Modified: projects/altix/sys/amd64/amd64/uio_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/uio_machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/uio_machdep.c Fri Feb 18 21:39:09 2011 (r218823) @@ -88,8 +88,7 @@ uiomove_fromphys(vm_page_t ma[], vm_offs page_offset; switch (uio->uio_segflg) { case UIO_USERSPACE: - if (ticks - PCPU_GET(switchticks) >= hogticks) - uio_yield(); + maybe_yield(); if (uio->uio_rw == UIO_READ) error = copyout(cp, iov->iov_base, cnt); else Modified: projects/altix/sys/amd64/amd64/vm_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/vm_machdep.c Fri Feb 18 20:54:12 2011 (r218822) +++ projects/altix/sys/amd64/amd64/vm_machdep.c Fri Feb 18 21:39:09 2011 (r218823) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Feb 18 23:47: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 370CD1065673; Fri, 18 Feb 2011 23:47:59 +0000 (UTC) (envelope-from eri@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 273DA8FC0C; Fri, 18 Feb 2011 23:47: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 p1INlxAk076945; Fri, 18 Feb 2011 23:47:59 GMT (envelope-from eri@svn.freebsd.org) Received: (from eri@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1INlxAf076943; Fri, 18 Feb 2011 23:47:59 GMT (envelope-from eri@svn.freebsd.org) Message-Id: <201102182347.p1INlxAf076943@svn.freebsd.org> From: Ermal Luçi Date: Fri, 18 Feb 2011 23:47: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: r218829 - projects/pf/pf45/sys/contrib/altq/altq 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, 18 Feb 2011 23:47:59 -0000 Author: eri Date: Fri Feb 18 23:47:58 2011 New Revision: 218829 URL: http://svn.freebsd.org/changeset/base/218829 Log: Fix compiling ALTQ_REQ/ALTQ_RIO/ALTQ_ECN options. Modified: projects/pf/pf45/sys/contrib/altq/altq/altq_red.c Modified: projects/pf/pf45/sys/contrib/altq/altq/altq_red.c ============================================================================== --- projects/pf/pf45/sys/contrib/altq/altq/altq_red.c Fri Feb 18 23:18:08 2011 (r218828) +++ projects/pf/pf45/sys/contrib/altq/altq/altq_red.c Fri Feb 18 23:47:58 2011 (r218829) @@ -516,11 +516,9 @@ mark_ecn(struct mbuf *m, struct altq_pkt struct mbuf *m0; struct pf_mtag *at; void *hdr; - int af; at = pf_find_mtag(m); if (at != NULL) { - af = at->af; hdr = at->hdr; #ifdef ALTQ3_COMPAT } else if (pktattr != NULL) { @@ -530,9 +528,6 @@ mark_ecn(struct mbuf *m, struct altq_pkt } else return (0); - if (af != AF_INET && af != AF_INET6) - return (0); - /* verify that pattr_hdr is within the mbuf data */ for (m0 = m; m0 != NULL; m0 = m0->m_next) if (((caddr_t)hdr >= m0->m_data) && @@ -543,8 +538,8 @@ mark_ecn(struct mbuf *m, struct altq_pkt return (0); } - switch (af) { - case AF_INET: + switch (((struct ip *)hdr)->ip_v) { + case IPVERSION: if (flags & REDF_ECN4) { struct ip *ip = hdr; u_int8_t otos; @@ -577,7 +572,7 @@ mark_ecn(struct mbuf *m, struct altq_pkt } break; #ifdef INET6 - case AF_INET6: + case 6: if (flags & REDF_ECN6) { struct ip6_hdr *ip6 = hdr; u_int32_t flowlabel; From owner-svn-src-projects@FreeBSD.ORG Sat Feb 19 17:09:26 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 BC965106564A; Sat, 19 Feb 2011 17:09:26 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AC76C8FC12; Sat, 19 Feb 2011 17:09:26 +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 p1JH9Q2X003318; Sat, 19 Feb 2011 17:09:26 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1JH9Q02003316; Sat, 19 Feb 2011 17:09:26 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102191709.p1JH9Q02003316@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 19 Feb 2011 17:09:26 +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: r218856 - projects/pf/pf45/sys/contrib/altq/altq 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, 19 Feb 2011 17:09:26 -0000 Author: bz Date: Sat Feb 19 17:09:26 2011 New Revision: 218856 URL: http://svn.freebsd.org/changeset/base/218856 Log: Use the "magic constant" we use elsewhere in the tree in the switch, rather than just the plain number for IP version 6. Modified: projects/pf/pf45/sys/contrib/altq/altq/altq_red.c Modified: projects/pf/pf45/sys/contrib/altq/altq/altq_red.c ============================================================================== --- projects/pf/pf45/sys/contrib/altq/altq/altq_red.c Sat Feb 19 15:22:06 2011 (r218855) +++ projects/pf/pf45/sys/contrib/altq/altq/altq_red.c Sat Feb 19 17:09:26 2011 (r218856) @@ -572,7 +572,7 @@ mark_ecn(struct mbuf *m, struct altq_pkt } break; #ifdef INET6 - case 6: + case (IPV6_VERSION >> 4): if (flags & REDF_ECN6) { struct ip6_hdr *ip6 = hdr; u_int32_t flowlabel; From owner-svn-src-projects@FreeBSD.ORG Sat Feb 19 17:10:11 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 251C91065675; Sat, 19 Feb 2011 17:10:11 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 150768FC16; Sat, 19 Feb 2011 17:10:11 +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 p1JHAAaj003381; Sat, 19 Feb 2011 17:10:10 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1JHAAW4003379; Sat, 19 Feb 2011 17:10:10 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102191710.p1JHAAW4003379@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 19 Feb 2011 17:10:10 +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: r218857 - projects/pf/pf45/sys/contrib/pf/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: Sat, 19 Feb 2011 17:10:11 -0000 Author: bz Date: Sat Feb 19 17:10:10 2011 New Revision: 218857 URL: http://svn.freebsd.org/changeset/base/218857 Log: Make compile without INET6 (not sure about w/o INET yet). Modified: projects/pf/pf45/sys/contrib/pf/net/pf.c Modified: projects/pf/pf45/sys/contrib/pf/net/pf.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/pf.c Sat Feb 19 17:09:26 2011 (r218856) +++ projects/pf/pf45/sys/contrib/pf/net/pf.c Sat Feb 19 17:10:10 2011 (r218857) @@ -3663,18 +3663,26 @@ pf_test_rule(struct pf_rule **rm, struct !(th->th_flags & TH_RST)) { u_int32_t ack = ntohl(th->th_seq) + pd->p_len; int len = 0; +#ifdef INET struct ip *h4; +#endif +#ifdef INET6 struct ip6_hdr *h6; +#endif switch (af) { +#ifdef INET case AF_INET: h4 = mtod(m, struct ip *); len = ntohs(h4->ip_len) - off; break; +#endif +#ifdef INET6 case AF_INET6: h6 = mtod(m, struct ip6_hdr *); len = ntohs(h6->ip6_plen) - (off - sizeof(*h6)); break; +#endif } if (pf_check_proto_cksum(m, off, len, IPPROTO_TCP, af)) From owner-svn-src-projects@FreeBSD.ORG Sat Feb 19 17:11: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 398FC106566C; Sat, 19 Feb 2011 17:11:14 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 292F08FC15; Sat, 19 Feb 2011 17:11: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 p1JHBEeg003460; Sat, 19 Feb 2011 17:11:14 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1JHBEvr003458; Sat, 19 Feb 2011 17:11:14 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102191711.p1JHBEvr003458@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 19 Feb 2011 17:11: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: r218858 - in projects/pf/pf45/sys: conf contrib/pf/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: Sat, 19 Feb 2011 17:11:14 -0000 Author: bz Date: Sat Feb 19 17:11:13 2011 New Revision: 218858 URL: http://svn.freebsd.org/changeset/base/218858 Log: Remove the no longer used pf_subr.c and add pf_lb.c to the files to compile. Deleted: projects/pf/pf45/sys/contrib/pf/net/pf_subr.c Modified: projects/pf/pf45/sys/conf/files Modified: projects/pf/pf45/sys/conf/files ============================================================================== --- projects/pf/pf45/sys/conf/files Sat Feb 19 17:10:10 2011 (r218857) +++ projects/pf/pf45/sys/conf/files Sat Feb 19 17:11:13 2011 (r218858) @@ -385,14 +385,14 @@ contrib/pf/net/pf_if.c optional pf inet compile-with "${NORMAL_C} -I$S/contrib/pf" contrib/pf/net/pf_ioctl.c optional pf inet \ compile-with "${NORMAL_C} -I$S/contrib/pf" +contrib/pf/net/pf_lb.c optional pf inet \ + compile-with "${NORMAL_C} -I$S/contrib/pf" contrib/pf/net/pf_norm.c optional pf inet \ compile-with "${NORMAL_C} -I$S/contrib/pf" contrib/pf/net/pf_osfp.c optional pf inet \ compile-with "${NORMAL_C} -I$S/contrib/pf" contrib/pf/net/pf_ruleset.c optional pf inet \ compile-with "${NORMAL_C} -I$S/contrib/pf" -contrib/pf/net/pf_subr.c optional pf inet \ - compile-with "${NORMAL_C} -I$S/contrib/pf" contrib/pf/net/pf_table.c optional pf inet \ compile-with "${NORMAL_C} -I$S/contrib/pf" contrib/pf/netinet/in4_cksum.c optional pf inet From owner-svn-src-projects@FreeBSD.ORG Sat Feb 19 17:13:32 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 D4574106566B; Sat, 19 Feb 2011 17:13:32 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B98538FC0A; Sat, 19 Feb 2011 17:13:32 +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 p1JHDWdg003538; Sat, 19 Feb 2011 17:13:32 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1JHDWBv003536; Sat, 19 Feb 2011 17:13:32 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102191713.p1JHDWBv003536@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 19 Feb 2011 17:13:32 +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: r218859 - projects/pf/pf45/sys/contrib/pf/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: Sat, 19 Feb 2011 17:13:32 -0000 Author: bz Date: Sat Feb 19 17:13:32 2011 New Revision: 218859 URL: http://svn.freebsd.org/changeset/base/218859 Log: Add missing include for VNET. Make sysctl compile[1]. Correctly set CURVNET(). Whitespace noise. Submitted by: dim [1] Modified: projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Modified: projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c ============================================================================== --- projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Sat Feb 19 17:11:13 2011 (r218858) +++ projects/pf/pf45/sys/contrib/pf/net/if_pfsync.c Sat Feb 19 17:13:32 2011 (r218859) @@ -71,6 +71,7 @@ __FBSDID("$FreeBSD$"); #endif /* __FreeBSD__ */ #include +#include #ifdef __FreeBSD__ #include #include @@ -93,7 +94,6 @@ __FBSDID("$FreeBSD$"); #include #include #endif -#include #include #ifndef __FreeBSD__ #include @@ -107,6 +107,10 @@ __FBSDID("$FreeBSD$"); #include #include #include +#ifdef __FreeBSD__ +#include +#endif + #include #include #include @@ -298,21 +302,24 @@ struct pfsync_softc { }; -#ifndef __FreeBSD__ +#ifdef __FreeBSD__ +static VNET_DEFINE(struct pfsync_softc *, pfsyncif) = NULL; +#define V_pfsyncif VNET(pfsyncif) + +static VNET_DEFINE(struct pfsyncstats, pfsyncstats); +#define V_pfsyncstats VNET(pfsyncstats) + +SYSCTL_NODE(_net, OID_AUTO, pfsync, CTLFLAG_RW, 0, "PFSYNC"); +SYSCTL_VNET_STRUCT(_net_pfsync, OID_AUTO, stats, CTLFLAG_RW, + &VNET_NAME(pfsyncstats), pfsyncstats, + "PFSYNC statistics (struct pfsyncstats, net/if_pfsync.h)"); +#else struct pfsync_softc *pfsyncif = NULL; struct pfsyncstats pfsyncstats; #define V_pfsyncstats pfsyncstats #endif -#ifdef __FreeBSD__ -VNET_DEFINE(struct pfsync_softc *, pfsyncif) = NULL; -#define V_pfsyncif VNET(pfsyncif) -VNET_DEFINE(struct pfsyncstats, pfsyncstats); -#define V_pfsyncstats VNET(pfsyncstats) -SYSCTL_DECL(_net_pfsync); -SYSCTL_VNET_STRUCT(_net_pfsync, 0, stats, CTLFLAG_RW, - &VNET_NAME(pfsyncstats), pfsyncstats, - "PFSYNC statistics (struct pfsyncstats, net/if_pfsync.h)"); +#ifdef __FreeBSD__ static void pfsyncintr(void *); struct pfsync_swi { void * pfsync_swi_cookie; @@ -2509,7 +2516,7 @@ pfsync_defer_tmo(void *arg) s = splsoftnet(); #ifdef __FreeBSD__ - CURVNET_SET(pd->pd_m->m_pkthdr.rcvif); /* XXX */ + CURVNET_SET(pd->pd_m->m_pkthdr.rcvif->if_vnet); /* XXX */ PF_LOCK(); #endif pfsync_undefer(arg, 0); @@ -3270,11 +3277,12 @@ pfsyncintr(void) #endif } -#ifdef notyet int pfsync_sysctl(int *name, u_int namelen, void *oldp, size_t *oldlenp, void *newp, size_t newlen) { + +#ifdef notyet /* All sysctl names at this level are terminal. */ if (namelen != 1) return (ENOTDIR); @@ -3285,11 +3293,10 @@ pfsync_sysctl(int *name, u_int namelen, return (EPERM); return (sysctl_struct(oldp, oldlenp, newp, newlen, &V_pfsyncstats, sizeof(V_pfsyncstats))); - default: - return (ENOPROTOOPT); } -} #endif + return (ENOPROTOOPT); +} #ifdef __FreeBSD__ void From owner-svn-src-projects@FreeBSD.ORG Sat Feb 19 17:14:03 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 81D20106564A; Sat, 19 Feb 2011 17:14:03 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6731D8FC13; Sat, 19 Feb 2011 17:14:03 +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 p1JHE3wg003586; Sat, 19 Feb 2011 17:14:03 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1JHE35r003582; Sat, 19 Feb 2011 17:14:03 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102191714.p1JHE35r003582@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 19 Feb 2011 17:14:03 +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: r218860 - in projects/pf/pf45/sys/modules: pf pflog pfsync 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, 19 Feb 2011 17:14:03 -0000 Author: bz Date: Sat Feb 19 17:14:03 2011 New Revision: 218860 URL: http://svn.freebsd.org/changeset/base/218860 Log: Unify and cleanup module Makefiles. Modified: projects/pf/pf45/sys/modules/pf/Makefile projects/pf/pf45/sys/modules/pflog/Makefile projects/pf/pf45/sys/modules/pfsync/Makefile Modified: projects/pf/pf45/sys/modules/pf/Makefile ============================================================================== --- projects/pf/pf45/sys/modules/pf/Makefile Sat Feb 19 17:13:32 2011 (r218859) +++ projects/pf/pf45/sys/modules/pf/Makefile Sat Feb 19 17:14:03 2011 (r218860) @@ -6,12 +6,12 @@ .PATH: ${.CURDIR}/../../contrib/pf/netinet KMOD= pf -SRCS = pf.c pf_if.c pf_lb.c pf_osfp.c pf_ioctl.c pf_norm.c pf_table.c \ +SRCS= pf.c pf_if.c pf_lb.c pf_osfp.c pf_ioctl.c pf_norm.c pf_table.c \ pf_ruleset.c \ in4_cksum.c \ opt_pf.h opt_inet.h opt_inet6.h opt_bpf.h opt_global.h -CFLAGS+= -I${.CURDIR}/../../contrib/pf +CFLAGS+= -I${.CURDIR}/../../contrib/pf .if !defined(KERNBUILDDIR) opt_inet.h: @@ -36,9 +36,7 @@ opt_pf.h: .if defined(VIMAGE) opt_global.h: echo "#define VIMAGE 1" >> ${.TARGET} -CFLAGS+= -include ${.CURDIR}/opt_global.h .endif .endif - .include Modified: projects/pf/pf45/sys/modules/pflog/Makefile ============================================================================== --- projects/pf/pf45/sys/modules/pflog/Makefile Sat Feb 19 17:13:32 2011 (r218859) +++ projects/pf/pf45/sys/modules/pflog/Makefile Sat Feb 19 17:14:03 2011 (r218860) @@ -5,12 +5,15 @@ .PATH: ${.CURDIR}/../../contrib/pf/net KMOD= pflog -SRCS = if_pflog.c \ +SRCS= if_pflog.c \ opt_pf.h opt_inet.h opt_inet6.h opt_bpf.h -CFLAGS+= -I${.CURDIR}/../../contrib/pf +CFLAGS+= -I${.CURDIR}/../../contrib/pf +SRCS+= bus_if.h device_if.h -.if !defined(KERNBUILDDIR) +.if defined(KERNBUILDDIR) +MKDEP+= -include ${KERNBUILDDIR}/opt_global.h +.else opt_inet.h: echo "#define INET 1" > ${.TARGET} @@ -21,6 +24,13 @@ opt_inet6.h: opt_bpf.h: echo "#define DEV_BPF 1" > ${.TARGET} + +.if defined(VIMAGE) +opt_global.h: + echo "#define VIMAGE 1" >> ${.TARGET} +CFLAGS+= -include opt_global.h +MKDEP+= -include opt_global.h +.endif .endif .include Modified: projects/pf/pf45/sys/modules/pfsync/Makefile ============================================================================== --- projects/pf/pf45/sys/modules/pfsync/Makefile Sat Feb 19 17:13:32 2011 (r218859) +++ projects/pf/pf45/sys/modules/pfsync/Makefile Sat Feb 19 17:14:03 2011 (r218860) @@ -5,13 +5,15 @@ .PATH: ${.CURDIR}/../../contrib/pf/net KMOD= pfsync -SRCS = if_pfsync.c \ +SRCS= if_pfsync.c \ opt_pf.h opt_inet.h opt_inet6.h opt_bpf.h -CFLAGS+= -I${.CURDIR}/../../contrib/pf -SRCS+= bus_if.h device_if.h +CFLAGS+= -I${.CURDIR}/../../contrib/pf +SRCS+= bus_if.h device_if.h -.if !defined(KERNBUILDDIR) +.if defined(KERNBUILDDIR) +MKDEP+= -include ${KERNBUILDDIR}/opt_global.h +.else opt_inet.h: echo "#define INET 1" > ${.TARGET} @@ -25,8 +27,9 @@ opt_bpf.h: .if defined(VIMAGE) opt_global.h: - echo "#define VIMAGE 1" > ${.TARGET} -CFLAGS+= -I${.CURDIR}/opt_global.h + echo "#define VIMAGE 1" >> ${.TARGET} +CFLAGS+= -include opt_global.h +MKDEP+= -include opt_global.h .endif .endif From owner-svn-src-projects@FreeBSD.ORG Sat Feb 19 17:44: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 8E56A1065670; Sat, 19 Feb 2011 17:44:14 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 782668FC17; Sat, 19 Feb 2011 17:44: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 p1JHiELT004472; Sat, 19 Feb 2011 17:44:14 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1JHiEeu004468; Sat, 19 Feb 2011 17:44:14 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201102191744.p1JHiEeu004468@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 19 Feb 2011 17:44: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: r218862 - in projects/pf/pf45: . contrib/binutils contrib/binutils/bfd contrib/binutils/bfd/doc contrib/binutils/bfd/po contrib/binutils/binutils contrib/binutils/binutils/doc contrib/b... 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, 19 Feb 2011 17:44:14 -0000 Author: bz Date: Sat Feb 19 17:44:13 2011 New Revision: 218862 URL: http://svn.freebsd.org/changeset/base/218862 Log: IFC r218861 Added: projects/pf/pf45/contrib/binutils/bfd/ChangeLog-2006 - copied unchanged from r218860, head/contrib/binutils/bfd/ChangeLog-2006 projects/pf/pf45/contrib/binutils/bfd/cpu-cr16.c - copied unchanged from r218860, head/contrib/binutils/bfd/cpu-cr16.c projects/pf/pf45/contrib/binutils/bfd/cpu-mep.c - copied unchanged from r218860, head/contrib/binutils/bfd/cpu-mep.c projects/pf/pf45/contrib/binutils/bfd/cpu-score.c - copied unchanged from r218860, head/contrib/binutils/bfd/cpu-score.c projects/pf/pf45/contrib/binutils/bfd/cpu-spu.c - copied unchanged from r218860, head/contrib/binutils/bfd/cpu-spu.c projects/pf/pf45/contrib/binutils/bfd/elf-attrs.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf-attrs.c projects/pf/pf45/contrib/binutils/bfd/elf-vxworks.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf-vxworks.c projects/pf/pf45/contrib/binutils/bfd/elf-vxworks.h - copied unchanged from r218860, head/contrib/binutils/bfd/elf-vxworks.h projects/pf/pf45/contrib/binutils/bfd/elf32-arm.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-arm.c projects/pf/pf45/contrib/binutils/bfd/elf32-avr.h - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-avr.h projects/pf/pf45/contrib/binutils/bfd/elf32-cr16.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-cr16.c projects/pf/pf45/contrib/binutils/bfd/elf32-mep.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-mep.c projects/pf/pf45/contrib/binutils/bfd/elf32-score.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-score.c projects/pf/pf45/contrib/binutils/bfd/elf32-sh-relocs.h - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-sh-relocs.h projects/pf/pf45/contrib/binutils/bfd/elf32-spu.c - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-spu.c projects/pf/pf45/contrib/binutils/bfd/elf32-spu.h - copied unchanged from r218860, head/contrib/binutils/bfd/elf32-spu.h projects/pf/pf45/contrib/binutils/bfd/elfxx-sparc.c - copied unchanged from r218860, head/contrib/binutils/bfd/elfxx-sparc.c projects/pf/pf45/contrib/binutils/bfd/elfxx-sparc.h - copied unchanged from r218860, head/contrib/binutils/bfd/elfxx-sparc.h projects/pf/pf45/contrib/binutils/bfd/mep-relocs.pl - copied unchanged from r218860, head/contrib/binutils/bfd/mep-relocs.pl projects/pf/pf45/contrib/binutils/bfd/pe-arm-wince.c - copied unchanged from r218860, head/contrib/binutils/bfd/pe-arm-wince.c projects/pf/pf45/contrib/binutils/bfd/pe-x86_64.c - copied unchanged from r218860, head/contrib/binutils/bfd/pe-x86_64.c projects/pf/pf45/contrib/binutils/bfd/pei-arm-wince.c - copied unchanged from r218860, head/contrib/binutils/bfd/pei-arm-wince.c projects/pf/pf45/contrib/binutils/bfd/pei-x86_64.c - copied unchanged from r218860, head/contrib/binutils/bfd/pei-x86_64.c projects/pf/pf45/contrib/binutils/binutils/ChangeLog-2006 - copied unchanged from r218860, head/contrib/binutils/binutils/ChangeLog-2006 projects/pf/pf45/contrib/binutils/binutils/bin2c.c - copied unchanged from r218860, head/contrib/binutils/binutils/bin2c.c projects/pf/pf45/contrib/binutils/binutils/dwarf.c - copied unchanged from r218860, head/contrib/binutils/binutils/dwarf.c projects/pf/pf45/contrib/binutils/binutils/dwarf.h - copied unchanged from r218860, head/contrib/binutils/binutils/dwarf.h projects/pf/pf45/contrib/binutils/binutils/embedspu.sh - copied unchanged from r218860, head/contrib/binutils/binutils/embedspu.sh projects/pf/pf45/contrib/binutils/binutils/mclex.c - copied unchanged from r218860, head/contrib/binutils/binutils/mclex.c projects/pf/pf45/contrib/binutils/binutils/mcparse.y - copied unchanged from r218860, head/contrib/binutils/binutils/mcparse.y projects/pf/pf45/contrib/binutils/binutils/sysdep.h - copied unchanged from r218860, head/contrib/binutils/binutils/sysdep.h projects/pf/pf45/contrib/binutils/binutils/windint.h - copied unchanged from r218860, head/contrib/binutils/binutils/windint.h projects/pf/pf45/contrib/binutils/binutils/windmc.c - copied unchanged from r218860, head/contrib/binutils/binutils/windmc.c projects/pf/pf45/contrib/binutils/binutils/windmc.h - copied unchanged from r218860, head/contrib/binutils/binutils/windmc.h projects/pf/pf45/contrib/binutils/config.rpath - copied unchanged from r218860, head/contrib/binutils/config.rpath projects/pf/pf45/contrib/binutils/config/confsubdir.m4 - copied unchanged from r218860, head/contrib/binutils/config/confsubdir.m4 projects/pf/pf45/contrib/binutils/config/ld-symbolic.m4 - copied unchanged from r218860, head/contrib/binutils/config/ld-symbolic.m4 projects/pf/pf45/contrib/binutils/config/mt-mep - copied unchanged from r218860, head/contrib/binutils/config/mt-mep projects/pf/pf45/contrib/binutils/config/mt-spu - copied unchanged from r218860, head/contrib/binutils/config/mt-spu projects/pf/pf45/contrib/binutils/config/multi.m4 - copied unchanged from r218860, head/contrib/binutils/config/multi.m4 projects/pf/pf45/contrib/binutils/config/unwind_ipinfo.m4 - copied unchanged from r218860, head/contrib/binutils/config/unwind_ipinfo.m4 projects/pf/pf45/contrib/binutils/configure.ac - copied unchanged from r218860, head/contrib/binutils/configure.ac projects/pf/pf45/contrib/binutils/gas/ChangeLog-2006 - copied unchanged from r218860, head/contrib/binutils/gas/ChangeLog-2006 projects/pf/pf45/contrib/binutils/gas/config/tc-cr16.c - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-cr16.c projects/pf/pf45/contrib/binutils/gas/config/tc-cr16.h - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-cr16.h projects/pf/pf45/contrib/binutils/gas/config/tc-mep.c - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-mep.c projects/pf/pf45/contrib/binutils/gas/config/tc-mep.h - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-mep.h projects/pf/pf45/contrib/binutils/gas/config/tc-score.c - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-score.c projects/pf/pf45/contrib/binutils/gas/config/tc-score.h - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-score.h projects/pf/pf45/contrib/binutils/gas/config/tc-spu.c - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-spu.c projects/pf/pf45/contrib/binutils/gas/config/tc-spu.h - copied unchanged from r218860, head/contrib/binutils/gas/config/tc-spu.h projects/pf/pf45/contrib/binutils/gas/config/te-pep.h - copied unchanged from r218860, head/contrib/binutils/gas/config/te-pep.h projects/pf/pf45/contrib/binutils/gas/doc/c-avr.texi - copied unchanged from r218860, head/contrib/binutils/gas/doc/c-avr.texi projects/pf/pf45/contrib/binutils/gas/doc/c-cr16.texi - copied unchanged from r218860, head/contrib/binutils/gas/doc/c-cr16.texi projects/pf/pf45/contrib/binutils/gas/itbl-lex.h - copied unchanged from r218860, head/contrib/binutils/gas/itbl-lex.h projects/pf/pf45/contrib/binutils/gprof/po/ms.po - copied unchanged from r218860, head/contrib/binutils/gprof/po/ms.po projects/pf/pf45/contrib/binutils/include/elf/bfin.h - copied unchanged from r218860, head/contrib/binutils/include/elf/bfin.h projects/pf/pf45/contrib/binutils/include/elf/cr16.h - copied unchanged from r218860, head/contrib/binutils/include/elf/cr16.h projects/pf/pf45/contrib/binutils/include/elf/crx.h - copied unchanged from r218860, head/contrib/binutils/include/elf/crx.h projects/pf/pf45/contrib/binutils/include/elf/m32c.h - copied unchanged from r218860, head/contrib/binutils/include/elf/m32c.h projects/pf/pf45/contrib/binutils/include/elf/mep.h - copied unchanged from r218860, head/contrib/binutils/include/elf/mep.h projects/pf/pf45/contrib/binutils/include/elf/mt.h - copied unchanged from r218860, head/contrib/binutils/include/elf/mt.h projects/pf/pf45/contrib/binutils/include/elf/score.h - copied unchanged from r218860, head/contrib/binutils/include/elf/score.h projects/pf/pf45/contrib/binutils/include/elf/spu.h - copied unchanged from r218860, head/contrib/binutils/include/elf/spu.h projects/pf/pf45/contrib/binutils/include/opcode/cr16.h - copied unchanged from r218860, head/contrib/binutils/include/opcode/cr16.h projects/pf/pf45/contrib/binutils/include/opcode/score-datadep.h - copied unchanged from r218860, head/contrib/binutils/include/opcode/score-datadep.h projects/pf/pf45/contrib/binutils/include/opcode/score-inst.h - copied unchanged from r218860, head/contrib/binutils/include/opcode/score-inst.h projects/pf/pf45/contrib/binutils/include/opcode/spu-insns.h - copied unchanged from r218860, head/contrib/binutils/include/opcode/spu-insns.h projects/pf/pf45/contrib/binutils/include/opcode/spu.h - copied unchanged from r218860, head/contrib/binutils/include/opcode/spu.h projects/pf/pf45/contrib/binutils/ld/ChangeLog-2006 - copied unchanged from r218860, head/contrib/binutils/ld/ChangeLog-2006 projects/pf/pf45/contrib/binutils/ld/emulparams/arm_wince_pe.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/arm_wince_pe.sh projects/pf/pf45/contrib/binutils/ld/emulparams/avr6.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/avr6.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32_spu.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/elf32_spu.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32cr16.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/elf32cr16.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32mep.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/elf32mep.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32ppccommon.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/elf32ppccommon.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64bmip-defs.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/elf64bmip-defs.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386pep.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/i386pep.sh projects/pf/pf45/contrib/binutils/ld/emulparams/scoreelf.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/scoreelf.sh projects/pf/pf45/contrib/binutils/ld/emulparams/shelf_uclinux.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/shelf_uclinux.sh projects/pf/pf45/contrib/binutils/ld/emulparams/shelf_vxworks.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/shelf_vxworks.sh projects/pf/pf45/contrib/binutils/ld/emulparams/shlelf_vxworks.sh - copied unchanged from r218860, head/contrib/binutils/ld/emulparams/shlelf_vxworks.sh projects/pf/pf45/contrib/binutils/ld/emultempl/avrelf.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/avrelf.em projects/pf/pf45/contrib/binutils/ld/emultempl/cr16elf.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/cr16elf.em projects/pf/pf45/contrib/binutils/ld/emultempl/elf-generic.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/elf-generic.em projects/pf/pf45/contrib/binutils/ld/emultempl/genelf.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/genelf.em projects/pf/pf45/contrib/binutils/ld/emultempl/pep.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/pep.em projects/pf/pf45/contrib/binutils/ld/emultempl/scoreelf.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/scoreelf.em projects/pf/pf45/contrib/binutils/ld/emultempl/spu_ovl.S - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/spu_ovl.S projects/pf/pf45/contrib/binutils/ld/emultempl/spu_ovl.o - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/spu_ovl.o projects/pf/pf45/contrib/binutils/ld/emultempl/spuelf.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/spuelf.em projects/pf/pf45/contrib/binutils/ld/pep-dll.c - copied unchanged from r218860, head/contrib/binutils/ld/pep-dll.c projects/pf/pf45/contrib/binutils/ld/pep-dll.h - copied unchanged from r218860, head/contrib/binutils/ld/pep-dll.h projects/pf/pf45/contrib/binutils/ld/scripttempl/elf32cr16.sc - copied unchanged from r218860, head/contrib/binutils/ld/scripttempl/elf32cr16.sc projects/pf/pf45/contrib/binutils/ld/scripttempl/mep.sc - copied unchanged from r218860, head/contrib/binutils/ld/scripttempl/mep.sc projects/pf/pf45/contrib/binutils/ld/scripttempl/pep.sc - copied unchanged from r218860, head/contrib/binutils/ld/scripttempl/pep.sc projects/pf/pf45/contrib/binutils/libiberty/at-file.texi - copied unchanged from r218860, head/contrib/binutils/libiberty/at-file.texi projects/pf/pf45/contrib/binutils/libiberty/filename_cmp.c - copied unchanged from r218860, head/contrib/binutils/libiberty/filename_cmp.c projects/pf/pf45/contrib/binutils/libiberty/unlink-if-ordinary.c - copied unchanged from r218860, head/contrib/binutils/libiberty/unlink-if-ordinary.c projects/pf/pf45/contrib/binutils/ltgcc.m4 - copied unchanged from r218860, head/contrib/binutils/ltgcc.m4 projects/pf/pf45/contrib/binutils/ltoptions.m4 - copied unchanged from r218860, head/contrib/binutils/ltoptions.m4 projects/pf/pf45/contrib/binutils/ltsugar.m4 - copied unchanged from r218860, head/contrib/binutils/ltsugar.m4 projects/pf/pf45/contrib/binutils/ltversion.m4 - copied unchanged from r218860, head/contrib/binutils/ltversion.m4 projects/pf/pf45/contrib/binutils/opcodes/ChangeLog-2006 - copied unchanged from r218860, head/contrib/binutils/opcodes/ChangeLog-2006 projects/pf/pf45/contrib/binutils/opcodes/cr16-dis.c - copied unchanged from r218860, head/contrib/binutils/opcodes/cr16-dis.c projects/pf/pf45/contrib/binutils/opcodes/cr16-opc.c - copied unchanged from r218860, head/contrib/binutils/opcodes/cr16-opc.c projects/pf/pf45/contrib/binutils/opcodes/i386-gen.c - copied unchanged from r218860, head/contrib/binutils/opcodes/i386-gen.c projects/pf/pf45/contrib/binutils/opcodes/i386-opc.c - copied unchanged from r218860, head/contrib/binutils/opcodes/i386-opc.c projects/pf/pf45/contrib/binutils/opcodes/i386-opc.h - copied unchanged from r218860, head/contrib/binutils/opcodes/i386-opc.h projects/pf/pf45/contrib/binutils/opcodes/i386-opc.tbl - copied unchanged from r218860, head/contrib/binutils/opcodes/i386-opc.tbl projects/pf/pf45/contrib/binutils/opcodes/i386-reg.tbl - copied unchanged from r218860, head/contrib/binutils/opcodes/i386-reg.tbl projects/pf/pf45/contrib/binutils/opcodes/i386-tbl.h - copied unchanged from r218860, head/contrib/binutils/opcodes/i386-tbl.h projects/pf/pf45/contrib/binutils/opcodes/mep-asm.c - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-asm.c projects/pf/pf45/contrib/binutils/opcodes/mep-desc.c - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-desc.c projects/pf/pf45/contrib/binutils/opcodes/mep-desc.h - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-desc.h projects/pf/pf45/contrib/binutils/opcodes/mep-dis.c - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-dis.c projects/pf/pf45/contrib/binutils/opcodes/mep-ibld.c - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-ibld.c projects/pf/pf45/contrib/binutils/opcodes/mep-opc.c - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-opc.c projects/pf/pf45/contrib/binutils/opcodes/mep-opc.h - copied unchanged from r218860, head/contrib/binutils/opcodes/mep-opc.h projects/pf/pf45/contrib/binutils/opcodes/score-dis.c - copied unchanged from r218860, head/contrib/binutils/opcodes/score-dis.c projects/pf/pf45/contrib/binutils/opcodes/score-opc.h - copied unchanged from r218860, head/contrib/binutils/opcodes/score-opc.h projects/pf/pf45/contrib/binutils/opcodes/spu-dis.c - copied unchanged from r218860, head/contrib/binutils/opcodes/spu-dis.c projects/pf/pf45/contrib/binutils/opcodes/spu-opc.c - copied unchanged from r218860, head/contrib/binutils/opcodes/spu-opc.c projects/pf/pf45/gnu/usr.bin/binutils/addr2line/addr2line.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/addr2line/addr2line.1 projects/pf/pf45/gnu/usr.bin/binutils/ar/ar.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/ar/ar.1 projects/pf/pf45/gnu/usr.bin/binutils/as/as.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/as/as.1 projects/pf/pf45/gnu/usr.bin/binutils/ld/ld.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/ld/ld.1 projects/pf/pf45/gnu/usr.bin/binutils/nm/nm.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/nm/nm.1 projects/pf/pf45/gnu/usr.bin/binutils/objcopy/objcopy.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/objcopy/objcopy.1 projects/pf/pf45/gnu/usr.bin/binutils/objdump/objdump.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/objdump/objdump.1 projects/pf/pf45/gnu/usr.bin/binutils/ranlib/ranlib.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/ranlib/ranlib.1 projects/pf/pf45/gnu/usr.bin/binutils/readelf/readelf.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/readelf/readelf.1 projects/pf/pf45/gnu/usr.bin/binutils/size/size.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/size/size.1 projects/pf/pf45/gnu/usr.bin/binutils/strings/strings.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/strings/strings.1 projects/pf/pf45/gnu/usr.bin/binutils/strip/strip.1 - copied unchanged from r218860, head/gnu/usr.bin/binutils/strip/strip.1 projects/pf/pf45/share/man/man4/cxgbe.4 - copied unchanged from r218860, head/share/man/man4/cxgbe.4 projects/pf/pf45/sys/dev/cxgbe/ - copied from r218860, head/sys/dev/cxgbe/ projects/pf/pf45/sys/modules/cxgbe/ - copied from r218860, head/sys/modules/cxgbe/ projects/pf/pf45/tools/regression/bin/sh/builtins/read5.0 - copied unchanged from r218860, head/tools/regression/bin/sh/builtins/read5.0 projects/pf/pf45/tools/tools/nanobsd/Files/root/update - copied unchanged from r218860, head/tools/tools/nanobsd/Files/root/update projects/pf/pf45/usr.sbin/bsdinstall/ - copied from r218860, head/usr.sbin/bsdinstall/ projects/pf/pf45/usr.sbin/utxrm/ - copied from r218860, head/usr.sbin/utxrm/ Replaced: projects/pf/pf45/contrib/binutils/ld/emultempl/mipself.em - copied unchanged from r218860, head/contrib/binutils/ld/emultempl/mipself.em projects/pf/pf45/contrib/binutils/libiberty/pexecute.c - copied unchanged from r218860, head/contrib/binutils/libiberty/pexecute.c Deleted: projects/pf/pf45/contrib/binutils/bfd/aout-encap.c projects/pf/pf45/contrib/binutils/bfd/doc/aoutx.texi projects/pf/pf45/contrib/binutils/bfd/doc/archive.texi projects/pf/pf45/contrib/binutils/bfd/doc/archures.texi projects/pf/pf45/contrib/binutils/bfd/doc/bfdio.texi projects/pf/pf45/contrib/binutils/bfd/doc/bfdt.texi projects/pf/pf45/contrib/binutils/bfd/doc/bfdwin.texi projects/pf/pf45/contrib/binutils/bfd/doc/cache.texi projects/pf/pf45/contrib/binutils/bfd/doc/coffcode.texi projects/pf/pf45/contrib/binutils/bfd/doc/core.texi projects/pf/pf45/contrib/binutils/bfd/doc/elf.texi projects/pf/pf45/contrib/binutils/bfd/doc/elfcode.texi projects/pf/pf45/contrib/binutils/bfd/doc/format.texi projects/pf/pf45/contrib/binutils/bfd/doc/hash.texi projects/pf/pf45/contrib/binutils/bfd/doc/init.texi projects/pf/pf45/contrib/binutils/bfd/doc/libbfd.texi projects/pf/pf45/contrib/binutils/bfd/doc/linker.texi projects/pf/pf45/contrib/binutils/bfd/doc/mmo.texi projects/pf/pf45/contrib/binutils/bfd/doc/opncls.texi projects/pf/pf45/contrib/binutils/bfd/doc/reloc.texi projects/pf/pf45/contrib/binutils/bfd/doc/section.texi projects/pf/pf45/contrib/binutils/bfd/doc/syms.texi projects/pf/pf45/contrib/binutils/bfd/doc/targets.texi projects/pf/pf45/contrib/binutils/bfd/elf32-arm.h projects/pf/pf45/contrib/binutils/bfd/elfarm-nabi.c projects/pf/pf45/contrib/binutils/bfd/elfarm-oabi.c projects/pf/pf45/contrib/binutils/bfd/elflink.h projects/pf/pf45/contrib/binutils/bfd/po/POTFILES.in projects/pf/pf45/contrib/binutils/binutils/acinclude.m4 projects/pf/pf45/contrib/binutils/binutils/budemang.c projects/pf/pf45/contrib/binutils/binutils/budemang.h projects/pf/pf45/contrib/binutils/binutils/defparse.c projects/pf/pf45/contrib/binutils/binutils/defparse.h projects/pf/pf45/contrib/binutils/binutils/doc/addr2line.1 projects/pf/pf45/contrib/binutils/binutils/doc/ar.1 projects/pf/pf45/contrib/binutils/binutils/doc/cxxfilt.man projects/pf/pf45/contrib/binutils/binutils/doc/dlltool.1 projects/pf/pf45/contrib/binutils/binutils/doc/nm.1 projects/pf/pf45/contrib/binutils/binutils/doc/objcopy.1 projects/pf/pf45/contrib/binutils/binutils/doc/objdump.1 projects/pf/pf45/contrib/binutils/binutils/doc/ranlib.1 projects/pf/pf45/contrib/binutils/binutils/doc/readelf.1 projects/pf/pf45/contrib/binutils/binutils/doc/size.1 projects/pf/pf45/contrib/binutils/binutils/doc/strings.1 projects/pf/pf45/contrib/binutils/binutils/doc/strip.1 projects/pf/pf45/contrib/binutils/binutils/rclex.l projects/pf/pf45/contrib/binutils/config.if projects/pf/pf45/contrib/binutils/config/mh-mingw32 projects/pf/pf45/contrib/binutils/config/mh-openedition projects/pf/pf45/contrib/binutils/config/mh-sysv projects/pf/pf45/contrib/binutils/config/mt-armpic projects/pf/pf45/contrib/binutils/config/mt-elfalphapic projects/pf/pf45/contrib/binutils/config/mt-ia64pic projects/pf/pf45/contrib/binutils/config/mt-linux projects/pf/pf45/contrib/binutils/config/mt-papic projects/pf/pf45/contrib/binutils/config/mt-ppcpic projects/pf/pf45/contrib/binutils/config/mt-s390pic projects/pf/pf45/contrib/binutils/config/mt-sparcpic projects/pf/pf45/contrib/binutils/config/mt-x86pic projects/pf/pf45/contrib/binutils/configure.in projects/pf/pf45/contrib/binutils/contrib/ projects/pf/pf45/contrib/binutils/gas/bignum-copy.c projects/pf/pf45/contrib/binutils/gas/config/obj-generic.c projects/pf/pf45/contrib/binutils/gas/config/obj-generic.h projects/pf/pf45/contrib/binutils/gas/config/obj-ieee.c projects/pf/pf45/contrib/binutils/gas/config/obj-ieee.h projects/pf/pf45/contrib/binutils/gas/config/te-aux.h projects/pf/pf45/contrib/binutils/gas/config/te-ppcnw.h projects/pf/pf45/contrib/binutils/gas/config/te-sysv32.h projects/pf/pf45/contrib/binutils/gas/doc/as.1 projects/pf/pf45/contrib/binutils/gas/doc/gasp.texi projects/pf/pf45/contrib/binutils/gas/doc/gasver.texi projects/pf/pf45/contrib/binutils/gas/gasp.c projects/pf/pf45/contrib/binutils/gas/link.cmd projects/pf/pf45/contrib/binutils/include/bin-bugs.h projects/pf/pf45/contrib/binutils/include/callback.h projects/pf/pf45/contrib/binutils/include/regs/ projects/pf/pf45/contrib/binutils/include/remote-sim.h projects/pf/pf45/contrib/binutils/ld/acinclude.m4 projects/pf/pf45/contrib/binutils/ld/emulparams/armelf_oabi.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386freebsd.sh projects/pf/pf45/contrib/binutils/ld/emultempl/armelf_oabi.em projects/pf/pf45/contrib/binutils/ld/ld.1 projects/pf/pf45/contrib/binutils/ld/ldver.texi projects/pf/pf45/contrib/binutils/libiberty/config.table projects/pf/pf45/contrib/binutils/libiberty/configure.in projects/pf/pf45/contrib/binutils/ltcf-c.sh projects/pf/pf45/contrib/binutils/ltcf-cxx.sh projects/pf/pf45/contrib/binutils/ltcf-gcj.sh projects/pf/pf45/contrib/binutils/ltconfig projects/pf/pf45/contrib/binutils/md5.sum projects/pf/pf45/contrib/binutils/opcodes/acinclude.m4 projects/pf/pf45/contrib/binutils/opcodes/arm-opc.h projects/pf/pf45/gnu/lib/libg2c/ projects/pf/pf45/gnu/lib/libiberty/ projects/pf/pf45/gnu/usr.bin/binutils/as/tc-sparc-fixed.c Modified: projects/pf/pf45/UPDATING projects/pf/pf45/contrib/binutils/ChangeLog projects/pf/pf45/contrib/binutils/MAINTAINERS projects/pf/pf45/contrib/binutils/Makefile.def projects/pf/pf45/contrib/binutils/Makefile.in projects/pf/pf45/contrib/binutils/Makefile.tpl projects/pf/pf45/contrib/binutils/bfd/ChangeLog projects/pf/pf45/contrib/binutils/bfd/ChangeLog-0203 projects/pf/pf45/contrib/binutils/bfd/Makefile.am projects/pf/pf45/contrib/binutils/bfd/Makefile.in projects/pf/pf45/contrib/binutils/bfd/acinclude.m4 projects/pf/pf45/contrib/binutils/bfd/aclocal.m4 projects/pf/pf45/contrib/binutils/bfd/aout-arm.c projects/pf/pf45/contrib/binutils/bfd/aout-sparcle.c projects/pf/pf45/contrib/binutils/bfd/aout-target.h projects/pf/pf45/contrib/binutils/bfd/aout0.c projects/pf/pf45/contrib/binutils/bfd/aout32.c projects/pf/pf45/contrib/binutils/bfd/aout64.c projects/pf/pf45/contrib/binutils/bfd/aoutf1.h projects/pf/pf45/contrib/binutils/bfd/aoutx.h projects/pf/pf45/contrib/binutils/bfd/archive.c projects/pf/pf45/contrib/binutils/bfd/archive64.c projects/pf/pf45/contrib/binutils/bfd/archures.c projects/pf/pf45/contrib/binutils/bfd/armnetbsd.c projects/pf/pf45/contrib/binutils/bfd/bfd-in.h projects/pf/pf45/contrib/binutils/bfd/bfd-in2.h projects/pf/pf45/contrib/binutils/bfd/bfd.c projects/pf/pf45/contrib/binutils/bfd/bfdio.c projects/pf/pf45/contrib/binutils/bfd/bfdwin.c projects/pf/pf45/contrib/binutils/bfd/binary.c projects/pf/pf45/contrib/binutils/bfd/bout.c projects/pf/pf45/contrib/binutils/bfd/cache.c projects/pf/pf45/contrib/binutils/bfd/coff-alpha.c projects/pf/pf45/contrib/binutils/bfd/coff-arm.c projects/pf/pf45/contrib/binutils/bfd/coff-aux.c projects/pf/pf45/contrib/binutils/bfd/coff-i386.c projects/pf/pf45/contrib/binutils/bfd/coff-ia64.c projects/pf/pf45/contrib/binutils/bfd/coff-mips.c projects/pf/pf45/contrib/binutils/bfd/coff-ppc.c projects/pf/pf45/contrib/binutils/bfd/coff-rs6000.c projects/pf/pf45/contrib/binutils/bfd/coff-sparc.c projects/pf/pf45/contrib/binutils/bfd/coff-x86_64.c projects/pf/pf45/contrib/binutils/bfd/coff64-rs6000.c projects/pf/pf45/contrib/binutils/bfd/coffcode.h projects/pf/pf45/contrib/binutils/bfd/coffgen.c projects/pf/pf45/contrib/binutils/bfd/cofflink.c projects/pf/pf45/contrib/binutils/bfd/coffswap.h projects/pf/pf45/contrib/binutils/bfd/config.bfd projects/pf/pf45/contrib/binutils/bfd/config.in projects/pf/pf45/contrib/binutils/bfd/configure projects/pf/pf45/contrib/binutils/bfd/configure.host projects/pf/pf45/contrib/binutils/bfd/configure.in projects/pf/pf45/contrib/binutils/bfd/corefile.c projects/pf/pf45/contrib/binutils/bfd/cpu-alpha.c projects/pf/pf45/contrib/binutils/bfd/cpu-arc.c projects/pf/pf45/contrib/binutils/bfd/cpu-arm.c projects/pf/pf45/contrib/binutils/bfd/cpu-i386.c projects/pf/pf45/contrib/binutils/bfd/cpu-ia64-opc.c projects/pf/pf45/contrib/binutils/bfd/cpu-ia64.c projects/pf/pf45/contrib/binutils/bfd/cpu-mips.c projects/pf/pf45/contrib/binutils/bfd/cpu-powerpc.c projects/pf/pf45/contrib/binutils/bfd/cpu-rs6000.c projects/pf/pf45/contrib/binutils/bfd/cpu-s390.c projects/pf/pf45/contrib/binutils/bfd/cpu-sparc.c projects/pf/pf45/contrib/binutils/bfd/demo64.c projects/pf/pf45/contrib/binutils/bfd/dep-in.sed projects/pf/pf45/contrib/binutils/bfd/doc/ChangeLog projects/pf/pf45/contrib/binutils/bfd/doc/Makefile.am projects/pf/pf45/contrib/binutils/bfd/doc/Makefile.in projects/pf/pf45/contrib/binutils/bfd/doc/bfd.texinfo projects/pf/pf45/contrib/binutils/bfd/doc/bfdint.texi projects/pf/pf45/contrib/binutils/bfd/doc/chew.c projects/pf/pf45/contrib/binutils/bfd/doc/fdl.texi projects/pf/pf45/contrib/binutils/bfd/dwarf1.c projects/pf/pf45/contrib/binutils/bfd/dwarf2.c projects/pf/pf45/contrib/binutils/bfd/ecoff.c projects/pf/pf45/contrib/binutils/bfd/ecofflink.c projects/pf/pf45/contrib/binutils/bfd/ecoffswap.h projects/pf/pf45/contrib/binutils/bfd/efi-app-ia32.c projects/pf/pf45/contrib/binutils/bfd/efi-app-ia64.c projects/pf/pf45/contrib/binutils/bfd/elf-bfd.h projects/pf/pf45/contrib/binutils/bfd/elf-eh-frame.c projects/pf/pf45/contrib/binutils/bfd/elf-strtab.c projects/pf/pf45/contrib/binutils/bfd/elf.c projects/pf/pf45/contrib/binutils/bfd/elf32-arc.c projects/pf/pf45/contrib/binutils/bfd/elf32-gen.c projects/pf/pf45/contrib/binutils/bfd/elf32-i386.c projects/pf/pf45/contrib/binutils/bfd/elf32-mips.c projects/pf/pf45/contrib/binutils/bfd/elf32-ppc.c projects/pf/pf45/contrib/binutils/bfd/elf32-ppc.h projects/pf/pf45/contrib/binutils/bfd/elf32-s390.c projects/pf/pf45/contrib/binutils/bfd/elf32-sparc.c projects/pf/pf45/contrib/binutils/bfd/elf32.c projects/pf/pf45/contrib/binutils/bfd/elf64-alpha.c projects/pf/pf45/contrib/binutils/bfd/elf64-gen.c projects/pf/pf45/contrib/binutils/bfd/elf64-mips.c projects/pf/pf45/contrib/binutils/bfd/elf64-ppc.c projects/pf/pf45/contrib/binutils/bfd/elf64-ppc.h projects/pf/pf45/contrib/binutils/bfd/elf64-s390.c projects/pf/pf45/contrib/binutils/bfd/elf64-sparc.c projects/pf/pf45/contrib/binutils/bfd/elf64-x86-64.c projects/pf/pf45/contrib/binutils/bfd/elf64.c projects/pf/pf45/contrib/binutils/bfd/elfcode.h projects/pf/pf45/contrib/binutils/bfd/elfcore.h projects/pf/pf45/contrib/binutils/bfd/elflink.c projects/pf/pf45/contrib/binutils/bfd/elfn32-mips.c projects/pf/pf45/contrib/binutils/bfd/elfxx-ia64.c projects/pf/pf45/contrib/binutils/bfd/elfxx-mips.c projects/pf/pf45/contrib/binutils/bfd/elfxx-mips.h projects/pf/pf45/contrib/binutils/bfd/elfxx-target.h projects/pf/pf45/contrib/binutils/bfd/format.c projects/pf/pf45/contrib/binutils/bfd/freebsd.h projects/pf/pf45/contrib/binutils/bfd/gen-aout.c projects/pf/pf45/contrib/binutils/bfd/genlink.h projects/pf/pf45/contrib/binutils/bfd/hash.c projects/pf/pf45/contrib/binutils/bfd/host-aout.c projects/pf/pf45/contrib/binutils/bfd/i386aout.c projects/pf/pf45/contrib/binutils/bfd/i386bsd.c projects/pf/pf45/contrib/binutils/bfd/i386freebsd.c projects/pf/pf45/contrib/binutils/bfd/i386linux.c projects/pf/pf45/contrib/binutils/bfd/i386netbsd.c projects/pf/pf45/contrib/binutils/bfd/ieee.c projects/pf/pf45/contrib/binutils/bfd/ihex.c projects/pf/pf45/contrib/binutils/bfd/init.c projects/pf/pf45/contrib/binutils/bfd/libaout.h projects/pf/pf45/contrib/binutils/bfd/libbfd-in.h projects/pf/pf45/contrib/binutils/bfd/libbfd.c projects/pf/pf45/contrib/binutils/bfd/libbfd.h projects/pf/pf45/contrib/binutils/bfd/libcoff-in.h projects/pf/pf45/contrib/binutils/bfd/libcoff.h projects/pf/pf45/contrib/binutils/bfd/libecoff.h projects/pf/pf45/contrib/binutils/bfd/libieee.h projects/pf/pf45/contrib/binutils/bfd/libpei.h projects/pf/pf45/contrib/binutils/bfd/libxcoff.h projects/pf/pf45/contrib/binutils/bfd/linker.c projects/pf/pf45/contrib/binutils/bfd/merge.c projects/pf/pf45/contrib/binutils/bfd/mipsbsd.c projects/pf/pf45/contrib/binutils/bfd/netbsd-core.c projects/pf/pf45/contrib/binutils/bfd/netbsd.h projects/pf/pf45/contrib/binutils/bfd/opncls.c projects/pf/pf45/contrib/binutils/bfd/osf-core.c projects/pf/pf45/contrib/binutils/bfd/pe-arm.c projects/pf/pf45/contrib/binutils/bfd/pe-i386.c projects/pf/pf45/contrib/binutils/bfd/pe-mips.c projects/pf/pf45/contrib/binutils/bfd/pe-ppc.c projects/pf/pf45/contrib/binutils/bfd/peXXigen.c projects/pf/pf45/contrib/binutils/bfd/pei-mips.c projects/pf/pf45/contrib/binutils/bfd/peicode.h projects/pf/pf45/contrib/binutils/bfd/po/BLD-POTFILES.in projects/pf/pf45/contrib/binutils/bfd/po/Make-in projects/pf/pf45/contrib/binutils/bfd/po/SRC-POTFILES.in projects/pf/pf45/contrib/binutils/bfd/po/bfd.pot projects/pf/pf45/contrib/binutils/bfd/ppcboot.c projects/pf/pf45/contrib/binutils/bfd/ptrace-core.c projects/pf/pf45/contrib/binutils/bfd/reloc.c projects/pf/pf45/contrib/binutils/bfd/reloc16.c projects/pf/pf45/contrib/binutils/bfd/rs6000-core.c projects/pf/pf45/contrib/binutils/bfd/sco5-core.c projects/pf/pf45/contrib/binutils/bfd/section.c projects/pf/pf45/contrib/binutils/bfd/simple.c projects/pf/pf45/contrib/binutils/bfd/sparclinux.c projects/pf/pf45/contrib/binutils/bfd/sparcnetbsd.c projects/pf/pf45/contrib/binutils/bfd/srec.c projects/pf/pf45/contrib/binutils/bfd/stab-syms.c projects/pf/pf45/contrib/binutils/bfd/stabs.c projects/pf/pf45/contrib/binutils/bfd/sunos.c projects/pf/pf45/contrib/binutils/bfd/syms.c projects/pf/pf45/contrib/binutils/bfd/sysdep.h projects/pf/pf45/contrib/binutils/bfd/targets.c projects/pf/pf45/contrib/binutils/bfd/tekhex.c projects/pf/pf45/contrib/binutils/bfd/trad-core.c projects/pf/pf45/contrib/binutils/bfd/version.h projects/pf/pf45/contrib/binutils/bfd/xcoff-target.h projects/pf/pf45/contrib/binutils/bfd/xcofflink.c projects/pf/pf45/contrib/binutils/binutils/ChangeLog projects/pf/pf45/contrib/binutils/binutils/MAINTAINERS projects/pf/pf45/contrib/binutils/binutils/Makefile.am projects/pf/pf45/contrib/binutils/binutils/Makefile.in projects/pf/pf45/contrib/binutils/binutils/NEWS projects/pf/pf45/contrib/binutils/binutils/aclocal.m4 projects/pf/pf45/contrib/binutils/binutils/addr2line.c projects/pf/pf45/contrib/binutils/binutils/ar.c projects/pf/pf45/contrib/binutils/binutils/arlex.l projects/pf/pf45/contrib/binutils/binutils/arparse.y projects/pf/pf45/contrib/binutils/binutils/arsup.c projects/pf/pf45/contrib/binutils/binutils/arsup.h projects/pf/pf45/contrib/binutils/binutils/binemul.c projects/pf/pf45/contrib/binutils/binutils/binemul.h projects/pf/pf45/contrib/binutils/binutils/bucomm.c projects/pf/pf45/contrib/binutils/binutils/bucomm.h projects/pf/pf45/contrib/binutils/binutils/budbg.h projects/pf/pf45/contrib/binutils/binutils/coffdump.c projects/pf/pf45/contrib/binutils/binutils/coffgrok.c projects/pf/pf45/contrib/binutils/binutils/coffgrok.h projects/pf/pf45/contrib/binutils/binutils/config.in projects/pf/pf45/contrib/binutils/binutils/configure projects/pf/pf45/contrib/binutils/binutils/configure.in projects/pf/pf45/contrib/binutils/binutils/cxxfilt.c projects/pf/pf45/contrib/binutils/binutils/debug.c projects/pf/pf45/contrib/binutils/binutils/debug.h projects/pf/pf45/contrib/binutils/binutils/deflex.l projects/pf/pf45/contrib/binutils/binutils/defparse.y projects/pf/pf45/contrib/binutils/binutils/dep-in.sed projects/pf/pf45/contrib/binutils/binutils/dlltool.c projects/pf/pf45/contrib/binutils/binutils/dlltool.h projects/pf/pf45/contrib/binutils/binutils/dllwrap.c projects/pf/pf45/contrib/binutils/binutils/doc/Makefile.am projects/pf/pf45/contrib/binutils/binutils/doc/Makefile.in projects/pf/pf45/contrib/binutils/binutils/doc/binutils.texi projects/pf/pf45/contrib/binutils/binutils/doc/fdl.texi projects/pf/pf45/contrib/binutils/binutils/emul_vanilla.c projects/pf/pf45/contrib/binutils/binutils/filemode.c projects/pf/pf45/contrib/binutils/binutils/ieee.c projects/pf/pf45/contrib/binutils/binutils/nm.c projects/pf/pf45/contrib/binutils/binutils/objcopy.c projects/pf/pf45/contrib/binutils/binutils/objdump.c projects/pf/pf45/contrib/binutils/binutils/po/Make-in projects/pf/pf45/contrib/binutils/binutils/po/POTFILES.in projects/pf/pf45/contrib/binutils/binutils/po/binutils.pot projects/pf/pf45/contrib/binutils/binutils/prdbg.c projects/pf/pf45/contrib/binutils/binutils/ranlib.sh projects/pf/pf45/contrib/binutils/binutils/rclex.c projects/pf/pf45/contrib/binutils/binutils/rcparse.y projects/pf/pf45/contrib/binutils/binutils/rdcoff.c projects/pf/pf45/contrib/binutils/binutils/rddbg.c projects/pf/pf45/contrib/binutils/binutils/readelf.c projects/pf/pf45/contrib/binutils/binutils/rename.c projects/pf/pf45/contrib/binutils/binutils/resbin.c projects/pf/pf45/contrib/binutils/binutils/rescoff.c projects/pf/pf45/contrib/binutils/binutils/resrc.c projects/pf/pf45/contrib/binutils/binutils/resres.c projects/pf/pf45/contrib/binutils/binutils/size.c projects/pf/pf45/contrib/binutils/binutils/srconv.c projects/pf/pf45/contrib/binutils/binutils/stabs.c projects/pf/pf45/contrib/binutils/binutils/strings.c projects/pf/pf45/contrib/binutils/binutils/sysdump.c projects/pf/pf45/contrib/binutils/binutils/sysinfo.y projects/pf/pf45/contrib/binutils/binutils/syslex.l projects/pf/pf45/contrib/binutils/binutils/unwind-ia64.c projects/pf/pf45/contrib/binutils/binutils/unwind-ia64.h projects/pf/pf45/contrib/binutils/binutils/version.c projects/pf/pf45/contrib/binutils/binutils/wrstabs.c projects/pf/pf45/contrib/binutils/config-ml.in projects/pf/pf45/contrib/binutils/config.guess projects/pf/pf45/contrib/binutils/config.sub projects/pf/pf45/contrib/binutils/config/ChangeLog projects/pf/pf45/contrib/binutils/config/acinclude.m4 projects/pf/pf45/contrib/binutils/config/mh-cxux projects/pf/pf45/contrib/binutils/config/mh-necv4 projects/pf/pf45/contrib/binutils/config/mh-sco projects/pf/pf45/contrib/binutils/config/mh-solaris projects/pf/pf45/contrib/binutils/config/mh-sysv4 projects/pf/pf45/contrib/binutils/config/mh-sysv5 projects/pf/pf45/contrib/binutils/config/mt-v810 projects/pf/pf45/contrib/binutils/configure projects/pf/pf45/contrib/binutils/etc/ChangeLog projects/pf/pf45/contrib/binutils/etc/Makefile.in projects/pf/pf45/contrib/binutils/gas/ChangeLog projects/pf/pf45/contrib/binutils/gas/ChangeLog-0001 projects/pf/pf45/contrib/binutils/gas/ChangeLog-0203 projects/pf/pf45/contrib/binutils/gas/ChangeLog-9295 projects/pf/pf45/contrib/binutils/gas/ChangeLog-9697 projects/pf/pf45/contrib/binutils/gas/ChangeLog-9899 projects/pf/pf45/contrib/binutils/gas/Makefile.am projects/pf/pf45/contrib/binutils/gas/Makefile.in projects/pf/pf45/contrib/binutils/gas/NEWS projects/pf/pf45/contrib/binutils/gas/README projects/pf/pf45/contrib/binutils/gas/acinclude.m4 projects/pf/pf45/contrib/binutils/gas/aclocal.m4 projects/pf/pf45/contrib/binutils/gas/app.c projects/pf/pf45/contrib/binutils/gas/as.c projects/pf/pf45/contrib/binutils/gas/as.h projects/pf/pf45/contrib/binutils/gas/asintl.h projects/pf/pf45/contrib/binutils/gas/atof-generic.c projects/pf/pf45/contrib/binutils/gas/bignum.h projects/pf/pf45/contrib/binutils/gas/bit_fix.h projects/pf/pf45/contrib/binutils/gas/cgen.c projects/pf/pf45/contrib/binutils/gas/cgen.h projects/pf/pf45/contrib/binutils/gas/cond.c projects/pf/pf45/contrib/binutils/gas/config.in projects/pf/pf45/contrib/binutils/gas/config/aout_gnu.h projects/pf/pf45/contrib/binutils/gas/config/atof-ieee.c projects/pf/pf45/contrib/binutils/gas/config/atof-vax.c projects/pf/pf45/contrib/binutils/gas/config/itbl-mips.h projects/pf/pf45/contrib/binutils/gas/config/obj-aout.c projects/pf/pf45/contrib/binutils/gas/config/obj-aout.h projects/pf/pf45/contrib/binutils/gas/config/obj-coff.c projects/pf/pf45/contrib/binutils/gas/config/obj-coff.h projects/pf/pf45/contrib/binutils/gas/config/obj-ecoff.c projects/pf/pf45/contrib/binutils/gas/config/obj-ecoff.h projects/pf/pf45/contrib/binutils/gas/config/obj-elf.c projects/pf/pf45/contrib/binutils/gas/config/obj-elf.h projects/pf/pf45/contrib/binutils/gas/config/obj-multi.h projects/pf/pf45/contrib/binutils/gas/config/tc-alpha.c projects/pf/pf45/contrib/binutils/gas/config/tc-alpha.h projects/pf/pf45/contrib/binutils/gas/config/tc-arc.c projects/pf/pf45/contrib/binutils/gas/config/tc-arc.h projects/pf/pf45/contrib/binutils/gas/config/tc-arm.c projects/pf/pf45/contrib/binutils/gas/config/tc-arm.h projects/pf/pf45/contrib/binutils/gas/config/tc-generic.c projects/pf/pf45/contrib/binutils/gas/config/tc-generic.h projects/pf/pf45/contrib/binutils/gas/config/tc-i386.c projects/pf/pf45/contrib/binutils/gas/config/tc-i386.h projects/pf/pf45/contrib/binutils/gas/config/tc-ia64.c projects/pf/pf45/contrib/binutils/gas/config/tc-ia64.h projects/pf/pf45/contrib/binutils/gas/config/tc-m68851.h projects/pf/pf45/contrib/binutils/gas/config/tc-mips.c projects/pf/pf45/contrib/binutils/gas/config/tc-mips.h projects/pf/pf45/contrib/binutils/gas/config/tc-ppc.c projects/pf/pf45/contrib/binutils/gas/config/tc-ppc.h projects/pf/pf45/contrib/binutils/gas/config/tc-s390.c projects/pf/pf45/contrib/binutils/gas/config/tc-s390.h projects/pf/pf45/contrib/binutils/gas/config/tc-sparc.c projects/pf/pf45/contrib/binutils/gas/config/tc-sparc.h projects/pf/pf45/contrib/binutils/gas/config/te-386bsd.h projects/pf/pf45/contrib/binutils/gas/config/te-freebsd.h projects/pf/pf45/contrib/binutils/gas/config/te-nbsd.h projects/pf/pf45/contrib/binutils/gas/config/te-sparcaout.h projects/pf/pf45/contrib/binutils/gas/config/te-tmips.h projects/pf/pf45/contrib/binutils/gas/configure projects/pf/pf45/contrib/binutils/gas/configure.in projects/pf/pf45/contrib/binutils/gas/debug.c projects/pf/pf45/contrib/binutils/gas/dep-in.sed projects/pf/pf45/contrib/binutils/gas/depend.c projects/pf/pf45/contrib/binutils/gas/doc/Makefile.am projects/pf/pf45/contrib/binutils/gas/doc/Makefile.in projects/pf/pf45/contrib/binutils/gas/doc/all.texi projects/pf/pf45/contrib/binutils/gas/doc/as.texinfo projects/pf/pf45/contrib/binutils/gas/doc/c-alpha.texi projects/pf/pf45/contrib/binutils/gas/doc/c-arc.texi projects/pf/pf45/contrib/binutils/gas/doc/c-arm.texi projects/pf/pf45/contrib/binutils/gas/doc/c-i386.texi projects/pf/pf45/contrib/binutils/gas/doc/c-ia64.texi projects/pf/pf45/contrib/binutils/gas/doc/c-mips.texi projects/pf/pf45/contrib/binutils/gas/doc/c-ppc.texi projects/pf/pf45/contrib/binutils/gas/doc/c-sh.texi projects/pf/pf45/contrib/binutils/gas/doc/c-sparc.texi projects/pf/pf45/contrib/binutils/gas/doc/internals.texi projects/pf/pf45/contrib/binutils/gas/dw2gencfi.c projects/pf/pf45/contrib/binutils/gas/dw2gencfi.h projects/pf/pf45/contrib/binutils/gas/dwarf2dbg.c projects/pf/pf45/contrib/binutils/gas/dwarf2dbg.h projects/pf/pf45/contrib/binutils/gas/ecoff.c projects/pf/pf45/contrib/binutils/gas/ecoff.h projects/pf/pf45/contrib/binutils/gas/ehopt.c projects/pf/pf45/contrib/binutils/gas/emul-target.h projects/pf/pf45/contrib/binutils/gas/emul.h projects/pf/pf45/contrib/binutils/gas/expr.c projects/pf/pf45/contrib/binutils/gas/expr.h projects/pf/pf45/contrib/binutils/gas/flonum-copy.c projects/pf/pf45/contrib/binutils/gas/flonum-konst.c projects/pf/pf45/contrib/binutils/gas/flonum-mult.c projects/pf/pf45/contrib/binutils/gas/flonum.h projects/pf/pf45/contrib/binutils/gas/frags.c projects/pf/pf45/contrib/binutils/gas/frags.h projects/pf/pf45/contrib/binutils/gas/gdbinit.in projects/pf/pf45/contrib/binutils/gas/hash.c projects/pf/pf45/contrib/binutils/gas/hash.h projects/pf/pf45/contrib/binutils/gas/input-file.c projects/pf/pf45/contrib/binutils/gas/input-file.h projects/pf/pf45/contrib/binutils/gas/input-scrub.c projects/pf/pf45/contrib/binutils/gas/itbl-lex.l projects/pf/pf45/contrib/binutils/gas/itbl-ops.c projects/pf/pf45/contrib/binutils/gas/itbl-ops.h projects/pf/pf45/contrib/binutils/gas/itbl-parse.y projects/pf/pf45/contrib/binutils/gas/listing.c projects/pf/pf45/contrib/binutils/gas/listing.h projects/pf/pf45/contrib/binutils/gas/literal.c projects/pf/pf45/contrib/binutils/gas/macro.c projects/pf/pf45/contrib/binutils/gas/macro.h projects/pf/pf45/contrib/binutils/gas/messages.c projects/pf/pf45/contrib/binutils/gas/obj.h projects/pf/pf45/contrib/binutils/gas/output-file.c projects/pf/pf45/contrib/binutils/gas/output-file.h projects/pf/pf45/contrib/binutils/gas/po/Make-in projects/pf/pf45/contrib/binutils/gas/po/POTFILES.in projects/pf/pf45/contrib/binutils/gas/po/gas.pot projects/pf/pf45/contrib/binutils/gas/read.c projects/pf/pf45/contrib/binutils/gas/read.h projects/pf/pf45/contrib/binutils/gas/sb.c projects/pf/pf45/contrib/binutils/gas/sb.h projects/pf/pf45/contrib/binutils/gas/stabs.c projects/pf/pf45/contrib/binutils/gas/struc-symbol.h projects/pf/pf45/contrib/binutils/gas/subsegs.c projects/pf/pf45/contrib/binutils/gas/subsegs.h projects/pf/pf45/contrib/binutils/gas/symbols.c projects/pf/pf45/contrib/binutils/gas/symbols.h projects/pf/pf45/contrib/binutils/gas/tc.h projects/pf/pf45/contrib/binutils/gas/write.c projects/pf/pf45/contrib/binutils/gas/write.h projects/pf/pf45/contrib/binutils/gprof/mips.c projects/pf/pf45/contrib/binutils/gprof/po/Make-in projects/pf/pf45/contrib/binutils/gprof/po/gprof.pot projects/pf/pf45/contrib/binutils/include/ChangeLog projects/pf/pf45/contrib/binutils/include/ansidecl.h projects/pf/pf45/contrib/binutils/include/aout/ChangeLog projects/pf/pf45/contrib/binutils/include/aout/aout64.h projects/pf/pf45/contrib/binutils/include/aout/ar.h projects/pf/pf45/contrib/binutils/include/aout/encap.h projects/pf/pf45/contrib/binutils/include/aout/host.h projects/pf/pf45/contrib/binutils/include/aout/ranlib.h projects/pf/pf45/contrib/binutils/include/aout/reloc.h projects/pf/pf45/contrib/binutils/include/aout/stab.def projects/pf/pf45/contrib/binutils/include/aout/stab_gnu.h projects/pf/pf45/contrib/binutils/include/aout/sun4.h projects/pf/pf45/contrib/binutils/include/bfdlink.h projects/pf/pf45/contrib/binutils/include/coff/ChangeLog projects/pf/pf45/contrib/binutils/include/coff/alpha.h projects/pf/pf45/contrib/binutils/include/coff/arm.h projects/pf/pf45/contrib/binutils/include/coff/aux-coff.h projects/pf/pf45/contrib/binutils/include/coff/ecoff.h projects/pf/pf45/contrib/binutils/include/coff/external.h projects/pf/pf45/contrib/binutils/include/coff/i386.h projects/pf/pf45/contrib/binutils/include/coff/ia64.h projects/pf/pf45/contrib/binutils/include/coff/mips.h projects/pf/pf45/contrib/binutils/include/coff/mipspe.h projects/pf/pf45/contrib/binutils/include/coff/pe.h projects/pf/pf45/contrib/binutils/include/coff/powerpc.h projects/pf/pf45/contrib/binutils/include/coff/rs6000.h projects/pf/pf45/contrib/binutils/include/coff/rs6k64.h projects/pf/pf45/contrib/binutils/include/coff/sh.h projects/pf/pf45/contrib/binutils/include/coff/sparc.h projects/pf/pf45/contrib/binutils/include/coff/symconst.h projects/pf/pf45/contrib/binutils/include/coff/ti.h projects/pf/pf45/contrib/binutils/include/coff/xcoff.h projects/pf/pf45/contrib/binutils/include/demangle.h projects/pf/pf45/contrib/binutils/include/dis-asm.h projects/pf/pf45/contrib/binutils/include/dyn-string.h projects/pf/pf45/contrib/binutils/include/elf/ChangeLog projects/pf/pf45/contrib/binutils/include/elf/ChangeLog-9103 projects/pf/pf45/contrib/binutils/include/elf/alpha.h projects/pf/pf45/contrib/binutils/include/elf/arc.h projects/pf/pf45/contrib/binutils/include/elf/arm.h projects/pf/pf45/contrib/binutils/include/elf/avr.h projects/pf/pf45/contrib/binutils/include/elf/common.h projects/pf/pf45/contrib/binutils/include/elf/cris.h projects/pf/pf45/contrib/binutils/include/elf/d10v.h projects/pf/pf45/contrib/binutils/include/elf/d30v.h projects/pf/pf45/contrib/binutils/include/elf/dlx.h projects/pf/pf45/contrib/binutils/include/elf/dwarf.h projects/pf/pf45/contrib/binutils/include/elf/dwarf2.h projects/pf/pf45/contrib/binutils/include/elf/external.h projects/pf/pf45/contrib/binutils/include/elf/fr30.h projects/pf/pf45/contrib/binutils/include/elf/frv.h projects/pf/pf45/contrib/binutils/include/elf/h8.h projects/pf/pf45/contrib/binutils/include/elf/hppa.h projects/pf/pf45/contrib/binutils/include/elf/i370.h projects/pf/pf45/contrib/binutils/include/elf/i386.h projects/pf/pf45/contrib/binutils/include/elf/i860.h projects/pf/pf45/contrib/binutils/include/elf/i960.h projects/pf/pf45/contrib/binutils/include/elf/ia64.h projects/pf/pf45/contrib/binutils/include/elf/internal.h projects/pf/pf45/contrib/binutils/include/elf/ip2k.h projects/pf/pf45/contrib/binutils/include/elf/iq2000.h projects/pf/pf45/contrib/binutils/include/elf/m32r.h projects/pf/pf45/contrib/binutils/include/elf/m68hc11.h projects/pf/pf45/contrib/binutils/include/elf/m68k.h projects/pf/pf45/contrib/binutils/include/elf/mcore.h projects/pf/pf45/contrib/binutils/include/elf/mips.h projects/pf/pf45/contrib/binutils/include/elf/mmix.h projects/pf/pf45/contrib/binutils/include/elf/mn10200.h projects/pf/pf45/contrib/binutils/include/elf/mn10300.h projects/pf/pf45/contrib/binutils/include/elf/msp430.h projects/pf/pf45/contrib/binutils/include/elf/openrisc.h projects/pf/pf45/contrib/binutils/include/elf/or32.h projects/pf/pf45/contrib/binutils/include/elf/pj.h projects/pf/pf45/contrib/binutils/include/elf/ppc.h projects/pf/pf45/contrib/binutils/include/elf/ppc64.h projects/pf/pf45/contrib/binutils/include/elf/reloc-macros.h projects/pf/pf45/contrib/binutils/include/elf/s390.h projects/pf/pf45/contrib/binutils/include/elf/sh.h projects/pf/pf45/contrib/binutils/include/elf/sparc.h projects/pf/pf45/contrib/binutils/include/elf/v850.h projects/pf/pf45/contrib/binutils/include/elf/vax.h projects/pf/pf45/contrib/binutils/include/elf/x86-64.h projects/pf/pf45/contrib/binutils/include/elf/xstormy16.h projects/pf/pf45/contrib/binutils/include/elf/xtensa.h projects/pf/pf45/contrib/binutils/include/fibheap.h projects/pf/pf45/contrib/binutils/include/filenames.h projects/pf/pf45/contrib/binutils/include/floatformat.h projects/pf/pf45/contrib/binutils/include/fnmatch.h projects/pf/pf45/contrib/binutils/include/gdbm.h projects/pf/pf45/contrib/binutils/include/hashtab.h projects/pf/pf45/contrib/binutils/include/ieee.h projects/pf/pf45/contrib/binutils/include/libiberty.h projects/pf/pf45/contrib/binutils/include/md5.h projects/pf/pf45/contrib/binutils/include/objalloc.h projects/pf/pf45/contrib/binutils/include/obstack.h projects/pf/pf45/contrib/binutils/include/opcode/ChangeLog projects/pf/pf45/contrib/binutils/include/opcode/ChangeLog-9103 projects/pf/pf45/contrib/binutils/include/opcode/alpha.h projects/pf/pf45/contrib/binutils/include/opcode/arc.h projects/pf/pf45/contrib/binutils/include/opcode/arm.h projects/pf/pf45/contrib/binutils/include/opcode/cgen.h projects/pf/pf45/contrib/binutils/include/opcode/convex.h projects/pf/pf45/contrib/binutils/include/opcode/i386.h projects/pf/pf45/contrib/binutils/include/opcode/ia64.h projects/pf/pf45/contrib/binutils/include/opcode/mips.h projects/pf/pf45/contrib/binutils/include/opcode/np1.h projects/pf/pf45/contrib/binutils/include/opcode/pn.h projects/pf/pf45/contrib/binutils/include/opcode/ppc.h projects/pf/pf45/contrib/binutils/include/opcode/s390.h projects/pf/pf45/contrib/binutils/include/opcode/sparc.h projects/pf/pf45/contrib/binutils/include/partition.h projects/pf/pf45/contrib/binutils/include/progress.h projects/pf/pf45/contrib/binutils/include/safe-ctype.h projects/pf/pf45/contrib/binutils/include/sort.h projects/pf/pf45/contrib/binutils/include/splay-tree.h projects/pf/pf45/contrib/binutils/include/symcat.h projects/pf/pf45/contrib/binutils/include/ternary.h projects/pf/pf45/contrib/binutils/include/xregex2.h projects/pf/pf45/contrib/binutils/install-sh projects/pf/pf45/contrib/binutils/ld/ChangeLog projects/pf/pf45/contrib/binutils/ld/Makefile.am projects/pf/pf45/contrib/binutils/ld/Makefile.in projects/pf/pf45/contrib/binutils/ld/NEWS projects/pf/pf45/contrib/binutils/ld/aclocal.m4 projects/pf/pf45/contrib/binutils/ld/config.in projects/pf/pf45/contrib/binutils/ld/configure projects/pf/pf45/contrib/binutils/ld/configure.host projects/pf/pf45/contrib/binutils/ld/configure.in projects/pf/pf45/contrib/binutils/ld/configure.tgt projects/pf/pf45/contrib/binutils/ld/deffile.h projects/pf/pf45/contrib/binutils/ld/deffilep.y projects/pf/pf45/contrib/binutils/ld/dep-in.sed projects/pf/pf45/contrib/binutils/ld/emulparams/arcelf.sh projects/pf/pf45/contrib/binutils/ld/emulparams/armelf.sh projects/pf/pf45/contrib/binutils/ld/emulparams/armelf_fbsd.sh projects/pf/pf45/contrib/binutils/ld/emulparams/armelf_linux.sh projects/pf/pf45/contrib/binutils/ld/emulparams/armelf_nbsd.sh projects/pf/pf45/contrib/binutils/ld/emulparams/armpe.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32_sparc.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32bmip.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32bmipn32-defs.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32bmipn32.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32btsmip.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32btsmipn32.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32ppc.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf32ppclinux.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64_ia64.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64_ia64_fbsd.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64_s390.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64_sparc.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64_sparc_fbsd.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64alpha.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64bmip.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64btsmip.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf64ppc.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf_i386.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf_i386_chaos.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf_i386_ldso.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf_s390.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf_x86_64.sh projects/pf/pf45/contrib/binutils/ld/emulparams/elf_x86_64_fbsd.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386moss.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386nto.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386nw.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386pe.sh projects/pf/pf45/contrib/binutils/ld/emulparams/i386pe_posix.sh projects/pf/pf45/contrib/binutils/ld/emulparams/mipsidt.sh projects/pf/pf45/contrib/binutils/ld/emulparams/mipsidtl.sh projects/pf/pf45/contrib/binutils/ld/emulparams/mipspe.sh projects/pf/pf45/contrib/binutils/ld/emulparams/ppcnw.sh projects/pf/pf45/contrib/binutils/ld/emulparams/ppcpe.sh projects/pf/pf45/contrib/binutils/ld/emultempl/alphaelf.em projects/pf/pf45/contrib/binutils/ld/emultempl/armcoff.em projects/pf/pf45/contrib/binutils/ld/emultempl/armelf.em projects/pf/pf45/contrib/binutils/ld/emultempl/elf32.em projects/pf/pf45/contrib/binutils/ld/emultempl/generic.em projects/pf/pf45/contrib/binutils/ld/emultempl/ia64elf.em projects/pf/pf45/contrib/binutils/ld/emultempl/linux.em projects/pf/pf45/contrib/binutils/ld/emultempl/mipsecoff.em projects/pf/pf45/contrib/binutils/ld/emultempl/needrelax.em projects/pf/pf45/contrib/binutils/ld/emultempl/pe.em projects/pf/pf45/contrib/binutils/ld/emultempl/ppc32elf.em projects/pf/pf45/contrib/binutils/ld/emultempl/ppc64elf.em projects/pf/pf45/contrib/binutils/ld/emultempl/sunos.em projects/pf/pf45/contrib/binutils/ld/emultempl/ticoff.em projects/pf/pf45/contrib/binutils/ld/emultempl/vanilla.em projects/pf/pf45/contrib/binutils/ld/fdl.texi projects/pf/pf45/contrib/binutils/ld/gen-doc.texi projects/pf/pf45/contrib/binutils/ld/genscripts.sh projects/pf/pf45/contrib/binutils/ld/ld.h projects/pf/pf45/contrib/binutils/ld/ld.texinfo projects/pf/pf45/contrib/binutils/ld/ldcref.c projects/pf/pf45/contrib/binutils/ld/ldctor.c projects/pf/pf45/contrib/binutils/ld/ldctor.h projects/pf/pf45/contrib/binutils/ld/ldemul.c projects/pf/pf45/contrib/binutils/ld/ldemul.h projects/pf/pf45/contrib/binutils/ld/ldexp.c projects/pf/pf45/contrib/binutils/ld/ldexp.h projects/pf/pf45/contrib/binutils/ld/ldfile.c projects/pf/pf45/contrib/binutils/ld/ldfile.h projects/pf/pf45/contrib/binutils/ld/ldgram.y projects/pf/pf45/contrib/binutils/ld/ldint.texinfo projects/pf/pf45/contrib/binutils/ld/ldlang.c projects/pf/pf45/contrib/binutils/ld/ldlang.h projects/pf/pf45/contrib/binutils/ld/ldlex.h projects/pf/pf45/contrib/binutils/ld/ldlex.l projects/pf/pf45/contrib/binutils/ld/ldmain.c projects/pf/pf45/contrib/binutils/ld/ldmain.h projects/pf/pf45/contrib/binutils/ld/ldmisc.c projects/pf/pf45/contrib/binutils/ld/ldmisc.h projects/pf/pf45/contrib/binutils/ld/ldver.c projects/pf/pf45/contrib/binutils/ld/ldver.h projects/pf/pf45/contrib/binutils/ld/ldwrite.c projects/pf/pf45/contrib/binutils/ld/ldwrite.h projects/pf/pf45/contrib/binutils/ld/lexsup.c projects/pf/pf45/contrib/binutils/ld/mri.c projects/pf/pf45/contrib/binutils/ld/mri.h projects/pf/pf45/contrib/binutils/ld/pe-dll.c projects/pf/pf45/contrib/binutils/ld/pe-dll.h projects/pf/pf45/contrib/binutils/ld/po/Make-in projects/pf/pf45/contrib/binutils/ld/po/POTFILES.in projects/pf/pf45/contrib/binutils/ld/po/ld.pot projects/pf/pf45/contrib/binutils/ld/scripttempl/elf.sc projects/pf/pf45/contrib/binutils/ld/scripttempl/mips.sc projects/pf/pf45/contrib/binutils/ld/scripttempl/pe.sc projects/pf/pf45/contrib/binutils/ld/sysdep.h projects/pf/pf45/contrib/binutils/libiberty/ChangeLog projects/pf/pf45/contrib/binutils/libiberty/Makefile.in projects/pf/pf45/contrib/binutils/libiberty/_doprnt.c projects/pf/pf45/contrib/binutils/libiberty/aclocal.m4 projects/pf/pf45/contrib/binutils/libiberty/alloca.c projects/pf/pf45/contrib/binutils/libiberty/argv.c projects/pf/pf45/contrib/binutils/libiberty/asprintf.c projects/pf/pf45/contrib/binutils/libiberty/atexit.c projects/pf/pf45/contrib/binutils/libiberty/basename.c projects/pf/pf45/contrib/binutils/libiberty/bcmp.c projects/pf/pf45/contrib/binutils/libiberty/bcopy.c projects/pf/pf45/contrib/binutils/libiberty/bsearch.c projects/pf/pf45/contrib/binutils/libiberty/bzero.c projects/pf/pf45/contrib/binutils/libiberty/calloc.c projects/pf/pf45/contrib/binutils/libiberty/choose-temp.c projects/pf/pf45/contrib/binutils/libiberty/clock.c projects/pf/pf45/contrib/binutils/libiberty/concat.c projects/pf/pf45/contrib/binutils/libiberty/config.in projects/pf/pf45/contrib/binutils/libiberty/configure projects/pf/pf45/contrib/binutils/libiberty/copying-lib.texi projects/pf/pf45/contrib/binutils/libiberty/copysign.c projects/pf/pf45/contrib/binutils/libiberty/cp-demangle.c projects/pf/pf45/contrib/binutils/libiberty/cp-demangle.h projects/pf/pf45/contrib/binutils/libiberty/cp-demint.c projects/pf/pf45/contrib/binutils/libiberty/cplus-dem.c projects/pf/pf45/contrib/binutils/libiberty/dyn-string.c projects/pf/pf45/contrib/binutils/libiberty/fdmatch.c projects/pf/pf45/contrib/binutils/libiberty/ffs.c projects/pf/pf45/contrib/binutils/libiberty/fibheap.c projects/pf/pf45/contrib/binutils/libiberty/floatformat.c projects/pf/pf45/contrib/binutils/libiberty/fnmatch.c projects/pf/pf45/contrib/binutils/libiberty/functions.texi projects/pf/pf45/contrib/binutils/libiberty/gather-docs projects/pf/pf45/contrib/binutils/libiberty/getcwd.c projects/pf/pf45/contrib/binutils/libiberty/getpagesize.c projects/pf/pf45/contrib/binutils/libiberty/getpwd.c projects/pf/pf45/contrib/binutils/libiberty/getruntime.c projects/pf/pf45/contrib/binutils/libiberty/hashtab.c projects/pf/pf45/contrib/binutils/libiberty/hex.c projects/pf/pf45/contrib/binutils/libiberty/index.c projects/pf/pf45/contrib/binutils/libiberty/insque.c projects/pf/pf45/contrib/binutils/libiberty/lbasename.c projects/pf/pf45/contrib/binutils/libiberty/libiberty.texi projects/pf/pf45/contrib/binutils/libiberty/lrealpath.c projects/pf/pf45/contrib/binutils/libiberty/maint-tool projects/pf/pf45/contrib/binutils/libiberty/make-relative-prefix.c projects/pf/pf45/contrib/binutils/libiberty/make-temp-file.c projects/pf/pf45/contrib/binutils/libiberty/md5.c projects/pf/pf45/contrib/binutils/libiberty/memchr.c projects/pf/pf45/contrib/binutils/libiberty/memcmp.c projects/pf/pf45/contrib/binutils/libiberty/memcpy.c projects/pf/pf45/contrib/binutils/libiberty/memmove.c projects/pf/pf45/contrib/binutils/libiberty/memset.c projects/pf/pf45/contrib/binutils/libiberty/mkstemps.c projects/pf/pf45/contrib/binutils/libiberty/objalloc.c projects/pf/pf45/contrib/binutils/libiberty/obstack.c projects/pf/pf45/contrib/binutils/libiberty/partition.c projects/pf/pf45/contrib/binutils/libiberty/physmem.c projects/pf/pf45/contrib/binutils/libiberty/putenv.c projects/pf/pf45/contrib/binutils/libiberty/random.c projects/pf/pf45/contrib/binutils/libiberty/regex.c projects/pf/pf45/contrib/binutils/libiberty/rename.c projects/pf/pf45/contrib/binutils/libiberty/rindex.c projects/pf/pf45/contrib/binutils/libiberty/safe-ctype.c projects/pf/pf45/contrib/binutils/libiberty/setenv.c projects/pf/pf45/contrib/binutils/libiberty/sigsetmask.c projects/pf/pf45/contrib/binutils/libiberty/sort.c projects/pf/pf45/contrib/binutils/libiberty/spaces.c projects/pf/pf45/contrib/binutils/libiberty/splay-tree.c projects/pf/pf45/contrib/binutils/libiberty/strcasecmp.c projects/pf/pf45/contrib/binutils/libiberty/strchr.c projects/pf/pf45/contrib/binutils/libiberty/strdup.c projects/pf/pf45/contrib/binutils/libiberty/strerror.c projects/pf/pf45/contrib/binutils/libiberty/strncasecmp.c projects/pf/pf45/contrib/binutils/libiberty/strncmp.c projects/pf/pf45/contrib/binutils/libiberty/strrchr.c projects/pf/pf45/contrib/binutils/libiberty/strsignal.c projects/pf/pf45/contrib/binutils/libiberty/strstr.c projects/pf/pf45/contrib/binutils/libiberty/strtod.c projects/pf/pf45/contrib/binutils/libiberty/strtol.c projects/pf/pf45/contrib/binutils/libiberty/strtoul.c projects/pf/pf45/contrib/binutils/libiberty/ternary.c projects/pf/pf45/contrib/binutils/libiberty/tmpnam.c projects/pf/pf45/contrib/binutils/libiberty/vasprintf.c projects/pf/pf45/contrib/binutils/libiberty/vfork.c projects/pf/pf45/contrib/binutils/libiberty/vfprintf.c projects/pf/pf45/contrib/binutils/libiberty/vprintf.c projects/pf/pf45/contrib/binutils/libiberty/vsprintf.c projects/pf/pf45/contrib/binutils/libiberty/waitpid.c projects/pf/pf45/contrib/binutils/libiberty/xatexit.c projects/pf/pf45/contrib/binutils/libiberty/xexit.c projects/pf/pf45/contrib/binutils/libiberty/xmalloc.c projects/pf/pf45/contrib/binutils/libiberty/xmemdup.c projects/pf/pf45/contrib/binutils/libiberty/xstrdup.c projects/pf/pf45/contrib/binutils/libiberty/xstrerror.c projects/pf/pf45/contrib/binutils/libtool.m4 projects/pf/pf45/contrib/binutils/ltmain.sh projects/pf/pf45/contrib/binutils/missing projects/pf/pf45/contrib/binutils/mkinstalldirs projects/pf/pf45/contrib/binutils/move-if-change projects/pf/pf45/contrib/binutils/opcodes/ChangeLog projects/pf/pf45/contrib/binutils/opcodes/Makefile.am projects/pf/pf45/contrib/binutils/opcodes/Makefile.in projects/pf/pf45/contrib/binutils/opcodes/aclocal.m4 projects/pf/pf45/contrib/binutils/opcodes/alpha-dis.c projects/pf/pf45/contrib/binutils/opcodes/alpha-opc.c projects/pf/pf45/contrib/binutils/opcodes/arc-dis.c projects/pf/pf45/contrib/binutils/opcodes/arc-dis.h projects/pf/pf45/contrib/binutils/opcodes/arc-ext.c projects/pf/pf45/contrib/binutils/opcodes/arc-ext.h projects/pf/pf45/contrib/binutils/opcodes/arc-opc.c projects/pf/pf45/contrib/binutils/opcodes/arm-dis.c projects/pf/pf45/contrib/binutils/opcodes/cgen-asm.c projects/pf/pf45/contrib/binutils/opcodes/cgen-asm.in projects/pf/pf45/contrib/binutils/opcodes/cgen-dis.c projects/pf/pf45/contrib/binutils/opcodes/cgen-dis.in projects/pf/pf45/contrib/binutils/opcodes/cgen-ibld.in projects/pf/pf45/contrib/binutils/opcodes/cgen-opc.c projects/pf/pf45/contrib/binutils/opcodes/cgen.sh projects/pf/pf45/contrib/binutils/opcodes/config.in projects/pf/pf45/contrib/binutils/opcodes/configure projects/pf/pf45/contrib/binutils/opcodes/configure.in projects/pf/pf45/contrib/binutils/opcodes/dep-in.sed projects/pf/pf45/contrib/binutils/opcodes/dis-buf.c projects/pf/pf45/contrib/binutils/opcodes/dis-init.c projects/pf/pf45/contrib/binutils/opcodes/disassemble.c projects/pf/pf45/contrib/binutils/opcodes/i386-dis.c projects/pf/pf45/contrib/binutils/opcodes/ia64-asmtab.c projects/pf/pf45/contrib/binutils/opcodes/ia64-asmtab.h projects/pf/pf45/contrib/binutils/opcodes/ia64-dis.c projects/pf/pf45/contrib/binutils/opcodes/ia64-gen.c projects/pf/pf45/contrib/binutils/opcodes/ia64-ic.tbl projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-a.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-b.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-d.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-f.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-i.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-m.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc-x.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc.c projects/pf/pf45/contrib/binutils/opcodes/ia64-opc.h projects/pf/pf45/contrib/binutils/opcodes/ia64-raw.tbl projects/pf/pf45/contrib/binutils/opcodes/ia64-waw.tbl projects/pf/pf45/contrib/binutils/opcodes/mips-dis.c projects/pf/pf45/contrib/binutils/opcodes/mips-opc.c projects/pf/pf45/contrib/binutils/opcodes/mips16-opc.c projects/pf/pf45/contrib/binutils/opcodes/opintl.h projects/pf/pf45/contrib/binutils/opcodes/po/Make-in projects/pf/pf45/contrib/binutils/opcodes/po/POTFILES.in projects/pf/pf45/contrib/binutils/opcodes/po/opcodes.pot projects/pf/pf45/contrib/binutils/opcodes/ppc-dis.c projects/pf/pf45/contrib/binutils/opcodes/ppc-opc.c projects/pf/pf45/contrib/binutils/opcodes/s390-dis.c projects/pf/pf45/contrib/binutils/opcodes/s390-mkopc.c projects/pf/pf45/contrib/binutils/opcodes/s390-opc.c projects/pf/pf45/contrib/binutils/opcodes/s390-opc.txt projects/pf/pf45/contrib/binutils/opcodes/sh-dis.c projects/pf/pf45/contrib/binutils/opcodes/sh-opc.h projects/pf/pf45/contrib/binutils/opcodes/sparc-dis.c projects/pf/pf45/contrib/binutils/opcodes/sparc-opc.c projects/pf/pf45/contrib/binutils/opcodes/sysdep.h projects/pf/pf45/contrib/binutils/symlink-tree projects/pf/pf45/contrib/binutils/ylwrap projects/pf/pf45/contrib/gcc/config/rs6000/freebsd.h projects/pf/pf45/contrib/gdb/gdb/dsrec.c projects/pf/pf45/contrib/gdb/gdb/dwarf2-frame.c projects/pf/pf45/contrib/gdb/gdb/dwarf2read.c projects/pf/pf45/contrib/gdb/gdb/elfread.c projects/pf/pf45/contrib/gdb/gdb/gcore.c projects/pf/pf45/contrib/gdb/gdb/mipsread.c projects/pf/pf45/contrib/gdb/gdb/remote-e7000.c projects/pf/pf45/contrib/gdb/gdb/remote.c projects/pf/pf45/contrib/gdb/gdb/symfile.c projects/pf/pf45/contrib/gdb/gdb/tracepoint.c projects/pf/pf45/etc/mtree/BSD.usr.dist projects/pf/pf45/gnu/usr.bin/binutils/Makefile.inc0 projects/pf/pf45/gnu/usr.bin/binutils/addr2line/Makefile projects/pf/pf45/gnu/usr.bin/binutils/as/Makefile projects/pf/pf45/gnu/usr.bin/binutils/as/config.h projects/pf/pf45/gnu/usr.bin/binutils/doc/Makefile projects/pf/pf45/gnu/usr.bin/binutils/doc/asconfig.texi projects/pf/pf45/gnu/usr.bin/binutils/ld/Makefile projects/pf/pf45/gnu/usr.bin/binutils/ld/Makefile.powerpc projects/pf/pf45/gnu/usr.bin/binutils/ld/Makefile.powerpc64 projects/pf/pf45/gnu/usr.bin/binutils/ld/armelf_fbsd.sh projects/pf/pf45/gnu/usr.bin/binutils/ld/armelfb_fbsd.sh projects/pf/pf45/gnu/usr.bin/binutils/ld/config.h projects/pf/pf45/gnu/usr.bin/binutils/ld/genscripts.sh projects/pf/pf45/gnu/usr.bin/binutils/libbfd/Makefile projects/pf/pf45/gnu/usr.bin/binutils/libbfd/Makefile.amd64 projects/pf/pf45/gnu/usr.bin/binutils/libbfd/Makefile.arm projects/pf/pf45/gnu/usr.bin/binutils/libbfd/Makefile.ia64 projects/pf/pf45/gnu/usr.bin/binutils/libbfd/Makefile.sparc64 projects/pf/pf45/gnu/usr.bin/binutils/libbfd/bfd.h projects/pf/pf45/gnu/usr.bin/binutils/libbfd/config.h.fbsd projects/pf/pf45/gnu/usr.bin/binutils/libbfd/elf-fbsd-brand.c projects/pf/pf45/gnu/usr.bin/binutils/libbinutils/Makefile projects/pf/pf45/gnu/usr.bin/binutils/libbinutils/config.h projects/pf/pf45/gnu/usr.bin/binutils/libiberty/Makefile projects/pf/pf45/gnu/usr.bin/binutils/libiberty/config.h projects/pf/pf45/gnu/usr.bin/binutils/libopcodes/Makefile projects/pf/pf45/gnu/usr.bin/binutils/libopcodes/config.h projects/pf/pf45/gnu/usr.bin/binutils/nm/Makefile projects/pf/pf45/gnu/usr.bin/binutils/objcopy/Makefile projects/pf/pf45/gnu/usr.bin/binutils/objdump/Makefile projects/pf/pf45/gnu/usr.bin/binutils/readelf/Makefile projects/pf/pf45/gnu/usr.bin/binutils/size/Makefile projects/pf/pf45/gnu/usr.bin/binutils/strings/Makefile projects/pf/pf45/gnu/usr.bin/binutils/strip/Makefile projects/pf/pf45/gnu/usr.bin/cc/cc_tools/auto-host.h projects/pf/pf45/gnu/usr.bin/gdb/Makefile.inc projects/pf/pf45/gnu/usr.bin/gdb/libgdb/fbsd-threads.c projects/pf/pf45/lib/csu/powerpc64/crti.S projects/pf/pf45/lib/libc/gen/_thread_init.c projects/pf/pf45/lib/libc/gen/getutxent.3 projects/pf/pf45/lib/libc/gen/getutxent.c projects/pf/pf45/lib/libc/gen/pututxline.c projects/pf/pf45/lib/libc/gen/utxdb.c projects/pf/pf45/lib/libc/powerpc64/SYS.h projects/pf/pf45/lib/libc/powerpc64/gen/_ctx_start.S projects/pf/pf45/lib/libc/powerpc64/sys/brk.S projects/pf/pf45/lib/libc/powerpc64/sys/cerror.S projects/pf/pf45/lib/libc/powerpc64/sys/exect.S projects/pf/pf45/lib/libc/powerpc64/sys/pipe.S projects/pf/pf45/lib/libc/powerpc64/sys/ptrace.S projects/pf/pf45/lib/libc/powerpc64/sys/sbrk.S projects/pf/pf45/libexec/rtld-elf/powerpc64/rtld_start.S projects/pf/pf45/share/examples/pf/pf.conf projects/pf/pf45/share/man/man4/Makefile projects/pf/pf45/share/man/man4/altq.4 projects/pf/pf45/share/man/man4/vlan.4 projects/pf/pf45/share/termcap/termcap.src projects/pf/pf45/sys/boot/forth/loader.conf projects/pf/pf45/sys/boot/i386/efi/ldscript.amd64 projects/pf/pf45/sys/boot/ia64/efi/ldscript.ia64 projects/pf/pf45/sys/boot/ia64/ski/ldscript.ia64 projects/pf/pf45/sys/boot/pc98/boot2/boot2.c projects/pf/pf45/sys/boot/powerpc/boot1.chrp/boot1.c projects/pf/pf45/sys/boot/powerpc/ofw/start.c projects/pf/pf45/sys/conf/NOTES projects/pf/pf45/sys/conf/files projects/pf/pf45/sys/conf/kern.mk projects/pf/pf45/sys/conf/kern.pre.mk projects/pf/pf45/sys/conf/ldscript.amd64 projects/pf/pf45/sys/conf/ldscript.i386 projects/pf/pf45/sys/conf/ldscript.ia64 projects/pf/pf45/sys/conf/ldscript.sparc64 projects/pf/pf45/sys/ddb/db_command.c projects/pf/pf45/sys/dev/dc/if_dc.c projects/pf/pf45/sys/dev/dc/if_dcreg.h projects/pf/pf45/sys/dev/mps/mps.c projects/pf/pf45/sys/dev/mps/mps_sas.c projects/pf/pf45/sys/dev/mps/mpsvar.h projects/pf/pf45/sys/dev/ppc/ppc_pci.c projects/pf/pf45/sys/dev/sound/usb/uaudio.c projects/pf/pf45/sys/gdb/gdb_main.c projects/pf/pf45/sys/gdb/gdb_packet.c projects/pf/pf45/sys/geom/part/g_part_pc98.c projects/pf/pf45/sys/kern/subr_kdb.c projects/pf/pf45/sys/kern/vfs_mount.c projects/pf/pf45/sys/modules/Makefile projects/pf/pf45/sys/netinet/sctp_sysctl.c projects/pf/pf45/sys/netipsec/key.c projects/pf/pf45/sys/netipsec/xform.h projects/pf/pf45/sys/netipsec/xform_ah.c projects/pf/pf45/sys/netipsec/xform_esp.c projects/pf/pf45/sys/pc98/pc98/machdep.c projects/pf/pf45/sys/powerpc/aim/locore64.S projects/pf/pf45/sys/powerpc/aim/swtch64.S projects/pf/pf45/sys/powerpc/aim/trap_subr64.S projects/pf/pf45/sys/powerpc/include/asm.h projects/pf/pf45/sys/powerpc/include/profile.h projects/pf/pf45/sys/sys/cdefs.h projects/pf/pf45/sys/sys/param.h projects/pf/pf45/sys/ufs/ufs/ufs_vnops.c projects/pf/pf45/tools/regression/bin/sh/builtins/locale1.0 projects/pf/pf45/tools/regression/bin/sh/execution/fork1.0 projects/pf/pf45/tools/regression/bin/sh/expansion/cmdsubst3.0 projects/pf/pf45/tools/regression/bin/sh/regress.sh projects/pf/pf45/usr.bin/calendar/calendar.h projects/pf/pf45/usr.bin/calendar/paskha.c projects/pf/pf45/usr.sbin/Makefile projects/pf/pf45/usr.sbin/ndiscvt/ndiscvt.c projects/pf/pf45/usr.sbin/pc-sysinstall/backend-partmanager/create-part.sh projects/pf/pf45/usr.sbin/pc-sysinstall/backend-query/xkeyboard-layouts.sh projects/pf/pf45/usr.sbin/pc-sysinstall/backend/functions-localize.sh projects/pf/pf45/usr.sbin/pc-sysinstall/pc-sysinstall/pc-sysinstall.sh projects/pf/pf45/usr.sbin/sysinstall/devices.c projects/pf/pf45/usr.sbin/sysinstall/label.c projects/pf/pf45/usr.sbin/sysinstall/menus.c Directory Properties: projects/pf/pf45/ (props changed) projects/pf/pf45/cddl/contrib/opensolaris/ (props changed) projects/pf/pf45/contrib/bind9/ (props changed) projects/pf/pf45/contrib/binutils/ (props changed) projects/pf/pf45/contrib/bzip2/ (props changed) projects/pf/pf45/contrib/dialog/ (props changed) projects/pf/pf45/contrib/ee/ (props changed) projects/pf/pf45/contrib/expat/ (props changed) projects/pf/pf45/contrib/file/ (props changed) projects/pf/pf45/contrib/gdb/ (props changed) projects/pf/pf45/contrib/gdtoa/ (props changed) projects/pf/pf45/contrib/gnu-sort/ (props changed) projects/pf/pf45/contrib/groff/ (props changed) projects/pf/pf45/contrib/less/ (props changed) projects/pf/pf45/contrib/libpcap/ (props changed) projects/pf/pf45/contrib/llvm/ (props changed) projects/pf/pf45/contrib/llvm/tools/clang/ (props changed) projects/pf/pf45/contrib/ncurses/ (props changed) projects/pf/pf45/contrib/netcat/ (props changed) projects/pf/pf45/contrib/ntp/ (props changed) projects/pf/pf45/contrib/one-true-awk/ (props changed) projects/pf/pf45/contrib/openbsm/ (props changed) projects/pf/pf45/contrib/openpam/ (props changed) projects/pf/pf45/contrib/pf/ (props changed) projects/pf/pf45/contrib/sendmail/ (props changed) projects/pf/pf45/contrib/tcpdump/ (props changed) projects/pf/pf45/contrib/tcsh/ (props changed) projects/pf/pf45/contrib/top/ (props changed) projects/pf/pf45/contrib/top/install-sh (props changed) projects/pf/pf45/contrib/tzcode/stdtime/ (props changed) projects/pf/pf45/contrib/tzcode/zic/ (props changed) projects/pf/pf45/contrib/tzdata/ (props changed) projects/pf/pf45/contrib/wpa/ (props changed) projects/pf/pf45/contrib/xz/ (props changed) projects/pf/pf45/crypto/openssh/ (props changed) projects/pf/pf45/crypto/openssl/ (props changed) projects/pf/pf45/gnu/lib/ (props changed) projects/pf/pf45/gnu/usr.bin/binutils/ (props changed) projects/pf/pf45/gnu/usr.bin/cc/cc_tools/ (props changed) projects/pf/pf45/gnu/usr.bin/gdb/ (props changed) projects/pf/pf45/lib/libc/ (props changed) projects/pf/pf45/lib/libc/stdtime/ (props changed) projects/pf/pf45/lib/libutil/ (props changed) projects/pf/pf45/lib/libz/ (props changed) projects/pf/pf45/sbin/ (props changed) projects/pf/pf45/sbin/ipfw/ (props changed) projects/pf/pf45/share/mk/bsd.arch.inc.mk (props changed) projects/pf/pf45/share/zoneinfo/ (props changed) projects/pf/pf45/sys/ (props changed) projects/pf/pf45/sys/amd64/include/xen/ (props changed) projects/pf/pf45/sys/boot/i386/efi/ (props changed) projects/pf/pf45/sys/boot/ia64/efi/ (props changed) projects/pf/pf45/sys/boot/ia64/ski/ (props changed) projects/pf/pf45/sys/boot/powerpc/boot1.chrp/ (props changed) projects/pf/pf45/sys/boot/powerpc/ofw/ (props changed) projects/pf/pf45/sys/cddl/contrib/opensolaris/ (props changed) projects/pf/pf45/sys/conf/ (props changed) projects/pf/pf45/sys/contrib/dev/acpica/ (props changed) projects/pf/pf45/sys/contrib/octeon-sdk/ (props changed) projects/pf/pf45/sys/contrib/pf/ (props changed) projects/pf/pf45/sys/contrib/x86emu/ (props changed) projects/pf/pf45/usr.bin/calendar/ (props changed) projects/pf/pf45/usr.bin/csup/ (props changed) projects/pf/pf45/usr.bin/procstat/ (props changed) projects/pf/pf45/usr.sbin/ndiscvt/ (props changed) projects/pf/pf45/usr.sbin/zic/ (props changed) Modified: projects/pf/pf45/UPDATING ============================================================================== --- projects/pf/pf45/UPDATING Sat Feb 19 17:38:51 2011 (r218861) +++ projects/pf/pf45/UPDATING Sat Feb 19 17:44:13 2011 (r218862) @@ -22,6 +22,24 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 9. machines to maximize performance. (To disable malloc debugging, run ln -s aj /etc/malloc.conf.) +20110218: + GNU binutils 2.17.50 (as of 2007-07-03) has been merged to -HEAD. This + is the last available version under GPLv2. It brings a number of new + features, such as support for newer x86 CPU's (with SSE-3, SSSE-3, SSE + 4.1 and SSE 4.2), better support for powerpc64, a number of new + directives, and lots of other small improvements. See the ChangeLog + file in contrib/binutils for the full details. + +20110218: + IPsec's HMAC_SHA256-512 support has been fixed to be RFC4868 + compliant, and will now use half of hash for authentication. + This will break interoperability with all stacks (including all + actual FreeBSD versions) who implement + draft-ietf-ipsec-ciph-sha-256-00 (they use 96 bits of hash for + authentication). + The only workaround with such peers is to use another HMAC + algorithm for IPsec ("phase 2") authentication. + 20110207: Remove the uio_yield prototype and symbol. This function has been misnamed since it was introduced and should not be Modified: projects/pf/pf45/contrib/binutils/ChangeLog ============================================================================== --- projects/pf/pf45/contrib/binutils/ChangeLog Sat Feb 19 17:38:51 2011 (r218861) +++ projects/pf/pf45/contrib/binutils/ChangeLog Sat Feb 19 17:44:13 2011 (r218862) @@ -1,40 +1,2485 @@ -2004-05-06 Daniel Jacobowitz +2007-06-29 Bernd Schmidt - * src-release (do-tar): Add directories to the tar file. + * configure.ac: Don't add target-libmudflap to noconfigdirs for + uclinux and linux-uclibc targets. + * configure: Regenerate. + +2007-06-28 DJ Delorie + + * configure.ac (arm*-*-linux-gnueabi): Don't build libgloss if we're + not building newlib. + * configure: Regenerated. + +2007-06-22 Daniel Jacobowitz + + * src-release (DEVO_SUPPORT): Correct typos. + +2007-06-18 Daniel Jacobowitz + + * Makefile.def: Add dependency from configure-gdb to all-bfd. + * Makefile.in: Regenerated. + +2007-06-14 Paolo Bonzini + + * Makefile.tpl (cleanstrap): Don't delete the toplevel Makefile. + (distclean-stage[+id+]): Possibly delete stage_last. + * Makefile.in: Regenerate. + +2007-06-07 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2007-06-07 Ben Elliston + + * Makefile.tpl: Fix spelling error. + * Makefile.in: Regenerate. + +2007-06-04 Paolo Bonzini + + Sync with gcc: + 2007-05-30 Jakub Jelinek + + PR bootstrap/29382 + * configure.ac: Don't use -fkeep-inline-functions for GCC < 3.3.1. + * configure: Rebuilt. + +2007-06-01 Steve Ellcey + + * libtool.m4 (LT_CMD_MAX_LEN): Try using getconf to set + lt_cv_sys_max_cmd_len. + +2007-05-31 Paolo Bonzini + + * ltgcc.m4: Update from GCC. + +2007-05-25 Andreas Tobler + + * ltmain.sh: Fix Darwin verstring, remove ${wl}. + +2007-05-24 Steve Ellcey + + * ltmain.sh: Update from GCC. + * libtool.m4: Update from GCC. + * ltsugar.m4: New. Update from GCC. + * ltversion.m4: New. Update from GCC. + * ltoptions.m4: New. Update from GCC. + * ltconfig: Remove. + * ltcf-c.sh: Remove. + * ltcf-cxx.sh: Remove. + * ltcf-gcj.sh: Remove. + * src-release: Update with new libtool file list. + +2007-05-16 Paolo Bonzini + + * Makefile.def (bootstrap_stage): Replace stage_make_flags with + stage_cflags. + * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS, POSTSTAGE1_FLAGS_TO_PASS): + Remove CFLAGS/LIBCFLAGS. + (configure-stage[+id+]-[+prefix+][+module+], + all-stage[+id+]-[+prefix+][+module+]): Pass it from [+stage_cflags+]. + * Makefile.in: Regenerate. + +2007-04-14 Steve Ellcey + + * config-ml.in: Update from GCC. + +2007-04-09 Daniel Jacobowitz + + * src-release (do-proto-toplev): Process the support directories before + the tool directory. + +2007-03-21 Richard Sandiford + + * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Fix m4 quoting + of glob. Quote arguments with single quotes too. + * configure: Regenerate. + +2007-03-12 Brooks Moses + + * Makefile.def (fixincludes): Remove unneeded "missing" lines. + * Makefile.in: Regenerate + +2007-03-07 Andreas Schwab + + * configure: Regenerate. + +2007-03-01 Brooks Moses + + * configure.ac: Add "--with-pdfdir" configure option, + which defines pdfdir variable. + * Makefile.def (target=fixincludes): Add install-pdf to + missing targets. + (recursive_targets): Add install-pdf target. + (flags_to_pass): Add pdfdir. + * Makefile.tpl: Add pdfdir handling, add do-install-pdf + target. + * configure: Regenerate + * Makefile.in: Regenerate + +2007-02-28 Eric Christopher + + Revert: + 2006-12-07 Mike Stump + + * Makefile.def (dependencies): Add dependency for + install-target-libssp and install-target-libgomp on + install-gcc. + * Makefile.in: Regenerate. + +2007-02-27 Matt Kraai + + * configure: Regenerate. + * configure.ac: Move statements after variable declarations. + +2007-02-19 Joseph Myers + + * configure.ac: Adjust for loop syntax. + * configure: Regenerate. + +2007-02-18 Alexandre Oliva + + * configure: Rebuilt. + +2007-02-18 Alexandre Oliva + + * configure.ac: Drop multiple occurrences of --enable-languages, + and fix its quoting. + * configure: Rebuilt. + +2007-02-17 Mark Mitchell + Nathan Sidwell + Vladimir Prus + + * configure.ac (TOPLEVEL_CONFIGURE_ARGUMENTS): Fix quoting. + * configure: Regenerate. + +2007-02-13 Daniel Jacobowitz + + * configure.ac (target_libraries): Move libgcc before libiberty. + * configure: Regenerated. + +2007-02-13 Paolo Bonzini + + * configure: Regenerate again? + +2007-02-13 Paolo Bonzini + + * configure: Reapply PR30748 fix which was lost in the previous commit. + +2007-02-13 Daniel Jacobowitz + Paolo Bonzini + + PR bootstrap/30753 + * configure.ac: Remove obsolete build / host tests. Use AC_PROG_CC + unconditionally. Use AC_PROG_CXX. Use ACX_TOOL_DIRS to find $prefix. + * configure: Regenerated. + +2007-02-10 Paolo Bonzini + + * configure: Regenerate. + +2007-02-09 Daniel Jacobowitz + + PR bootstrap/30748 + * configure.ac: Correct syntax for Solaris ksh. + * configure: Regenerated. + +2007-02-09 Paolo Bonzini + + * Makefile.def: Sync with GCC. + * Makefile.tpl: Sync with GCC. + * Makefile.in: Regenerate. + * configure: Regenerate. + +2007-02-09 Daniel Jacobowitz + + * Makefile.tpl (build_alias, host_alias, target_alias): Use + noncanonical equivalents. + * configure.in: Rename to... + * configure.ac: ...this. Update AC_PREREQ. Prevent error for + AS_FOR_TARGET. Set build_noncanonical, host_noncanonical, and + target_noncanonical. Use them. Rewrite removal of configure + arguments for autoconf 2.59. Discard variable settings. Force + program_transform_name for native tools. + + * Makefile.in: Regenerated. + * configure: Regenerated with autoconf 2.59. + + * src-release (DEVO_SUPPORT, do-proto-toplev): Expect configure.ac. + +2007-02-08 Jeff Johnston + + * COPYING.LIBGLOSS: Reformat default Red Hat + license to fit within 80 columns. + * COPYING.NEWLIB: Ditto. + +2007-02-05 Dave Brolley + + * Contribute the following changes: + 2006-11-28 DJ Delorie + + * configure.in: Fix typo for mep's target_makefile_frag. + * configure: Regenerated. + + 2005-04-22 Richard Sandiford + + * configure.in (mep*): Add -mlibrary to FLAGS_FOR_TARGET. + * configure: Regenerate. + + 2001-09-19 DJ Delorie + + * configure.in (target_makefile_frag): use mt-mep + + 2001-06-12 Don Howard + + * configure.in: Remove gdb from MeP skip list. + + 2001-04-05 DJ Delorie + + * configure.in (noconfigdirs): Remove gcc from MeP skip list. + + 2001-03-20 Ben Elliston + + * configure.in (noconfigdirs): Add gcc and gdb for MeP. + + 2001-03-19 Ben Elliston + + * config.sub (mep, mep-*): Add. + +2007-01-31 Andreas Schwab + + * Makefile.tpl (LDFLAGS): Substitute it. + * Makefile.in: Regenerate. + +2007-01-11 Paolo Bonzini + + * configure.in: Change == to = in test command. + * configure: Regenerate. + +2007-01-11 Paolo Bonzini + Nick Clifton + Kaveh R. Ghazi + + * configure.in (build_configargs, host_configargs, target_configargs): + Remove build/host/target parameters. + (host_libs): Add gmp and mpfr. + (GMP tests): Reorganize to allow in-tree GMP/MPFR. + * Makefile.def (gmp, mpfr): New. + (gcc): Remove target. + * Makefile.tpl (build_os, build_vendor, host_os, host_vendor, + target_os, target_vendor): New. + (configure): Add host_alias/target_alias arguments. Adjust invocations. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2007-01-11 Matt Fago + + * configure.in: Try to link to functions only in mpfr 2.2.x + to improve robustness of configure tests. + * configure: Regenerate. + +2007-01-08 Kai Tietz + + * configure.in: Add support for an x86_64-mingw* target. + * configure: Regenerate. + +2007-01-05 Daniel Jacobowitz + + * Makefile.tpl (all-target): Correct @if conditional for target + modules. + * configure.in: Omit libiberty if building only target libgcc. + * configure, Makefile.in: Regenerated. + +2007-01-04 Paolo Bonzini + + * configure.in: Use DEV-PHASE to detect the default for --enable-werror. + * configure: Regenerate. + +2007-01-03 Daniel Jacobowitz + + * Makefile.def (target_modules): Add libgcc. + (lang_env_dependencies): Remove default items. Use no_c and no_gcc. + * Makefile.tpl (clean-target-libgcc): Delete. + (configure-target-[+module+]): Emit --disable-bootstrap dependencies + on gcc even for bootstrapped modules. Rewrite handling of + lang_env_dependencies to loop over target_modules. + * configure.in (target_libraries): Add target-libgcc. + * Makefile.in, configure: Regenerated. + +2006-12-29 Paolo Bonzini + + Sync with gcc: + 2006-12-29 Paolo Bonzini + + * configure.in: Reorganize recognition of languages. Add + --enable-stage1-languages. Show supported languages for the chosen + target rather than all recognized languages. + * configure: Regenerate. + + 2006-12-29 Paolo Bonzini + + * Makefile.tpl (GCC_STRAP_TARGETS, all-prebootstrap): Remove. + * Makefile.in: Regenerate. + + 2006-12-29 Kaveh R. Ghazi + + * configure.in: Warn that MPFR 2.2.0 is buggy. + * configure: Regenerate. + +2006-12-27 Ian Lance Taylor + + * configure.in: When removing Makefiles to force a reconfigure, also + remove prev-DIR*/Makefile. + * configure: Regenerate. + +2006-12-23 Kazu Hirata + + * config.bfd: Recognize fido. + +2006-12-19 Paolo Bonzini + + Sync with gcc: + + 2006-12-19 Paolo Bonzini + + * configure.in: Remove "$build" case for powerpc-*-darwin* since + it only affects bootstrap and could be tested on "$host" as well. + * configure: Regenerate. + * config/mh-ppc-darwin: Add to the stage1 cflags here. + + 2006-12-19 Paolo Bonzini + + PR bootstrap/29544 + * Makefile.def (flags_to_pass): Add STAGE1_CHECKING. + (bootstrap_stage): Add STAGE1_CHECKING to stage1 configure flags, + move here comment from Makefile.tpl. + * Makefile.tpl: Move some definitions higher in the file. + (STAGE1_CHECKING): New. + * configure.in: Add --enable-stage1-checking. + * configure: Regenerate. + * Makefile.in: Regenerate. + + 2006-12-03 Kaveh R. Ghazi + + * configure.in: Update error message for missing GMP/MPFR. + + * configure: Regenerate. + + 2006-12-02 Kaveh R. Ghazi + + * configure.in: Update MPFR version in error message. + + * configure: Regenerate. + + 2006-11-26 Kaveh R. Ghazi + + * configure.in (--with-mpfr-dir, --with-gmp-dir): Remove flags. + (--with-mpfr-include, --with-mpfr-lib, --with-gmp-include, + --with-gmp-lib): New flags. + + * configure: Regenerate. + +2006-12-12 Andreas Tobler + + PR bootstrap/30134 + * configure.in: Correct x86 darwin support for libjava to powerpc + and i?86 only. + * configure: Regenerate. + +2006-12-11 Alan Modra + + * configure.in: Handle spu makefile frag. + * Makefile.tpl (MAINT): Define + (MAINTAINER_MODE_FALSE, MAINTAINER_MODE_TRUE): Define. + * configure: Regenerate. + * Makefile.in: Regenerate. + +2006-12-11 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2006-12-11 Ben Elliston + + * configure.in: Sync with GCC (spu-*-*). + * configure: Sync with GCC. + +2006-12-07 Mike Stump + + * Makefile.def (dependencies): Add dependency for + install-target-libssp and install-target-libgomp on + install-gcc. + * Makefile.in: Regenerate. + +2006-11-16 Paolo Bonzini + + * Makefile.tpl (clean-target-libgcc): Test for gcc Makefile presence. + (unstage): Test for stage_last presence. + + PR bootstrap/29802 + * Makefile.tpl (POSTSTAGE1_FLAGS_TO_PASS): Add HOST_SUBDIR in STAGE_PREFIX. + * Makefile.in: Regenerate. + +2006-11-14 DJ Delorie + + * Makefile.tpl (clean-stage*): Sync with GCC (clean). + * Makefile.in: Sync with GCC. + * configure.in: Sync with GCC (mpfr, gmp). + * configure: Sync with GCC. + +2006-11-08 Jie Zhang + + * configure.in: Remove target-libgloss from noconfigdirs for + bfin-*-*. + * configure: Regenerated. + +2006-10-27 Jeff Johnston + + * COPYING.NEWLIB: Add spu license. + * COPYING.LIBGLOSS: Ditto. + +2006-10-17 Brooks Moses + + * Makefile.def: Added pdf target handling. + * Makefile.tpl: Added pdf target handling. + * Makefile.in: Regenerated. + +2006-10-11 Jeff Johnston + + * COPYING.NEWLIB: Updated. + * COPYING.LIBGLOSS: Ditto. + +2006-09-27 Dave Brolley + + * configure.in (RUNTEST): Look for 'runtest' in the source tree by using + $s instead of $r. + * configure: Regenerated. + +2006-09-26 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2006-09-20 Thiemo Seufer + + * configure.in: Remove redundant handling of mips*-dec-bsd*. Likewise + for mipstx39-*-*. Disable libgloss for mips64*-*-linux*. + * configure: Regenerate. + +2006-08-30 Corinna Vinschen + + * configure.in: Never build newlib for a Mingw host. + Never build newlib as Mingw target library. + Test the existence of winsup/cygwin for building a Cygwin newlib, + rather than just winsup. + Add winsup/mingw and winsup/w32api paths to FLAGS_FOR_TARGET if + building a Mingw target. + * configure: Regenerate. + +2006-08-15 Thiemo Seufer + Nigel Stephens + David Ung + + * config.sub: Add support for sde as alias of mipsisa32-sde-elf. + +2006-07-25 Paolo Bonzini + + Sync from GCC: + 2006-07-04 Eric Botcazou + + PR bootstrap/18058 + * configure.in: Add -fkeep-inline-functions to CFLAGS for stage 1 + if the bootstrap compiler is a GCC version that supports it. + * configure: Regenerate. + +2006-07-22 Daniel Jacobowitz + + * configure.in: Allow mingw32 and cygwin targets to build cross-gdb. + * configure: Regenerated. + +2006-07-18 Paolo Bonzini + + * Makefile.tpl (configure-stageN-MODULE): Pass --with-build-libsubdir + for stages after the first. + +2006-07-17 Jakub Jelinek + + * Makefile.def: Add dependencies for configure-opcodes + on configure-intl and all-opcodes on all-intl. + * Makefile.in: Regenerated. + +2006-07-04 Peter O'Gorman + + * ltconfig: chmod 644 before ranlib during install. + +2006-07-03 Paolo Bonzini + + * configure.in: Fix thinkos in previous check-in. + * configure: Regenerate. + +2006-07-03 Paolo Bonzini + + Sync from gcc: + + 2007-07-03 Paolo Bonzini + + PR other/27063 + * configure.in: Test subdir_requires and give an appropriate + error message. + * configure: Regenerate. + + 2006-06-16 Rainer Orth + + PR target/27540 + * configure.in: Only enable libgomp on IRIX 6. + * configure: Regenerate. + +2006-06-20 David Ayers + + PR bootstrap/28072 + * configure.in: Add target-boehm-gc to noconfigdirs depending on + whether target-libjava is being configured instead of whether the + java front end is enabled. + * configure: Regenerate. + +2006-06-15 Mark Shinwell + + * include/elf/arm.h: Correct names of R_ARM_LDC_G{0,1,2} + to R_ARM_LDC_SB_G{0,1,2} respectively. + +2006-06-15 Paolo Bonzini + + * Makefile.tpl (POSTSTAGE1_HOST_EXPORTS): Export CFLAGS and LDFLAGS + too. + * Makefile.in: Regenerate. + +2006-06-13 John David Anglin + + Sync from gcc: + + 2006-06-12 John David Anglin + * configure.in: Don't enable libgomp on hpux10. + * configure: Rebuilt. + +2006-06-13 David Ayers + + Sync from gcc: + + 2006-06-12 David Ayers + + PR bootstrap/27963 + PR target/19970 + * configure.in: Remove target-boehm-gc from noconfigdirs where + ${libgcj} is specified. + * configure: Regenerate. + +2006-06-08 Jeff Johnston + + Sync from gcc: + + 2005-01-12 David Edelsohn + Andreas Schwab + + PR bootstrap/18033 + * config-ml.in: Eval option if surrounded by single quotes. + +2006-06-07 Carlos O'Donell + + Sync from gcc: + + 2006-06-06 David Ayers + + PR libobjc/13946 + * Makefile.def: Add dependencies for libobjc which boehm-gc. + * Makefile.in: Regenerate. + * configure.in: Add --enable-objc-gc at toplevel and have it + enable boehm-gc for Objective-C. + Remove target-boehm-gc from libgcj. + Add target-boehm-gc to target_libraries. + Add target-boehm-gc to noconfigdirs where ${libgcj} + is specified. + Assert that boehm-gc is supported when requested for Objective-C. + Only build boehm-gc if needed either for Java or Objective-C. + * configure: Regenerate. + + 2006-06-05 Paolo Bonzini + + PR 27674 + * Makefile.tpl (configure-[+prefix+][+module+], + all-[+prefix+][+module+]): Depend on stage_current if bootstrapping. + Remove rule to unstage bootstrapped modules. + (stage_current): New. + * Makefile.in: Regenerate. + + 2006-05-20 John David Anglin + Andreas Tobler + + * configure.in: Enable libgcj for hppa*-hp-hpux11*. + * configure: Rebuilt. + + Revert + 2006-01-31 Richard Guenther + Paolo Bonzini + + * Makefile.def (target_modules): Add libgcc-math target module. + * configure.in (target_libraries): Add libgcc-math target library. + (--enable-libgcc-math): New configure switch. + * Makefile.in: Re-generate. + * configure: Re-generate. + +2006-06-05 Jeff Johnston + + * config-ml.in: Alter CCASFLAGS to include special + multilib options the same as is done for CFLAGS. + +2006-05-31 Daniel Jacobowitz + + * Makefile.def: Added dependencies from sim and gdb on intl, and + added configure dependencies to everything with an all dependency + on intl. + * gettext.m4: Removed. + * src-release (DEVO_SUPPORT): Don't mention gettext.m4. + (GDB_SUPPORT_DIRS): Add intl. + * Makefile.in: Regenerated. + +2006-05-25 Daniel Jacobowitz + + * src-release (DEVO_SUPPORT): Add config.rpath. + +2006-05-25 Paolo Bonzini + + * Makefile.def (bfd, opcodes): Fix lib_path. + * Makefile.tpl (POSTSTAGE1_FLAGS_TO_PASS): Replace ADAC with ADAFLAGS. + (restrap): Move under "@if gcc-bootstrap". Fix typo. + * Makefile.in: Regenerate. + +2006-05-24 Mark Shinwell + + * configure.in: Enable gprof for cross builds. + * configure: Regenerate. + +2006-05-17 Daniel Jacobowitz + + * src-release (MAKEINFOFLAGS): Define. + (do-proto-toplev): Pass MAKEINFOFLAGS to submakes. + +2006-05-14 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2006-05-12 Ben Elliston + + * config.sub, config.guess: Update from upstream sources. + +2006-05-04 Steve Ellcey + + * blt, iwidgets, mmalloc: Remove directories. + +2006-05-01 DJ Delorie + + * configure.in: Restore CFLAGS if GMP isn't present. + * configure: Regenerate. + +2006-04-18 DJ Delorie + + * configure.in (m32c): Build libstdc++-v3. Pass flags to + reference libgloss so that libssp can be built in a combined + tree. + * configure: Regenerate. + +2006-04-10 Ben Elliston + + * contrib: Remove directory. + +2006-04-06 Carlos O'Donell + + * Makefile.tpl: Add install-html target. + * Makefile.def: Add install-html target. + * Makefile.in: Regenerate. + * configure.in: Add --with-datarootdir, --with-docdir, + and --with-htmldir options. + * configure: Regenerate. + +2006-03-31 Ben Elliston + + PR binutils/1860 + * configure.in: Require makeinfo 4.4 or higher. + * configure: Regenerate. + +2006-03-14 Paolo Bonzini + + * Makefile.in: Regenerate. + +2006-03-14 Paolo Bonzini + + Sync with gcc: + 2006-03-10 Aldy Hernandez + + * configure.in: Handle --disable- generically. + * configure: Regenerate. + + 2006-02-21 Rafael Avila de Espindola + + * Makefile.tpl (BUILD_CONFIGDIRS): Remove. + (TARGET_CONFIGDIRS): Remove. + * configure.in: Remove AC_SUBST(target_configdirs). + * Makefile.in, configure: Regenerated. + + +2006-03-01 H.J. Lu + + PR libgcj/17311 + * ltmain.sh: Don't use "$finalize_rpath" for compile. + +2006-02-20 Paolo Bonzini + + PR bootstrap/25670 + + * Makefile.tpl ([+compare-target+]): Print explanation messages. + + * Makefile.def (ADAFLAGS, BOOT_ADAFLAGS, LANGUAGES): New flags_to_pass. + * Makefile.tpl (BASE_FLAGS_TO_PASS): Support optional flags_to_pass. + (EXTRA_GCC_FLAGS): Remove ADAFLAGS, BOOT_ADAFLAGS, LANGUAGES, + BUILD_PREFIX, BUILD_PREFIX_1. + * configure.in: (BUILD_PREFIX, BUILD_PREFIX_1): Don't substitute. + + * Makefile.def (bootstrap stage 1): Pass LIBCFLAGS too. + * Makefile.tpl (POSTSTAGE1_FLAGS_TO_PASS): Override LIBCFLAGS too. + + * Makefile.tpl (configure-stage[+id+]-[+prefix+][+module+], + all-stage[+id+]-[+prefix+][+module+], : Use $(current_stage) instead + of `cat stage_current`. Always provide the `r' and `s' variables. + (clean-stage[+id+]-[+prefix+][+module+]): Likewise, and make it into + a single shell execution. + (configure-[+prefix+][+module+], all-[+prefix+][+module+]): For + bootstrapped modules, make the stage1 module if the build was not + started yet, else build the current stage. + (all-host, all-target): Omit bootstrapped modules (if bootstrapping). + (all-build, all-host, all-target, [+make_target+]-host, + [+make_target+]-target): Do not use \-continued lines. + (target modules): Depend on stage_last, not all-gcc, if bootstrapping. + (current_stage, restrap, stage_last): New. + + * Makefile.in: Regenerate. + * configure: Regenerate. + +2006-02-14 Paolo Bonzini + + Sync from gcc: + + 2006-01-31 Richard Guenther + Paolo Bonzini + + * Makefile.def (target_modules): Add libgcc-math target module. + * configure.in (target_libraries): Add libgcc-math target library. + (--enable-libgcc-math): New configure switch. + * Makefile.in: Re-generate. + * configure: Re-generate. + * libgcc-math: New toplevel directory. + + 2006-01-18 Richard Henderson + Jakub Jelinek + Diego Novillo + + * libgomp: New directory. + * Makefile.def: Add target_module libgomp. + * Makefile.in: Regenerate. + * configure.in (target_libraries): Add target-libgomp. + * configure: Regenerate. + +2006-02-14 Paolo Bonzini + Andreas Schwab + + * configure: Regenerate. + +2006-01-16 Paolo Bonzini + + * configure.in: Set with_gnu_as, with_gnu_ld, with_newlib earlier. + Set md_exec_prefix. Use ACX_CHECK_INSTALLED_TARGET_TOOL to find + the assembler, linker and binutils. + * configure: Regenerate. + +2006-01-16 Nick Clifton + + * config.sub, config.guess: Sync from config repository. + +2006-01-05 Alexandre Oliva + + * Makefile.tpl (clean-stage[+id+]-[+prefix+][+module+]): Remove + @ from continuation. + * Makefile.in: Rebuilt. + +2006-01-04 Paolo Bonzini + + Sync from gcc: + + 2006-01-04 Paolo Bonzini + + PR bootstrap/24252 + + * Makefile.def (flags_to_pass): Add STAGE1_CFLAGS and STAGE1_LANGUAGES. + * Makefile.tpl (OBJDUMP): New. + (EXTRA_HOST_FLAGS): Add it. + (EXTRA_GCC_FLAGS): Remove flags already specified in flags_to_pass. + + * Makefile.tpl (stage[+id+]-start, stage[+id+]-end): Do not try + to use symbolic links between directories. Avoid race conditions + or make them harmless. + * configure.in: Do not try to use symbolic links between directories. + + * Makefile.def (LEAN): Pass. + * Makefile.tpl (LEAN): Define. + (stage[+id+]-start): Accept that the previous directory does not + exist, if the bootstrap is lean. + (stage[+id+]-bubble): Invoke lean bootstrap commands after + stage[+id+]-start. Use a makefile variable and an `if' instead of a + configure substitution. + ([+compare-target+]): Likewise. + ([+bootstrap-target+]-lean): New. + * configure.in: Remove lean bootstrap support from here. + + * Makefile.in: Regenerate. + * configure: Regenerate. + + 2006-01-02 Andreas Schwab + + * configure.in: When reconfiguring remove Makefile in + all stage directories. + * configure: Regenerate. + +2005-12-27 Leif Ekblad + + * configure.in: Add support for RDOS target. + * configure: Regenerate. + +2005-12-27 Nick Clifton + + PR binutils/1990 + * libtool.m4: Synchronize with version in GCC sources. + +2005-12-20 Paolo Bonzini + + Revert Ada-related part of the previous change. + + * Makefile.def (ADAFLAGS, BOOT_ADAFLAGS, ADAFLAGS_FOR_TARGET): + Do not pass. + * Makefile.tpl (BOOT_ADAFLAGS): Do not define. + * Makefile.in: Regenerate. + * configure.in: Do not include mt-ppc-aix target fragment. + * configure: Regenerate. + +2005-12-19 Paolo Bonzini + + * configure.in: Select appropriate fragments for PowerPC/AIX. + * configure: Regenerate. + + * Makefile.def (flags_to_pass): Add ADAFLAGS, BOOT_ADAFLAGS, + BOOT_CFLAGS, BOOT_LDFLAGS. + * Makefile.tpl (POSTSTAGE1_FLAGS_TO_PASS): Handle BOOT_ADAFLAGS, + BOOT_CFLAGS, BOOT_LDFLAGS. + (TARGET_FLAGS_TO_PASS): Handle ADAFLAGS_FOR_TARGET. + (stage[+id+]-bubble): Pass flags recursively to the comparison target. + (stage): Fail if we cannot complete the work. + * Makefile.in: Regenerate. + +2005-12-16 Jeff Johnston + + * COPYING.NEWLIB: Update copyright year for default + copyright. + +2005-12-15 Paolo Bonzini + + * Makefile.tpl (all, do-[+make_target+], do-check, install, + install-host-nogcc): Don't invoke $(stage) at the end. + * Makefile.in: Regenerate. + +2005-12-14 Paolo Bonzini + + * configure.in: Flip the top-level bootstrap switch. + * configure: Regenerate. + + Merge from gcc: + + 2005-12-14 Daniel Jacobowitz + + * Makefile.tpl: Throughout the file, use : $(MAKE) along with + $(stage) and $(unstage). + (EXTRA_TARGET_FLAGS): Correct double-quoting. + (all): Remove stray semicolon. + (local-distclean): Don't handle multilib.tmp and multilib.out. + (install.all): Set $s for consistency. + (configure-[+prefix+][+module+]): Instead of [+deps+], handle + check_multilibs setting. Always make the install directory. + (configure-stage[+id+]-[+prefix+][+module+]): Likewise. + Correct @if/@endif. + (all-stage[+id+]-[+prefix+][+module+]): Correct @if/@endif. + ($(TARGET_SUBDIR)/[+module+]/multilib.out): Remove. + (stage[+id+]-start, stage[+id+]-end): Stage $(TARGET_SUBDIR). + (multilib.out): Remove. + * Makefile.in: Regenerated. + +2005-12-12 Nathan Sidwell + + * config.sub: Replace ms1 arch with mt. Allow ms1 as alias. + * configure.in: Replace ms1 arch with mt. + * configure: Rebuilt. + +2005-12-05 Paolo Bonzini + + Sync with gcc: + +2005-12-12 Nathan Sidwell + + * config.sub: Replace ms1 arch with mt. Allow ms1 as alias. + * configure.in: Replace ms1 arch with mt. + * configure: Rebuilt. + +2005-12-05 Paolo Bonzini + + Sync with gcc: + + 2005-12-05 Paolo Bonzini + + * configure.in (CONFIGURED_BISON, CONFIGURED_YACC, CONFIGURED_M4, + CONFIGURED_FLEX, CONFIGURED_LEX, CONFIGURED_MAKEINFO): Remove + "CONFIGURED_" from the AC_CHECK_PROGS invocation. Move below. + Find in-tree tools if available. + (EXPECT, RUNTEST, LIPO, STRIP): Find them and substitute them. + (CONFIGURED_*_FOR_TARGET): Don't set nor substitute. + (*_FOR_TARGET): Set them with GCC_TARGET_TOOL. + (COMPILER_*_FOR_TARGET): New. + * Makefile.tpl (HOST_EXPORTS): Add *_FOR_TARGET symbols that gcc needs. + (BASE_TARGET_EXPORTS): Use COMPILER_*_FOR_TARGET symbols. + (CONFIGURED_*, USUAL_*): Remove. + (BISON, YACC, FLEX, LEX, M4, MAKEINFO, EXPECT, RUNTEST, LIPO, + STRIP): Use autoconf substitutions. + (COMPILER_AS_FOR_TARGET, COMPILER_LD_FOR_TARGET, + COMPILER_NM_FOR_TARGET): New. + (EXTRA_HOST_FLAGS): Pass LIPO and STRIP. + + (all): Make all-host and all-target in parallel. + (do-[+make_target+], do-check, install, [+compare-target+]): Ensure + that $$r and $$s are set before invoking a recursive make. + (stage[+id+]-bubble): Likewise, and invoke the comparison at the end. + ([+bootstrap-target+]): Inline most of the `all' target. + + 2005-11-29 Ben Elliston + + * Makefile.tpl (clean-target-libgcc): Invoke clean-target-libgcc + from the gcc build directory. *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***