Date: Sun, 22 Apr 2007 12:18:05 GMT From: Ulf Lilleengen <lulf@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 118578 for review Message-ID: <200704221218.l3MCI5Ib004767@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=118578 Change 118578 by lulf@lulf_carrot on 2007/04/22 12:17:39 - Integrate from Lukas. Affected files ... .. //depot/projects/soc2007/lulf/gvinum_fixup/Makefile.inc1#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/NOTES#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/files#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_plex.c#3 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_raid5.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_raid5.h#3 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/bios.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/busdma_machdep.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/identcpu.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/include/vmparam.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_intr.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_malloc.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/sched_ule.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/subr_rman.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/subr_witness.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_syscalls.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_mount.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/modules/Makefile#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/interrupt.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/mount.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/priv.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/socket.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/vm/vm_contig.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/vm/vm_param.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sbin/gvinum/gvinum.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_events.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_plex.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_raid5.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_rm.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_state.c#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/sys/geom/vinum/geom_vinum_var.h#2 integrate .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_drive.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_init.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_list.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_move.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_plex.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_raid5.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_raid5.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_rename.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_rm.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_share.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_share.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_state.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_subr.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_var.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_kernel/geom_vinum_volume.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/Makefile#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_drive.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_init.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_list.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_move.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_plex.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_raid5.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_raid5.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_rename.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_rm.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_share.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_share.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_state.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_subr.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_var.h#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/geom_vinum_volume.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/gvinum.8#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/gvinum.c#2 delete .. //depot/projects/soc2007/lulf/gvinum_main/vinum_user/gvinum.h#2 delete Differences ... ==== //depot/projects/soc2007/lulf/gvinum_fixup/Makefile.inc1#2 (text+ko) ==== @@ -1,5 +1,5 @@ # -# $FreeBSD: src/Makefile.inc1,v 1.571 2007/04/06 02:13:29 pjd Exp $ +# $FreeBSD: src/Makefile.inc1,v 1.572 2007/04/17 15:52:36 pjd Exp $ # # Make command line options: # -DNO_CLEANDIR run ${MAKE} clean, instead of ${MAKE} cleandir @@ -1016,11 +1016,11 @@ ${_lib_libgssapi} ${_lib_libipx} \ lib/libkiconv lib/libkvm lib/libmd \ lib/ncurses/ncurses lib/ncurses/ncursesw \ - lib/libopie lib/libpam \ + lib/libopie lib/libpam lib/libpthread \ lib/libradius lib/libsbuf lib/libtacplus lib/libutil \ ${_lib_libypclnt} lib/libz lib/msun \ ${_secure_lib_libcrypto} ${_secure_lib_libssh} \ - ${_secure_lib_libssl} lib/libthr + ${_secure_lib_libssl} _generic_libs= ${_cddl_lib} gnu/lib ${_kerberos5_lib} lib ${_secure_lib} usr.bin/lex/lib ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/NOTES#2 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/NOTES,v 1.1421 2007/04/10 03:09:38 thompsa Exp $ +# $FreeBSD: src/sys/conf/NOTES,v 1.1422 2007/04/17 00:35:10 thompsa Exp $ # # NOTES -- Lines that can be cut/pasted into kernel and hints configs. # @@ -813,7 +813,7 @@ options PPP_BSDCOMP #PPP BSD-compress support options PPP_DEFLATE #PPP zlib/deflate/gzip support options PPP_FILTER #enable bpf filtering (needs bpf) -device trunk #Trunk aggregation interface +device lagg #Link aggregation interface device ef # Multiple ethernet frames support options ETHER_II # enable Ethernet_II frame ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/conf/files#2 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.1195 2007/04/10 00:35:31 thompsa Exp $ +# $FreeBSD: src/sys/conf/files,v 1.1196 2007/04/17 00:35:10 thompsa Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -1527,7 +1527,7 @@ net/bpf_filter.c optional bpf | netgraph_bpf net/bridgestp.c optional if_bridge net/bsd_comp.c optional ppp_bsdcomp -net/ieee8023ad_lacp.c optional trunk +net/ieee8023ad_lacp.c optional lagg net/if.c standard net/if_arcsubr.c optional arcnet net/if_atmsubr.c optional atm @@ -1544,6 +1544,7 @@ net/if_gif.c optional gif net/if_gre.c optional gre net/if_iso88025subr.c optional token +net/if_lagg.c optional lagg net/if_loop.c optional loop net/if_media.c standard net/if_mib.c standard @@ -1554,7 +1555,6 @@ net/if_stf.c optional stf net/if_tun.c optional tun net/if_tap.c optional tap -net/if_trunk.c optional trunk net/if_vlan.c optional vlan net/netisr.c standard net/ppp_deflate.c optional ppp_deflate ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_plex.c#3 (text+ko) ==== @@ -45,18 +45,17 @@ struct gv_raid5_packet *); static int gv_normal_parity(struct gv_plex *, struct bio *, struct gv_raid5_packet *); -struct bio * gv_plexbuffer(struct gv_plex *, struct bio *, caddr_t, - off_t, off_t, int *); +static struct bio * gv_plexbuffer(struct gv_plex *, struct bio *, caddr_t, + off_t, off_t, int *); void gv_plex_start(struct gv_plex *p, struct bio *bp) { struct bio *cbp; struct gv_sd *s; - struct gv_raid5_packet *wp, *wp2; - struct gv_bioq *bq, *bq2; + struct gv_raid5_packet *wp; caddr_t addr; - off_t bcount, boff; + off_t bcount, boff, len; int err; bcount = bp->bio_length; @@ -72,75 +71,11 @@ * might involve several read/write sub-requests. */ if (p->org == GV_PLEX_RAID5) { - wp = g_malloc(sizeof(*wp), M_WAITOK | M_ZERO); - wp->bio = bp; - TAILQ_INIT(&wp->bits); - - if (bp->bio_cflags & GV_BIO_REBUILD) - err = gv_rebuild_raid5(p, wp, bp, addr, - boff, bcount); - else if (bp->bio_cflags & GV_BIO_CHECK) - err = gv_check_raid5(p, wp, bp, addr, - boff, bcount); - else - err = gv_raid5_request(p, wp, bp, addr, - boff, bcount); - - /* - * Building the sub-request failed, we probably need to - * clean up a lot. - */ - if (err) { - printf("VINUM: plex request failed for "); - g_print_bio(bp); - printf("\n"); - TAILQ_FOREACH_SAFE(bq, &wp->bits, queue, bq2) { - TAILQ_REMOVE(&wp->bits, bq, queue); - g_free(bq); - } - if (wp->waiting != NULL) { - if (wp->waiting->bio_cflags & - GV_BIO_MALLOC) - g_free(wp->waiting->bio_data); - g_destroy_bio(wp->waiting); - } - if (wp->parity != NULL) { - if (wp->parity->bio_cflags & - GV_BIO_MALLOC) - g_free(wp->parity->bio_data); - g_destroy_bio(wp->parity); - } - g_free(wp); - - TAILQ_FOREACH_SAFE(wp, &p->packets, list, wp2) { - if (wp->bio == bp) { - TAILQ_REMOVE(&p->packets, wp, - list); - TAILQ_FOREACH_SAFE(bq, - &wp->bits, queue, bq2) { - TAILQ_REMOVE(&wp->bits, - bq, queue); - g_free(bq); - } - g_free(wp); - } - } - - cbp = bioq_takefirst(p->bqueue); - while (cbp != NULL) { - if (cbp->bio_cflags & GV_BIO_MALLOC) - g_free(cbp->bio_data); - g_destroy_bio(cbp); - cbp = bioq_takefirst(p->bqueue); - } - - g_io_deliver(bp, err); + wp = gv_raid5_start(p, bp, addr, boff, bcount); + if (wp == NULL) return; - } - bcount -= wp->length; - addr += wp->length; - boff += wp->length; + len = wp->length; if (TAILQ_EMPTY(&wp->bits)) g_free(wp); @@ -163,15 +98,17 @@ return; } + len = cbp->bio_length; + /* * Store the sub-requests now and send them down later. */ bioq_insert_tail(p->bqueue, cbp); + } - bcount -= cbp->bio_length; - addr += cbp->bio_length; - boff += cbp->bio_length; - } + bcount -= len; + addr += len; + boff += len; } /* @@ -199,7 +136,7 @@ } } -struct bio * +static struct bio * gv_plexbuffer(struct gv_plex *p, struct bio *bp, caddr_t addr, off_t boff, off_t bcount, int *err) { struct gv_sd *s; @@ -345,13 +282,13 @@ } TAILQ_FOREACH_SAFE(bq, &wp->bits, queue, bq2) { - if (bq->bp == bp) { - TAILQ_REMOVE(&wp->bits, bq, queue); - g_free(bq); - for (i = 0; i < wp->length; i++) - wp->data[i] ^= bp->bio_data[i]; - break; - } + if (bq->bp != bp) + continue; + TAILQ_REMOVE(&wp->bits, bq, queue); + g_free(bq); + for (i = 0; i < wp->length; i++) + wp->data[i] ^= bp->bio_data[i]; + break; } if (TAILQ_EMPTY(&wp->bits)) { completed = wp->length; @@ -380,17 +317,16 @@ /* Check if we need to handle parity data. */ TAILQ_FOREACH_SAFE(bq, &wp->bits, queue, bq2) { - if (bq->bp == bp) { - TAILQ_REMOVE(&wp->bits, bq, queue); - g_free(bq); - cbp = wp->parity; - if (cbp != NULL) { - for (i = 0; i < wp->length; i++) - cbp->bio_data[i] ^= - bp->bio_data[i]; - } - break; + if (bq->bp != bp) + continue; + TAILQ_REMOVE(&wp->bits, bq, queue); + g_free(bq); + cbp = wp->parity; + if (cbp != NULL) { + for (i = 0; i < wp->length; i++) + cbp->bio_data[i] ^= bp->bio_data[i]; } + break; } /* Handle parity data. */ ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_raid5.c#2 (text+ko) ==== @@ -47,7 +47,83 @@ off_t *, off_t *, int *, int *); static struct bio * gv_raid5_clone_bio(struct bio *, struct gv_sd *, struct gv_raid5_packet *, caddr_t, int); +static int gv_raid5_request(struct gv_plex *, struct gv_raid5_packet *, + struct bio *, caddr_t, off_t, off_t); +static int gv_raid5_check(struct gv_plex *, struct gv_raid5_packet *, + struct bio *, caddr_t, off_t, off_t); +static int gv_raid5_rebuild(struct gv_plex *, struct gv_raid5_packet *, + struct bio *, caddr_t, off_t, off_t); + +struct gv_raid5_packet * +gv_raid5_start(struct gv_plex *p, struct bio *bp, caddr_t addr, off_t boff, + off_t bcount) +{ + struct bio *cbp; + struct gv_raid5_packet *wp, *wp2; + struct gv_bioq *bq, *bq2; + int err; + + wp = g_malloc(sizeof(*wp), M_WAITOK | M_ZERO); + wp->bio = bp; + TAILQ_INIT(&wp->bits); + + if (bp->bio_cflags & GV_BIO_REBUILD) + err = gv_raid5_rebuild(p, wp, bp, addr, boff, bcount); + else if (bp->bio_cflags & GV_BIO_CHECK) + err = gv_raid5_check(p, wp, bp, addr, boff, bcount); + else + err = gv_raid5_request(p, wp, bp, addr, boff, bcount); + + /* + * Building the sub-request failed, we probably need to clean up a lot. + */ + if (err) { + printf("VINUM: plex request failed for "); + g_print_bio(bp); + printf("\n"); + TAILQ_FOREACH_SAFE(bq, &wp->bits, queue, bq2) { + TAILQ_REMOVE(&wp->bits, bq, queue); + g_free(bq); + } + if (wp->waiting != NULL) { + if (wp->waiting->bio_cflags & GV_BIO_MALLOC) + g_free(wp->waiting->bio_data); + g_destroy_bio(wp->waiting); + } + if (wp->parity != NULL) { + if (wp->parity->bio_cflags & GV_BIO_MALLOC) + g_free(wp->parity->bio_data); + g_destroy_bio(wp->parity); + } + g_free(wp); + + TAILQ_FOREACH_SAFE(wp, &p->packets, list, wp2) { + if (wp->bio != bp) + continue; + + TAILQ_REMOVE(&p->packets, wp, list); + TAILQ_FOREACH_SAFE(bq, &wp->bits, queue, bq2) { + TAILQ_REMOVE(&wp->bits, bq, queue); + g_free(bq); + } + g_free(wp); + } + cbp = bioq_takefirst(p->bqueue); + while (cbp != NULL) { + if (cbp->bio_cflags & GV_BIO_MALLOC) + g_free(cbp->bio_data); + g_destroy_bio(cbp); + cbp = bioq_takefirst(p->bqueue); + } + + g_io_deliver(bp, err); + return (NULL); + } + + return (wp); +} + /* * Check if the stripe that the work packet wants is already being used by * some other work packet. @@ -81,8 +157,8 @@ return (overlap); } -int -gv_check_raid5(struct gv_plex *p, struct gv_raid5_packet *wp, struct bio *bp, +static int +gv_raid5_check(struct gv_plex *p, struct gv_raid5_packet *wp, struct bio *bp, caddr_t addr, off_t boff, off_t bcount) { struct gv_sd *parity, *s; @@ -156,8 +232,8 @@ } /* Rebuild a degraded RAID5 plex. */ -int -gv_rebuild_raid5(struct gv_plex *p, struct gv_raid5_packet *wp, struct bio *bp, +static int +gv_raid5_rebuild(struct gv_plex *p, struct gv_raid5_packet *wp, struct bio *bp, caddr_t addr, off_t boff, off_t bcount) { struct gv_sd *broken, *s; @@ -238,7 +314,7 @@ } /* Build a request group to perform (part of) a RAID5 request. */ -int +static int gv_raid5_request(struct gv_plex *p, struct gv_raid5_packet *wp, struct bio *bp, caddr_t addr, off_t boff, off_t bcount) { ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_raid5.h#3 (text+ko) ==== @@ -39,10 +39,6 @@ caddr_t data; /* Data buffer of this sub-request- */ off_t length; /* Size of data buffer. */ off_t lockbase; /* Deny access to our plex offset. */ - off_t offset; /* The drive offset of the subdisk. */ - int bufmalloc; /* Flag if data buffer was malloced. */ - int active; /* Count of active subrequests. */ - int rqcount; /* Count of subrequests. */ struct bio *bio; /* Pointer to the original bio. */ struct bio *parity; /* The bio containing the parity data. */ @@ -52,11 +48,7 @@ TAILQ_ENTRY(gv_raid5_packet) list; /* Entry in plex's packet list. */ }; -int gv_raid5_request(struct gv_plex *, struct gv_raid5_packet *, - struct bio *, caddr_t, off_t, off_t); -int gv_check_raid5(struct gv_plex *, struct gv_raid5_packet *, - struct bio *, caddr_t, off_t, off_t); -int gv_rebuild_raid5(struct gv_plex *, struct gv_raid5_packet *, - struct bio *, caddr_t, off_t, off_t); +struct gv_raid5_packet * gv_raid5_start(struct gv_plex *, struct bio *, + caddr_t, off_t, off_t); #endif /* !_GEOM_VINUM_RAID5_H_ */ ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/bios.c#2 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/bios.c,v 1.73 2005/07/21 09:48:36 phk Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/bios.c,v 1.74 2007/04/19 09:18:51 phk Exp $"); /* * Code for dealing with the BIOS in x86 PC systems. @@ -475,7 +475,8 @@ return (i); } -int bios_oem_strings(struct bios_oem *oem, u_char *buffer, size_t maxlen) +int +bios_oem_strings(struct bios_oem *oem, u_char *buffer, size_t maxlen) { size_t idx = 0; struct bios_oem_signature *sig; ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/busdma_machdep.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/busdma_machdep.c,v 1.85 2007/03/06 18:28:42 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/busdma_machdep.c,v 1.86 2007/04/17 21:05:34 jhb Exp $"); #include <sys/param.h> #include <sys/kdb.h> @@ -51,6 +51,7 @@ #include <machine/atomic.h> #include <machine/bus.h> #include <machine/md_var.h> +#include <machine/specialreg.h> #define MAX_BPAGES 512 #define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3 @@ -530,6 +531,9 @@ } else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) { printf("bus_dmamem_alloc failed to align memory properly.\n"); } + if (flags & BUS_DMA_NOCACHE) + pmap_change_attr((vm_offset_t)*vaddr, dmat->maxsize, + PAT_UNCACHEABLE); CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d", __func__, dmat, dmat->flags, ENOMEM); return (0); @@ -548,6 +552,7 @@ */ if (map != NULL) panic("bus_dmamem_free: Invalid map freed\n"); + pmap_change_attr((vm_offset_t)vaddr, dmat->maxsize, PAT_WRITE_BACK); if ((dmat->maxsize <= PAGE_SIZE) && (dmat->alignment < dmat->maxsize) && dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/i386/identcpu.c#2 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/i386/i386/identcpu.c,v 1.176 2007/04/06 18:15:02 ru Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/identcpu.c,v 1.177 2007/04/18 10:08:24 phk Exp $"); #include "opt_cpu.h" @@ -386,6 +386,14 @@ case 0x590: strcat(cpu_model, "K6-III"); break; + case 0x5a0: + strcat(cpu_model, "Geode LX"); + /* + * Make sure the TSC runs through suspension, + * otherwise we can't use it as timecounter + */ + wrmsr(0x1900, rdmsr(0x1900) | 0x20ULL); + break; default: strcat(cpu_model, "Unknown"); break; ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/i386/include/vmparam.h#2 (text+ko) ==== @@ -32,7 +32,7 @@ * SUCH DAMAGE. * * from: @(#)vmparam.h 5.9 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/i386/include/vmparam.h,v 1.40 2007/04/06 18:15:03 ru Exp $ + * $FreeBSD: src/sys/i386/include/vmparam.h,v 1.41 2007/04/21 01:14:48 sepotvin Exp $ */ @@ -117,7 +117,8 @@ /* * How many physical pages per KVA page allocated. - * min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), VM_KMEM_SIZE_MAX) + * min(max(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), + * VM_KMEM_SIZE_MIN), VM_KMEM_SIZE_MAX) * is the total KVA space allocated for kmem_map. */ #ifndef VM_KMEM_SIZE_SCALE ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_intr.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_intr.c,v 1.142 2007/03/02 17:01:45 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_intr.c,v 1.143 2007/04/19 01:24:32 njl Exp $"); #include "opt_ddb.h" @@ -83,7 +83,7 @@ static MALLOC_DEFINE(M_ITHREAD, "ithread", "Interrupt Threads"); -static int intr_storm_threshold = 500; +static int intr_storm_threshold = 1000; TUNABLE_INT("hw.intr_storm_threshold", &intr_storm_threshold); SYSCTL_INT(_hw, OID_AUTO, intr_storm_threshold, CTLFLAG_RW, &intr_storm_threshold, 0, @@ -698,11 +698,11 @@ */ if (intr_storm_threshold != 0 && ie->ie_count >= intr_storm_threshold && !(ie->ie_flags & IE_SOFT)) { - if (ie->ie_warned == 0) { + /* Report the message only once every second. */ + if (ppsratecheck(&ie->ie_warntm, &ie->ie_warncnt, 1)) { printf( - "Interrupt storm detected on \"%s\"; throttling interrupt source\n", + "interrupt storm detected on \"%s\"; throttling interrupt source\n", ie->ie_name); - ie->ie_warned = 1; } pause("istorm", 1); } else ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/kern_malloc.c#2 (text+ko) ==== @@ -43,7 +43,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/kern_malloc.c,v 1.156 2006/10/26 10:17:13 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_malloc.c,v 1.157 2007/04/21 01:14:48 sepotvin Exp $"); #include "opt_ddb.h" #include "opt_vm.h" @@ -178,6 +178,10 @@ SYSCTL_UINT(_vm, OID_AUTO, kmem_size, CTLFLAG_RD, &vm_kmem_size, 0, "Size of kernel memory"); +u_int vm_kmem_size_min; +SYSCTL_UINT(_vm, OID_AUTO, kmem_size_min, CTLFLAG_RD, &vm_kmem_size_min, 0, + "Minimum size of kernel memory"); + u_int vm_kmem_size_max; SYSCTL_UINT(_vm, OID_AUTO, kmem_size_max, CTLFLAG_RD, &vm_kmem_size_max, 0, "Maximum size of kernel memory"); @@ -557,6 +561,14 @@ (mem_size / vm_kmem_size_scale) > (vm_kmem_size / PAGE_SIZE)) vm_kmem_size = (mem_size / vm_kmem_size_scale) * PAGE_SIZE; +#if defined(VM_KMEM_SIZE_MIN) + vm_kmem_size_min = VM_KMEM_SIZE_MIN; +#endif + TUNABLE_INT_FETCH("vm.kmem_size_min", &vm_kmem_size_min); + if (vm_kmem_size_min > 0 && vm_kmem_size < vm_kmem_size_min) { + vm_kmem_size = vm_kmem_size_min; + } + #if defined(VM_KMEM_SIZE_MAX) vm_kmem_size_max = VM_KMEM_SIZE_MAX; #endif ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/sched_ule.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/sched_ule.c,v 1.191 2007/03/17 23:32:48 jeff Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/sched_ule.c,v 1.192 2007/04/20 05:45:46 kmacy Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_sched.h" @@ -1859,8 +1859,7 @@ CTR2(KTR_ULE, "ithd %d < %d", td->td_priority, PRI_MAX_ITHD); ts->ts_cpu = cpuid; - } - if (pick_pri) + } else if (pick_pri) ts->ts_cpu = tdq_pickpri(tdq, ts, flags); else ts->ts_cpu = tdq_pickidle(tdq, ts); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/subr_rman.c#2 (text+ko) ==== @@ -55,8 +55,10 @@ * permitted. */ +#include "opt_ddb.h" + #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/subr_rman.c,v 1.55 2007/02/23 22:53:56 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/subr_rman.c,v 1.56 2007/04/16 21:09:03 jhb Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -70,6 +72,10 @@ #include <sys/rman.h> #include <sys/sysctl.h> +#ifdef DDB +#include <ddb/ddb.h> +#endif + /* * We use a linked list rather than a bitmap because we need to be able to * represent potentially huge objects (like all of a processor's physical @@ -911,3 +917,47 @@ SYSCTL_NODE(_hw_bus, OID_AUTO, rman, CTLFLAG_RD, sysctl_rman, "kernel resource manager"); + +#ifdef DDB +static void +dump_rman(struct rman *rm) +{ + struct resource_i *r; + const char *devname; + + if (db_pager_quit) + return; + db_printf("rman: %s\n", rm->rm_descr); + db_printf(" 0x%lx-0x%lx (full range)\n", rm->rm_start, rm->rm_end); + TAILQ_FOREACH(r, &rm->rm_list, r_link) { + if (r->r_dev != NULL) { + devname = device_get_nameunit(r->r_dev); + if (devname == NULL) + devname = "nomatch"; + } else + devname = NULL; + db_printf(" 0x%lx-0x%lx ", r->r_start, r->r_end); + if (devname != NULL) + db_printf("(%s)\n", devname); + else + db_printf("----\n"); + if (db_pager_quit) + return; + } +} + +DB_SHOW_COMMAND(rman, db_show_rman) +{ + + if (have_addr) + dump_rman((struct rman *)addr); +} + +DB_SHOW_COMMAND(allrman, db_show_all_rman) +{ + struct rman *rm; + + TAILQ_FOREACH(rm, &rman_head, rm_link) + dump_rman(rm); +} +#endif ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/subr_witness.c#2 (text+ko) ==== @@ -82,9 +82,10 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/subr_witness.c,v 1.229 2007/04/05 23:32:32 pjd Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/subr_witness.c,v 1.230 2007/04/19 08:02:51 jkoshy Exp $"); #include "opt_ddb.h" +#include "opt_hwpmc_hooks.h" #include "opt_witness.h" #include <sys/param.h> @@ -289,6 +290,9 @@ { "session", &lock_class_mtx_sleep }, { "uidinfo hash", &lock_class_mtx_sleep }, { "uidinfo struct", &lock_class_mtx_sleep }, +#ifdef HWPMC_HOOKS + { "pmc-sleep", &lock_class_mtx_sleep }, +#endif { NULL, NULL }, /* * Sockets @@ -396,6 +400,9 @@ { "zstty", &lock_class_mtx_spin }, { "fast_taskqueue", &lock_class_mtx_spin }, { "intr table", &lock_class_mtx_spin }, +#ifdef HWPMC_HOOKS + { "pmc-per-proc", &lock_class_mtx_spin }, +#endif { "sleepq chain", &lock_class_mtx_spin }, { "sched lock", &lock_class_mtx_spin }, { "turnstile chain", &lock_class_mtx_spin }, @@ -434,6 +441,9 @@ { "tw_cl_io_lock", &lock_class_mtx_spin }, { "tw_cl_intr_lock", &lock_class_mtx_spin }, { "tw_cl_gen_lock", &lock_class_mtx_spin }, +#ifdef HWPMC_HOOKS + { "pmc-leaf", &lock_class_mtx_spin }, +#endif { NULL, NULL }, { NULL, NULL } }; ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/uipc_syscalls.c#2 (text+ko) ==== @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/uipc_syscalls.c,v 1.251 2007/04/06 23:31:30 rwatson Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/uipc_syscalls.c,v 1.253 2007/04/20 19:49:20 pjd Exp $"); #include "opt_sctp.h" #include "opt_compat.h" @@ -2016,12 +2016,12 @@ */ pgoff = (vm_offset_t)(off & PAGE_MASK); xfsize = omin(PAGE_SIZE - pgoff, - obj->un_pager.vnp.vnp_size - off - + obj->un_pager.vnp.vnp_size - uap->offset - sbytes - loopbytes); if (uap->nbytes) rem = (uap->nbytes - sbytes - loopbytes); else - rem = obj->un_pager.vnp.vnp_size - off - + rem = obj->un_pager.vnp.vnp_size - uap->offset - sbytes - loopbytes; xfsize = omin(rem, xfsize); if (xfsize <= 0) { @@ -2038,35 +2038,15 @@ VM_OBJECT_UNLOCK(obj); break; } -retry_lookup: + /* * Attempt to look up the page. * Allocate if not found or * wait and loop if busy. */ pindex = OFF_TO_IDX(off); - pg = vm_page_lookup(obj, pindex); - if (pg == NULL) { - pg = vm_page_alloc(obj, pindex, - VM_ALLOC_NOBUSY | VM_ALLOC_NORMAL | - VM_ALLOC_WIRED); - if (pg == NULL) { - VM_OBJECT_UNLOCK(obj); - VM_WAIT; - VM_OBJECT_LOCK(obj); - goto retry_lookup; - } - } else if (vm_page_sleep_if_busy(pg, TRUE, "sfpbsy")) - goto retry_lookup; - else { - /* - * Wire the page so it does not get - * ripped out from under us. - */ - vm_page_lock_queues(); - vm_page_wire(pg); - vm_page_unlock_queues(); - } + pg = vm_page_grab(obj, pindex, VM_ALLOC_NOBUSY | + VM_ALLOC_NORMAL | VM_ALLOC_WIRED | VM_ALLOC_RETRY); /* * Check if page is valid for what we need, ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/kern/vfs_mount.c#2 (text+ko) ==== @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/kern/vfs_mount.c,v 1.257 2007/04/13 23:54:22 pjd Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/vfs_mount.c,v 1.258 2007/04/17 21:14:06 pjd Exp $"); #include <sys/param.h> #include <sys/conf.h> @@ -80,8 +80,6 @@ static int vfs_domount(struct thread *td, const char *fstype, char *fspath, int fsflags, void *fsdata); -static struct mount *vfs_mount_alloc(struct vnode *dvp, struct vfsconf *vfsp, - const char *fspath, struct thread *td); static int vfs_mountroot_ask(void); static int vfs_mountroot_try(const char *mountfrom); static int vfs_donmount(struct thread *td, int fsflags, @@ -465,7 +463,7 @@ /* * Allocate and initialize the mount point struct. */ -static struct mount * +struct mount * vfs_mount_alloc(struct vnode *vp, struct vfsconf *vfsp, const char *fspath, struct thread *td) { ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/modules/Makefile#2 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/modules/Makefile,v 1.527 2007/04/10 00:41:31 thompsa Exp $ +# $FreeBSD: src/sys/modules/Makefile,v 1.528 2007/04/17 00:35:10 thompsa Exp $ .include <bsd.own.mk> @@ -108,12 +108,12 @@ if_faith \ if_gif \ if_gre \ + if_lagg \ ${_if_ndis} \ if_ppp \ if_sl \ if_stf \ if_tap \ - if_trunk \ if_tun \ if_vlan \ ${_iir} \ ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/interrupt.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * (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: src/sys/sys/interrupt.h,v 1.35 2007/02/23 12:19:07 piso Exp $ + * $FreeBSD: src/sys/sys/interrupt.h,v 1.36 2007/04/19 01:24:32 njl Exp $ */ #ifndef _SYS_INTERRUPT_H_ @@ -74,7 +74,8 @@ void (*ie_enable)(void *); int ie_flags; int ie_count; /* Loop counter. */ - int ie_warned; /* Warned about interrupt storm. */ + int ie_warncnt; /* Rate-check interrupt storm warns. */ + struct timeval ie_warntm; }; /* Interrupt event flags kept in ie_flags. */ ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/mount.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)mount.h 8.21 (Berkeley) 5/20/95 - * $FreeBSD: src/sys/sys/mount.h,v 1.224 2007/04/05 21:03:05 pjd Exp $ + * $FreeBSD: src/sys/sys/mount.h,v 1.225 2007/04/17 21:14:05 pjd Exp $ */ #ifndef _SYS_MOUNT_H_ @@ -682,6 +682,8 @@ void vfs_mountedfrom(struct mount *, const char *from); void vfs_ref(struct mount *); void vfs_rel(struct mount *); +struct mount *vfs_mount_alloc(struct vnode *, struct vfsconf *, const char *, + struct thread *); int vfs_suser(struct mount *, struct thread *); void vfs_unbusy(struct mount *, struct thread *); void vfs_unmountall(void); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/priv.h#2 (text+ko) ==== @@ -26,7 +26,7 @@ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/sys/priv.h,v 1.10 2007/04/10 15:58:38 rwatson Exp $ + * $FreeBSD: src/sys/sys/priv.h,v 1.11 2007/04/17 00:35:10 thompsa Exp $ */ /* @@ -319,7 +319,7 @@ #define PRIV_NET_IFDESTROY 412 /* Destroy cloned interface. */ #define PRIV_NET_ADDIFADDR 413 /* Add protocol addr to interface. */ #define PRIV_NET_DELIFADDR 414 /* Delete protocol addr on interface. */ -#define PRIV_NET_TRUNK 415 /* Administer trunk. */ +#define PRIV_NET_LAGG 415 /* Administer lagg interface. */ /* * 802.11-related privileges. ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/sys/socket.h#2 (text+ko) ==== @@ -27,7 +27,7 @@ * SUCH DAMAGE. * * @(#)socket.h 8.4 (Berkeley) 2/21/94 - * $FreeBSD: src/sys/sys/socket.h,v 1.92 2006/11/03 15:23:16 rrs Exp $ >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704221218.l3MCI5Ib004767>