From owner-p4-projects@FreeBSD.ORG Fri Apr 21 06:37:49 2006 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 56FC416A458; Fri, 21 Apr 2006 06:37:49 +0000 (UTC) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 30FF516A456 for ; Fri, 21 Apr 2006 06:37:49 +0000 (UTC) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id D02C243D48 for ; Fri, 21 Apr 2006 06:37:48 +0000 (GMT) (envelope-from imp@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id k3L6bm7A026968 for ; Fri, 21 Apr 2006 06:37:48 GMT (envelope-from imp@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id k3L6bmxk026959 for perforce@freebsd.org; Fri, 21 Apr 2006 06:37:48 GMT (envelope-from imp@freebsd.org) Date: Fri, 21 Apr 2006 06:37:48 GMT Message-Id: <200604210637.k3L6bmxk026959@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to imp@freebsd.org using -f From: Warner Losh To: Perforce Change Reviews Cc: Subject: PERFORCE change 95757 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Apr 2006 06:37:49 -0000 http://perforce.freebsd.org/chv.cgi?CH=95757 Change 95757 by imp@imp_harmony on 2006/04/21 06:36:51 IFC @95756 Affected files ... .. //depot/projects/arm/src/sys/alpha/isa/isa.c#3 integrate .. //depot/projects/arm/src/sys/alpha/pci/apecs_pci.c#2 integrate .. //depot/projects/arm/src/sys/alpha/pci/lca_pci.c#2 integrate .. //depot/projects/arm/src/sys/alpha/pci/pcibus.c#3 integrate .. //depot/projects/arm/src/sys/amd64/amd64/dump_machdep.c#3 integrate .. //depot/projects/arm/src/sys/amd64/amd64/minidump_machdep.c#1 branch .. //depot/projects/arm/src/sys/amd64/amd64/nexus.c#3 integrate .. //depot/projects/arm/src/sys/amd64/amd64/pmap.c#11 integrate .. //depot/projects/arm/src/sys/amd64/amd64/uma_machdep.c#2 integrate .. //depot/projects/arm/src/sys/amd64/include/md_var.h#3 integrate .. //depot/projects/arm/src/sys/amd64/include/minidump.h#1 branch .. //depot/projects/arm/src/sys/arm/arm/nexus.c#3 integrate .. //depot/projects/arm/src/sys/arm/at91/at91.c#16 integrate .. //depot/projects/arm/src/sys/arm/sa11x0/sa11x0.c#3 integrate .. //depot/projects/arm/src/sys/arm/xscale/i80321/i80321_pci.c#5 integrate .. //depot/projects/arm/src/sys/arm/xscale/i80321/iq80321.c#5 integrate .. //depot/projects/arm/src/sys/arm/xscale/i80321/obio.c#3 integrate .. //depot/projects/arm/src/sys/boot/arm/at91/bootiic/arm_init.s#6 branch .. //depot/projects/arm/src/sys/conf/files.amd64#10 integrate .. //depot/projects/arm/src/sys/conf/files.i386#12 integrate .. //depot/projects/arm/src/sys/crypto/via/padlock.c#3 integrate .. //depot/projects/arm/src/sys/dev/acpica/acpi.c#7 integrate .. //depot/projects/arm/src/sys/dev/ciss/ciss.c#6 integrate .. //depot/projects/arm/src/sys/dev/mpt/mpt.c#10 integrate .. //depot/projects/arm/src/sys/geom/eli/g_eli.c#9 integrate .. //depot/projects/arm/src/sys/geom/eli/g_eli_crypto.c#3 integrate .. //depot/projects/arm/src/sys/i386/i386/dump_machdep.c#3 integrate .. //depot/projects/arm/src/sys/i386/i386/minidump_machdep.c#1 branch .. //depot/projects/arm/src/sys/i386/i386/nexus.c#3 integrate .. //depot/projects/arm/src/sys/i386/include/md_var.h#3 integrate .. //depot/projects/arm/src/sys/i386/include/minidump.h#1 branch .. //depot/projects/arm/src/sys/ia64/ia64/nexus.c#3 integrate .. //depot/projects/arm/src/sys/kern/kern_rwlock.c#4 integrate .. //depot/projects/arm/src/sys/kern/subr_bus.c#6 integrate .. //depot/projects/arm/src/sys/kern/subr_rman.c#6 integrate .. //depot/projects/arm/src/sys/powerpc/powermac/grackle.c#2 integrate .. //depot/projects/arm/src/sys/powerpc/powermac/hrowpic.c#2 integrate .. //depot/projects/arm/src/sys/powerpc/powermac/macio.c#3 integrate .. //depot/projects/arm/src/sys/powerpc/powermac/uninorth.c#3 integrate .. //depot/projects/arm/src/sys/powerpc/powerpc/openpic.c#2 integrate .. //depot/projects/arm/src/sys/powerpc/psim/iobus.c#2 integrate .. //depot/projects/arm/src/sys/sparc64/ebus/ebus.c#5 integrate .. //depot/projects/arm/src/sys/sparc64/pci/psycho.c#5 integrate .. //depot/projects/arm/src/sys/sparc64/sbus/sbus.c#5 integrate .. //depot/projects/arm/src/sys/sparc64/sparc64/nexus.c#3 integrate .. //depot/projects/arm/src/sys/sys/bus.h#4 integrate .. //depot/projects/arm/src/sys/sys/rwlock.h#2 integrate .. //depot/projects/arm/src/sys/vm/vm_page.c#10 integrate Differences ... ==== //depot/projects/arm/src/sys/alpha/isa/isa.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/isa/isa.c,v 1.38 2005/10/25 19:48:45 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/isa/isa.c,v 1.39 2006/04/20 04:16:02 imp Exp $"); #include #include @@ -231,6 +231,7 @@ res = rman_reserve_resource(&isa_drq_rman, start, start, 1, 0, child); + rman_set_rid(res, *rid); if (res && !passthrough) { rle = resource_list_find(rl, type, *rid); rle->start = rman_get_start(res); ==== //depot/projects/arm/src/sys/alpha/pci/apecs_pci.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/pci/apecs_pci.c,v 1.15 2003/08/22 07:20:27 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/pci/apecs_pci.c,v 1.16 2006/04/20 04:16:02 imp Exp $"); #include #include @@ -79,12 +79,17 @@ apecs_pcib_alloc_resource(device_t bus, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags) { + struct resource *rv = NULL; + if ((hwrpb->rpb_type == ST_DEC_2100_A50) && (type == SYS_RES_IRQ)) - return isa_alloc_intr(bus, child, start); + rv = isa_alloc_intr(bus, child, start); else - return alpha_pci_alloc_resource(bus, child, type, rid, - start, end, count, flags); + rv = alpha_pci_alloc_resource(bus, child, type, rid, + start, end, count, flags); + if (rv != NULL) + rman_set_rid(rv, *rid); + return (rv); } static int ==== //depot/projects/arm/src/sys/alpha/pci/lca_pci.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/pci/lca_pci.c,v 1.17 2003/08/22 07:20:27 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/pci/lca_pci.c,v 1.18 2006/04/20 04:16:02 imp Exp $"); #include #include @@ -78,11 +78,16 @@ lca_pcib_alloc_resource(device_t bus, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags) { + struct resource *rv = NULL; + if (type == SYS_RES_IRQ) - return isa_alloc_intr(bus, child, start); + rv = isa_alloc_intr(bus, child, start); else - return alpha_pci_alloc_resource(bus, child, type, rid, - start, end, count, flags); + rv = alpha_pci_alloc_resource(bus, child, type, rid, + start, end, count, flags); + if (rv != NULL) + rman_set_rid(rv, *rid); + return (rv); } static int ==== //depot/projects/arm/src/sys/alpha/pci/pcibus.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/pci/pcibus.c,v 1.37 2005/09/25 20:12:29 phk Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/pci/pcibus.c,v 1.38 2006/04/20 04:16:02 imp Exp $"); #include "opt_isa.h" @@ -96,7 +96,12 @@ alpha_platform_alloc_ide_intr(int chan) { int irqs[2] = { 14, 15 }; - return isa_alloc_intr(0, 0, irqs[chan]); + struct resource *rv; + + rv = isa_alloc_intr(0, 0, irqs[chan]); + if (rv != NULL) + rman_set_rid(rv, *rid); + return (rv); } int @@ -230,9 +235,11 @@ #ifdef DEV_ISA if((start >= ISA_IRQ_OFFSET) && (end < ISA_IRQ_OFFSET + ISA_IRQ_LEN)) { - return isa_alloc_intrs(bus, child, - start - ISA_IRQ_OFFSET, - end - ISA_IRQ_OFFSET); + rv = isa_alloc_intrs(bus, child, + start - ISA_IRQ_OFFSET, end - ISA_IRQ_OFFSET); + if (rv != NULL) + rman_set_rid(rv, *rid); + return (rv); } else #endif @@ -252,6 +259,7 @@ if (rv == 0) return 0; + rman_set_rid(rv, *rid); rstart = rman_get_start(rv); rman_set_bustag(rv, ALPHAPCI_GET_BUSTAG(bus, type)); rman_set_bushandle(rv, rstart); ==== //depot/projects/arm/src/sys/amd64/amd64/dump_machdep.c#3 (text+ko) ==== @@ -25,12 +25,13 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/dump_machdep.c,v 1.11 2005/07/02 19:57:30 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/dump_machdep.c,v 1.12 2006/04/21 04:24:50 peter Exp $"); #include #include #include #include +#include #include #include #include @@ -40,6 +41,11 @@ CTASSERT(sizeof(struct kerneldumpheader) == 512); +int do_minidump = 1; +TUNABLE_INT("debug.minidump", &do_minidump); +SYSCTL_INT(_debug, OID_AUTO, minidump, CTLFLAG_RW, &do_minidump, 0, + "Enable mini crash dumps"); + /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This * is to protect us from metadata and to protect metadata from us. @@ -272,6 +278,10 @@ size_t hdrsz; int error; + if (do_minidump) { + minidumpsys(di); + return; + } bzero(&ehdr, sizeof(ehdr)); ehdr.e_ident[EI_MAG0] = ELFMAG0; ehdr.e_ident[EI_MAG1] = ELFMAG1; ==== //depot/projects/arm/src/sys/amd64/amd64/nexus.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/nexus.c,v 1.67 2005/09/25 20:03:41 phk Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/nexus.c,v 1.68 2006/04/20 04:16:34 imp Exp $"); /* * This code implements a `root nexus' for Intel Architecture @@ -340,7 +340,7 @@ rv = rman_reserve_resource(rm, start, end, count, flags, child); if (rv == 0) return 0; - + rman_set_rid(rv, *rid); if (type == SYS_RES_MEMORY) { rman_set_bustag(rv, AMD64_BUS_SPACE_MEM); } else if (type == SYS_RES_IOPORT) { ==== //depot/projects/arm/src/sys/amd64/amd64/pmap.c#11 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.547 2006/04/18 20:17:32 peter Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.549 2006/04/21 04:50:18 peter Exp $"); /* * Manages physical address maps. @@ -181,7 +181,7 @@ static u_int64_t KPTphys; /* phys addr of kernel level 1 */ static u_int64_t KPDphys; /* phys addr of kernel level 2 */ -static u_int64_t KPDPphys; /* phys addr of kernel level 3 */ +u_int64_t KPDPphys; /* phys addr of kernel level 3 */ u_int64_t KPML4phys; /* phys addr of kernel level 4 */ static u_int64_t DMPDphys; /* phys addr of direct mapped level 2 */ @@ -1565,6 +1565,7 @@ /* entire chunk is free, return it */ TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); + dump_drop_page(m->phys_addr); vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); @@ -1645,6 +1646,7 @@ PV_STAT(pc_chunk_count++); PV_STAT(pc_chunk_allocs++); colour++; + dump_add_page(m->phys_addr); pc = (void *)PHYS_TO_DMAP(m->phys_addr); pc->pc_pmap = pmap; pc->pc_map[0] = PC_FREE0 & ~1ul; /* preallocated bit 0 */ @@ -2794,6 +2796,7 @@ PV_STAT(pc_chunk_frees++); TAILQ_REMOVE(&pmap->pm_pvchunk, pc, pc_list); m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)pc)); + dump_drop_page(m->phys_addr); vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); ==== //depot/projects/arm/src/sys/amd64/amd64/uma_machdep.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/uma_machdep.c,v 1.1 2003/10/14 05:51:31 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/uma_machdep.c,v 1.2 2006/04/21 04:24:50 peter Exp $"); #include #include @@ -44,6 +44,7 @@ { static vm_pindex_t colour; vm_page_t m; + vm_paddr_t pa; void *va; int pflags; @@ -64,7 +65,9 @@ } else break; } - va = (void *)PHYS_TO_DMAP(m->phys_addr); + pa = m->phys_addr; + dump_add_page(pa); + va = (void *)PHYS_TO_DMAP(pa); if ((wait & M_ZERO) && (m->flags & PG_ZERO) == 0) pagezero(va); return (va); @@ -74,8 +77,11 @@ uma_small_free(void *mem, int size, u_int8_t flags) { vm_page_t m; + vm_paddr_t pa; - m = PHYS_TO_VM_PAGE(DMAP_TO_PHYS((vm_offset_t)mem)); + pa = DMAP_TO_PHYS((vm_offset_t)mem); + dump_drop_page(pa); + m = PHYS_TO_VM_PAGE(pa); vm_page_lock_queues(); vm_page_free(m); vm_page_unlock_queues(); ==== //depot/projects/arm/src/sys/amd64/include/md_var.h#3 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/md_var.h,v 1.76 2005/10/14 22:52:00 jkim Exp $ + * $FreeBSD: src/sys/amd64/include/md_var.h,v 1.77 2006/04/21 04:24:50 peter Exp $ */ #ifndef _MACHINE_MD_VAR_H_ @@ -53,6 +53,8 @@ extern char kstack[]; extern char sigcode[]; extern int szsigcode; +extern uint64_t *vm_page_dump; +extern int vm_page_dump_size; extern struct pcpu __pcpu[]; @@ -61,11 +63,14 @@ struct reg; struct fpreg; struct dbreg; +struct dumperinfo; void busdma_swi(void); void cpu_setregs(void); void doreti_iret(void) __asm(__STRING(doreti_iret)); void doreti_iret_fault(void) __asm(__STRING(doreti_iret_fault)); +void dump_add_page(vm_paddr_t); +void dump_drop_page(vm_paddr_t); void initializecpu(void); void fillw(int /*u_short*/ pat, void *base, size_t cnt); void fpstate_drop(struct thread *td); @@ -75,5 +80,6 @@ void pagezero(void *addr); void setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int ist); int user_dbreg_trap(void); +void minidumpsys(struct dumperinfo *); #endif /* !_MACHINE_MD_VAR_H_ */ ==== //depot/projects/arm/src/sys/arm/arm/nexus.c#3 (text+ko) ==== @@ -40,7 +40,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/arm/nexus.c,v 1.6 2005/09/25 21:06:49 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/nexus.c,v 1.7 2006/04/20 04:12:02 imp Exp $"); #include #include @@ -214,6 +214,7 @@ if (rv == 0) return 0; + rman_set_rid(rv, *rid); rman_set_bustag(rv, (void*)ARM_BUS_SPACE_MEM); rman_set_bushandle(rv, rman_get_start(rv)); ==== //depot/projects/arm/src/sys/arm/at91/at91.c#16 (text+ko) ==== @@ -23,7 +23,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/at91/at91.c,v 1.4 2006/04/06 04:32:29 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/at91/at91.c,v 1.5 2006/04/20 04:12:02 imp Exp $"); #include #include @@ -497,6 +497,7 @@ rle->start = rman_get_start(rle->res); rle->end = rman_get_end(rle->res); rle->count = count; + rman_set_rid(rle->res, *rid); } return (rle->res); } ==== //depot/projects/arm/src/sys/arm/sa11x0/sa11x0.c#3 (text+ko) ==== @@ -57,7 +57,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/sa11x0/sa11x0.c,v 1.5 2005/09/25 21:06:50 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/sa11x0/sa11x0.c,v 1.6 2006/04/20 04:12:02 imp Exp $"); #include #include @@ -127,6 +127,8 @@ res = rman_reserve_resource(&sa11x0_softc->sa11x0_rman, *rid, *rid, count, flags, child); + if (res != NULL) + rman_set_rid(res, *rid); return (res); } ==== //depot/projects/arm/src/sys/arm/xscale/i80321/i80321_pci.c#5 (text+ko) ==== @@ -40,7 +40,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_pci.c,v 1.7 2006/04/13 15:07:59 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/i80321_pci.c,v 1.8 2006/04/20 04:12:02 imp Exp $"); #include #include @@ -380,6 +380,7 @@ rv = rman_reserve_resource(rm, start, end, count, flags, child); if (rv == NULL) return (NULL); + rman_set_rid(rv, *rid); if (type != SYS_RES_IRQ) { if (type == SYS_RES_MEMORY) bh += (rman_get_start(rv)); ==== //depot/projects/arm/src/sys/arm/xscale/i80321/iq80321.c#5 (text+ko) ==== @@ -42,7 +42,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq80321.c,v 1.10 2005/10/03 14:19:55 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/iq80321.c,v 1.11 2006/04/20 04:12:02 imp Exp $"); #define _ARM32_BUS_DMA_PRIVATE #include @@ -300,10 +300,14 @@ u_long start, u_long end, u_long count, u_int flags) { struct i80321_softc *sc = device_get_softc(dev); - - if (type == SYS_RES_IRQ) - return (rman_reserve_resource(&sc->sc_irq_rman, - start, end, count, flags, child)); + struct resource *rv; + + if (type == SYS_RES_IRQ) { + rv = rman_reserve_resource(&sc->sc_irq_rman, + start, end, count, flags, child); + if (rv != NULL) + rman_set_rid(rv, *rid); + } return (NULL); } ==== //depot/projects/arm/src/sys/arm/xscale/i80321/obio.c#3 (text+ko) ==== @@ -41,7 +41,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/obio.c,v 1.3 2005/09/25 21:06:50 cognet Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/xscale/i80321/obio.c,v 1.4 2006/04/20 04:12:02 imp Exp $"); #include #include @@ -124,6 +124,7 @@ return (NULL); if (type == SYS_RES_IRQ) return (rv); + rman_set_rid(rv, *rid); rman_set_bustag(rv, bt); rman_set_bushandle(rv, bh); ==== //depot/projects/arm/src/sys/conf/files.amd64#10 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.amd64,v 1.83 2006/03/05 22:52:16 yar Exp $ +# $FreeBSD: src/sys/conf/files.amd64,v 1.84 2006/04/21 04:24:49 peter Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -104,6 +104,7 @@ amd64/amd64/locore.S standard no-obj amd64/amd64/machdep.c standard amd64/amd64/mem.c optional mem +amd64/amd64/minidump_machdep.c standard amd64/amd64/mp_machdep.c optional smp amd64/amd64/mp_watchdog.c optional mp_watchdog smp amd64/amd64/mpboot.S optional smp ==== //depot/projects/arm/src/sys/conf/files.i386#12 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.i386,v 1.553 2006/03/05 22:52:16 yar Exp $ +# $FreeBSD: src/sys/conf/files.i386,v 1.554 2006/04/21 04:28:43 peter Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -272,6 +272,7 @@ i386/i386/longrun.c optional cpu_enable_longrun i386/i386/machdep.c standard i386/i386/mem.c optional mem +i386/i386/minidump_machdep.c standard i386/i386/mp_clock.c optional smp i386/i386/mp_machdep.c optional smp i386/i386/mp_watchdog.c optional mp_watchdog smp ==== //depot/projects/arm/src/sys/crypto/via/padlock.c#3 (text+ko) ==== @@ -45,7 +45,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/crypto/via/padlock.c,v 1.2 2006/04/12 12:13:34 pjd Exp $"); +__FBSDID("$FreeBSD: src/sys/crypto/via/padlock.c,v 1.3 2006/04/20 06:31:44 pjd Exp $"); #include #include @@ -366,6 +366,10 @@ err = EINVAL; goto out; } + if ((crd->crd_flags & CRD_F_KEY_EXPLICIT) != 0) { + err = EINVAL; + goto out; + } mtx_lock(&sc->sc_sessions_mtx); TAILQ_FOREACH(ses, &sc->sc_sessions, ses_next) { ==== //depot/projects/arm/src/sys/dev/acpica/acpi.c#7 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.221 2006/04/15 12:31:32 iwasaki Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.222 2006/04/20 04:21:27 imp Exp $"); #include "opt_acpi.h" #include @@ -1015,6 +1015,7 @@ goto out; /* Copy the bus tag and handle from the pre-allocated resource. */ + rman_set_rid(res, *rid); rman_set_bustag(res, rman_get_bustag(rle->res)); rman_set_bushandle(res, rman_get_start(res)); ==== //depot/projects/arm/src/sys/dev/ciss/ciss.c#6 (text+ko) ==== @@ -24,7 +24,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/dev/ciss/ciss.c,v 1.67 2005/12/16 06:50:55 ps Exp $ + * $FreeBSD: src/sys/dev/ciss/ciss.c,v 1.69 2006/04/20 03:05:02 ps Exp $ */ /* @@ -1651,7 +1651,7 @@ ciss_free(struct ciss_softc *sc) { struct ciss_request *cr; - int i; + int i, j; debug_called(1); @@ -1725,8 +1725,15 @@ cam_simq_free(sc->ciss_cam_devq); if (sc->ciss_logical) { - for (i = 0; i < sc->ciss_max_logical_bus; i++) + for (i = 0; i <= sc->ciss_max_logical_bus; i++) { + for (j = 0; j < CISS_MAX_LOGICAL; j++) { + if (sc->ciss_logical[i][j].cl_ldrive) + free(sc->ciss_logical[i][j].cl_ldrive, CISS_MALLOC_CLASS); + if (sc->ciss_logical[i][j].cl_lstatus) + free(sc->ciss_logical[i][j].cl_lstatus, CISS_MALLOC_CLASS); + } free(sc->ciss_logical[i], CISS_MALLOC_CLASS); + } free(sc->ciss_logical, CISS_MALLOC_CLASS); } @@ -3588,7 +3595,7 @@ static void ciss_notify_hotplug(struct ciss_softc *sc, struct ciss_notify *cn) { - struct ciss_lun_report *cll; + struct ciss_lun_report *cll = NULL; int bus, target; int s; @@ -3626,6 +3633,9 @@ ciss_printf(sc, "Unknown hotplug event %d\n", cn->subclass); return; } + + if (cll != NULL) + free(cll, CISS_MALLOC_CLASS); } /************************************************************************ ==== //depot/projects/arm/src/sys/dev/mpt/mpt.c#10 (text+ko) ==== @@ -92,7 +92,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt.c,v 1.26 2006/04/11 16:47:30 mjacob Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt.c,v 1.27 2006/04/19 21:17:33 mjacob Exp $"); #include #include /* XXX For static handler registration */ @@ -661,7 +661,6 @@ { struct mpt_softc *mpt; uint32_t reply_desc; - uint32_t last_reply_desc = MPT_REPLY_EMPTY; int ntrips = 0; mpt = (struct mpt_softc *)arg; @@ -675,15 +674,6 @@ u_int req_index; int free_rf; - if (reply_desc == last_reply_desc) { - mpt_prt(mpt, "debounce reply_desc 0x%x\n", reply_desc); - if (ntrips++ == 1000) { - break; - } - continue; - } - last_reply_desc = reply_desc; - req = NULL; reply_frame = NULL; reply_baddr = 0; ==== //depot/projects/arm/src/sys/geom/eli/g_eli.c#9 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/geom/eli/g_eli.c,v 1.23 2006/04/15 18:30:42 pjd Exp $"); +__FBSDID("$FreeBSD: src/sys/geom/eli/g_eli.c,v 1.24 2006/04/20 06:33:46 pjd Exp $"); #include #include @@ -532,8 +532,7 @@ crd->crd_skip = 0; crd->crd_len = secsize; - crd->crd_flags = - CRD_F_IV_EXPLICIT | CRD_F_IV_PRESENT | CRD_F_KEY_EXPLICIT; + crd->crd_flags = CRD_F_IV_EXPLICIT | CRD_F_IV_PRESENT; if (bp->bio_cmd == BIO_WRITE) crd->crd_flags |= CRD_F_ENCRYPT; crd->crd_alg = sc->sc_algo; ==== //depot/projects/arm/src/sys/geom/eli/g_eli_crypto.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/geom/eli/g_eli_crypto.c,v 1.2 2006/02/01 12:05:59 pjd Exp $"); +__FBSDID("$FreeBSD: src/sys/geom/eli/g_eli_crypto.c,v 1.3 2006/04/20 06:33:46 pjd Exp $"); #include #ifdef _KERNEL @@ -97,7 +97,7 @@ crd->crd_skip = 0; crd->crd_len = datasize; - crd->crd_flags = CRD_F_IV_EXPLICIT | CRD_F_IV_PRESENT | CRD_F_KEY_EXPLICIT; + crd->crd_flags = CRD_F_IV_EXPLICIT | CRD_F_IV_PRESENT; if (enc) crd->crd_flags |= CRD_F_ENCRYPT; crd->crd_alg = algo; ==== //depot/projects/arm/src/sys/i386/i386/dump_machdep.c#3 (text+ko) ==== @@ -25,12 +25,13 @@ */ #include -__FBSDID("$FreeBSD: src/sys/i386/i386/dump_machdep.c,v 1.11 2005/07/02 19:57:31 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/dump_machdep.c,v 1.12 2006/04/21 04:28:43 peter Exp $"); #include #include #include #include +#include #include #include #include @@ -40,6 +41,11 @@ CTASSERT(sizeof(struct kerneldumpheader) == 512); +int do_minidump = 1; +TUNABLE_INT("debug.minidump", &do_minidump); +SYSCTL_INT(_debug, OID_AUTO, minidump, CTLFLAG_RW, &do_minidump, 0, + "Enable mini crash dumps"); + /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This * is to protect us from metadata and to protect metadata from us. @@ -272,6 +278,10 @@ size_t hdrsz; int error; + if (do_minidump) { + minidumpsys(di); + return; + } bzero(&ehdr, sizeof(ehdr)); ehdr.e_ident[EI_MAG0] = ELFMAG0; ehdr.e_ident[EI_MAG1] = ELFMAG1; ==== //depot/projects/arm/src/sys/i386/i386/nexus.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/i386/i386/nexus.c,v 1.62 2005/05/10 12:02:15 nyan Exp $"); +__FBSDID("$FreeBSD: src/sys/i386/i386/nexus.c,v 1.63 2006/04/20 04:10:27 imp Exp $"); /* * This code implements a `root nexus' for Intel Architecture @@ -352,7 +352,7 @@ rv = rman_reserve_resource(rm, start, end, count, flags, child); if (rv == 0) return 0; - + rman_set_rid(rv, *rid); if (type == SYS_RES_MEMORY) { rman_set_bustag(rv, I386_BUS_SPACE_MEM); } else if (type == SYS_RES_IOPORT) { ==== //depot/projects/arm/src/sys/i386/include/md_var.h#3 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/i386/include/md_var.h,v 1.73 2005/10/14 22:52:01 jkim Exp $ + * $FreeBSD: src/sys/i386/include/md_var.h,v 1.74 2006/04/21 04:28:43 peter Exp $ */ #ifndef _MACHINE_MD_VAR_H_ @@ -65,12 +65,15 @@ #ifdef COMPAT_43 extern int szosigcode; #endif +extern uint32_t *vm_page_dump; +extern int vm_page_dump_size; typedef void alias_for_inthand_t(u_int cs, u_int ef, u_int esp, u_int ss); struct thread; struct reg; struct fpreg; struct dbreg; +struct dumperinfo; void bcopyb(const void *from, void *to, size_t len); void busdma_swi(void); @@ -84,6 +87,8 @@ void doreti_popl_es_fault(void) __asm(__STRING(doreti_popl_es_fault)); void doreti_popl_fs(void) __asm(__STRING(doreti_popl_fs)); void doreti_popl_fs_fault(void) __asm(__STRING(doreti_popl_fs_fault)); +void dump_add_page(vm_paddr_t); +void dump_drop_page(vm_paddr_t); void enable_sse(void); void fillw(int /*u_short*/ pat, void *base, size_t cnt); void i486_bzero(void *buf, size_t len); @@ -99,5 +104,6 @@ vm_paddr_t kvtop(void *addr); void setidt(int idx, alias_for_inthand_t *func, int typ, int dpl, int selec); int user_dbreg_trap(void); +void minidumpsys(struct dumperinfo *); #endif /* !_MACHINE_MD_VAR_H_ */ ==== //depot/projects/arm/src/sys/ia64/ia64/nexus.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/ia64/ia64/nexus.c,v 1.12 2005/10/06 17:39:18 phk Exp $ + * $FreeBSD: src/sys/ia64/ia64/nexus.c,v 1.13 2006/04/20 04:18:30 imp Exp $ */ /* @@ -401,6 +401,7 @@ if (rv == 0) return 0; + rman_set_rid(rv, *rid); if (type == SYS_RES_MEMORY) { rman_set_bustag(rv, IA64_BUS_SPACE_MEM); } else if (type == SYS_RES_IOPORT) { ==== //depot/projects/arm/src/sys/kern/kern_rwlock.c#4 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/kern/kern_rwlock.c,v 1.8 2006/04/18 20:32:42 wkoszek Exp $"); +__FBSDID("$FreeBSD: src/sys/kern/kern_rwlock.c,v 1.9 2006/04/19 21:06:52 jhb Exp $"); #include "opt_ddb.h" @@ -55,7 +55,7 @@ struct lock_class lock_class_rw = { "rw", - LC_SLEEPLOCK | LC_RECURSABLE /* | LC_UPGRADABLE */, + LC_SLEEPLOCK | LC_RECURSABLE | LC_UPGRADABLE, #ifdef DDB db_show_rwlock #endif @@ -87,7 +87,7 @@ rw->rw_lock = RW_UNLOCKED; lock_init(&rw->rw_object, &lock_class_rw, name, NULL, LO_WITNESS | - LO_RECURSABLE /* | LO_UPGRADABLE */); + LO_RECURSABLE | LO_UPGRADABLE); } void @@ -585,6 +585,137 @@ turnstile_unpend(ts, TS_EXCLUSIVE_LOCK); } +/* + * Attempt to do a non-blocking upgrade from a read lock to a write + * lock. This will only succeed if this thread holds a single read + * lock. Returns true if the upgrade succeeded and false otherwise. + */ +int +_rw_try_upgrade(struct rwlock *rw, const char *file, int line) +{ + uintptr_t v, tid; + int success; + + _rw_assert(rw, RA_RLOCKED, file, line); + + /* + * Attempt to switch from one reader to a writer. If there + * are any write waiters, then we will have to lock the + * turnstile first to prevent races with another writer + * calling turnstile_wait() before we have claimed this + * turnstile. So, do the simple case of no waiters first. + */ + tid = (uintptr_t)curthread; + if (!(rw->rw_lock & RW_LOCK_WRITE_WAITERS)) { + success = atomic_cmpset_acq_ptr(&rw->rw_lock, + RW_READERS_LOCK(1), tid); + goto out; + } + + /* + * Ok, we think we have write waiters, so lock the + * turnstile. + */ + turnstile_lock(&rw->rw_object); + + /* + * Try to switch from one reader to a writer again. This time + * we honor the current state of the RW_LOCK_WRITE_WAITERS + * flag. If we obtain the lock with the flag set, then claim + * ownership of the turnstile. In the SMP case it is possible + * for there to not be an associated turnstile even though there + * are waiters if all of the waiters are spinning. + */ + v = rw->rw_lock & RW_LOCK_WRITE_WAITERS; + success = atomic_cmpset_acq_ptr(&rw->rw_lock, RW_READERS_LOCK(1) | v, + tid | v); +#ifdef SMP + if (success && v && turnstile_lookup(&rw->rw_object) != NULL) +#else + if (success && v) +#endif + turnstile_claim(&rw->rw_object); + else + turnstile_release(&rw->rw_object); +out: + LOCK_LOG_TRY("WUPGRADE", &rw->rw_object, 0, success, file, line); + if (success) + WITNESS_UPGRADE(&rw->rw_object, LOP_EXCLUSIVE | LOP_TRYLOCK, + file, line); + return (success); +} + +/* + * Downgrade a write lock into a single read lock. + */ +void +_rw_downgrade(struct rwlock *rw, const char *file, int line) +{ + struct turnstile *ts; + uintptr_t tid, v; + + _rw_assert(rw, RA_WLOCKED, file, line); + + WITNESS_DOWNGRADE(&rw->rw_object, 0, file, line); + + /* + * Convert from a writer to a single reader. First we handle + * the easy case with no waiters. If there are any waiters, we + * lock the turnstile, "disown" the lock, and awaken any read + * waiters. + */ + tid = (uintptr_t)curthread; + if (atomic_cmpset_rel_ptr(&rw->rw_lock, tid, RW_READERS_LOCK(1))) + goto out; + + /* + * Ok, we think we have waiters, so lock the turnstile so we can + * read the waiter flags without any races. + */ + turnstile_lock(&rw->rw_object); + v = rw->rw_lock; + MPASS(v & (RW_LOCK_READ_WAITERS | RW_LOCK_WRITE_WAITERS)); + + /* + * Downgrade from a write lock while preserving + * RW_LOCK_WRITE_WAITERS and give up ownership of the + * turnstile. If there are any read waiters, wake them up. + * + * For SMP, we have to allow for the fact that all of the + * read waiters might be spinning. In that case, act as if + * RW_LOCK_READ_WAITERS is not set. Also, only preserve + * the RW_LOCK_WRITE_WAITERS flag if at least one writer is + * blocked on the turnstile. + */ + ts = turnstile_lookup(&rw->rw_object); +#ifdef SMP + if (ts == NULL) >>> TRUNCATED FOR MAIL (1000 lines) <<<