From owner-svn-src-projects@FreeBSD.ORG Sun Mar 14 00:32:19 2010 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 158BD106564A; Sun, 14 Mar 2010 00:32:19 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 053418FC19; Sun, 14 Mar 2010 00:32:19 +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 o2E0WIJo080339; Sun, 14 Mar 2010 00:32:18 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2E0WIN0080337; Sun, 14 Mar 2010 00:32:18 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003140032.o2E0WIN0080337@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 14 Mar 2010 00:32: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: r205139 - projects/ppc64/sys/powerpc/aim 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, 14 Mar 2010 00:32:19 -0000 Author: nwhitehorn Date: Sun Mar 14 00:32:18 2010 New Revision: 205139 URL: http://svn.freebsd.org/changeset/base/205139 Log: Don't spill existing SLB entries. We can't handle this yet, and it results in randomly demapping bits of the kernel. Which is bad. Reported by: Andreas Tobler Modified: projects/ppc64/sys/powerpc/aim/slb.c Modified: projects/ppc64/sys/powerpc/aim/slb.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/slb.c Sat Mar 13 22:53:17 2010 (r205138) +++ projects/ppc64/sys/powerpc/aim/slb.c Sun Mar 14 00:32:18 2010 (r205139) @@ -91,12 +91,16 @@ allocate_vsid(pmap_t pm, uint64_t esid) return (vsid); } +#ifdef NOTYET /* We don't have a back-up list. Spills are a bad idea. */ /* Lock entries mapping kernel text and stacks */ #define SLB_SPILLABLE(slbe) \ (((slbe & SLBE_ESID_MASK) < VM_MIN_KERNEL_ADDRESS && \ (slbe & SLBE_ESID_MASK) > SEGMENT_LENGTH) || \ (slbe & SLBE_ESID_MASK) > VM_MAX_KERNEL_ADDRESS) +#else +#define SLB_SPILLABLE(slbe) 0 +#endif void slb_spill(pmap_t pm, uint64_t esid, uint64_t vsid) From owner-svn-src-projects@FreeBSD.ORG Sun Mar 14 02:45:45 2010 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 C5298106566B; Sun, 14 Mar 2010 02:45:45 +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 9B7108FC12; Sun, 14 Mar 2010 02:45:45 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2E2jj2L009657; Sun, 14 Mar 2010 02:45:45 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2E2jj4H009656; Sun, 14 Mar 2010 02:45:45 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003140245.o2E2jj4H009656@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 14 Mar 2010 02:45:45 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205142 - projects/altix/lib X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 14 Mar 2010 02:45:45 -0000 Author: marcel Date: Sun Mar 14 02:45:45 2010 New Revision: 205142 URL: http://svn.freebsd.org/changeset/base/205142 Log: Pull-in libstand as well... Added: projects/altix/lib/ - copied from r205141, head/lib/libstand/ Directory Properties: projects/altix/lib/libstand/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Sun Mar 14 02:50:25 2010 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 24933106566C; Sun, 14 Mar 2010 02:50:25 +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 14E738FC13; Sun, 14 Mar 2010 02:50:25 +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 o2E2oOVe010772; Sun, 14 Mar 2010 02:50:24 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2E2oOTs010770; Sun, 14 Mar 2010 02:50:24 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003140250.o2E2oOTs010770@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 14 Mar 2010 02:50:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205143 - projects/altix/sys/boot/common 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, 14 Mar 2010 02:50:25 -0000 Author: marcel Date: Sun Mar 14 02:50:24 2010 New Revision: 205143 URL: http://svn.freebsd.org/changeset/base/205143 Log: Include load_elf64_obj.c on ia64. This adds the fundamental support for ET_REL objects. Modified: projects/altix/sys/boot/common/Makefile.inc Modified: projects/altix/sys/boot/common/Makefile.inc ============================================================================== --- projects/altix/sys/boot/common/Makefile.inc Sun Mar 14 02:45:45 2010 (r205142) +++ projects/altix/sys/boot/common/Makefile.inc Sun Mar 14 02:50:24 2010 (r205143) @@ -7,11 +7,13 @@ SRCS+= module.c panic.c .if ${MACHINE} == "i386" || ${MACHINE_ARCH} == "amd64" SRCS+= load_elf32.c load_elf32_obj.c reloc_elf32.c SRCS+= load_elf64.c load_elf64_obj.c reloc_elf64.c +.elif ${MACHINE} == "ia64" +SRCS+= load_elf64.c load_elf64_obj.c reloc_elf64.c .elif ${MACHINE} == "pc98" SRCS+= load_elf32.c load_elf32_obj.c reloc_elf32.c .elif ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "arm" SRCS+= load_elf32.c reloc_elf32.c -.elif ${MACHINE_ARCH} == "sparc64" || ${MACHINE_ARCH} == "ia64" +.elif ${MACHINE_ARCH} == "sparc64" SRCS+= load_elf64.c reloc_elf64.c .endif From owner-svn-src-projects@FreeBSD.ORG Sun Mar 14 02:54:37 2010 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 0A5B8106564A; Sun, 14 Mar 2010 02:54:37 +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 EEED98FC0A; Sun, 14 Mar 2010 02:54:36 +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 o2E2sa7L011721; Sun, 14 Mar 2010 02:54:36 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2E2sajL011719; Sun, 14 Mar 2010 02:54:36 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003140254.o2E2sajL011719@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 14 Mar 2010 02:54:36 +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: r205144 - projects/altix/sys/conf 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, 14 Mar 2010 02:54:37 -0000 Author: marcel Date: Sun Mar 14 02:54:36 2010 New Revision: 205144 URL: http://svn.freebsd.org/changeset/base/205144 Log: Add link_elf_obj.c for support of ET_REL objects. Modified: projects/altix/sys/conf/files.ia64 Modified: projects/altix/sys/conf/files.ia64 ============================================================================== --- projects/altix/sys/conf/files.ia64 Sun Mar 14 02:50:24 2010 (r205143) +++ projects/altix/sys/conf/files.ia64 Sun Mar 14 02:54:36 2010 (r205144) @@ -118,6 +118,7 @@ ia64/pci/pci_cfgreg.c optional pci isa/syscons_isa.c optional sc isa/vga_isa.c optional vga kern/imgact_elf32.c optional compat_ia32 +kern/link_elf_obj.c standard libkern/bcmp.c standard libkern/ffsl.c standard libkern/fls.c standard From owner-svn-src-projects@FreeBSD.ORG Sun Mar 14 21:14:25 2010 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 C1710106567C; Sun, 14 Mar 2010 21:14:25 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AEBD08FC14; Sun, 14 Mar 2010 21:14:25 +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 o2ELEPO3056282; Sun, 14 Mar 2010 21:14:25 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2ELEP1l056276; Sun, 14 Mar 2010 21:14:25 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003142114.o2ELEP1l056276@svn.freebsd.org> From: Nathan Whitehorn Date: Sun, 14 Mar 2010 21:14:25 +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: r205159 - in projects/ppc64/sys/powerpc: aim include powerpc 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, 14 Mar 2010 21:14:25 -0000 Author: nwhitehorn Date: Sun Mar 14 21:14:25 2010 New Revision: 205159 URL: http://svn.freebsd.org/changeset/base/205159 Log: Use a large-page-mapped direct mapped region on powerpc64 if possible. This is a fairly sweeping change and has doubtless broken many things, but this should be the last major change to the MMU code. Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/aim/slb.c projects/ppc64/sys/powerpc/aim/trap.c projects/ppc64/sys/powerpc/include/pmap.h projects/ppc64/sys/powerpc/powerpc/bus_machdep.c Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Sun Mar 14 19:04:42 2010 (r205158) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Sun Mar 14 21:14:25 2010 (r205159) @@ -247,6 +247,7 @@ TLBIE(pmap_t pmap, vm_offset_t va) { #define PVO_BOOTSTRAP 0x080UL /* PVO entry allocated during bootstrap */ #define PVO_FAKE 0x100UL /* fictitious phys page */ +#define PVO_LARGE 0x200UL /* large page */ #define PVO_VADDR(pvo) ((pvo)->pvo_vaddr & ~ADDR_POFF) #define PVO_ISFAKE(pvo) ((pvo)->pvo_vaddr & PVO_FAKE) #define PVO_PTEGIDX_GET(pvo) ((pvo)->pvo_vaddr & PVO_PTEGIDX_MASK) @@ -348,6 +349,10 @@ vm_offset_t moea64_scratchpage_va[2]; struct lpte *moea64_scratchpage_pte[2]; struct mtx moea64_scratchpage_mtx; +uint64_t moea64_large_page_mask = 0; +int moea64_large_page_size = 0; +int moea64_large_page_shift = 0; + /* * Allocate physical memory for use in moea64_bootstrap. */ @@ -370,9 +375,9 @@ static struct lpte *moea64_pvo_to_pte(co /* * Utility routines. */ -static void moea64_bridge_bootstrap(mmu_t mmup, +static void moea64_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend); -static void moea64_bridge_cpu_bootstrap(mmu_t, int ap); +static void moea64_cpu_bootstrap(mmu_t, int ap); static void moea64_enter_locked(pmap_t, vm_offset_t, vm_page_t, vm_prot_t, boolean_t); static boolean_t moea64_query_bit(vm_page_t, u_int64_t); @@ -425,7 +430,7 @@ void moea64_kenter(mmu_t, vm_offset_t, v boolean_t moea64_dev_direct_mapped(mmu_t, vm_offset_t, vm_size_t); static void moea64_sync_icache(mmu_t, pmap_t, vm_offset_t, vm_size_t); -static mmu_method_t moea64_bridge_methods[] = { +static mmu_method_t moea64_methods[] = { MMUMETHOD(mmu_change_wiring, moea64_change_wiring), MMUMETHOD(mmu_clear_modify, moea64_clear_modify), MMUMETHOD(mmu_clear_reference, moea64_clear_reference), @@ -458,8 +463,8 @@ static mmu_method_t moea64_bridge_method MMUMETHOD(mmu_deactivate, moea64_deactivate), /* Internal interfaces */ - MMUMETHOD(mmu_bootstrap, moea64_bridge_bootstrap), - MMUMETHOD(mmu_cpu_bootstrap, moea64_bridge_cpu_bootstrap), + MMUMETHOD(mmu_bootstrap, moea64_bootstrap), + MMUMETHOD(mmu_cpu_bootstrap, moea64_cpu_bootstrap), MMUMETHOD(mmu_mapdev, moea64_mapdev), MMUMETHOD(mmu_unmapdev, moea64_unmapdev), MMUMETHOD(mmu_kextract, moea64_kextract), @@ -469,20 +474,22 @@ static mmu_method_t moea64_bridge_method { 0, 0 } }; -static mmu_def_t oea64_bridge_mmu = { +static mmu_def_t oea64_mmu = { MMU_TYPE_G5, - moea64_bridge_methods, + moea64_methods, 0 }; -MMU_DEF(oea64_bridge_mmu); +MMU_DEF(oea64_mmu); static __inline u_int -va_to_pteg(uint64_t vsid, vm_offset_t addr) +va_to_pteg(uint64_t vsid, vm_offset_t addr, int large) { uint64_t hash; + int shift; + shift = large ? moea64_large_page_shift : ADDR_PIDX_SHFT; hash = (vsid & VSID_HASH_MASK) ^ (((uint64_t)addr & ADDR_PIDX) >> - ADDR_PIDX_SHFT); + shift); return (hash & moea64_pteg_mask); } @@ -534,8 +541,9 @@ moea64_attr_save(vm_page_t m, u_int64_t static __inline void moea64_pte_create(struct lpte *pt, uint64_t vsid, vm_offset_t va, - uint64_t pte_lo) + uint64_t pte_lo, int flags) { + ASSERT_TABLE_LOCK(); /* @@ -547,6 +555,9 @@ moea64_pte_create(struct lpte *pt, uint6 pt->pte_hi = (vsid << LPTE_VSID_SHIFT) | (((uint64_t)(va & ADDR_PIDX) >> ADDR_API_SHFT64) & LPTE_API); + if (flags & PVO_LARGE) + pt->pte_hi |= LPTE_BIG; + pt->pte_lo = pte_lo; } @@ -693,7 +704,7 @@ om_cmp(const void *a, const void *b) } static void -moea64_bridge_cpu_bootstrap(mmu_t mmup, int ap) +moea64_cpu_bootstrap(mmu_t mmup, int ap) { int i = 0; @@ -781,7 +792,86 @@ moea64_add_ofw_mappings(mmu_t mmup, phan } static void -moea64_bridge_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend) +moea64_probe_large_page(void) +{ + uint16_t pvr = mfpvr() >> 16; + + switch (pvr) { + case IBM970: + case IBM970FX: + case IBM970MP: + case IBMCELLBE: + moea64_large_page_size = 0x1000000; /* 16 MB */ + moea64_large_page_shift = 24; + break; + default: + moea64_large_page_size = 0; + } + + moea64_large_page_mask = moea64_large_page_size - 1; +} + +static void +moea64_setup_direct_map(mmu_t mmup, vm_offset_t kernelstart, + vm_offset_t kernelend) +{ + register_t msr; + vm_paddr_t pa; + vm_offset_t size, off; + int i; + + if (moea64_large_page_size == 0) + hw_direct_map = 0; + + DISABLE_TRANS(msr); + if (hw_direct_map) { + PMAP_LOCK(kernel_pmap); + for (i = 0; i < pregions_sz; i++) { + for (pa = pregions[i].mr_start & ~moea64_large_page_mask; + pa < (pregions[i].mr_start + pregions[i].mr_size); + pa += moea64_large_page_size) { + if (va_to_slb_entry(kernel_pmap, pa) == NULL) + allocate_vsid(kernel_pmap, pa, 1 /* large */); + + moea64_pvo_enter(kernel_pmap, moea64_upvo_zone, + &moea64_pvo_kunmanaged, pa, pa, + LPTE_M, PVO_WIRED | PVO_LARGE | + VM_PROT_EXECUTE); + } + } + PMAP_UNLOCK(kernel_pmap); + } else { + size = moea64_pteg_count * sizeof(struct lpteg); + off = (vm_offset_t)(moea64_pteg_table); + for (pa = off; pa < off + size; pa += PAGE_SIZE) + moea64_kenter(mmup, pa, pa); + size = sizeof(struct pvo_head) * moea64_pteg_count; + off = (vm_offset_t)(moea64_pvo_table); + for (pa = off; pa < off + size; pa += PAGE_SIZE) + moea64_kenter(mmup, pa, pa); + size = BPVO_POOL_SIZE*sizeof(struct pvo_entry); + off = (vm_offset_t)(moea64_bpvo_pool); + for (pa = off; pa < off + size; pa += PAGE_SIZE) + moea64_kenter(mmup, pa, pa); + + /* + * Map certain important things, like ourselves. + * + * NOTE: We do not map the exception vector space. That code is + * used only in real mode, and leaving it unmapped allows us to + * catch NULL pointer deferences, instead of making NULL a valid + * address. + */ + + for (pa = kernelstart & ~PAGE_MASK; pa < kernelend; + pa += PAGE_SIZE) + moea64_kenter(mmup, pa, pa); + } + ENABLE_TRANS(msr); +} + +static void +moea64_bootstrap(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend) { ihandle_t mmui; phandle_t chosen; @@ -789,19 +879,27 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o size_t sz; int i, j; vm_size_t size, physsz, hwphyssz; - vm_offset_t pa, va, off; + vm_offset_t pa, va; register_t msr; void *dpcpu; +#ifndef __powerpc64__ /* We don't have a direct map since there is no BAT */ hw_direct_map = 0; -#ifndef __powerpc64__ /* Make sure battable is zero, since we have no BAT */ for (i = 0; i < 16; i++) { battable[i].batu = 0; battable[i].batl = 0; } +#else + moea64_probe_large_page(); + + /* Use a direct map if we have large page support */ + if (moea64_large_page_size > 0) + hw_direct_map = 1; + else + hw_direct_map = 0; #endif /* Get physical memory regions from firmware */ @@ -950,10 +1048,6 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o kernel_pmap->pm_slb[i].slbv = 0; kernel_pmap->pm_slb[i].slbe = 0; } - /* prefault some bits */ - (void)va_to_vsid(kernel_pmap, VM_MAX_KERNEL_ADDRESS); - (void)va_to_vsid(kernel_pmap, VM_MIN_KERNEL_ADDRESS); - (void)va_to_vsid(kernel_pmap, kernelstart); #else for (i = 0; i < 16; i++) kernel_pmap->pm_sr[i] = EMPTY_SEGMENT + i; @@ -968,39 +1062,14 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o * Now map in all the other buffers we allocated earlier */ - DISABLE_TRANS(msr); - size = moea64_pteg_count * sizeof(struct lpteg); - off = (vm_offset_t)(moea64_pteg_table); - for (pa = off; pa < off + size; pa += PAGE_SIZE) - moea64_kenter(mmup, pa, pa); - size = sizeof(struct pvo_head) * moea64_pteg_count; - off = (vm_offset_t)(moea64_pvo_table); - for (pa = off; pa < off + size; pa += PAGE_SIZE) - moea64_kenter(mmup, pa, pa); - size = BPVO_POOL_SIZE*sizeof(struct pvo_entry); - off = (vm_offset_t)(moea64_bpvo_pool); - for (pa = off; pa < off + size; pa += PAGE_SIZE) - moea64_kenter(mmup, pa, pa); + moea64_setup_direct_map(mmup, kernelstart, kernelend); /* - * Map certain important things, like ourselves. - * - * NOTE: We do not map the exception vector space. That code is - * used only in real mode, and leaving it unmapped allows us to - * catch NULL pointer deferences, instead of making NULL a valid - * address. + * Set up the Open Firmware pmap and add its mappings if not in real + * mode. */ - for (pa = kernelstart & ~PAGE_MASK; pa < kernelend; pa += PAGE_SIZE) - moea64_kenter(mmup, pa, pa); - ENABLE_TRANS(msr); - - if (!ofw_real_mode) { - /* - * Set up the Open Firmware pmap and add its mappings. - */ - moea64_pinit(mmup, &ofw_pmap); #ifndef __powerpc64__ @@ -1036,7 +1105,7 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o /* * Initialize MMU and remap early physical mappings */ - moea64_bridge_cpu_bootstrap(mmup,0); + moea64_cpu_bootstrap(mmup,0); mtmsr(mfmsr() | PSL_DR | PSL_IR); isync(); pmap_bootstrapped++; bs_remap_earlyboot(); @@ -1070,31 +1139,35 @@ moea64_bridge_bootstrap(mmu_t mmup, vm_o * from even knowing that this hack exists. */ - mtx_init(&moea64_scratchpage_mtx, "pvo zero page", NULL, MTX_DEF); - for (i = 0; i < 2; i++) { - struct lpte pt; - uint64_t vsid; - int pteidx, ptegidx; - - moea64_scratchpage_va[i] = (virtual_end+1) - PAGE_SIZE; - virtual_end -= PAGE_SIZE; - - LOCK_TABLE(); - - vsid = va_to_vsid(kernel_pmap, moea64_scratchpage_va[i]); - moea64_pte_create(&pt, vsid, moea64_scratchpage_va[i], - LPTE_NOEXEC); - pt.pte_hi |= LPTE_LOCKED; - - ptegidx = va_to_pteg(vsid, moea64_scratchpage_va[i]); - pteidx = moea64_pte_insert(ptegidx, &pt); - if (pt.pte_hi & LPTE_HID) - ptegidx ^= moea64_pteg_mask; + if (!hw_direct_map) { + mtx_init(&moea64_scratchpage_mtx, "pvo zero page", NULL, + MTX_DEF); + for (i = 0; i < 2; i++) { + struct lpte pt; + uint64_t vsid; + int pteidx, ptegidx; + + moea64_scratchpage_va[i] = (virtual_end+1) - PAGE_SIZE; + virtual_end -= PAGE_SIZE; + + LOCK_TABLE(); + + vsid = va_to_vsid(kernel_pmap, + moea64_scratchpage_va[i]); + moea64_pte_create(&pt, vsid, moea64_scratchpage_va[i], + LPTE_NOEXEC, 0); + pt.pte_hi |= LPTE_LOCKED; + + ptegidx = va_to_pteg(vsid, moea64_scratchpage_va[i], 0); + pteidx = moea64_pte_insert(ptegidx, &pt); + if (pt.pte_hi & LPTE_HID) + ptegidx ^= moea64_pteg_mask; - moea64_scratchpage_pte[i] = - &moea64_pteg_table[ptegidx].pt[pteidx]; + moea64_scratchpage_pte[i] = + &moea64_pteg_table[ptegidx].pt[pteidx]; - UNLOCK_TABLE(); + UNLOCK_TABLE(); + } } /* @@ -1202,6 +1275,7 @@ moea64_change_wiring(mmu_t mmu, pmap_t p static __inline void moea64_set_scratchpage_pa(int which, vm_offset_t pa) { + KASSERT(!hw_direct_map, ("Using OEA64 scratchpage with a direct map!")); mtx_assert(&moea64_scratchpage_mtx, MA_OWNED); moea64_scratchpage_pte[which]->pte_hi &= ~LPTE_VALID; @@ -1226,15 +1300,19 @@ moea64_copy_page(mmu_t mmu, vm_page_t ms dst = VM_PAGE_TO_PHYS(mdst); src = VM_PAGE_TO_PHYS(msrc); - mtx_lock(&moea64_scratchpage_mtx); + if (hw_direct_map) { + kcopy((void *)src, (void *)dst, PAGE_SIZE); + } else { + mtx_lock(&moea64_scratchpage_mtx); - moea64_set_scratchpage_pa(0,src); - moea64_set_scratchpage_pa(1,dst); + moea64_set_scratchpage_pa(0,src); + moea64_set_scratchpage_pa(1,dst); - kcopy((void *)moea64_scratchpage_va[0], - (void *)moea64_scratchpage_va[1], PAGE_SIZE); + kcopy((void *)moea64_scratchpage_va[0], + (void *)moea64_scratchpage_va[1], PAGE_SIZE); - mtx_unlock(&moea64_scratchpage_mtx); + mtx_unlock(&moea64_scratchpage_mtx); + } } void @@ -1247,11 +1325,14 @@ moea64_zero_page_area(mmu_t mmu, vm_page if (size + off > PAGE_SIZE) panic("moea64_zero_page: size + off > PAGE_SIZE"); - mtx_lock(&moea64_scratchpage_mtx); - - moea64_set_scratchpage_pa(0,pa); - bzero((caddr_t)moea64_scratchpage_va[0] + off, size); - mtx_unlock(&moea64_scratchpage_mtx); + if (hw_direct_map) { + bzero((caddr_t)pa + off, size); + } else { + mtx_lock(&moea64_scratchpage_mtx); + moea64_set_scratchpage_pa(0,pa); + bzero((caddr_t)moea64_scratchpage_va[0] + off, size); + mtx_unlock(&moea64_scratchpage_mtx); + } } /* @@ -1261,18 +1342,25 @@ void moea64_zero_page(mmu_t mmu, vm_page_t m) { vm_offset_t pa = VM_PAGE_TO_PHYS(m); - vm_offset_t off; + vm_offset_t va, off; if (!moea64_initialized) panic("moea64_zero_page: can't zero pa %#zx", pa); - mtx_lock(&moea64_scratchpage_mtx); + if (!hw_direct_map) { + mtx_lock(&moea64_scratchpage_mtx); + + moea64_set_scratchpage_pa(0,pa); + va = moea64_scratchpage_va[0]; + } else { + va = pa; + } - moea64_set_scratchpage_pa(0,pa); for (off = 0; off < PAGE_SIZE; off += cacheline_size) - __asm __volatile("dcbz 0,%0" :: - "r"(moea64_scratchpage_va[0] + off)); - mtx_unlock(&moea64_scratchpage_mtx); + __asm __volatile("dcbz 0,%0" :: "r"(va + off)); + + if (!hw_direct_map) + mtx_unlock(&moea64_scratchpage_mtx); } void @@ -1392,6 +1480,8 @@ moea64_syncicache(pmap_t pmap, vm_offset __syncicache((void *)pa, sz); } else if (pmap == kernel_pmap) { __syncicache((void *)va, sz); + } else if (hw_direct_map) { + __syncicache((void *)pa, sz); } else { /* Use the scratch page to set up a temp mapping */ @@ -1453,11 +1543,12 @@ moea64_extract(mmu_t mmu, pmap_t pm, vm_ vm_paddr_t pa; PMAP_LOCK(pm); - pvo = moea64_pvo_find_va(pm, va & ~ADDR_POFF, NULL); + pvo = moea64_pvo_find_va(pm, va, NULL); if (pvo == NULL) pa = 0; else - pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) | (va & ADDR_POFF); + pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) | + (va - PVO_VADDR(pvo)); PMAP_UNLOCK(pm); return (pa); } @@ -1476,7 +1567,7 @@ moea64_extract_and_hold(mmu_t mmu, pmap_ m = NULL; vm_page_lock_queues(); PMAP_LOCK(pmap); - pvo = moea64_pvo_find_va(pmap, va & ~ADDR_POFF, NULL); + pvo = moea64_pvo_find_va(pmap, va, NULL); if (pvo != NULL && (pvo->pvo_pte.lpte.pte_hi & LPTE_VALID) && ((pvo->pvo_pte.lpte.pte_lo & LPTE_PP) == LPTE_RW || (prot & VM_PROT_WRITE) == 0)) { @@ -1706,9 +1797,9 @@ moea64_kextract(mmu_t mmu, vm_offset_t v vm_paddr_t pa; PMAP_LOCK(kernel_pmap); - pvo = moea64_pvo_find_va(kernel_pmap, va & ~ADDR_POFF, NULL); - KASSERT(pvo != NULL, ("moea64_kextract: no addr found")); - pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) | (va & ADDR_POFF); + pvo = moea64_pvo_find_va(kernel_pmap, va, NULL); + KASSERT(pvo != NULL, ("moea64_kextract: no addr found for %#lx", va)); + pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) + (va - PVO_VADDR(pvo)); PMAP_UNLOCK(kernel_pmap); return (pa); } @@ -2190,7 +2281,7 @@ moea64_pvo_enter(pmap_t pm, uma_zone_t z */ va &= ~ADDR_POFF; vsid = va_to_vsid(pm, va); - ptegidx = va_to_pteg(vsid, va); + ptegidx = va_to_pteg(vsid, va, flags & PVO_LARGE); /* * Remove any existing mapping for this page. Reuse the pvo entry if @@ -2256,9 +2347,11 @@ moea64_pvo_enter(pmap_t pm, uma_zone_t z pvo->pvo_vaddr |= PVO_BOOTSTRAP; if (flags & PVO_FAKE) pvo->pvo_vaddr |= PVO_FAKE; + if (flags & PVO_LARGE) + pvo->pvo_vaddr |= PVO_LARGE; moea64_pte_create(&pvo->pvo_pte.lpte, vsid, va, - (uint64_t)(pa) | pte_lo); + (uint64_t)(pa) | pte_lo, flags); /* * Remember if the list was empty and therefore will be the first @@ -2371,10 +2464,23 @@ moea64_pvo_find_va(pmap_t pm, vm_offset_ struct pvo_entry *pvo; int ptegidx; uint64_t vsid; + #ifdef __powerpc64__ + struct slb *slb; + slb = va_to_slb_entry(pm, va); + KASSERT(slb != NULL, ("Cannot find SLB values for VA %#lx", va)); + + vsid = (slb->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT; + if (slb->slbv & SLBV_L) + va &= ~moea64_large_page_mask; + else + va &= ~ADDR_POFF; + ptegidx = va_to_pteg(vsid, va, slb->slbv & SLBV_L); + #else va &= ~ADDR_POFF; vsid = va_to_vsid(pm, va); - ptegidx = va_to_pteg(vsid, va); + ptegidx = va_to_pteg(vsid, va, 0); + #endif LOCK_TABLE(); LIST_FOREACH(pvo, &moea64_pvo_table[ptegidx], pvo_olink) { @@ -2402,7 +2508,8 @@ moea64_pvo_to_pte(const struct pvo_entry uint64_t vsid; vsid = va_to_vsid(pvo->pvo_pmap, PVO_VADDR(pvo)); - ptegidx = va_to_pteg(vsid, PVO_VADDR(pvo)); + ptegidx = va_to_pteg(vsid, PVO_VADDR(pvo), + pvo->pvo_vaddr & PVO_LARGE); pteidx = moea64_pvo_pte_index(pvo, ptegidx); } Modified: projects/ppc64/sys/powerpc/aim/slb.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/slb.c Sun Mar 14 19:04:42 2010 (r205158) +++ projects/ppc64/sys/powerpc/aim/slb.c Sun Mar 14 21:14:25 2010 (r205159) @@ -34,20 +34,17 @@ #include -uint64_t -va_to_vsid_noalloc(pmap_t pm, vm_offset_t va) +struct slb * +va_to_slb_entry(pmap_t pm, vm_offset_t va) { - uint64_t slbe, slbv, i; + uint64_t slbe, i; slbe = (uintptr_t)va >> ADDR_SR_SHFT; slbe = (slbe << SLBE_ESID_SHIFT) | SLBE_VALID; - slbv = 0; for (i = 0; i < sizeof(pm->pm_slb)/sizeof(pm->pm_slb[0]); i++) { - if (pm->pm_slb[i].slbe == (slbe | i)) { - slbv = pm->pm_slb[i].slbv; - return ((slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT); - } + if (pm->pm_slb[i].slbe == (slbe | i)) + return &pm->pm_slb[i]; } /* XXX: Have a long list for processes mapping more than 16 GB */ @@ -58,35 +55,44 @@ va_to_vsid_noalloc(pmap_t pm, vm_offset_ uint64_t va_to_vsid(pmap_t pm, vm_offset_t va) { - uint64_t vsid; + struct slb *entry; - vsid = va_to_vsid_noalloc(pm, va); + entry = va_to_slb_entry(pm, va); /* * If there is no vsid for this VA, we need to add a new entry * to the PMAP's segment table. + * + * XXX We assume (for now) that we are not mapping large pages. */ - if (vsid == 0) - vsid = allocate_vsid(pm, (uintptr_t)va >> ADDR_SR_SHFT); + if (entry == NULL) + return (allocate_vsid(pm, (uintptr_t)va >> ADDR_SR_SHFT, 0)); - return (vsid); + return ((entry->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT); } uintptr_t moea64_get_unique_vsid(void); uint64_t -allocate_vsid(pmap_t pm, uint64_t esid) +allocate_vsid(pmap_t pm, uint64_t esid, int large) { uint64_t vsid; + struct slb slb_entry; vsid = moea64_get_unique_vsid(); + slb_entry.slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID; + slb_entry.slbv = vsid << SLBV_VSID_SHIFT; + + if (large) + slb_entry.slbv |= SLBV_L; + /* * Someone probably wants this soon, and it may be a wired * SLB mapping, so pre-spill this entry. */ - slb_spill(pm, esid, vsid); + slb_insert(pm, &slb_entry, 1); return (vsid); } @@ -103,13 +109,14 @@ allocate_vsid(pmap_t pm, uint64_t esid) #endif void -slb_spill(pmap_t pm, uint64_t esid, uint64_t vsid) +slb_insert(pmap_t pm, struct slb *slb_entry, int prefer_empty) { uint64_t slbe, slbv; - int i, j; + int i, j, to_spill; - slbv = vsid << SLBV_VSID_SHIFT; - slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID; + to_spill = -1; + slbv = slb_entry->slbv; + slbe = slb_entry->slbe; /* Hunt for a likely candidate */ @@ -117,21 +124,31 @@ slb_spill(pmap_t pm, uint64_t esid, uint if (pm == kernel_pmap && i == USER_SR) continue; - if (!(pm->pm_slb[i].slbe & SLBE_VALID) || - SLB_SPILLABLE(pm->pm_slb[i].slbe)) { - pm->pm_slb[i].slbv = slbv; - pm->pm_slb[i].slbe = slbe | i; - - if (pm == kernel_pmap && pmap_bootstrapped) { - /* slbie not required */ - __asm __volatile ("slbmte %0, %1" :: - "r"(kernel_pmap->pm_slb[i].slbv), - "r"(kernel_pmap->pm_slb[i].slbe)); - } - return; + if (to_spill == 0 && (pm->pm_slb[i].slbe & SLBE_VALID) && + (pm != kernel_pmap || SLB_SPILLABLE(pm->pm_slb[i].slbe))) { + to_spill = i; + if (!prefer_empty) + break; + } + + if (!(pm->pm_slb[i].slbe & SLBE_VALID)) { + to_spill = i; + break; } } - panic("SLB spill on ESID %#lx, but no available candidates!\n", esid); + if (to_spill < 0) + panic("SLB spill on ESID %#lx, but no available candidates!\n", + (slbe & SLBE_ESID_MASK) >> SLBE_ESID_SHIFT); + + pm->pm_slb[to_spill].slbv = slbv; + pm->pm_slb[to_spill].slbe = slbe | to_spill; + + if (pm == kernel_pmap && pmap_bootstrapped) { + /* slbie not required */ + __asm __volatile ("slbmte %0, %1" :: + "r"(kernel_pmap->pm_slb[i].slbv), + "r"(kernel_pmap->pm_slb[i].slbe)); + } } Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Sun Mar 14 19:04:42 2010 (r205158) +++ projects/ppc64/sys/powerpc/aim/trap.c Sun Mar 14 21:14:25 2010 (r205159) @@ -525,15 +525,14 @@ slb_esid_lookup(pmap_t pm, uint64_t vsid static void handle_slb_spill(pmap_t pm, vm_offset_t addr) { - uint64_t vsid, esid; + struct slb *slb_entry; PMAP_LOCK(pm); - esid = addr >> ADDR_SR_SHFT; - vsid = va_to_vsid_noalloc(pm, addr); - if (vsid == 0) + slb_entry = va_to_slb_entry(pm, addr); + if (slb_entry == NULL) (void)va_to_vsid(pm, addr); else - slb_spill(pm, esid, vsid); + slb_insert(pm, slb_entry, 0 /* Don't prefer empty */); PMAP_UNLOCK(pm); } #endif Modified: projects/ppc64/sys/powerpc/include/pmap.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pmap.h Sun Mar 14 19:04:42 2010 (r205158) +++ projects/ppc64/sys/powerpc/include/pmap.h Sun Mar 14 21:14:25 2010 (r205159) @@ -130,10 +130,10 @@ struct md_page { * NB: The PMAP MUST be locked already. */ uint64_t va_to_vsid(pmap_t pm, vm_offset_t va); -uint64_t va_to_vsid_noalloc(pmap_t pm, vm_offset_t va); +struct slb *va_to_slb_entry(pmap_t pm, vm_offset_t va); -uint64_t allocate_vsid(pmap_t pm, uint64_t esid); -void slb_spill(pmap_t pm, uint64_t esid, uint64_t vsid); +uint64_t allocate_vsid(pmap_t pm, uint64_t esid, int large); +void slb_insert(pmap_t pm, struct slb *, int prefer_empty); #else Modified: projects/ppc64/sys/powerpc/powerpc/bus_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/bus_machdep.c Sun Mar 14 19:04:42 2010 (r205158) +++ projects/ppc64/sys/powerpc/powerpc/bus_machdep.c Sun Mar 14 21:14:25 2010 (r205159) @@ -99,11 +99,11 @@ bs_remap_earlyboot(void) int i; vm_offset_t pa, spa; - if (hw_direct_map) - return; - for (i = 0; i < earlyboot_map_idx; i++) { spa = earlyboot_mappings[i].addr; + if (pmap_dev_direct_mapped(spa, earlyboot_mappings[i].size) + == 0) + continue; pa = trunc_page(spa); while (pa < spa + earlyboot_mappings[i].size) { From owner-svn-src-projects@FreeBSD.ORG Sun Mar 14 23:52:30 2010 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 C2087106566B; Sun, 14 Mar 2010 23:52:30 +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 B0F258FC08; Sun, 14 Mar 2010 23:52:30 +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 o2ENqUpR091160; Sun, 14 Mar 2010 23:52:30 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2ENqUpb091154; Sun, 14 Mar 2010 23:52:30 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003142352.o2ENqUpb091154@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 14 Mar 2010 23:52: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: r205162 - in projects/altix/sys/boot/ia64: common efi ski 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, 14 Mar 2010 23:52:30 -0000 Author: marcel Date: Sun Mar 14 23:52:30 2010 New Revision: 205162 URL: http://svn.freebsd.org/changeset/base/205162 Log: Add ia64_elf_obj to file_formats[] and unify the SKI and EFI support by moving the definition from the separate conf.c to the common exec.c. Modified: projects/altix/sys/boot/ia64/common/exec.c projects/altix/sys/boot/ia64/common/libia64.h projects/altix/sys/boot/ia64/efi/conf.c projects/altix/sys/boot/ia64/ski/conf.c projects/altix/sys/boot/ia64/ski/libski.h Modified: projects/altix/sys/boot/ia64/common/exec.c ============================================================================== --- projects/altix/sys/boot/ia64/common/exec.c Sun Mar 14 23:23:57 2010 (r205161) +++ projects/altix/sys/boot/ia64/common/exec.c Sun Mar 14 23:52:30 2010 (r205162) @@ -36,19 +36,30 @@ __FBSDID("$FreeBSD$"); #include #include -#include #include #include #include -#include "bootstrap.h" +#include "libia64.h" -#define _KERNEL +static int elf64_exec(struct preloaded_file *amp); +static int elf64_obj_exec(struct preloaded_file *amp); -static int elf64_exec(struct preloaded_file *amp); - -struct file_format ia64_elf = { elf64_loadfile, elf64_exec }; +static struct file_format ia64_elf = { + elf64_loadfile, + elf64_exec +}; +static struct file_format ia64_elf_obj = { + elf64_obj_loadfile, + elf64_obj_exec +}; + +struct file_format *file_formats[] = { + &ia64_elf, + &ia64_elf_obj, + NULL +}; /* * Entered with psr.ic and psr.i both zero. @@ -122,3 +133,12 @@ elf64_exec(struct preloaded_file *fp) /* NOTREACHED */ return (0); } + +static int +elf64_obj_exec(struct preloaded_file *fp) +{ + + printf("%s called for preloaded file %p (=%s):\n", __func__, fp, + fp->f_name); + return (ENOSYS); +} Modified: projects/altix/sys/boot/ia64/common/libia64.h ============================================================================== --- projects/altix/sys/boot/ia64/common/libia64.h Sun Mar 14 23:23:57 2010 (r205161) +++ projects/altix/sys/boot/ia64/common/libia64.h Sun Mar 14 23:52:30 2010 (r205162) @@ -32,27 +32,29 @@ #include #include +int bi_load(struct preloaded_file *, uint64_t *); + /* * Portability functions provided by the loader * implementation specific to the platform. */ -extern uint64_t ldr_alloc(vm_offset_t); -extern int ldr_bootinfo(struct bootinfo *, uint64_t *); -extern int ldr_enter(const char *); +uint64_t ldr_alloc(vm_offset_t); +int ldr_bootinfo(struct bootinfo *, uint64_t *); +int ldr_enter(const char *); /* * Functions and variables provided by the ia64 common code * and shared by all loader implementations. */ -extern int ia64_autoload(void); +int ia64_autoload(void); -extern ssize_t ia64_copyin(const void *, vm_offset_t, size_t); -extern ssize_t ia64_copyout(vm_offset_t, void *, size_t); -extern ssize_t ia64_readin(int, vm_offset_t, size_t); - -extern char *ia64_fmtdev(struct devdesc *); -extern int ia64_getdev(void **, const char *, const char **); -extern int ia64_setcurrdev(struct env_var *, int, const void *); +ssize_t ia64_copyin(const void *, vm_offset_t, size_t); +ssize_t ia64_copyout(vm_offset_t, void *, size_t); +ssize_t ia64_readin(int, vm_offset_t, size_t); + +char *ia64_fmtdev(struct devdesc *); +int ia64_getdev(void **, const char *, const char **); +int ia64_setcurrdev(struct env_var *, int, const void *); #endif /* !_LIBIA64_H_ */ Modified: projects/altix/sys/boot/ia64/efi/conf.c ============================================================================== --- projects/altix/sys/boot/ia64/efi/conf.c Sun Mar 14 23:23:57 2010 (r205161) +++ projects/altix/sys/boot/ia64/efi/conf.c Sun Mar 14 23:52:30 2010 (r205162) @@ -69,17 +69,6 @@ struct netif_driver *netif_drivers[] = { }; /* - * Sort formats so that those that can detect based on arguments - * rather than reading the file go first. - */ -extern struct file_format ia64_elf; - -struct file_format *file_formats[] = { - &ia64_elf, - NULL -}; - -/* * Consoles * * We don't prototype these in efiboot.h because they require Modified: projects/altix/sys/boot/ia64/ski/conf.c ============================================================================== --- projects/altix/sys/boot/ia64/ski/conf.c Sun Mar 14 23:23:57 2010 (r205161) +++ projects/altix/sys/boot/ia64/ski/conf.c Sun Mar 14 23:52:30 2010 (r205162) @@ -60,18 +60,6 @@ struct fs_ops *file_system[] = { NULL }; -/* Exported for ia64 only */ -/* - * Sort formats so that those that can detect based on arguments - * rather than reading the file go first. - */ -extern struct file_format ia64_elf; - -struct file_format *file_formats[] = { - &ia64_elf, - NULL -}; - /* * Consoles * Modified: projects/altix/sys/boot/ia64/ski/libski.h ============================================================================== --- projects/altix/sys/boot/ia64/ski/libski.h Sun Mar 14 23:23:57 2010 (r205161) +++ projects/altix/sys/boot/ia64/ski/libski.h Sun Mar 14 23:52:30 2010 (r205162) @@ -46,7 +46,6 @@ extern int ski_boot(void); struct bootinfo; struct preloaded_file; -extern int bi_load(struct bootinfo *, struct preloaded_file *); #define SSC_CONSOLE_INIT 20 #define SSC_GETCHAR 21 From owner-svn-src-projects@FreeBSD.ORG Mon Mar 15 00:29:15 2010 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 D3C85106566C; Mon, 15 Mar 2010 00:29:15 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A926B8FC12; Mon, 15 Mar 2010 00:29: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 o2F0TF1Z099289; Mon, 15 Mar 2010 00:29:15 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2F0TFic099287; Mon, 15 Mar 2010 00:29:15 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003150029.o2F0TFic099287@svn.freebsd.org> From: Nathan Whitehorn Date: Mon, 15 Mar 2010 00:29: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: r205164 - projects/ppc64/sys/powerpc/aim 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, 15 Mar 2010 00:29:15 -0000 Author: nwhitehorn Date: Mon Mar 15 00:29:15 2010 New Revision: 205164 URL: http://svn.freebsd.org/changeset/base/205164 Log: Set memory access as guarded on large page direct maps that edge into physical memory holes, and optimize moea64_kextract(), thereby avoiding a LOR at boot. Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Mon Mar 15 00:27:40 2010 (r205163) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Mon Mar 15 00:29:15 2010 (r205164) @@ -818,6 +818,7 @@ moea64_setup_direct_map(mmu_t mmup, vm_o register_t msr; vm_paddr_t pa; vm_offset_t size, off; + uint64_t pte_lo; int i; if (moea64_large_page_size == 0) @@ -827,9 +828,26 @@ moea64_setup_direct_map(mmu_t mmup, vm_o if (hw_direct_map) { PMAP_LOCK(kernel_pmap); for (i = 0; i < pregions_sz; i++) { - for (pa = pregions[i].mr_start & ~moea64_large_page_mask; - pa < (pregions[i].mr_start + pregions[i].mr_size); - pa += moea64_large_page_size) { + for (pa = pregions[i].mr_start; pa < pregions[i].mr_start + + pregions[i].mr_size; pa += moea64_large_page_size) { + pte_lo = LPTE_M; + + /* + * Set memory access as guarded if prefetch within + * the page could exit the available physmem area. + */ + if (pa & moea64_large_page_mask) { + pa &= moea64_large_page_mask; + pte_lo |= LPTE_G; + } + if (pa + moea64_large_page_size > + pregions[i].mr_start + pregions[i].mr_size) + pte_lo |= LPTE_G; + + /* + * Allocate a new SLB entry to make sure it is + * for large pages. + */ if (va_to_slb_entry(kernel_pmap, pa) == NULL) allocate_vsid(kernel_pmap, pa, 1 /* large */); @@ -1796,6 +1814,13 @@ moea64_kextract(mmu_t mmu, vm_offset_t v struct pvo_entry *pvo; vm_paddr_t pa; + /* + * Shortcut the direct-mapped case when applicable. We never put + * anything but 1:1 mappings below VM_MIN_KERNEL_ADDRESS. + */ + if (va < VM_MIN_KERNEL_ADDRESS) + return (va); + PMAP_LOCK(kernel_pmap); pvo = moea64_pvo_find_va(kernel_pmap, va, NULL); KASSERT(pvo != NULL, ("moea64_kextract: no addr found for %#lx", va)); @@ -2778,7 +2803,7 @@ moea64_sync_icache(mmu_t mmu, pmap_t pm, len = MIN(lim - va, sz); pvo = moea64_pvo_find_va(pm, va & ~ADDR_POFF, NULL); if (pvo != NULL) { - pa = (pvo->pvo_pte.pte.pte_lo & PTE_RPGN) | + pa = (pvo->pvo_pte.pte.pte_lo & LPTE_RPGN) | (va & ADDR_POFF); moea64_syncicache(pm, va, pa, len); } From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 06:12:31 2010 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 666CF106566B; Tue, 16 Mar 2010 06:12:31 +0000 (UTC) (envelope-from mckusick@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 547108FC13; Tue, 16 Mar 2010 06:12: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 o2G6CVD9096978; Tue, 16 Mar 2010 06:12:31 GMT (envelope-from mckusick@svn.freebsd.org) Received: (from mckusick@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2G6CVdE096970; Tue, 16 Mar 2010 06:12:31 GMT (envelope-from mckusick@svn.freebsd.org) Message-Id: <201003160612.o2G6CVdE096970@svn.freebsd.org> From: Kirk McKusick Date: Tue, 16 Mar 2010 06:12:31 +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: r205207 - in projects/quota64: lib/libc/sys lib/libutil sys/ufs/ufs usr.bin/quota usr.sbin/repquota 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, 16 Mar 2010 06:12:31 -0000 Author: mckusick Date: Tue Mar 16 06:12:30 2010 New Revision: 205207 URL: http://svn.freebsd.org/changeset/base/205207 Log: Debugging nits found while testing the new 64-bit quota code. Modified: projects/quota64/lib/libc/sys/quotactl.2 projects/quota64/lib/libutil/quotafile.c projects/quota64/sys/ufs/ufs/quota.h projects/quota64/sys/ufs/ufs/ufs_quota.c projects/quota64/sys/ufs/ufs/ufs_vfsops.c projects/quota64/usr.bin/quota/Makefile projects/quota64/usr.sbin/repquota/repquota.c Modified: projects/quota64/lib/libc/sys/quotactl.2 ============================================================================== --- projects/quota64/lib/libc/sys/quotactl.2 Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/lib/libc/sys/quotactl.2 Tue Mar 16 06:12:30 2010 (r205207) @@ -84,7 +84,7 @@ and group identifiers (GRPQUOTA). The .Dq ufs specific commands are: -.Bl -tag -width Q_QUOTAOFFxx +.Bl -tag -width Q_GETQUOTASIZEx .It Dv Q_QUOTAON Enable disk quotas for the file system specified by .Fa path . @@ -110,6 +110,17 @@ and .Fa id arguments are unused. Only the super-user may turn quotas off. +.It Dv Q_GETQUOTASIZE +Get the wordsize used to represent the quotas for the user or group +(as determined by the command type). +Possible values are 32 for the old-style quota file +and 64 for the new-style quota file. +The +.Fa addr +argument is a pointer to an integer into which the size is stored. +The identifier +.Fa id +is not used. .It Dv Q_GETQUOTA Get disk quota limits and current usage for the user or group (as determined by the command type) with identifier @@ -177,9 +188,11 @@ The argument or the command type is invalid. In -.Dv Q_GETQUOTA -and +.Dv Q_GETQUOTASIZE , +.Dv Q_GETQUOTA , .Dv Q_SETQUOTA , +and +.Dv Q_SETUSE , quotas are not currently enabled for this file system. .Pp The @@ -208,7 +221,8 @@ Too many symbolic links were encountered .It Bq Er EROFS In .Dv Q_QUOTAON , -the quota file resides on a read-only file system. +either the file system on which quotas are to be enabled is mounted read-only +or the quota file resides on a read-only file system. .It Bq Er EIO An .Tn I/O Modified: projects/quota64/lib/libutil/quotafile.c ============================================================================== --- projects/quota64/lib/libutil/quotafile.c Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/lib/libutil/quotafile.c Tue Mar 16 06:12:30 2010 (r205207) @@ -129,11 +129,9 @@ quota_open(struct fstab *fs, int quotaty goto error; qf->dev = st.st_dev; serrno = hasquota(fs, quotatype, qf->qfname, sizeof(qf->qfname)); - qcmd = QCMD(Q_GETQUOTA, quotatype); - if (quotactl(fs->fs_file, qcmd, 0, &dqh) == 0) { - qf->wordsize = 64; + qcmd = QCMD(Q_GETQUOTASIZE, quotatype); + if (quotactl(qf->fsname, qcmd, 0, &qf->wordsize) == 0) return (qf); - } if (serrno == 0) { errno = EOPNOTSUPP; goto error; @@ -250,18 +248,22 @@ int quota_maxid(struct quotafile *qf) { struct stat st; + int maxid; if (stat(qf->qfname, &st) < 0) return (0); switch (qf->wordsize) { case 32: - return (st.st_size / sizeof(struct dqblk32) - 1); + maxid = st.st_size / sizeof(struct dqblk32) - 1; + break; case 64: - return (st.st_size / sizeof(struct dqblk64) - 2); + maxid = st.st_size / sizeof(struct dqblk64) - 2; + break; default: - return (0); + maxid = 0; + break; } - /* not reached */ + return (maxid > 0 ? maxid : 0); } static int @@ -395,10 +397,6 @@ quota_write_usage(struct quotafile *qf, struct dqblk dqbuf; int qcmd; - if ((qf->accmode & O_RDWR) != O_RDWR) { - errno = EBADF; - return (-1); - } if (qf->fd == -1) { qcmd = QCMD(Q_SETUSE, qf->quotatype); return (quotactl(qf->fsname, qcmd, id, dqb)); @@ -406,6 +404,10 @@ quota_write_usage(struct quotafile *qf, /* * Have to do read-modify-write of quota in file. */ + if ((qf->accmode & O_RDWR) != O_RDWR) { + errno = EBADF; + return (-1); + } if (quota_read(qf, &dqbuf, id) != 0) return (-1); /* @@ -443,10 +445,6 @@ quota_write_limits(struct quotafile *qf, struct dqblk dqbuf; int qcmd; - if ((qf->accmode & O_RDWR) != O_RDWR) { - errno = EBADF; - return (-1); - } if (qf->fd == -1) { qcmd = QCMD(Q_SETQUOTA, qf->quotatype); return (quotactl(qf->fsname, qcmd, id, dqb)); @@ -454,6 +452,10 @@ quota_write_limits(struct quotafile *qf, /* * Have to do read-modify-write of quota in file. */ + if ((qf->accmode & O_RDWR) != O_RDWR) { + errno = EBADF; + return (-1); + } if (quota_read(qf, &dqbuf, id) != 0) return (-1); /* Modified: projects/quota64/sys/ufs/ufs/quota.h ============================================================================== --- projects/quota64/sys/ufs/ufs/quota.h Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/sys/ufs/ufs/quota.h Tue Mar 16 06:12:30 2010 (r205207) @@ -88,6 +88,7 @@ #define Q_GETQUOTA 0x0700 /* get limits and usage (64-bit version) */ #define Q_SETQUOTA 0x0800 /* set limits and usage (64-bit version) */ #define Q_SETUSE 0x0900 /* set usage (64-bit version) */ +#define Q_GETQUOTASIZE 0x0A00 /* get bit-size of quota file fields */ /* * The following structure defines the format of the disk quota file @@ -235,6 +236,7 @@ int setuse32(struct thread *, struct mou int getquota(struct thread *, struct mount *, u_long, int, void *); int setquota(struct thread *, struct mount *, u_long, int, void *); int setuse(struct thread *, struct mount *, u_long, int, void *); +int getquotasize(struct thread *, struct mount *, u_long, int, void *); vfs_quotactl_t ufs_quotactl; #else /* !_KERNEL */ Modified: projects/quota64/sys/ufs/ufs/ufs_quota.c ============================================================================== --- projects/quota64/sys/ufs/ufs/ufs_quota.c Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/sys/ufs/ufs/ufs_quota.c Tue Mar 16 06:12:30 2010 (r205207) @@ -508,6 +508,9 @@ quotaon(struct thread *td, struct mount if (error) return (error); + if (mp->mnt_flag & MNT_RDONLY) + return (EROFS); + ump = VFSTOUFS(mp); dq = NODQUOT; @@ -534,7 +537,9 @@ quotaon(struct thread *td, struct mount return (EALREADY); } ump->um_qflags[type] |= QTF_OPENING|QTF_CLOSING; + UFS_UNLOCK(ump); if ((error = dqopen(vp, ump, type)) != 0) { + UFS_LOCK(ump); ump->um_qflags[type] &= ~(QTF_OPENING|QTF_CLOSING); UFS_UNLOCK(ump); (void) vn_close(vp, FREAD|FWRITE, td->td_ucred, td); @@ -544,7 +549,6 @@ quotaon(struct thread *td, struct mount MNT_ILOCK(mp); mp->mnt_flag |= MNT_QUOTA; MNT_IUNLOCK(mp); - UFS_UNLOCK(ump); vpp = &ump->um_quotas[type]; if (*vpp != vp) @@ -989,6 +993,30 @@ setuse(struct thread *td, struct mount * } /* + * Q_GETQUOTASIZE - get bit-size of quota file fields + */ +int +getquotasize(struct thread *td, struct mount *mp, u_long id, int type, + void *sizep) +{ + struct ufsmount *ump = VFSTOUFS(mp); + int bitsize; + + UFS_LOCK(ump); + if (ump->um_quotas[type] == NULLVP || + (ump->um_qflags[type] & QTF_CLOSING)) { + UFS_UNLOCK(ump); + return (EINVAL); + } + if ((ump->um_qflags[type] & QTF_64BIT) != 0) + bitsize = 64; + else + bitsize = 32; + UFS_UNLOCK(ump); + return (copyout(&bitsize, sizep, sizeof(int))); +} + +/* * Q_SYNC - sync quota files to disk. */ int @@ -1163,12 +1191,17 @@ dqopen(struct vnode *vp, struct ufsmount return (0); } + UFS_LOCK(ump); if (strcmp(dqh.dqh_magic, Q_DQHDR64_MAGIC) == 0 && be32toh(dqh.dqh_version) == Q_DQHDR64_VERSION && be32toh(dqh.dqh_hdrlen) == (uint32_t)sizeof(struct dqhdr64) && - be32toh(dqh.dqh_reclen) == (uint32_t)sizeof(struct dqblk64)) + be32toh(dqh.dqh_reclen) == (uint32_t)sizeof(struct dqblk64)) { + /* XXX: what if the magic matches, but the sizes are wrong? */ ump->um_qflags[type] |= QTF_64BIT; - /* XXX: what if the magic matches, but the sizes are wrong? */ + } else { + ump->um_qflags[type] &= ~QTF_64BIT; + } + UFS_UNLOCK(ump); return (0); } Modified: projects/quota64/sys/ufs/ufs/ufs_vfsops.c ============================================================================== --- projects/quota64/sys/ufs/ufs/ufs_vfsops.c Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/sys/ufs/ufs/ufs_vfsops.c Tue Mar 16 06:12:30 2010 (r205207) @@ -151,6 +151,10 @@ ufs_quotactl(mp, cmds, id, arg) error = getquota(td, mp, id, type, arg); break; + case Q_GETQUOTASIZE: + error = getquotasize(td, mp, id, type, arg); + break; + case Q_SYNC: error = qsync(mp); break; Modified: projects/quota64/usr.bin/quota/Makefile ============================================================================== --- projects/quota64/usr.bin/quota/Makefile Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/usr.bin/quota/Makefile Tue Mar 16 06:12:30 2010 (r205207) @@ -3,6 +3,7 @@ PROG= quota BINOWN= root +BINMODE=4555 DPADD= ${LIBRPCSVC} ${LIBUTIL} LDADD= -lrpcsvc -lutil Modified: projects/quota64/usr.sbin/repquota/repquota.c ============================================================================== --- projects/quota64/usr.sbin/repquota/repquota.c Tue Mar 16 05:13:20 2010 (r205206) +++ projects/quota64/usr.sbin/repquota/repquota.c Tue Mar 16 06:12:30 2010 (r205207) @@ -224,7 +224,7 @@ repquota(struct fstab *fs, int type) printf("User%*s used soft hard grace used soft hard grace\n", max(MAXLOGNAME - 1, 10), " "); maxid = quota_maxid(qf); - for (id = 0; id < maxid; id++) { + for (id = 0; id <= maxid; id++) { if (quota_read(qf, &dqbuf, id) != 0) break; if (dqbuf.dqb_curinodes == 0 && dqbuf.dqb_curblocks == 0) From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 14:44:34 2010 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 282FE1065670; Tue, 16 Mar 2010 14:44:34 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 173408FC1C; Tue, 16 Mar 2010 14:44: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 o2GEiX6n011485; Tue, 16 Mar 2010 14:44:33 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GEiXg1011479; Tue, 16 Mar 2010 14:44:33 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161444.o2GEiXg1011479@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 14:44:33 +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: r205209 - in projects/ppc64/sys/powerpc: aim include 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, 16 Mar 2010 14:44:34 -0000 Author: nwhitehorn Date: Tue Mar 16 14:44:33 2010 New Revision: 205209 URL: http://svn.freebsd.org/changeset/base/205209 Log: Fix a panoply of bugs, and get us booting again on real G5 hardware. Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/aim/slb.c projects/ppc64/sys/powerpc/include/hid.h projects/ppc64/sys/powerpc/include/vmparam.h Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Tue Mar 16 11:38:07 2010 (r205208) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Tue Mar 16 14:44:33 2010 (r205209) @@ -149,6 +149,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -722,8 +723,12 @@ moea64_cpu_bootstrap(mmu_t mmup, int ap) slbia(); for (i = 0; i < 64; i++) { - if (!(kernel_pmap->pm_slb[i].slbe & SLBE_VALID)) - continue; + /* + * Note: set all SLB entries. Apparently, slbia() + * is not quite sufficient to make the CPU + * forget about bridge-mode mappings mode by OFW + * on the PPC 970. + */ __asm __volatile ("slbmte %0, %1" :: "r"(kernel_pmap->pm_slb[i].slbv), @@ -782,6 +787,10 @@ moea64_add_ofw_mappings(mmu_t mmup, phan DISABLE_TRANS(msr); for (off = 0; off < translations[i].om_len; off += PAGE_SIZE) { + if (moea64_pvo_find_va(kernel_pmap, + translations[i].om_va + off, NULL) != NULL) + continue; + moea64_kenter(mmup, translations[i].om_va + off, pa_base + off); @@ -800,6 +809,11 @@ moea64_probe_large_page(void) case IBM970: case IBM970FX: case IBM970MP: + powerpc_sync(); isync(); + mtspr(SPR_HID4, mfspr(SPR_HID4) & ~HID4_970_DISABLE_LG_PG); + powerpc_sync(); isync(); + + /* FALLTHROUGH */ case IBMCELLBE: moea64_large_page_size = 0x1000000; /* 16 MB */ moea64_large_page_shift = 24; @@ -849,7 +863,8 @@ moea64_setup_direct_map(mmu_t mmup, vm_o * for large pages. */ if (va_to_slb_entry(kernel_pmap, pa) == NULL) - allocate_vsid(kernel_pmap, pa, 1 /* large */); + allocate_vsid(kernel_pmap, pa >> ADDR_SR_SHFT, + 1 /* large */); moea64_pvo_enter(kernel_pmap, moea64_upvo_zone, &moea64_pvo_kunmanaged, pa, pa, @@ -1054,9 +1069,11 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t /* * Make sure kernel vsid is allocated as well as VSID 0. */ + #ifndef __powerpc64__ moea64_vsid_bitmap[(KERNEL_VSIDBITS & (NVSIDS - 1)) / VSID_NBPW] |= 1 << (KERNEL_VSIDBITS % VSID_NBPW); moea64_vsid_bitmap[0] |= 1; + #endif /* * Initialize the kernel pmap (which is statically allocated). @@ -2493,7 +2510,8 @@ moea64_pvo_find_va(pmap_t pm, vm_offset_ struct slb *slb; slb = va_to_slb_entry(pm, va); - KASSERT(slb != NULL, ("Cannot find SLB values for VA %#lx", va)); + if (slb == NULL) /* The page is not mapped if the segment isn't */ + return NULL; vsid = (slb->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT; if (slb->slbv & SLBV_L) Modified: projects/ppc64/sys/powerpc/aim/slb.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/slb.c Tue Mar 16 11:38:07 2010 (r205208) +++ projects/ppc64/sys/powerpc/aim/slb.c Tue Mar 16 14:44:33 2010 (r205209) @@ -34,6 +34,8 @@ #include +uintptr_t moea64_get_unique_vsid(void); + struct slb * va_to_slb_entry(pmap_t pm, vm_offset_t va) { @@ -49,7 +51,7 @@ va_to_slb_entry(pmap_t pm, vm_offset_t v /* XXX: Have a long list for processes mapping more than 16 GB */ - return (0); + return (NULL); } uint64_t @@ -72,8 +74,6 @@ va_to_vsid(pmap_t pm, vm_offset_t va) return ((entry->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT); } -uintptr_t moea64_get_unique_vsid(void); - uint64_t allocate_vsid(pmap_t pm, uint64_t esid, int large) { @@ -124,16 +124,16 @@ slb_insert(pmap_t pm, struct slb *slb_en if (pm == kernel_pmap && i == USER_SR) continue; - if (to_spill == 0 && (pm->pm_slb[i].slbe & SLBE_VALID) && - (pm != kernel_pmap || SLB_SPILLABLE(pm->pm_slb[i].slbe))) { + if (!(pm->pm_slb[i].slbe & SLBE_VALID)) { to_spill = i; - if (!prefer_empty) - break; + break; } - if (!(pm->pm_slb[i].slbe & SLBE_VALID)) { + if (to_spill < 0 && (pm != kernel_pmap || + SLB_SPILLABLE(pm->pm_slb[i].slbe))) { to_spill = i; - break; + if (!prefer_empty) + break; } } @@ -142,13 +142,13 @@ slb_insert(pmap_t pm, struct slb *slb_en (slbe & SLBE_ESID_MASK) >> SLBE_ESID_SHIFT); pm->pm_slb[to_spill].slbv = slbv; - pm->pm_slb[to_spill].slbe = slbe | to_spill; + pm->pm_slb[to_spill].slbe = slbe | (uint64_t)to_spill; if (pm == kernel_pmap && pmap_bootstrapped) { /* slbie not required */ __asm __volatile ("slbmte %0, %1" :: - "r"(kernel_pmap->pm_slb[i].slbv), - "r"(kernel_pmap->pm_slb[i].slbe)); + "r"(kernel_pmap->pm_slb[to_spill].slbv), + "r"(kernel_pmap->pm_slb[to_spill].slbe)); } } Modified: projects/ppc64/sys/powerpc/include/hid.h ============================================================================== --- projects/ppc64/sys/powerpc/include/hid.h Tue Mar 16 11:38:07 2010 (r205208) +++ projects/ppc64/sys/powerpc/include/hid.h Tue Mar 16 14:44:33 2010 (r205209) @@ -162,5 +162,6 @@ #define HID1_E500_DEFAULT_SET (HID1_E500_ABE | HID1_E500_ASTME) #define HID5_970_DCBZ_SIZE_HI 0x00000080UL /* dcbz does a 32-byte store */ +#define HID4_970_DISABLE_LG_PG 0x00000004ULL /* disables large pages */ #endif /* _POWERPC_HID_H_ */ Modified: projects/ppc64/sys/powerpc/include/vmparam.h ============================================================================== --- projects/ppc64/sys/powerpc/include/vmparam.h Tue Mar 16 11:38:07 2010 (r205208) +++ projects/ppc64/sys/powerpc/include/vmparam.h Tue Mar 16 14:44:33 2010 (r205209) @@ -98,7 +98,7 @@ #ifdef __powerpc64__ #define VM_MIN_KERNEL_ADDRESS 0xc000000000000000UL -#define VM_MAX_KERNEL_ADDRESS 0xc0000001c8000000UL +#define VM_MAX_KERNEL_ADDRESS 0xc0000001c7ffffffUL #define VM_MAX_SAFE_KERNEL_ADDRESS VM_MAX_KERNEL_ADDRESS #else #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)KERNEL_SR << ADDR_SR_SHFT) From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 15:50:32 2010 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 507061065672; Tue, 16 Mar 2010 15:50:32 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 25B448FC1B; Tue, 16 Mar 2010 15:50: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 o2GFoWFF026014; Tue, 16 Mar 2010 15:50:32 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GFoWwS026011; Tue, 16 Mar 2010 15:50:32 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161550.o2GFoWwS026011@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 15:50: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: r205211 - projects/ppc64/sys/powerpc/aim 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, 16 Mar 2010 15:50:32 -0000 Author: nwhitehorn Date: Tue Mar 16 15:50:31 2010 New Revision: 205211 URL: http://svn.freebsd.org/changeset/base/205211 Log: After rereading the manual, realize that slbia invalidates only SLB slots 1-63, leaving slot 0 intact. This could trigger an SLB parity error, which is why the kernel could not boot before. Follow slbia with explicit invalidation of SLB slot 0. While here, remove the other source of machine checks by fixing a typo that made large pages running off the ends of the large pages not actually marked guarded. Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/aim/trap_subr64.S Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Tue Mar 16 15:27:58 2010 (r205210) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Tue Mar 16 15:50:31 2010 (r205211) @@ -723,12 +723,8 @@ moea64_cpu_bootstrap(mmu_t mmup, int ap) slbia(); for (i = 0; i < 64; i++) { - /* - * Note: set all SLB entries. Apparently, slbia() - * is not quite sufficient to make the CPU - * forget about bridge-mode mappings mode by OFW - * on the PPC 970. - */ + if (!(kernel_pmap->pm_slb[i].slbe & SLBE_VALID)) + continue; __asm __volatile ("slbmte %0, %1" :: "r"(kernel_pmap->pm_slb[i].slbv), @@ -868,7 +864,7 @@ moea64_setup_direct_map(mmu_t mmup, vm_o moea64_pvo_enter(kernel_pmap, moea64_upvo_zone, &moea64_pvo_kunmanaged, pa, pa, - LPTE_M, PVO_WIRED | PVO_LARGE | + pte_lo, PVO_WIRED | PVO_LARGE | VM_PROT_EXECUTE); } } @@ -2287,7 +2283,10 @@ tlbia(void) static void slbia(void) { + register_t seg0; + __asm __volatile ("slbia"); + __asm __volatile ("slbmfee %0,%1; slbie %0;" : "=r"(seg0) : "r"(0)); } #endif Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr64.S Tue Mar 16 15:27:58 2010 (r205210) +++ projects/ppc64/sys/powerpc/aim/trap_subr64.S Tue Mar 16 15:50:31 2010 (r205211) @@ -50,14 +50,16 @@ */ restoresrs: - slbia; - li %r29, 0; /* Set the counter to zero */ + li %r29, 0 /* Set the counter to zero */ + + slbia + slbmfee %r31,%r29 + slbie %r31 instslb: ld %r31, PM_SLB+8(%r28); /* Load SLBE */ cmpli 0, %r31, 0; /* If SLBE is not valid, get the next */ beq nslb; - ld %r30, PM_SLB(%r28) /* Load SLBV */ slbmte %r30, %r31; /* Install SLB entry */ From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 15:52:38 2010 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 C35EE106566B; Tue, 16 Mar 2010 15:52:38 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B34FE8FC12; Tue, 16 Mar 2010 15:52:38 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2GFqcO3026515; Tue, 16 Mar 2010 15:52:38 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GFqcIu026513; Tue, 16 Mar 2010 15:52:38 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161552.o2GFqcIu026513@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 15:52:38 +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: r205212 - projects/ppc64/sys/powerpc/aim 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, 16 Mar 2010 15:52:38 -0000 Author: nwhitehorn Date: Tue Mar 16 15:52:38 2010 New Revision: 205212 URL: http://svn.freebsd.org/changeset/base/205212 Log: Explicitly set the CPU to 64-bit mode on reset. This makes SMP come up a little further on Apple hardware. Submitted by: Andreas Tobler Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr64.S Tue Mar 16 15:50:31 2010 (r205211) +++ projects/ppc64/sys/powerpc/aim/trap_subr64.S Tue Mar 16 15:52:38 2010 (r205212) @@ -263,6 +263,13 @@ nslb: */ .globl CNAME(rstcode), CNAME(rstsize) CNAME(rstcode): + /* Explicitly set MSR[SF] */ + mfmsr %r9 + li %r8,1 + insrdi %r9,%r8,1,0 + mtsmrd %r9 + isync + ba cpu_reset CNAME(rstsize) = . - CNAME(rstcode) From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 15:55:42 2010 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 29115106564A; Tue, 16 Mar 2010 15:55:42 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 18FDC8FC1C; Tue, 16 Mar 2010 15:55:42 +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 o2GFtfsu027211; Tue, 16 Mar 2010 15:55:41 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GFtfwq027209; Tue, 16 Mar 2010 15:55:41 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161555.o2GFtfwq027209@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 15:55: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: r205213 - projects/ppc64/sys/powerpc/include 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, 16 Mar 2010 15:55:42 -0000 Author: nwhitehorn Date: Tue Mar 16 15:55:41 2010 New Revision: 205213 URL: http://svn.freebsd.org/changeset/base/205213 Log: Move VM_MAXUSER_ADDRESS back below 4 GB. Something is still truncating entries in argv[] to 32-bit values, and I can't figure out what it is right now. As of this commit, I have unbroken everything broken with these SLB changes and have a functional desktop again. Modified: projects/ppc64/sys/powerpc/include/vmparam.h Modified: projects/ppc64/sys/powerpc/include/vmparam.h ============================================================================== --- projects/ppc64/sys/powerpc/include/vmparam.h Tue Mar 16 15:52:38 2010 (r205212) +++ projects/ppc64/sys/powerpc/include/vmparam.h Tue Mar 16 15:55:41 2010 (r205213) @@ -81,7 +81,7 @@ #if !defined(LOCORE) #ifdef __powerpc64__ #define VM_MIN_ADDRESS (0x0000000000000000UL) -#define VM_MAXUSER_ADDRESS (0x00000004fffff000UL) +#define VM_MAXUSER_ADDRESS (0x000000007ffff000UL) #define VM_MAX_ADDRESS (0xffffffffffffffffUL) #else #define VM_MIN_ADDRESS ((vm_offset_t)0) From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 16:11:17 2010 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 316731065676; Tue, 16 Mar 2010 16:11:17 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 16C0F8FC1C; Tue, 16 Mar 2010 16:11:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2GGBG5K030807; Tue, 16 Mar 2010 16:11:16 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GGBGfY030801; Tue, 16 Mar 2010 16:11:16 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161611.o2GGBGfY030801@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 16:11:16 +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: r205215 - in projects/ppc64/sys/powerpc: aim powerpc 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, 16 Mar 2010 16:11:17 -0000 Author: nwhitehorn Date: Tue Mar 16 16:11:16 2010 New Revision: 205215 URL: http://svn.freebsd.org/changeset/base/205215 Log: Correct a final nit with USER_SR handling: USER_ADDR is no longer at USER_SR << 28 on powerpc64, so make sure to invalidate the correct SLB entry when switching threads. Modified: projects/ppc64/sys/powerpc/aim/locore32.S projects/ppc64/sys/powerpc/aim/locore64.S projects/ppc64/sys/powerpc/aim/swtch32.S projects/ppc64/sys/powerpc/aim/swtch64.S projects/ppc64/sys/powerpc/powerpc/genassym.c Modified: projects/ppc64/sys/powerpc/aim/locore32.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/locore32.S Tue Mar 16 16:01:19 2010 (r205214) +++ projects/ppc64/sys/powerpc/aim/locore32.S Tue Mar 16 16:11:16 2010 (r205215) @@ -62,7 +62,6 @@ #include #include -#include #include #include #include Modified: projects/ppc64/sys/powerpc/aim/locore64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/locore64.S Tue Mar 16 16:01:19 2010 (r205214) +++ projects/ppc64/sys/powerpc/aim/locore64.S Tue Mar 16 16:11:16 2010 (r205215) @@ -62,7 +62,6 @@ #include #include -#include #include #include #include Modified: projects/ppc64/sys/powerpc/aim/swtch32.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/swtch32.S Tue Mar 16 16:01:19 2010 (r205214) +++ projects/ppc64/sys/powerpc/aim/swtch32.S Tue Mar 16 16:11:16 2010 (r205215) @@ -63,7 +63,6 @@ #include #include -#include #include #include Modified: projects/ppc64/sys/powerpc/aim/swtch64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/swtch64.S Tue Mar 16 16:01:19 2010 (r205214) +++ projects/ppc64/sys/powerpc/aim/swtch64.S Tue Mar 16 16:11:16 2010 (r205215) @@ -63,7 +63,6 @@ #include #include -#include #include #include @@ -223,8 +222,10 @@ blocked_loop: ld %r1,PCB_SP(%r3) /* Load the stack pointer */ ld %r2,PCB_TOC(%r3) /* Load the TOC pointer */ - li %r5,USER_SR /* Load the USER_SR segment reg */ - sldi %r5,%r5,28 + lis %r5,USER_ADDR@highesta /* Load the USER_SR segment reg */ + ori %r5,%r5,USER_ADDR@highera + sldi %r5,%r5,32 + oris %r5,%r5,USER_ADDR@ha slbie %r5 ld %r5,PCB_AIM_USR_VSID(%r3) ld %r6,PCB_AIM_USR_ESID(%r3) Modified: projects/ppc64/sys/powerpc/powerpc/genassym.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/genassym.c Tue Mar 16 16:01:19 2010 (r205214) +++ projects/ppc64/sys/powerpc/powerpc/genassym.c Tue Mar 16 16:11:16 2010 (r205215) @@ -102,6 +102,8 @@ ASSYM(TLBSAVE_BOOKE_R31, TLBSAVE_BOOKE_R ASSYM(MTX_LOCK, offsetof(struct mtx, mtx_lock)); #if defined(AIM) +ASSYM(USER_SR, USER_SR); +ASSYM(USER_ADDR, USER_ADDR); #ifdef __powerpc64__ ASSYM(PM_SLB, offsetof(struct pmap, pm_slb)); #else From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 16:30:24 2010 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 645B1106567B; Tue, 16 Mar 2010 16:30:24 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 542348FC13; Tue, 16 Mar 2010 16:30:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2GGUO8l035033; Tue, 16 Mar 2010 16:30:24 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GGUO1W035031; Tue, 16 Mar 2010 16:30:24 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161630.o2GGUO1W035031@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 16:30:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205216 - projects/ppc64/sys/powerpc/aim 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, 16 Mar 2010 16:30:24 -0000 Author: nwhitehorn Date: Tue Mar 16 16:30:24 2010 New Revision: 205216 URL: http://svn.freebsd.org/changeset/base/205216 Log: Fix a typo. Submitted by: Andreas Tobler Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr64.S Tue Mar 16 16:11:16 2010 (r205215) +++ projects/ppc64/sys/powerpc/aim/trap_subr64.S Tue Mar 16 16:30:24 2010 (r205216) @@ -267,7 +267,7 @@ CNAME(rstcode): mfmsr %r9 li %r8,1 insrdi %r9,%r8,1,0 - mtsmrd %r9 + mtmsrd %r9 isync ba cpu_reset From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 16:48:58 2010 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 E1B79106567B; Tue, 16 Mar 2010 16:48:58 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D18B48FC22; Tue, 16 Mar 2010 16:48:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2GGmw82039108; Tue, 16 Mar 2010 16:48:58 GMT (envelope-from rdivacky@svn.freebsd.org) Received: (from rdivacky@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GGmwgo039105; Tue, 16 Mar 2010 16:48:58 GMT (envelope-from rdivacky@svn.freebsd.org) Message-Id: <201003161648.o2GGmwgo039105@svn.freebsd.org> From: Roman Divacky Date: Tue, 16 Mar 2010 16:48:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205217 - projects/clangbsd/sys/boot/i386/boot2 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, 16 Mar 2010 16:48:59 -0000 Author: rdivacky Date: Tue Mar 16 16:48:58 2010 New Revision: 205217 URL: http://svn.freebsd.org/changeset/base/205217 Log: sprinkle __attribute__ ((noinline)) around Modified: projects/clangbsd/sys/boot/i386/boot2/boot2.c Modified: projects/clangbsd/sys/boot/i386/boot2/boot2.c ============================================================================== --- projects/clangbsd/sys/boot/i386/boot2/boot2.c Tue Mar 16 16:30:24 2010 (r205216) +++ projects/clangbsd/sys/boot/i386/boot2/boot2.c Tue Mar 16 16:48:58 2010 (r205217) @@ -152,7 +152,7 @@ static int xgetc(int); static int getc(int); void memcpy(void *, const void *, int); -void +void __attribute__ ((noinline)) memcpy(void *dst, const void *src, int len) { const char *s = src; @@ -162,7 +162,7 @@ memcpy(void *dst, const void *src, int l *d++ = *s++; } -static inline int +static int __attribute__ ((noinline)) strcmp(const char *s1, const char *s2) { for (; *s1 == *s2 && *s1; s1++, s2++); @@ -601,7 +601,7 @@ printf(const char *fmt,...) return; } -static void +static void __attribute__ ((noinline)) putchar(int c) { if (c == '\n') From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 16:55:12 2010 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 6B75B106566C; Tue, 16 Mar 2010 16:55:12 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5AC418FC0C; Tue, 16 Mar 2010 16:55:12 +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 o2GGtCBO040637; Tue, 16 Mar 2010 16:55:12 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GGtCC4040635; Tue, 16 Mar 2010 16:55:12 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003161655.o2GGtCC4040635@svn.freebsd.org> From: Nathan Whitehorn Date: Tue, 16 Mar 2010 16:55:12 +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: r205220 - projects/ppc64/sys/powerpc/aim 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, 16 Mar 2010 16:55:12 -0000 Author: nwhitehorn Date: Tue Mar 16 16:55:12 2010 New Revision: 205220 URL: http://svn.freebsd.org/changeset/base/205220 Log: Revise the locking. The per-page PVO lists are protected by the VM page queue lock, so protecting them with the table lock is unnecessary. Replace the table locking paranoia with mtx_assert() paranoia. This eliminates the last LOR is the 64-bit MMU code. Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Tue Mar 16 16:52:15 2010 (r205219) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Tue Mar 16 16:55:12 2010 (r205220) @@ -1443,6 +1443,8 @@ moea64_enter_locked(pmap_t pmap, vm_offs zone = moea64_upvo_zone; pvo_flags = 0; } else { + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + pvo_head = vm_page_to_pvoh(m); pg = m; zone = moea64_mpvo_zone; @@ -1729,10 +1731,10 @@ moea64_remove_write(mmu_t mmu, vm_page_t return; lo = moea64_attr_fetch(m); SYNC(); - LOCK_TABLE(); LIST_FOREACH(pvo, vm_page_to_pvoh(m), pvo_vlink) { pmap = pvo->pvo_pmap; PMAP_LOCK(pmap); + LOCK_TABLE(); if ((pvo->pvo_pte.lpte.pte_lo & LPTE_PP) != LPTE_BR) { pt = moea64_pvo_to_pte(pvo, -1); pvo->pvo_pte.lpte.pte_lo &= ~LPTE_PP; @@ -1745,9 +1747,9 @@ moea64_remove_write(mmu_t mmu, vm_page_t pvo->pvo_pmap, PVO_VADDR(pvo)); } } + UNLOCK_TABLE(); PMAP_UNLOCK(pmap); } - UNLOCK_TABLE(); if ((lo & LPTE_CHG) != 0) { moea64_attr_clear(m, LPTE_CHG); vm_page_dirty(m); @@ -1891,17 +1893,15 @@ moea64_page_exists_quick(mmu_t mmu, pmap if (!moea64_initialized || (m->flags & PG_FICTITIOUS)) return FALSE; + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + loops = 0; - LOCK_TABLE(); LIST_FOREACH(pvo, vm_page_to_pvoh(m), pvo_vlink) { - if (pvo->pvo_pmap == pmap) { - UNLOCK_TABLE(); + if (pvo->pvo_pmap == pmap) return (TRUE); - } if (++loops >= 16) break; } - UNLOCK_TABLE(); return (FALSE); } @@ -1920,11 +1920,9 @@ moea64_page_wired_mappings(mmu_t mmu, vm if (!moea64_initialized || (m->flags & PG_FICTITIOUS) != 0) return (count); mtx_assert(&vm_page_queue_mtx, MA_OWNED); - LOCK_TABLE(); LIST_FOREACH(pvo, vm_page_to_pvoh(m), pvo_vlink) if ((pvo->pvo_vaddr & PVO_WIRED) != 0) count++; - UNLOCK_TABLE(); return (count); } @@ -2185,7 +2183,6 @@ moea64_remove_all(mmu_t mmu, vm_page_t m mtx_assert(&vm_page_queue_mtx, MA_OWNED); pvo_head = vm_page_to_pvoh(m); - LOCK_TABLE(); for (pvo = LIST_FIRST(pvo_head); pvo != NULL; pvo = next_pvo) { next_pvo = LIST_NEXT(pvo, pvo_vlink); @@ -2195,7 +2192,6 @@ moea64_remove_all(mmu_t mmu, vm_page_t m moea64_pvo_remove(pvo, -1); PMAP_UNLOCK(pmap); } - UNLOCK_TABLE(); if ((m->flags & PG_WRITEABLE) && moea64_is_modified(mmu, m)) { moea64_attr_clear(m, LPTE_CHG); vm_page_dirty(m); @@ -2643,7 +2639,8 @@ moea64_query_bit(vm_page_t m, u_int64_t if (moea64_attr_fetch(m) & ptebit) return (TRUE); - LOCK_TABLE(); + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + LIST_FOREACH(pvo, vm_page_to_pvoh(m), pvo_vlink) { MOEA_PVO_CHECK(pvo); /* sanity check */ @@ -2653,7 +2650,6 @@ moea64_query_bit(vm_page_t m, u_int64_t */ if (pvo->pvo_pte.lpte.pte_lo & ptebit) { moea64_attr_save(m, ptebit); - UNLOCK_TABLE(); MOEA_PVO_CHECK(pvo); /* sanity check */ return (TRUE); } @@ -2673,6 +2669,7 @@ moea64_query_bit(vm_page_t m, u_int64_t * REF/CHG bits from the valid PTE. If the appropriate * ptebit is set, cache it and return success. */ + LOCK_TABLE(); pt = moea64_pvo_to_pte(pvo, -1); if (pt != NULL) { moea64_pte_synch(pt, &pvo->pvo_pte.lpte); @@ -2684,8 +2681,8 @@ moea64_query_bit(vm_page_t m, u_int64_t return (TRUE); } } + UNLOCK_TABLE(); } - UNLOCK_TABLE(); return (FALSE); } @@ -2698,6 +2695,8 @@ moea64_clear_bit(vm_page_t m, u_int64_t struct lpte *pt; uint64_t rv; + mtx_assert(&vm_page_queue_mtx, MA_OWNED); + /* * Clear the cached value. */ @@ -2718,10 +2717,10 @@ moea64_clear_bit(vm_page_t m, u_int64_t * valid pte clear the ptebit from the valid pte. */ count = 0; - LOCK_TABLE(); LIST_FOREACH(pvo, vm_page_to_pvoh(m), pvo_vlink) { MOEA_PVO_CHECK(pvo); /* sanity check */ + LOCK_TABLE(); pt = moea64_pvo_to_pte(pvo, -1); if (pt != NULL) { moea64_pte_synch(pt, &pvo->pvo_pte.lpte); @@ -2733,8 +2732,8 @@ moea64_clear_bit(vm_page_t m, u_int64_t rv |= pvo->pvo_pte.lpte.pte_lo; pvo->pvo_pte.lpte.pte_lo &= ~ptebit; MOEA_PVO_CHECK(pvo); /* sanity check */ + UNLOCK_TABLE(); } - UNLOCK_TABLE(); if (origbit != NULL) { *origbit = rv; From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 21:24:55 2010 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 0ED74106566C; Tue, 16 Mar 2010 21:24:55 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id ED4808FC0A; Tue, 16 Mar 2010 21:24: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 o2GLOsuW000270; Tue, 16 Mar 2010 21:24:54 GMT (envelope-from rdivacky@svn.freebsd.org) Received: (from rdivacky@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GLOsir000248; Tue, 16 Mar 2010 21:24:54 GMT (envelope-from rdivacky@svn.freebsd.org) Message-Id: <201003162124.o2GLOsir000248@svn.freebsd.org> From: Roman Divacky Date: Tue, 16 Mar 2010 21:24: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: r205226 - in projects/clangbsd: contrib/llvm contrib/llvm/autoconf contrib/llvm/cmake contrib/llvm/cmake/modules contrib/llvm/docs contrib/llvm/examples/OCaml-Kaleidoscope contrib/llvm/... 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, 16 Mar 2010 21:24:55 -0000 Author: rdivacky Date: Tue Mar 16 21:24:53 2010 New Revision: 205226 URL: http://svn.freebsd.org/changeset/base/205226 Log: Merge from vendor and update the build infrastructure. Added: projects/clangbsd/contrib/llvm/examples/OCaml-Kaleidoscope/ - copied from r205219, vendor/llvm/dist/examples/OCaml-Kaleidoscope/ projects/clangbsd/contrib/llvm/include/llvm/MC/MCAsmLayout.h - copied unchanged from r205219, vendor/llvm/dist/include/llvm/MC/MCAsmLayout.h projects/clangbsd/contrib/llvm/include/llvm/System/Valgrind.h - copied unchanged from r205219, vendor/llvm/dist/include/llvm/System/Valgrind.h projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h - copied unchanged from r205219, vendor/llvm/dist/lib/CodeGen/SelectionDAG/SDNodeDbgValue.h projects/clangbsd/contrib/llvm/lib/System/SearchForAddressOfSpecialSymbol.cpp - copied unchanged from r205219, vendor/llvm/dist/lib/System/SearchForAddressOfSpecialSymbol.cpp projects/clangbsd/contrib/llvm/lib/System/Valgrind.cpp - copied unchanged from r205219, vendor/llvm/dist/lib/System/Valgrind.cpp projects/clangbsd/contrib/llvm/test/CodeGen/ARM/fp16.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/ARM/fp16.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/addr-label.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/Generic/addr-label.ll projects/clangbsd/contrib/llvm/test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/Thumb2/2010-03-15-AsmCCClobber.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/2007-02-16-BranchFold.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/2007-02-16-BranchFold.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/2007-05-05-Personality.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/2007-05-05-Personality.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/GC/ - copied from r205219, vendor/llvm/dist/test/CodeGen/X86/GC/ projects/clangbsd/contrib/llvm/test/CodeGen/X86/gather-addresses.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/gather-addresses.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/ghc-cc.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/ghc-cc.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/ghc-cc64.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/ghc-cc64.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/liveness-local-regalloc.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/liveness-local-regalloc.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/phys_subreg_coalesce-3.ll - copied unchanged from r205219, vendor/llvm/dist/test/CodeGen/X86/phys_subreg_coalesce-3.ll projects/clangbsd/contrib/llvm/test/DebugInfo/2010-03-12-llc-crash.ll - copied unchanged from r205219, vendor/llvm/dist/test/DebugInfo/2010-03-12-llc-crash.ll projects/clangbsd/contrib/llvm/test/FrontendC/2010-03-10-arm-asmreg.c - copied unchanged from r205219, vendor/llvm/dist/test/FrontendC/2010-03-10-arm-asmreg.c projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_32-mismatched-add.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/AsmParser/X86/x86_32-mismatched-add.s projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_64-operands.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/AsmParser/X86/x86_64-operands.s projects/clangbsd/contrib/llvm/test/MC/MachO/absolutize.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/absolutize.s projects/clangbsd/contrib/llvm/test/MC/MachO/relax-jumps.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/relax-jumps.s projects/clangbsd/contrib/llvm/test/MC/MachO/relax-recompute-align.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/relax-recompute-align.s projects/clangbsd/contrib/llvm/test/MC/MachO/reloc-pcrel-offset.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/reloc-pcrel-offset.s projects/clangbsd/contrib/llvm/test/MC/MachO/x86_32-sections.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/x86_32-sections.s projects/clangbsd/contrib/llvm/test/MC/MachO/x86_32-symbols.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/x86_32-symbols.s projects/clangbsd/contrib/llvm/test/MC/MachO/x86_64-sections.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/x86_64-sections.s projects/clangbsd/contrib/llvm/test/MC/MachO/x86_64-symbols.s - copied unchanged from r205219, vendor/llvm/dist/test/MC/MachO/x86_64-symbols.s projects/clangbsd/contrib/llvm/test/Transforms/InstCombine/gepgep.ll - copied unchanged from r205219, vendor/llvm/dist/test/Transforms/InstCombine/gepgep.ll projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/DeclFriend.h - copied unchanged from r205220, vendor/clang/dist/include/clang/AST/DeclFriend.h projects/clangbsd/contrib/llvm/tools/clang/lib/AST/DeclFriend.cpp - copied unchanged from r205220, vendor/clang/dist/lib/AST/DeclFriend.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaObjCProperty.cpp - copied unchanged from r205220, vendor/clang/dist/lib/Sema/SemaObjCProperty.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CXX/temp/temp.res/temp.local/p7.cpp - copied unchanged from r205220, vendor/clang/dist/test/CXX/temp/temp.res/temp.local/p7.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CXX/temp/temp.res/temp.local/p8.cpp - copied unchanged from r205220, vendor/clang/dist/test/CXX/temp/temp.res/temp.local/p8.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CXX/temp/temp.res/temp.local/p9.cpp - copied unchanged from r205220, vendor/clang/dist/test/CXX/temp/temp.res/temp.local/p9.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGen/varargs.c - copied unchanged from r205220, vendor/clang/dist/test/CodeGen/varargs.c projects/clangbsd/contrib/llvm/tools/clang/test/PCH/changed-files.c - copied unchanged from r205220, vendor/clang/dist/test/PCH/changed-files.c projects/clangbsd/contrib/llvm/tools/clang/test/Parser/missing-end.m - copied unchanged from r205220, vendor/clang/dist/test/Parser/missing-end.m projects/clangbsd/contrib/llvm/tools/clang/test/Rewriter/rewrite-local-externs-in-block.mm - copied unchanged from r205220, vendor/clang/dist/test/Rewriter/rewrite-local-externs-in-block.mm projects/clangbsd/contrib/llvm/tools/clang/test/Rewriter/rewrite-super-message.mm - copied unchanged from r205220, vendor/clang/dist/test/Rewriter/rewrite-super-message.mm projects/clangbsd/contrib/llvm/tools/clang/test/Sema/missing-field-initializers.c - copied unchanged from r205220, vendor/clang/dist/test/Sema/missing-field-initializers.c projects/clangbsd/contrib/llvm/tools/clang/test/Sema/warn-unused-value.c - copied unchanged from r205220, vendor/clang/dist/test/Sema/warn-unused-value.c projects/clangbsd/contrib/llvm/tools/clang/test/Sema/warn-write-strings.c - copied unchanged from r205220, vendor/clang/dist/test/Sema/warn-write-strings.c projects/clangbsd/contrib/llvm/tools/clang/test/SemaCXX/PR6562.cpp - copied unchanged from r205220, vendor/clang/dist/test/SemaCXX/PR6562.cpp projects/clangbsd/contrib/llvm/tools/clang/test/SemaCXX/warn-unused-value.cpp - copied unchanged from r205220, vendor/clang/dist/test/SemaCXX/warn-unused-value.cpp projects/clangbsd/contrib/llvm/tools/clang/test/SemaObjC/duplicate-property.m - copied unchanged from r205220, vendor/clang/dist/test/SemaObjC/duplicate-property.m projects/clangbsd/contrib/llvm/tools/clang/test/SemaObjC/warn-write-strings.m - copied unchanged from r205220, vendor/clang/dist/test/SemaObjC/warn-write-strings.m projects/clangbsd/contrib/llvm/unittests/VMCore/InstructionsTest.cpp - copied unchanged from r205219, vendor/llvm/dist/unittests/VMCore/InstructionsTest.cpp Deleted: projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/SDDbgValue.h projects/clangbsd/contrib/llvm/lib/Target/X86/X86MCTargetExpr.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86MCTargetExpr.h projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2007-02-16-BranchFold.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2007-05-05-Personality.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/GC/ projects/clangbsd/contrib/llvm/test/MC/MachO/sections.s Modified: projects/clangbsd/contrib/llvm/Makefile.rules projects/clangbsd/contrib/llvm/autoconf/configure.ac projects/clangbsd/contrib/llvm/cmake/config-ix.cmake projects/clangbsd/contrib/llvm/cmake/modules/LLVMLibDeps.cmake projects/clangbsd/contrib/llvm/configure projects/clangbsd/contrib/llvm/docs/CodeGenerator.html projects/clangbsd/contrib/llvm/docs/LangRef.html projects/clangbsd/contrib/llvm/include/llvm-c/Transforms/Scalar.h projects/clangbsd/contrib/llvm/include/llvm/ADT/STLExtras.h projects/clangbsd/contrib/llvm/include/llvm/Analysis/InlineCost.h projects/clangbsd/contrib/llvm/include/llvm/Analysis/LoopInfo.h projects/clangbsd/contrib/llvm/include/llvm/CallingConv.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/AsmPrinter.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadata.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadataPrinter.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/JITCodeEmitter.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineBasicBlock.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineCodeEmitter.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineFunction.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineInstrBuilder.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineJumpTableInfo.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineLocation.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineModuleInfo.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineModuleInfoImpls.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineOperand.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/ObjectCodeEmitter.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/RuntimeLibcalls.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/ScheduleDAG.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/SelectionDAG.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/SelectionDAGISel.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/SelectionDAGNodes.h projects/clangbsd/contrib/llvm/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h projects/clangbsd/contrib/llvm/include/llvm/Config/config.h.cmake projects/clangbsd/contrib/llvm/include/llvm/Config/config.h.in projects/clangbsd/contrib/llvm/include/llvm/Instructions.h projects/clangbsd/contrib/llvm/include/llvm/Intrinsics.td projects/clangbsd/contrib/llvm/include/llvm/MC/MCAsmInfo.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCAssembler.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCContext.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCExpr.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCParser/AsmParser.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCParser/MCAsmParser.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCSection.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCSectionELF.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCSectionMachO.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCStreamer.h projects/clangbsd/contrib/llvm/include/llvm/MC/MCSymbol.h projects/clangbsd/contrib/llvm/include/llvm/Metadata.h projects/clangbsd/contrib/llvm/include/llvm/OperandTraits.h projects/clangbsd/contrib/llvm/include/llvm/Support/MemoryBuffer.h projects/clangbsd/contrib/llvm/include/llvm/Target/Mangler.h projects/clangbsd/contrib/llvm/include/llvm/Target/TargetAsmBackend.h projects/clangbsd/contrib/llvm/include/llvm/Target/TargetLowering.h projects/clangbsd/contrib/llvm/include/llvm/Target/TargetLoweringObjectFile.h projects/clangbsd/contrib/llvm/include/llvm/Target/TargetMachine.h projects/clangbsd/contrib/llvm/include/llvm/Target/TargetRegistry.h projects/clangbsd/contrib/llvm/include/llvm/Target/TargetSelectionDAG.td projects/clangbsd/contrib/llvm/include/llvm/Transforms/Utils/BuildLibCalls.h projects/clangbsd/contrib/llvm/lib/Analysis/ConstantFolding.cpp projects/clangbsd/contrib/llvm/lib/Analysis/InlineCost.cpp projects/clangbsd/contrib/llvm/lib/Analysis/LoopInfo.cpp projects/clangbsd/contrib/llvm/lib/Analysis/ValueTracking.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DIE.h projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.h projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfException.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfException.h projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfPrinter.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/DwarfPrinter.h projects/clangbsd/contrib/llvm/lib/CodeGen/AsmPrinter/OcamlGCPrinter.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/BranchFolding.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/ELFCodeEmitter.h projects/clangbsd/contrib/llvm/lib/CodeGen/ELFWriter.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/GCMetadata.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/GCMetadataPrinter.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/GCStrategy.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/LLVMTargetMachine.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/LiveIntervalAnalysis.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineBasicBlock.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineCSE.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineFunction.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineFunctionAnalysis.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineInstr.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineModuleInfo.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/MachineModuleInfoImpls.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/RegAllocLocal.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/ScheduleDAGInstrs.h projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/FastISel.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.h projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeFloatTypes.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/LegalizeTypes.h projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/ScheduleDAGSDNodes.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/SimpleRegisterCoalescing.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/TailDuplication.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/UnreachableBlockElim.cpp projects/clangbsd/contrib/llvm/lib/CodeGen/VirtRegRewriter.cpp projects/clangbsd/contrib/llvm/lib/ExecutionEngine/JIT/JITDebugRegisterer.cpp projects/clangbsd/contrib/llvm/lib/ExecutionEngine/JIT/JITDwarfEmitter.cpp projects/clangbsd/contrib/llvm/lib/ExecutionEngine/JIT/JITEmitter.cpp projects/clangbsd/contrib/llvm/lib/MC/MCAsmInfo.cpp projects/clangbsd/contrib/llvm/lib/MC/MCAsmInfoCOFF.cpp projects/clangbsd/contrib/llvm/lib/MC/MCAsmStreamer.cpp projects/clangbsd/contrib/llvm/lib/MC/MCAssembler.cpp projects/clangbsd/contrib/llvm/lib/MC/MCContext.cpp projects/clangbsd/contrib/llvm/lib/MC/MCExpr.cpp projects/clangbsd/contrib/llvm/lib/MC/MCMachOStreamer.cpp projects/clangbsd/contrib/llvm/lib/MC/MCParser/AsmLexer.cpp projects/clangbsd/contrib/llvm/lib/MC/MCParser/AsmParser.cpp projects/clangbsd/contrib/llvm/lib/Support/MemoryBuffer.cpp projects/clangbsd/contrib/llvm/lib/System/CMakeLists.txt projects/clangbsd/contrib/llvm/lib/System/DynamicLibrary.cpp projects/clangbsd/contrib/llvm/lib/System/Memory.cpp projects/clangbsd/contrib/llvm/lib/System/Unix/Program.inc projects/clangbsd/contrib/llvm/lib/System/Win32/Path.inc projects/clangbsd/contrib/llvm/lib/Target/ARM/ARM.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMBaseInstrInfo.h projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMBaseRegisterInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMCodeEmitter.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMConstantIslandPass.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMISelLowering.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMISelLowering.h projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMInstrFormats.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMInstrInfo.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMInstrNEON.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMInstrThumb.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMInstrThumb2.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMInstrVFP.td projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMLoadStoreOptimizer.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMSubtarget.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMSubtarget.h projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMTargetObjectFile.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/ARMTargetObjectFile.h projects/clangbsd/contrib/llvm/lib/Target/ARM/AsmParser/Makefile projects/clangbsd/contrib/llvm/lib/Target/ARM/AsmPrinter/ARMAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/AsmPrinter/ARMInstPrinter.h projects/clangbsd/contrib/llvm/lib/Target/ARM/AsmPrinter/ARMMCInstLower.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/Thumb1RegisterInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/ARM/Thumb2SizeReduction.cpp projects/clangbsd/contrib/llvm/lib/Target/Alpha/AlphaInstrInfo.td projects/clangbsd/contrib/llvm/lib/Target/Alpha/AsmPrinter/AlphaAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/Alpha/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/Blackfin/AsmPrinter/BlackfinAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/Blackfin/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/CBackend/CBackend.cpp projects/clangbsd/contrib/llvm/lib/Target/CellSPU/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/CellSPU/AsmPrinter/SPUAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/CellSPU/CellSDKIntrinsics.td projects/clangbsd/contrib/llvm/lib/Target/CellSPU/SPU64InstrInfo.td projects/clangbsd/contrib/llvm/lib/Target/CellSPU/SPUInstrInfo.td projects/clangbsd/contrib/llvm/lib/Target/CellSPU/SPUOperands.td projects/clangbsd/contrib/llvm/lib/Target/CellSPU/SPURegisterInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/MBlaze/AsmPrinter/MBlazeAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/MBlaze/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/MSP430/AsmPrinter/MSP430AsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/MSP430/AsmPrinter/MSP430MCInstLower.cpp projects/clangbsd/contrib/llvm/lib/Target/MSP430/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/Mangler.cpp projects/clangbsd/contrib/llvm/lib/Target/Mips/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/Mips/AsmPrinter/MipsAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/PIC16/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/PIC16/AsmPrinter/PIC16AsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/PIC16/AsmPrinter/PIC16AsmPrinter.h projects/clangbsd/contrib/llvm/lib/Target/PowerPC/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/PowerPC/AsmPrinter/PPCAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/PowerPC/PPCCodeEmitter.cpp projects/clangbsd/contrib/llvm/lib/Target/PowerPC/PPCISelLowering.cpp projects/clangbsd/contrib/llvm/lib/Target/PowerPC/PPCRegisterInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/README.txt projects/clangbsd/contrib/llvm/lib/Target/Sparc/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/Sparc/AsmPrinter/SparcAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/SystemZ/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/SystemZ/AsmPrinter/SystemZAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/TargetLoweringObjectFile.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/AsmParser/Makefile projects/clangbsd/contrib/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/AsmPrinter/X86AsmPrinter.h projects/clangbsd/contrib/llvm/lib/Target/X86/AsmPrinter/X86MCInstLower.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/CMakeLists.txt projects/clangbsd/contrib/llvm/lib/Target/X86/Disassembler/Makefile projects/clangbsd/contrib/llvm/lib/Target/X86/TargetInfo/Makefile projects/clangbsd/contrib/llvm/lib/Target/X86/X86.h projects/clangbsd/contrib/llvm/lib/Target/X86/X86.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86AsmBackend.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86COFFMachineModuleInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86COFFMachineModuleInfo.h projects/clangbsd/contrib/llvm/lib/Target/X86/X86CallingConv.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86CodeEmitter.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86FastISel.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86ISelLowering.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86ISelLowering.h projects/clangbsd/contrib/llvm/lib/Target/X86/X86Instr64bit.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86InstrFPStack.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86InstrInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86InstrInfo.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86InstrMMX.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86InstrSSE.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86JITInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86MCAsmInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86RegisterInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86RegisterInfo.h projects/clangbsd/contrib/llvm/lib/Target/X86/X86RegisterInfo.td projects/clangbsd/contrib/llvm/lib/Target/X86/X86Subtarget.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86Subtarget.h projects/clangbsd/contrib/llvm/lib/Target/X86/X86TargetObjectFile.cpp projects/clangbsd/contrib/llvm/lib/Target/X86/X86TargetObjectFile.h projects/clangbsd/contrib/llvm/lib/Target/XCore/AsmPrinter/Makefile projects/clangbsd/contrib/llvm/lib/Target/XCore/AsmPrinter/XCoreAsmPrinter.cpp projects/clangbsd/contrib/llvm/lib/Target/XCore/README.txt projects/clangbsd/contrib/llvm/lib/Target/XCore/XCoreISelDAGToDAG.cpp projects/clangbsd/contrib/llvm/lib/Target/XCore/XCoreISelLowering.cpp projects/clangbsd/contrib/llvm/lib/Target/XCore/XCoreISelLowering.h projects/clangbsd/contrib/llvm/lib/Target/XCore/XCoreInstrInfo.cpp projects/clangbsd/contrib/llvm/lib/Target/XCore/XCoreMachineFunctionInfo.h projects/clangbsd/contrib/llvm/lib/Target/XCore/XCoreRegisterInfo.cpp projects/clangbsd/contrib/llvm/lib/Transforms/InstCombine/InstCombineCalls.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Scalar/CodeGenPrepare.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Scalar/IndVarSimplify.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Scalar/LoopUnswitch.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Scalar/Scalar.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Scalar/SimplifyCFGPass.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Utils/BuildLibCalls.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Utils/LCSSA.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Utils/LoopSimplify.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Utils/LoopUnroll.cpp projects/clangbsd/contrib/llvm/lib/Transforms/Utils/SimplifyCFG.cpp projects/clangbsd/contrib/llvm/lib/VMCore/IntrinsicInst.cpp projects/clangbsd/contrib/llvm/lib/VMCore/LLVMContextImpl.h projects/clangbsd/contrib/llvm/lib/VMCore/Metadata.cpp projects/clangbsd/contrib/llvm/lib/VMCore/Type.cpp projects/clangbsd/contrib/llvm/test/CMakeLists.txt projects/clangbsd/contrib/llvm/test/CodeGen/ARM/indirectbr.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2007-04-13-SwitchLowerBadPhi.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2007-11-21-UndeadIllegalNode.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2007-12-17-InvokeAsm.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2007-12-31-UnusedSelector.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2008-08-07-PtrToInt-SmallerInt.ll projects/clangbsd/contrib/llvm/test/CodeGen/Generic/2009-11-16-BadKillsCrash.ll projects/clangbsd/contrib/llvm/test/CodeGen/PowerPC/2008-10-31-PPCF128Libcalls.ll projects/clangbsd/contrib/llvm/test/CodeGen/PowerPC/indirectbr.ll projects/clangbsd/contrib/llvm/test/CodeGen/PowerPC/ppc-prologue.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/2004-03-30-Select-Max.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/2008-08-05-SpillerBug.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/2009-03-13-PHIElimBug.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/2009-03-16-PHIElimInLPad.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/clz.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/crash.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/object-size.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/personality.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/pic.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/tailcall-largecode.ll projects/clangbsd/contrib/llvm/test/CodeGen/X86/tailcallfp2.ll projects/clangbsd/contrib/llvm/test/CodeGen/XCore/addsub64.ll projects/clangbsd/contrib/llvm/test/CodeGen/XCore/indirectbr.ll projects/clangbsd/contrib/llvm/test/CodeGen/XCore/mul64.ll projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_32-bit.s projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_32-bit_cat.s projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_32-encoding.s projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_32-new-encoder.s projects/clangbsd/contrib/llvm/test/MC/AsmParser/X86/x86_64-new-encoder.s projects/clangbsd/contrib/llvm/test/MC/MachO/Darwin/x86_32_diff_as.s projects/clangbsd/contrib/llvm/test/MC/MachO/symbols-1.s projects/clangbsd/contrib/llvm/test/Other/constant-fold-gep.ll projects/clangbsd/contrib/llvm/test/Scripts/macho-dump projects/clangbsd/contrib/llvm/test/Transforms/InstCombine/shift-sra.ll projects/clangbsd/contrib/llvm/tools/bugpoint/ExecutionDriver.cpp projects/clangbsd/contrib/llvm/tools/bugpoint/ToolRunner.cpp projects/clangbsd/contrib/llvm/tools/bugpoint/ToolRunner.h projects/clangbsd/contrib/llvm/tools/clang/Makefile projects/clangbsd/contrib/llvm/tools/clang/clang.xcodeproj/project.pbxproj projects/clangbsd/contrib/llvm/tools/clang/include/clang-c/Index.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/ASTContext.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/Decl.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/DeclBase.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/DeclCXX.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/DeclObjC.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/DeclVisitor.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/AST/RecordLayout.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Analysis/CFG.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/Builtins.def projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/BuiltinsX86.def projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticCommonKinds.td projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticGroups.td projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticParseKinds.td projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/IdentifierTable.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/LangOptions.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/PartialDiagnostic.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/SourceLocation.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Basic/SourceManager.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Checker/PathSensitive/GRExprEngine.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Action.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/ArgList.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/CC1Options.td projects/clangbsd/contrib/llvm/tools/clang/include/clang/Driver/Job.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Frontend/ASTUnit.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Lex/PTHManager.h projects/clangbsd/contrib/llvm/tools/clang/include/clang/Lex/Preprocessor.h projects/clangbsd/contrib/llvm/tools/clang/lib/AST/ASTContext.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/ASTImporter.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/CMakeLists.txt projects/clangbsd/contrib/llvm/tools/clang/lib/AST/Decl.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/DeclBase.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/DeclCXX.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/DeclObjC.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/Expr.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/AST/RecordLayout.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/RecordLayoutBuilder.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/AST/RecordLayoutBuilder.h projects/clangbsd/contrib/llvm/tools/clang/lib/AST/TypePrinter.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Analysis/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Basic/IdentifierTable.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Basic/SourceLocation.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Basic/SourceManager.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Basic/Targets.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Checker/GRExprEngine.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Checker/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Checker/RegionStore.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGClass.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGDebugInfo.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGDecl.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGObjCGNU.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGRTTI.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGVtable.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CGVtable.h projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/CodeGenModule.h projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/Mangle.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/CodeGen/TargetInfo.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Action.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/ArgList.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Driver.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Driver/Job.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/ASTUnit.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CacheTokens.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CompilerInstance.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/CompilerInvocation.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/HTMLDiagnostics.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/PCHReader.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/PCHReaderDecl.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/PCHWriter.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/PCHWriterDecl.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/PrintPreprocessedOutput.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/RewriteMacros.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/RewriteObjC.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Frontend/TextDiagnosticPrinter.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Headers/smmintrin.h projects/clangbsd/contrib/llvm/tools/clang/lib/Index/Entity.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Index/GlobalSelector.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Index/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/Lexer.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/LiteralSupport.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/PPDirectives.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/PPExpressions.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/PPLexerChange.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/PTHLexer.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/Preprocessor.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Lex/TokenLexer.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Parse/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Parse/ParseDeclCXX.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Parse/ParseObjc.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Rewrite/HTMLRewrite.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Rewrite/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Rewrite/Rewriter.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/CMakeLists.txt projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/Makefile projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/Sema.h projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaAccess.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaCXXCast.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaChecking.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaCodeComplete.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaDeclAttr.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaDeclCXX.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaDeclObjC.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaExceptionSpec.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaExpr.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaExprCXX.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaExprObjC.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaInit.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaLookup.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaOverload.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaStmt.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaTemplate.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaTemplateInstantiate.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/SemaTemplateInstantiateDecl.cpp projects/clangbsd/contrib/llvm/tools/clang/lib/Sema/TreeTransform.h projects/clangbsd/contrib/llvm/tools/clang/test/CXX/class.access/class.friend/p1.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CXX/class.access/p4.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CXX/temp/temp.spec/temp.explicit/p1-emit.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/PR6474.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/explicit-instantiation.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/mangle-exprs.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/mangle-template.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/mangle.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/member-templates.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/template-linkage.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/temporaries.cpp projects/clangbsd/contrib/llvm/tools/clang/test/CodeGenCXX/vtable-layout.cpp projects/clangbsd/contrib/llvm/tools/clang/test/Sema/compare.c projects/clangbsd/contrib/llvm/tools/clang/test/Sema/overloadable.c projects/clangbsd/contrib/llvm/tools/clang/test/Sema/return.c projects/clangbsd/contrib/llvm/tools/clang/test/SemaCXX/decl-expr-ambiguity.cpp projects/clangbsd/contrib/llvm/tools/clang/test/SemaObjCXX/objc-pointer-conv.mm projects/clangbsd/contrib/llvm/tools/clang/test/SemaTemplate/instantiate-function-1.cpp projects/clangbsd/contrib/llvm/tools/clang/test/SemaTemplate/virtual-member-functions.cpp projects/clangbsd/contrib/llvm/tools/clang/tools/CIndex/CIndex.cpp projects/clangbsd/contrib/llvm/tools/clang/tools/CIndex/CIndex.exports projects/clangbsd/contrib/llvm/tools/clang/tools/CIndex/CIndexCodeCompletion.cpp projects/clangbsd/contrib/llvm/tools/clang/tools/CIndex/CIndexUSRs.cpp projects/clangbsd/contrib/llvm/tools/clang/tools/CIndex/Makefile projects/clangbsd/contrib/llvm/tools/clang/tools/Makefile projects/clangbsd/contrib/llvm/tools/clang/tools/driver/Makefile projects/clangbsd/contrib/llvm/tools/clang/www/analyzer/index.html projects/clangbsd/contrib/llvm/tools/clang/www/analyzer/latest_checker.html.incl projects/clangbsd/contrib/llvm/tools/edis/EDDisassembler.cpp projects/clangbsd/contrib/llvm/tools/llvm-mc/llvm-mc.cpp projects/clangbsd/contrib/llvm/tools/lto/LTOCodeGenerator.cpp projects/clangbsd/contrib/llvm/tools/lto/LTOModule.cpp projects/clangbsd/contrib/llvm/unittests/Transforms/Utils/Cloning.cpp projects/clangbsd/contrib/llvm/unittests/VMCore/MetadataTest.cpp projects/clangbsd/contrib/llvm/unittests/VMCore/PassManagerTest.cpp projects/clangbsd/contrib/llvm/unittests/VMCore/VerifierTest.cpp projects/clangbsd/contrib/llvm/utils/TableGen/CodeGenDAGPatterns.cpp projects/clangbsd/contrib/llvm/utils/TableGen/CodeGenDAGPatterns.h projects/clangbsd/contrib/llvm/utils/TableGen/CodeGenTarget.cpp projects/clangbsd/contrib/llvm/utils/TableGen/CodeGenTarget.h projects/clangbsd/contrib/llvm/utils/TableGen/DAGISelEmitter.cpp projects/clangbsd/contrib/llvm/utils/TableGen/DAGISelMatcherGen.cpp projects/clangbsd/contrib/llvm/utils/TableGen/DAGISelMatcherOpt.cpp projects/clangbsd/contrib/llvm/utils/TableGen/EDEmitter.cpp projects/clangbsd/contrib/llvm/utils/TableGen/FastISelEmitter.cpp projects/clangbsd/contrib/llvm/utils/TableGen/X86RecognizableInstr.cpp projects/clangbsd/contrib/llvm/utils/lit/lit/TestFormats.py projects/clangbsd/contrib/llvm/utils/mkpatch projects/clangbsd/usr.bin/clang/lib/libclangast/Makefile projects/clangbsd/usr.bin/clang/lib/libclangsema/Makefile projects/clangbsd/usr.bin/clang/lib/libllvmsystem/Makefile projects/clangbsd/usr.bin/clang/lib/libllvmx86codegen/Makefile Directory Properties: projects/clangbsd/contrib/llvm/ (props changed) projects/clangbsd/contrib/llvm/tools/clang/ (props changed) Modified: projects/clangbsd/contrib/llvm/Makefile.rules ============================================================================== --- projects/clangbsd/contrib/llvm/Makefile.rules Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/Makefile.rules Tue Mar 16 21:24:53 2010 (r205226) @@ -1329,7 +1329,7 @@ uninstall-local:: # TOOLALIAS install. ifdef TOOLALIAS -DestToolAlias = $(PROJ_bindir)/$(TOOLALIAS)$(EXEEXT) +DestToolAlias = $(DESTDIR)$(PROJ_bindir)/$(TOOLALIAS)$(EXEEXT) install-local:: $(DestToolAlias) Modified: projects/clangbsd/contrib/llvm/autoconf/configure.ac ============================================================================== --- projects/clangbsd/contrib/llvm/autoconf/configure.ac Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/autoconf/configure.ac Tue Mar 16 21:24:53 2010 (r205226) @@ -1210,6 +1210,7 @@ AC_CHECK_HEADERS([malloc.h setjmp.h sign AC_CHECK_HEADERS([utime.h windows.h]) AC_CHECK_HEADERS([sys/mman.h sys/param.h sys/resource.h sys/time.h]) AC_CHECK_HEADERS([sys/types.h sys/ioctl.h malloc/malloc.h mach/mach.h]) +AC_CHECK_HEADERS([valgrind/valgrind.h]) if test "$ENABLE_THREADS" -eq 1 ; then AC_CHECK_HEADERS(pthread.h, AC_SUBST(HAVE_PTHREAD, 1), Modified: projects/clangbsd/contrib/llvm/cmake/config-ix.cmake ============================================================================== --- projects/clangbsd/contrib/llvm/cmake/config-ix.cmake Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/cmake/config-ix.cmake Tue Mar 16 21:24:53 2010 (r205226) @@ -67,6 +67,7 @@ check_include_file(sys/wait.h HAVE_SYS_W check_include_file(termios.h HAVE_TERMIOS_H) check_include_file(unistd.h HAVE_UNISTD_H) check_include_file(utime.h HAVE_UTIME_H) +check_include_file(valgrind/valgrind.h HAVE_VALGRIND_VALGRIND_H) check_include_file(windows.h HAVE_WINDOWS_H) # library checks Modified: projects/clangbsd/contrib/llvm/cmake/modules/LLVMLibDeps.cmake ============================================================================== --- projects/clangbsd/contrib/llvm/cmake/modules/LLVMLibDeps.cmake Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/cmake/modules/LLVMLibDeps.cmake Tue Mar 16 21:24:53 2010 (r205226) @@ -1,8 +1,8 @@ set(MSVC_LIB_DEPS_LLVMARMAsmParser LLVMARMInfo LLVMMCParser LLVMSupport) -set(MSVC_LIB_DEPS_LLVMARMAsmPrinter LLVMARMCodeGen LLVMARMInfo LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMARMAsmPrinter LLVMARMCodeGen LLVMARMInfo LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMARMCodeGen LLVMARMInfo LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMARMInfo LLVMSupport) -set(MSVC_LIB_DEPS_LLVMAlphaAsmPrinter LLVMAlphaInfo LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMAlphaAsmPrinter LLVMAlphaInfo LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMAlphaCodeGen LLVMAlphaInfo LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMAlphaInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTarget) @@ -11,12 +11,12 @@ set(MSVC_LIB_DEPS_LLVMAsmParser LLVMCore set(MSVC_LIB_DEPS_LLVMAsmPrinter LLVMAnalysis LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMBitReader LLVMCore LLVMSupport) set(MSVC_LIB_DEPS_LLVMBitWriter LLVMCore LLVMSupport LLVMSystem) -set(MSVC_LIB_DEPS_LLVMBlackfinAsmPrinter LLVMAsmPrinter LLVMBlackfinInfo LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMBlackfinAsmPrinter LLVMAsmPrinter LLVMBlackfinInfo LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMBlackfinCodeGen LLVMBlackfinInfo LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMBlackfinInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMCBackend LLVMAnalysis LLVMCBackendInfo LLVMCodeGen LLVMCore LLVMMC LLVMScalarOpts LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils LLVMipa) set(MSVC_LIB_DEPS_LLVMCBackendInfo LLVMSupport) -set(MSVC_LIB_DEPS_LLVMCellSPUAsmPrinter LLVMAsmPrinter LLVMCellSPUInfo LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMCellSPUAsmPrinter LLVMAsmPrinter LLVMCellSPUInfo LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMCellSPUCodeGen LLVMCellSPUInfo LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMCellSPUInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMCodeGen LLVMAnalysis LLVMCore LLVMMC LLVMScalarOpts LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils) @@ -29,41 +29,44 @@ set(MSVC_LIB_DEPS_LLVMInstrumentation LL set(MSVC_LIB_DEPS_LLVMInterpreter LLVMCodeGen LLVMCore LLVMExecutionEngine LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMJIT LLVMAnalysis LLVMCodeGen LLVMCore LLVMExecutionEngine LLVMMC LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMLinker LLVMArchive LLVMBitReader LLVMCore LLVMSupport LLVMSystem) +set(MSVC_LIB_DEPS_LLVMMBlazeAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMBlazeCodeGen LLVMMBlazeInfo LLVMMC LLVMSupport LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMBlazeCodeGen LLVMCodeGen LLVMCore LLVMMBlazeInfo LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMBlazeInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMMC LLVMSupport LLVMSystem) set(MSVC_LIB_DEPS_LLVMMCParser LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMMSIL LLVMAnalysis LLVMCodeGen LLVMCore LLVMMSILInfo LLVMScalarOpts LLVMSupport LLVMTarget LLVMTransformUtils LLVMipa) set(MSVC_LIB_DEPS_LLVMMSILInfo LLVMSupport) -set(MSVC_LIB_DEPS_LLVMMSP430AsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMSP430Info LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMSP430AsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMSP430Info LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMMSP430CodeGen LLVMCodeGen LLVMCore LLVMMC LLVMMSP430Info LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMMSP430Info LLVMSupport) -set(MSVC_LIB_DEPS_LLVMMipsAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMipsCodeGen LLVMMipsInfo LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMMipsAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMMipsCodeGen LLVMMipsInfo LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMMipsCodeGen LLVMCodeGen LLVMCore LLVMMC LLVMMipsInfo LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMMipsInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMPIC16 LLVMAnalysis LLVMCodeGen LLVMCore LLVMMC LLVMPIC16Info LLVMSelectionDAG LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMPIC16AsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMPIC16 LLVMPIC16Info LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMPIC16Info LLVMSupport) -set(MSVC_LIB_DEPS_LLVMPowerPCAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMPowerPCInfo LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMPowerPCAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMPowerPCInfo LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMPowerPCCodeGen LLVMCodeGen LLVMCore LLVMMC LLVMPowerPCInfo LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMPowerPCInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMScalarOpts LLVMAnalysis LLVMCore LLVMInstCombine LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils) -set(MSVC_LIB_DEPS_LLVMSelectionDAG LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMSupport LLVMSystem LLVMTarget) -set(MSVC_LIB_DEPS_LLVMSparcAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSparcInfo LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMSelectionDAG LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget) +set(MSVC_LIB_DEPS_LLVMSparcAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSparcInfo LLVMSupport LLVMTarget) set(MSVC_LIB_DEPS_LLVMSparcCodeGen LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSparcInfo LLVMSupport LLVMSystem LLVMTarget) set(MSVC_LIB_DEPS_LLVMSparcInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMSupport LLVMSystem) set(MSVC_LIB_DEPS_LLVMSystem ) -set(MSVC_LIB_DEPS_LLVMSystemZAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMSystemZInfo LLVMTarget) +set(MSVC_LIB_DEPS_LLVMSystemZAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystemZInfo LLVMTarget) set(MSVC_LIB_DEPS_LLVMSystemZCodeGen LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystemZInfo LLVMTarget) set(MSVC_LIB_DEPS_LLVMSystemZInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMTarget LLVMCore LLVMMC LLVMSupport) set(MSVC_LIB_DEPS_LLVMTransformUtils LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTarget LLVMipa) -set(MSVC_LIB_DEPS_LLVMX86AsmParser LLVMMC LLVMMCParser LLVMSupport LLVMX86Info) -set(MSVC_LIB_DEPS_LLVMX86AsmPrinter LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget LLVMX86CodeGen LLVMX86Info) +set(MSVC_LIB_DEPS_LLVMX86AsmParser LLVMMC LLVMMCParser LLVMSupport LLVMTarget LLVMX86Info) +set(MSVC_LIB_DEPS_LLVMX86AsmPrinter LLVMAnalysis LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget LLVMX86CodeGen LLVMX86Info) set(MSVC_LIB_DEPS_LLVMX86CodeGen LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMSystem LLVMTarget LLVMX86Info) set(MSVC_LIB_DEPS_LLVMX86Disassembler LLVMMC LLVMSupport LLVMX86Info) set(MSVC_LIB_DEPS_LLVMX86Info LLVMSupport) set(MSVC_LIB_DEPS_LLVMXCore LLVMCodeGen LLVMCore LLVMMC LLVMSelectionDAG LLVMSupport LLVMTarget LLVMXCoreInfo) -set(MSVC_LIB_DEPS_LLVMXCoreAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMSystem LLVMTarget LLVMXCoreInfo) +set(MSVC_LIB_DEPS_LLVMXCoreAsmPrinter LLVMAsmPrinter LLVMCodeGen LLVMCore LLVMMC LLVMSupport LLVMTarget LLVMXCoreInfo) set(MSVC_LIB_DEPS_LLVMXCoreInfo LLVMSupport) set(MSVC_LIB_DEPS_LLVMipa LLVMAnalysis LLVMCore LLVMSupport LLVMSystem) set(MSVC_LIB_DEPS_LLVMipo LLVMAnalysis LLVMCore LLVMSupport LLVMSystem LLVMTarget LLVMTransformUtils LLVMipa) Modified: projects/clangbsd/contrib/llvm/configure ============================================================================== --- projects/clangbsd/contrib/llvm/configure Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/configure Tue Mar 16 21:24:53 2010 (r205226) @@ -16177,6 +16177,175 @@ fi done + +for ac_header in valgrind/valgrind.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + { echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +else + # Is the header compilable? +{ echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" || test ! -s conftest.err' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_compiler=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6; } + +# Is the header present? +{ echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; } +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi + +rm -f conftest.err conftest.$ac_ext +{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( cat <<\_ASBOX +## ----------------------------------- ## +## Report this to llvmbugs@cs.uiuc.edu ## +## ----------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +{ echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; } +if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +ac_res=`eval echo '${'$as_ac_Header'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + if test "$ENABLE_THREADS" -eq 1 ; then for ac_header in pthread.h Modified: projects/clangbsd/contrib/llvm/docs/CodeGenerator.html ============================================================================== --- projects/clangbsd/contrib/llvm/docs/CodeGenerator.html Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/docs/CodeGenerator.html Tue Mar 16 21:24:53 2010 (r205226) @@ -1679,7 +1679,8 @@ $ llc -regalloc=linearscan file.bc -o ln supported on x86/x86-64 and PowerPC. It is performed if:

    -
  • Caller and callee have the calling convention fastcc.
  • +
  • Caller and callee have the calling convention fastcc or + cc 10 (GHC call convention).
  • The call is a tail call - in tail position (ret immediately follows call and ret uses value of call or is void).
  • @@ -2161,7 +2162,7 @@ MOVSX32rm16 -> movsx, 32-bit register Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2010-03-08 22:05:02 +0100 (Mon, 08 Mar 2010) $ + Last modified: $Date: 2010-03-11 01:22:57 +0100 (Thu, 11 Mar 2010) $ Modified: projects/clangbsd/contrib/llvm/docs/LangRef.html ============================================================================== --- projects/clangbsd/contrib/llvm/docs/LangRef.html Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/docs/LangRef.html Tue Mar 16 21:24:53 2010 (r205226) @@ -255,6 +255,12 @@
  • 'llvm.umul.with.overflow.* Intrinsics
  • +
  • Half Precision Floating Point Intrinsics +
      +
    1. 'llvm.convert.to.fp16' Intrinsic
    2. +
    3. 'llvm.convert.from.fp16' Intrinsic
    4. +
    +
  • Debugger intrinsics
  • Exception Handling intrinsics
  • Trampoline Intrinsic @@ -691,9 +697,9 @@ define i32 @main() { target, without having to conform to an externally specified ABI (Application Binary Interface). Tail calls can only be optimized - when this convention is used. This calling convention does not - support varargs and requires the prototype of all callees to exactly match - the prototype of the function definition. + when this or the GHC convention is used. This calling convention + does not support varargs and requires the prototype of all callees to + exactly match the prototype of the function definition.
    "coldcc" - The cold calling convention:
    This calling convention attempts to make code in the caller as efficient @@ -703,6 +709,26 @@ define i32 @main() { does not support varargs and requires the prototype of all callees to exactly match the prototype of the function definition.
    +
    "cc 10" - GHC convention:
    +
    This calling convention has been implemented specifically for use by the + Glasgow Haskell Compiler (GHC). + It passes everything in registers, going to extremes to achieve this by + disabling callee save registers. This calling convention should not be + used lightly but only for specific situations such as an alternative to + the register pinning performance technique often used when + implementing functional programming languages.At the moment only X86 + supports this convention and it has the following limitations: +
      +
    • On X86-32 only supports up to 4 bit type parameters. No + floating point types are supported.
    • +
    • On X86-64 only supports up to 10 bit type parameters and + 6 floating point parameters.
    • +
    + This calling convention supports + tail call optimization but + requires both the caller and callee are using it. +
    +
    "cc <n>" - Numbered convention:
    Any calling convention may be specified by number, allowing target-specific calling conventions to be used. Target specific calling @@ -6588,6 +6614,97 @@ LLVM.

    + +
    + +

    Half precision floating point is a storage-only format. This means that it is + a dense encoding (in memory) but does not support computation in the + format.

    + +

    This means that code must first load the half-precision floating point + value as an i16, then convert it to float with llvm.convert.from.fp16. + Computation can then be performed on the float value (including extending to + double etc). To store the value back to memory, it is first converted to + float if needed, then converted to i16 with + llvm.convert.to.fp16, then + storing as an i16 value.

    +
    + + + + +
    + +
    Syntax:
    +
    +  declare i16 @llvm.convert.to.fp16(f32 %a)
    +
    + +
    Overview:
    +

    The 'llvm.convert.to.fp16' intrinsic function performs + a conversion from single precision floating point format to half precision + floating point format.

    + +
    Arguments:
    +

    The intrinsic function contains single argument - the value to be + converted.

    + +
    Semantics:
    +

    The 'llvm.convert.to.fp16' intrinsic function performs + a conversion from single precision floating point format to half precision + floating point format. The return value is an i16 which + contains the converted number.

    + +
    Examples:
    +
    +  %res = call i16 @llvm.convert.to.fp16(f32 %a)
    +  store i16 %res, i16* @x, align 2
    +
    + +
    + + + + +
    + +
    Syntax:
    +
    +  declare f32 @llvm.convert.from.fp16(i16 %a)
    +
    + +
    Overview:
    +

    The 'llvm.convert.from.fp16' intrinsic function performs + a conversion from half precision floating point format to single precision + floating point format.

    + +
    Arguments:
    +

    The intrinsic function contains single argument - the value to be + converted.

    + +
    Semantics:
    +

    The 'llvm.convert.from.fp16' intrinsic function performs a + conversion from half single precision floating point format to single + precision floating point format. The input half-float value is represented by + an i16 value.

    + +
    Examples:
    +
    +  %a = load i16* @x, align 2
    +  %res = call f32 @llvm.convert.from.fp16(i16 %a)
    +
    + +
    + + + @@ -7473,7 +7590,7 @@ LLVM.

    Chris Lattner
    The LLVM Compiler Infrastructure
    - Last modified: $Date: 2010-03-08 22:05:02 +0100 (Mon, 08 Mar 2010) $ + Last modified: $Date: 2010-03-15 05:12:21 +0100 (Mon, 15 Mar 2010) $ Modified: projects/clangbsd/contrib/llvm/include/llvm-c/Transforms/Scalar.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm-c/Transforms/Scalar.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm-c/Transforms/Scalar.h Tue Mar 16 21:24:53 2010 (r205226) @@ -79,6 +79,10 @@ void LLVMAddSCCPPass(LLVMPassManagerRef /** See llvm::createScalarReplAggregatesPass function. */ void LLVMAddScalarReplAggregatesPass(LLVMPassManagerRef PM); +/** See llvm::createScalarReplAggregatesPass function. */ +void LLVMAddScalarReplAggregatesPassWithThreshold(LLVMPassManagerRef PM, + int Threshold); + /** See llvm::createSimplifyLibCallsPass function. */ void LLVMAddSimplifyLibCallsPass(LLVMPassManagerRef PM); @@ -91,6 +95,9 @@ void LLVMAddConstantPropagationPass(LLVM /** See llvm::demotePromoteMemoryToRegisterPass function. */ void LLVMAddDemoteMemoryToRegisterPass(LLVMPassManagerRef PM); +/** See llvm::createVerifierPass function. */ +void LLVMAddVerifierPass(LLVMPassManagerRef PM); + #ifdef __cplusplus } #endif /* defined(__cplusplus) */ Modified: projects/clangbsd/contrib/llvm/include/llvm/ADT/STLExtras.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/ADT/STLExtras.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/ADT/STLExtras.h Tue Mar 16 21:24:53 2010 (r205226) @@ -279,6 +279,28 @@ static inline void array_pod_sort(Iterat qsort(&*Start, End-Start, sizeof(*Start), Compare); } +//===----------------------------------------------------------------------===// +// Extra additions to +//===----------------------------------------------------------------------===// + +/// For a container of pointers, deletes the pointers and then clears the +/// container. +template +void DeleteContainerPointers(Container &C) { + for (typename Container::iterator I = C.begin(), E = C.end(); I != E; ++I) + delete *I; + C.clear(); +} + +/// In a container of pairs (usually a map) whose second element is a pointer, +/// deletes the second elements and then clears the container. +template +void DeleteContainerSeconds(Container &C) { + for (typename Container::iterator I = C.begin(), E = C.end(); I != E; ++I) + delete I->second; + C.clear(); +} + } // End llvm namespace #endif Modified: projects/clangbsd/contrib/llvm/include/llvm/Analysis/InlineCost.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/Analysis/InlineCost.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/Analysis/InlineCost.h Tue Mar 16 21:24:53 2010 (r205226) @@ -18,6 +18,7 @@ #include #include #include +#include "llvm/ADT/DenseMap.h" namespace llvm { @@ -42,6 +43,9 @@ namespace llvm { /// is used to estimate the code size cost of inlining it. unsigned NumInsts, NumBlocks; + /// NumBBInsts - Keeps track of basic block code size estimates. + DenseMap NumBBInsts; + /// NumCalls - Keep track of the number of calls to 'big' functions. unsigned NumCalls; Modified: projects/clangbsd/contrib/llvm/include/llvm/Analysis/LoopInfo.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/Analysis/LoopInfo.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/Analysis/LoopInfo.h Tue Mar 16 21:24:53 2010 (r205226) @@ -571,7 +571,7 @@ public: unsigned getSmallConstantTripMultiple() const; /// isLCSSAForm - Return true if the Loop is in LCSSA form - bool isLCSSAForm() const; + bool isLCSSAForm(DominatorTree &DT) const; /// isLoopSimplifyForm - Return true if the Loop is in the form that /// the LoopSimplify form transforms loops to, which is sometimes called Modified: projects/clangbsd/contrib/llvm/include/llvm/CallingConv.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CallingConv.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CallingConv.h Tue Mar 16 21:24:53 2010 (r205226) @@ -44,6 +44,9 @@ namespace CallingConv { // call does not break any live ranges in the caller side. Cold = 9, + // GHC - Calling convention used by the Glasgow Haskell Compiler (GHC). + GHC = 10, + // Target - This is the start of the target-specific calling conventions, // e.g. fastcall and thiscall on X86. FirstTargetCC = 64, Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/AsmPrinter.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/AsmPrinter.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/AsmPrinter.h Tue Mar 16 21:24:53 2010 (r205226) @@ -143,8 +143,7 @@ namespace llvm { protected: explicit AsmPrinter(formatted_raw_ostream &o, TargetMachine &TM, - MCContext &Ctx, MCStreamer &Streamer, - const MCAsmInfo *T); + MCStreamer &Streamer); public: virtual ~AsmPrinter(); @@ -306,18 +305,10 @@ namespace llvm { unsigned ForcedAlignBits = 0, bool UseFillExpr = true) const; - /// printLabel - This method prints a local label used by debug and - /// exception handling tables. - void printLabel(unsigned Id) const; - /// printDeclare - This method prints a local variable declaration used by /// debug tables. void printDeclare(const MachineInstr *MI) const; - /// GetGlobalValueSymbol - Return the MCSymbol for the specified global - /// value. - virtual MCSymbol *GetGlobalValueSymbol(const GlobalValue *GV) const; - /// GetSymbolWithGlobalValueBase - Return the MCSymbol for a symbol with /// global value name as its base, with the specified suffix, and where the /// symbol is forced to have private linkage if ForcePrivate is true. @@ -342,8 +333,7 @@ namespace llvm { /// GetBlockAddressSymbol - Return the MCSymbol used to satisfy BlockAddress /// uses of the specified basic block. MCSymbol *GetBlockAddressSymbol(const BlockAddress *BA) const; - MCSymbol *GetBlockAddressSymbol(const Function *F, - const BasicBlock *BB) const; + MCSymbol *GetBlockAddressSymbol(const BasicBlock *BB) const; /// EmitBasicBlockStart - This method prints the label for the specified /// MachineBasicBlock, an alignment (if present) and a comment describing Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadata.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadata.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadata.h Tue Mar 16 21:24:53 2010 (r205226) @@ -38,12 +38,10 @@ #include "llvm/ADT/StringMap.h" namespace llvm { - class AsmPrinter; class GCStrategy; class Constant; - class MCAsmInfo; - + class MCSymbol; namespace GC { /// PointKind - The type of a collector-safe point. @@ -60,9 +58,9 @@ namespace llvm { /// struct GCPoint { GC::PointKind Kind; //< The kind of the safe point. - unsigned Num; //< Usually a label. + MCSymbol *Label; //< A label. - GCPoint(GC::PointKind K, unsigned N) : Kind(K), Num(N) {} + GCPoint(GC::PointKind K, MCSymbol *L) : Kind(K), Label(L) {} }; /// GCRoot - Metadata for a pointer to an object managed by the garbage @@ -123,8 +121,8 @@ namespace llvm { /// addSafePoint - Notes the existence of a safe point. Num is the ID of the /// label just prior to the safe point (if the code generator is using /// MachineModuleInfo). - void addSafePoint(GC::PointKind Kind, unsigned Num) { - SafePoints.push_back(GCPoint(Kind, Num)); + void addSafePoint(GC::PointKind Kind, MCSymbol *Label) { + SafePoints.push_back(GCPoint(Kind, Label)); } /// getFrameSize/setFrameSize - Records the function's frame size. Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadataPrinter.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadataPrinter.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/GCMetadataPrinter.h Tue Mar 16 21:24:53 2010 (r205226) @@ -28,6 +28,7 @@ namespace llvm { class GCMetadataPrinter; class raw_ostream; + class MCAsmInfo; /// GCMetadataPrinterRegistry - The GC assembly printer registry uses all the /// defaults from Registry. Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/JITCodeEmitter.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/JITCodeEmitter.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/JITCodeEmitter.h Tue Mar 16 21:24:53 2010 (r205226) @@ -35,7 +35,7 @@ class MachineRelocation; class Value; class GlobalValue; class Function; - + /// JITCodeEmitter - This class defines two sorts of methods: those for /// emitting the actual bytes of machine code, and those for emitting auxillary /// structures, such as jump tables, relocations, etc. @@ -242,7 +242,7 @@ public: /// emitLabel - Emits a label - virtual void emitLabel(uint64_t LabelID) = 0; + virtual void emitLabel(MCSymbol *Label) = 0; /// allocateSpace - Allocate a block of space in the current output buffer, /// returning null (and setting conditions to indicate buffer overflow) on @@ -316,10 +316,10 @@ public: /// virtual uintptr_t getMachineBasicBlockAddress(MachineBasicBlock *MBB) const= 0; - /// getLabelAddress - Return the address of the specified LabelID, only usable - /// after the LabelID has been emitted. + /// getLabelAddress - Return the address of the specified Label, only usable + /// after the Label has been emitted. /// - virtual uintptr_t getLabelAddress(uint64_t LabelID) const = 0; + virtual uintptr_t getLabelAddress(MCSymbol *Label) const = 0; /// Specifies the MachineModuleInfo object. This is used for exception handling /// purposes. Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/LiveIntervalAnalysis.h Tue Mar 16 21:24:53 2010 (r205226) @@ -127,11 +127,11 @@ namespace llvm { bool conflictsWithPhysReg(const LiveInterval &li, VirtRegMap &vrm, unsigned reg); - /// conflictsWithPhysRegRef - Similar to conflictsWithPhysRegRef except - /// it can check use as well. - bool conflictsWithPhysRegRef(LiveInterval &li, unsigned Reg, - bool CheckUse, - SmallPtrSet &JoinedCopies); + /// conflictsWithSubPhysRegRef - Similar to conflictsWithPhysRegRef except + /// it checks for sub-register reference and it can check use as well. + bool conflictsWithSubPhysRegRef(LiveInterval &li, unsigned Reg, + bool CheckUse, + SmallPtrSet &JoinedCopies); // Interval creation LiveInterval &getOrCreateInterval(unsigned reg) { Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineBasicBlock.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineBasicBlock.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineBasicBlock.h Tue Mar 16 21:24:53 2010 (r205226) @@ -21,7 +21,6 @@ namespace llvm { class BasicBlock; class MachineFunction; -class MCContext; class MCSymbol; class StringRef; class raw_ostream; @@ -352,7 +351,7 @@ public: /// getSymbol - Return the MCSymbol for this basic block. /// - MCSymbol *getSymbol(MCContext &Ctx) const; + MCSymbol *getSymbol() const; private: // Methods used to maintain doubly linked list of blocks... friend struct ilist_traits; Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineCodeEmitter.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineCodeEmitter.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineCodeEmitter.h Tue Mar 16 21:24:53 2010 (r205226) @@ -31,6 +31,7 @@ class MachineRelocation; class Value; class GlobalValue; class Function; +class MCSymbol; /// MachineCodeEmitter - This class defines two sorts of methods: those for /// emitting the actual bytes of machine code, and those for emitting auxillary @@ -247,7 +248,7 @@ public: virtual void processDebugLoc(DebugLoc DL, bool BeforePrintintInsn) {} /// emitLabel - Emits a label - virtual void emitLabel(uint64_t LabelID) = 0; + virtual void emitLabel(MCSymbol *Label) = 0; /// allocateSpace - Allocate a block of space in the current output buffer, /// returning null (and setting conditions to indicate buffer overflow) on @@ -316,10 +317,10 @@ public: /// virtual uintptr_t getMachineBasicBlockAddress(MachineBasicBlock *MBB) const= 0; - /// getLabelAddress - Return the address of the specified LabelID, only usable + /// getLabelAddress - Return the address of the specified Label, only usable /// after the LabelID has been emitted. /// - virtual uintptr_t getLabelAddress(uint64_t LabelID) const = 0; + virtual uintptr_t getLabelAddress(MCSymbol *Label) const = 0; /// Specifies the MachineModuleInfo object. This is used for exception handling /// purposes. Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineFunction.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineFunction.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineFunction.h Tue Mar 16 21:24:53 2010 (r205226) @@ -33,6 +33,7 @@ class MachineRegisterInfo; class MachineFrameInfo; class MachineConstantPool; class MachineJumpTableInfo; +class MCContext; class Pass; class TargetMachine; class TargetRegisterClass; @@ -71,6 +72,7 @@ struct MachineFunctionInfo { class MachineFunction { Function *Fn; const TargetMachine &Target; + MCContext &Ctx; // RegInfo - Information about each register in use in the function. MachineRegisterInfo *RegInfo; @@ -121,13 +123,16 @@ class MachineFunction { // The alignment of the function. unsigned Alignment; - MachineFunction(const MachineFunction &); // intentionally unimplemented - void operator=(const MachineFunction&); // intentionally unimplemented + MachineFunction(const MachineFunction &); // DO NOT IMPLEMENT + void operator=(const MachineFunction&); // DO NOT IMPLEMENT public: - MachineFunction(Function *Fn, const TargetMachine &TM, unsigned FunctionNum); + MachineFunction(Function *Fn, const TargetMachine &TM, unsigned FunctionNum, + MCContext &Ctx); ~MachineFunction(); + MCContext &getContext() const { return Ctx; } + /// getFunction - Return the LLVM function that this machine code represents /// Function *getFunction() const { return Fn; } Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineInstrBuilder.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineInstrBuilder.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineInstrBuilder.h Tue Mar 16 21:24:53 2010 (r205226) @@ -131,6 +131,11 @@ public: MI->addOperand(MachineOperand::CreateMetadata(MD)); return *this; } + + const MachineInstrBuilder &addSym(MCSymbol *Sym) const { + MI->addOperand(MachineOperand::CreateMCSymbol(Sym)); + return *this; + } }; /// BuildMI - Builder interface. Specify how to create the initial instruction Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineJumpTableInfo.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineJumpTableInfo.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineJumpTableInfo.h Tue Mar 16 21:24:53 2010 (r205226) @@ -61,7 +61,11 @@ public: /// .set L4_5_set_123, LBB123 - LJTI1_2 /// .word L4_5_set_123 EK_LabelDifference32, - + + /// EK_Inline - Jump table entries are emitted inline at their point of + /// use. It is the responsibility of the target to emit the entries. + EK_Inline, + /// EK_Custom32 - Each entry is a 32-bit value that is custom lowered by the /// TargetLowering::LowerCustomJumpTableEntry hook. EK_Custom32 Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineLocation.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineLocation.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineLocation.h Tue Mar 16 21:24:53 2010 (r205226) @@ -22,13 +22,13 @@ #define LLVM_CODEGEN_MACHINELOCATION_H namespace llvm { - + class MCSymbol; + class MachineLocation { private: bool IsRegister; // True if location is a register. unsigned Register; // gcc/gdb register number. int Offset; // Displacement if not register. - public: enum { // The target register number for an abstract frame pointer. The value is @@ -36,20 +36,11 @@ public: VirtualFP = ~0U }; MachineLocation() - : IsRegister(false) - , Register(0) - , Offset(0) - {} + : IsRegister(false), Register(0), Offset(0) {} explicit MachineLocation(unsigned R) - : IsRegister(true) - , Register(R) - , Offset(0) - {} + : IsRegister(true), Register(R), Offset(0) {} MachineLocation(unsigned R, int O) - : IsRegister(false) - , Register(R) - , Offset(O) - {} + : IsRegister(false), Register(R), Offset(O) {} // Accessors bool isReg() const { return IsRegister; } @@ -74,29 +65,25 @@ public: #endif }; +/// MachineMove - This class represents the save or restore of a callee saved +/// register that exception or debug info needs to know about. class MachineMove { private: - unsigned LabelID; // Label ID number for post-instruction - // address when result of move takes - // effect. - MachineLocation Destination; // Move to location. - MachineLocation Source; // Move from location. + /// Label - Symbol for post-instruction address when result of move takes + /// effect. + MCSymbol *Label; + // Move to & from location. + MachineLocation Destination, Source; public: - MachineMove() - : LabelID(0) - , Destination() - , Source() - {} - - MachineMove(unsigned ID, MachineLocation &D, MachineLocation &S) - : LabelID(ID) - , Destination(D) - , Source(S) - {} + MachineMove() : Label(0) {} + + MachineMove(MCSymbol *label, const MachineLocation &D, + const MachineLocation &S) + : Label(label), Destination(D), Source(S) {} // Accessors - unsigned getLabelID() const { return LabelID; } + MCSymbol *getLabel() const { return Label; } const MachineLocation &getDestination() const { return Destination; } const MachineLocation &getSource() const { return Source; } }; Modified: projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineModuleInfo.h ============================================================================== --- projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineModuleInfo.h Tue Mar 16 20:42:54 2010 (r205225) +++ projects/clangbsd/contrib/llvm/include/llvm/CodeGen/MachineModuleInfo.h Tue Mar 16 21:24:53 2010 (r205226) @@ -31,48 +31,43 @@ #ifndef LLVM_CODEGEN_MACHINEMODULEINFO_H #define LLVM_CODEGEN_MACHINEMODULEINFO_H +#include "llvm/Pass.h" +#include "llvm/GlobalValue.h" +#include "llvm/Metadata.h" +#include "llvm/CodeGen/MachineLocation.h" +#include "llvm/MC/MCContext.h" #include "llvm/Support/Dwarf.h" +#include "llvm/Support/ValueHandle.h" #include "llvm/System/DataTypes.h" -#include "llvm/ADT/SmallVector.h" #include "llvm/ADT/DenseMap.h" -#include "llvm/ADT/UniqueVector.h" +#include "llvm/ADT/PointerIntPair.h" #include "llvm/ADT/SmallPtrSet.h" -#include "llvm/ADT/SmallSet.h" -#include "llvm/ADT/StringMap.h" -#include "llvm/CodeGen/MachineLocation.h" -#include "llvm/GlobalValue.h" -#include "llvm/Pass.h" -#include "llvm/Metadata.h" -#include "llvm/Support/ValueHandle.h" +#include "llvm/ADT/SmallVector.h" namespace llvm { //===----------------------------------------------------------------------===// // Forward declarations. class Constant; -class MCSymbol; -class MDNode; class GlobalVariable; +class MDNode; class MachineBasicBlock; class MachineFunction; class Module; class PointerType; class StructType; - /// MachineModuleInfoImpl - This class can be derived from and used by targets /// to hold private target-specific information for each Module. Objects of /// type are accessed/created with MMI::getInfo and destroyed when the /// MachineModuleInfo is destroyed. class MachineModuleInfoImpl { public: + typedef PointerIntPair StubValueTy; virtual ~MachineModuleInfoImpl(); - - typedef std::vector > - SymbolListTy; + typedef std::vector > SymbolListTy; protected: - static SymbolListTy - GetSortedStubs(const DenseMap &Map); + static SymbolListTy GetSortedStubs(const DenseMap&); }; @@ -82,37 +77,33 @@ protected: /// the current function. /// struct LandingPadInfo { - MachineBasicBlock *LandingPadBlock; // Landing pad block. - SmallVector BeginLabels; // Labels prior to invoke. - SmallVector EndLabels; // Labels after invoke. - unsigned LandingPadLabel; // Label at beginning of landing pad. - Function *Personality; // Personality function. - std::vector TypeIds; // List of type ids (filters negative) + MachineBasicBlock *LandingPadBlock; // Landing pad block. + SmallVector BeginLabels; // Labels prior to invoke. + SmallVector EndLabels; // Labels after invoke. + MCSymbol *LandingPadLabel; // Label at beginning of landing pad. + Function *Personality; // Personality function. + std::vector TypeIds; // List of type ids (filters negative) explicit LandingPadInfo(MachineBasicBlock *MBB) - : LandingPadBlock(MBB) - , LandingPadLabel(0) *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 21:28:54 2010 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 9A8B2106566C; Tue, 16 Mar 2010 21:28:54 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8A5378FC14; Tue, 16 Mar 2010 21:28: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 o2GLSsBV001181; Tue, 16 Mar 2010 21:28:54 GMT (envelope-from rdivacky@svn.freebsd.org) Received: (from rdivacky@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GLSsBT001179; Tue, 16 Mar 2010 21:28:54 GMT (envelope-from rdivacky@svn.freebsd.org) Message-Id: <201003162128.o2GLSsBT001179@svn.freebsd.org> From: Roman Divacky Date: Tue, 16 Mar 2010 21:28: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: r205227 - projects/clangbsd/gnu/lib/libgcc 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, 16 Mar 2010 21:28:54 -0000 Author: rdivacky Date: Tue Mar 16 21:28:54 2010 New Revision: 205227 URL: http://svn.freebsd.org/changeset/base/205227 Log: Build with clang, add -fheinous-gnu-extensions. Modified: projects/clangbsd/gnu/lib/libgcc/Makefile Modified: projects/clangbsd/gnu/lib/libgcc/Makefile ============================================================================== --- projects/clangbsd/gnu/lib/libgcc/Makefile Tue Mar 16 21:24:53 2010 (r205226) +++ projects/clangbsd/gnu/lib/libgcc/Makefile Tue Mar 16 21:28:54 2010 (r205227) @@ -15,20 +15,13 @@ MK_SSP= no .include "${.CURDIR}/../../usr.bin/cc/Makefile.tgt" -# XXX: a few C++ related GCC builtins are missing -# http://llvm.org/bugs/show_bug.cgi?id=5255 -CC:=${CC:C/^cc|^clang/gcc/} -.if ${CC:M*lib32*} -CC:=${CC:C/-B(.*)/-B\1\/usr\/lib32 /} -.endif - .PATH: ${GCCDIR}/config/${GCC_CPU} ${GCCDIR}/config ${GCCDIR} CFLAGS+= -DIN_GCC -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED \ -DHAVE_GTHR_DEFAULT \ -I${GCCLIB}/include \ -I${GCCDIR}/config -I${GCCDIR} -I. \ - -I${.CURDIR}/../../usr.bin/cc/cc_tools + -I${.CURDIR}/../../usr.bin/cc/cc_tools -fheinous-gnu-extensions LDFLAGS+= -nodefaultlibs LDADD+= -lc From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 21:30:29 2010 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 76F321065672; Tue, 16 Mar 2010 21:30:29 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 66F4C8FC17; Tue, 16 Mar 2010 21:30:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2GLUTc8001586; Tue, 16 Mar 2010 21:30:29 GMT (envelope-from rdivacky@svn.freebsd.org) Received: (from rdivacky@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GLUTIk001584; Tue, 16 Mar 2010 21:30:29 GMT (envelope-from rdivacky@svn.freebsd.org) Message-Id: <201003162130.o2GLUTIk001584@svn.freebsd.org> From: Roman Divacky Date: Tue, 16 Mar 2010 21: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: r205228 - projects/clangbsd/gnu/usr.bin/cc 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, 16 Mar 2010 21:30:29 -0000 Author: rdivacky Date: Tue Mar 16 21:30:29 2010 New Revision: 205228 URL: http://svn.freebsd.org/changeset/base/205228 Log: Build with clang. I dont know if the miscompilation is gone but gcc is not used for pretty much anything now. Modified: projects/clangbsd/gnu/usr.bin/cc/Makefile.inc Modified: projects/clangbsd/gnu/usr.bin/cc/Makefile.inc ============================================================================== --- projects/clangbsd/gnu/usr.bin/cc/Makefile.inc Tue Mar 16 21:28:54 2010 (r205227) +++ projects/clangbsd/gnu/usr.bin/cc/Makefile.inc Tue Mar 16 21:30:29 2010 (r205228) @@ -1,7 +1,5 @@ # $FreeBSD$ -CC:=${CC:C/^cc|^clang/gcc/} - .include "../Makefile.inc" # Sometimes this is .include'd several times... From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 21:41:25 2010 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 63BAE106564A; Tue, 16 Mar 2010 21:41:25 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 539968FC21; Tue, 16 Mar 2010 21:41:25 +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 o2GLfPI2003996; Tue, 16 Mar 2010 21:41:25 GMT (envelope-from rdivacky@svn.freebsd.org) Received: (from rdivacky@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GLfPSR003994; Tue, 16 Mar 2010 21:41:25 GMT (envelope-from rdivacky@svn.freebsd.org) Message-Id: <201003162141.o2GLfPSR003994@svn.freebsd.org> From: Roman Divacky Date: Tue, 16 Mar 2010 21:41:25 +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: r205229 - projects/clangbsd/share/mk X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Mar 2010 21:41:25 -0000 Author: rdivacky Date: Tue Mar 16 21:41:25 2010 New Revision: 205229 URL: http://svn.freebsd.org/changeset/base/205229 Log: default to WITH_CLANG and WITH_CLANG_IS_CC Modified: projects/clangbsd/share/mk/bsd.own.mk Modified: projects/clangbsd/share/mk/bsd.own.mk ============================================================================== --- projects/clangbsd/share/mk/bsd.own.mk Tue Mar 16 21:30:29 2010 (r205228) +++ projects/clangbsd/share/mk/bsd.own.mk Tue Mar 16 21:41:25 2010 (r205229) @@ -305,6 +305,8 @@ WITH_IDEA= BZIP2 \ CALENDAR \ CDDL \ + CLANG \ + CLANG_IS_CC \ CPP \ CRYPT \ CTM \ @@ -407,8 +409,6 @@ MK_${var}:= yes BIND_LIBS \ BIND_SIGCHASE \ BIND_XML \ - CLANG \ - CLANG_IS_CC \ GNU_CPIO \ HESIOD \ IDEA From owner-svn-src-projects@FreeBSD.ORG Tue Mar 16 21:44:21 2010 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 5E8F5106566B; Tue, 16 Mar 2010 21:44:21 +0000 (UTC) (envelope-from rdivacky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4E5B88FC21; Tue, 16 Mar 2010 21:44: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 o2GLiLHi004730; Tue, 16 Mar 2010 21:44:21 GMT (envelope-from rdivacky@svn.freebsd.org) Received: (from rdivacky@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2GLiLNg004728; Tue, 16 Mar 2010 21:44:21 GMT (envelope-from rdivacky@svn.freebsd.org) Message-Id: <201003162144.o2GLiLNg004728@svn.freebsd.org> From: Roman Divacky Date: Tue, 16 Mar 2010 21:44: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: r205230 - projects/clangbsd/share/mk X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 16 Mar 2010 21:44:21 -0000 Author: rdivacky Date: Tue Mar 16 21:44:21 2010 New Revision: 205230 URL: http://svn.freebsd.org/changeset/base/205230 Log: Temporarily disconnect libobjc. First of all it cant be built with clang because of missing builtin_apply which is broken even with gcc on majority of platforms and second of all because it seems that the future for objc is either ports or base but libobjc2 by David Chisnall anyway. Modified: projects/clangbsd/share/mk/bsd.own.mk Modified: projects/clangbsd/share/mk/bsd.own.mk ============================================================================== --- projects/clangbsd/share/mk/bsd.own.mk Tue Mar 16 21:41:25 2010 (r205229) +++ projects/clangbsd/share/mk/bsd.own.mk Tue Mar 16 21:44:21 2010 (r205230) @@ -356,7 +356,6 @@ WITH_IDEA= NLS_CATALOGS \ NS_CACHING \ NTP \ - OBJC \ OPENSSH \ OPENSSL \ PAM \ @@ -411,7 +410,8 @@ MK_${var}:= yes BIND_XML \ GNU_CPIO \ HESIOD \ - IDEA + IDEA \ + OBJC .if defined(WITH_${var}) && defined(WITHOUT_${var}) .error WITH_${var} and WITHOUT_${var} can't both be set. .endif From owner-svn-src-projects@FreeBSD.ORG Wed Mar 17 00:53:58 2010 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 BAD201065696; Wed, 17 Mar 2010 00:53:58 +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 A59698FC0A; Wed, 17 Mar 2010 00:53:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2H0rwST047170; Wed, 17 Mar 2010 00:53:58 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2H0rwBw047149; Wed, 17 Mar 2010 00:53:58 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003170053.o2H0rwBw047149@svn.freebsd.org> From: Marcel Moolenaar Date: Wed, 17 Mar 2010 00:53:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205235 - in projects/altix/sys: amd64/amd64 amd64/conf amd64/include amd64/linux32 arm/arm arm/conf cddl/contrib/opensolaris/uts/common/fs/zfs cddl/contrib/opensolaris/uts/common/fs/zf... 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, 17 Mar 2010 00:53:58 -0000 Author: marcel Date: Wed Mar 17 00:53:58 2010 New Revision: 205235 URL: http://svn.freebsd.org/changeset/base/205235 Log: Merge svn+ssh://svn.freebsd.org/base/head@205234 Modified: projects/altix/sys/amd64/amd64/db_trace.c projects/altix/sys/amd64/amd64/exception.S projects/altix/sys/amd64/amd64/identcpu.c projects/altix/sys/amd64/amd64/mca.c projects/altix/sys/amd64/amd64/pmap.c projects/altix/sys/amd64/amd64/vm_machdep.c projects/altix/sys/amd64/conf/GENERIC projects/altix/sys/amd64/conf/NOTES projects/altix/sys/amd64/conf/XENHVM projects/altix/sys/amd64/include/elf.h projects/altix/sys/amd64/include/mca.h projects/altix/sys/amd64/include/reg.h projects/altix/sys/amd64/include/specialreg.h projects/altix/sys/amd64/linux32/linux32_sysvec.c projects/altix/sys/arm/arm/busdma_machdep.c projects/altix/sys/arm/arm/identcpu.c projects/altix/sys/arm/arm/vm_machdep.c projects/altix/sys/arm/conf/BWCT.hints projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.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/arc.h projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/altix/sys/compat/freebsd32/freebsd32.h projects/altix/sys/compat/freebsd32/freebsd32_misc.c projects/altix/sys/compat/freebsd32/freebsd32_proto.h projects/altix/sys/compat/freebsd32/freebsd32_syscall.h projects/altix/sys/compat/freebsd32/freebsd32_syscalls.c projects/altix/sys/compat/freebsd32/freebsd32_sysent.c projects/altix/sys/compat/freebsd32/freebsd32_util.h projects/altix/sys/compat/freebsd32/syscalls.master projects/altix/sys/compat/ia32/ia32_reg.h projects/altix/sys/compat/ia32/ia32_sysvec.c projects/altix/sys/conf/files.amd64 projects/altix/sys/conf/files.ia64 projects/altix/sys/conf/options.amd64 projects/altix/sys/conf/options.i386 projects/altix/sys/conf/options.ia64 projects/altix/sys/dev/aac/aac.c projects/altix/sys/dev/acpica/acpi_video.c projects/altix/sys/dev/agp/agp_i810.c projects/altix/sys/dev/ata/ata-raid.c projects/altix/sys/dev/bge/if_bge.c projects/altix/sys/dev/bwn/if_bwn.c projects/altix/sys/dev/drm/drm_pciids.h projects/altix/sys/dev/drm/i915_drv.h projects/altix/sys/dev/drm/i915_reg.h projects/altix/sys/dev/mii/brgphy.c projects/altix/sys/dev/msk/if_msk.c projects/altix/sys/dev/msk/if_mskreg.h projects/altix/sys/dev/pci/vga_pci.c projects/altix/sys/dev/siba/siba_core.c projects/altix/sys/dev/usb/controller/usb_controller.c projects/altix/sys/dev/usb/controller/uss820dci.c projects/altix/sys/dev/usb/input/ukbd.c projects/altix/sys/dev/usb/serial/uftdi.c projects/altix/sys/dev/usb/serial/uvisor.c projects/altix/sys/dev/usb/template/usb_template.c projects/altix/sys/dev/usb/template/usb_template.h projects/altix/sys/dev/usb/template/usb_template_mtp.c projects/altix/sys/dev/usb/usb_device.c projects/altix/sys/dev/usb/usb_device.h projects/altix/sys/dev/usb/usb_generic.c projects/altix/sys/dev/usb/usb_transfer.c projects/altix/sys/dev/usb/usbdevs 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/xen/netback/netback.c projects/altix/sys/fs/fdescfs/fdesc_vnops.c projects/altix/sys/fs/nfsserver/nfs_nfsdport.c projects/altix/sys/fs/procfs/procfs_dbregs.c projects/altix/sys/fs/procfs/procfs_fpregs.c projects/altix/sys/fs/procfs/procfs_ioctl.c projects/altix/sys/fs/procfs/procfs_map.c projects/altix/sys/fs/procfs/procfs_regs.c projects/altix/sys/i386/conf/GENERIC projects/altix/sys/i386/conf/NOTES projects/altix/sys/i386/conf/XEN projects/altix/sys/i386/i386/identcpu.c projects/altix/sys/i386/i386/mca.c projects/altix/sys/i386/i386/mp_machdep.c projects/altix/sys/i386/i386/pmap.c projects/altix/sys/i386/include/mca.h projects/altix/sys/i386/include/specialreg.h projects/altix/sys/i386/xen/mp_machdep.c projects/altix/sys/ia64/conf/GENERIC projects/altix/sys/ia64/conf/NOTES projects/altix/sys/ia64/ia64/clock.c projects/altix/sys/ia64/ia64/exception.S projects/altix/sys/ia64/ia64/genassym.c projects/altix/sys/ia64/ia64/highfp.c projects/altix/sys/ia64/ia64/interrupt.c projects/altix/sys/ia64/ia64/locore.S projects/altix/sys/ia64/ia64/machdep.c projects/altix/sys/ia64/ia64/mp_machdep.c projects/altix/sys/ia64/ia64/nexus.c projects/altix/sys/ia64/ia64/sal.c projects/altix/sys/ia64/include/clock.h projects/altix/sys/ia64/include/elf.h projects/altix/sys/ia64/include/intr.h projects/altix/sys/ia64/include/intrcnt.h projects/altix/sys/ia64/include/reg.h projects/altix/sys/ia64/include/smp.h projects/altix/sys/kern/imgact_elf.c projects/altix/sys/kern/kern_jail.c projects/altix/sys/kern/kern_ktr.c projects/altix/sys/kern/kern_module.c projects/altix/sys/kern/kern_thr.c projects/altix/sys/kern/kern_umtx.c projects/altix/sys/kern/sys_generic.c projects/altix/sys/kern/sys_process.c projects/altix/sys/kern/uipc_socket.c projects/altix/sys/kern/vfs_aio.c projects/altix/sys/kern/vfs_syscalls.c projects/altix/sys/mips/cavium/dev/rgmii/octeon_rgmx.c projects/altix/sys/mips/cavium/octeon_machdep.c projects/altix/sys/mips/conf/AR71XX projects/altix/sys/mips/conf/OCTEON1 projects/altix/sys/mips/conf/OCTEON1-32 projects/altix/sys/mips/include/cpuregs.h projects/altix/sys/mips/include/kdb.h projects/altix/sys/mips/include/param.h projects/altix/sys/mips/include/pmap.h projects/altix/sys/mips/include/smp.h projects/altix/sys/mips/mips/db_trace.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/vm_machdep.c projects/altix/sys/modules/linux/Makefile projects/altix/sys/modules/procfs/Makefile projects/altix/sys/modules/zfs/Makefile projects/altix/sys/net/bpf.c projects/altix/sys/net/flowtable.c projects/altix/sys/net/flowtable.h projects/altix/sys/net/if.h projects/altix/sys/net/if_llatbl.c projects/altix/sys/net/if_llatbl.h projects/altix/sys/net/if_tap.c projects/altix/sys/net/if_tun.c projects/altix/sys/net/if_var.h projects/altix/sys/net/route.h projects/altix/sys/net80211/ieee80211_proto.c projects/altix/sys/net80211/ieee80211_sta.c projects/altix/sys/net80211/ieee80211_tdma.c projects/altix/sys/netgraph/ng_socket.c projects/altix/sys/netgraph/ng_socketvar.h projects/altix/sys/netinet/in_pcb.c projects/altix/sys/netinet/in_pcb.h projects/altix/sys/netinet/ip_divert.c projects/altix/sys/netinet/ip_fw.h projects/altix/sys/netinet/ip_input.c projects/altix/sys/netinet/ip_ipsec.c projects/altix/sys/netinet/ip_output.c projects/altix/sys/netinet/ipfw/ip_dn_glue.c projects/altix/sys/netinet/ipfw/ip_dn_io.c projects/altix/sys/netinet/ipfw/ip_dn_private.h projects/altix/sys/netinet/ipfw/ip_dummynet.c projects/altix/sys/netinet/ipfw/ip_fw2.c projects/altix/sys/netinet/ipfw/ip_fw_dynamic.c projects/altix/sys/netinet/ipfw/ip_fw_log.c projects/altix/sys/netinet/ipfw/ip_fw_sockopt.c projects/altix/sys/netinet/raw_ip.c projects/altix/sys/netinet/sctp_crc32.c projects/altix/sys/netinet/sctp_crc32.h projects/altix/sys/netinet/tcp_subr.c projects/altix/sys/netinet/udp_usrreq.c projects/altix/sys/netinet6/ip6_output.c projects/altix/sys/pc98/conf/GENERIC projects/altix/sys/powerpc/aim/mmu_oea64.c projects/altix/sys/powerpc/conf/GENERIC projects/altix/sys/sparc64/conf/GENERIC projects/altix/sys/sun4v/conf/GENERIC projects/altix/sys/sys/pcpu.h projects/altix/sys/sys/pioctl.h projects/altix/sys/sys/pmc.h projects/altix/sys/sys/ptrace.h Directory Properties: projects/altix/lib/libstand/ (props changed) projects/altix/sys/ (props changed) Modified: projects/altix/sys/amd64/amd64/db_trace.c ============================================================================== --- projects/altix/sys/amd64/amd64/db_trace.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/amd64/db_trace.c Wed Mar 17 00:53:58 2010 (r205235) @@ -319,7 +319,7 @@ db_nextframe(struct amd64_frame **fp, db frame_type = INTERRUPT; else if (strcmp(name, "Xfast_syscall") == 0) frame_type = SYSCALL; -#ifdef COMPAT_IA32 +#ifdef COMPAT_FREEBSD32 else if (strcmp(name, "Xint0x80_syscall") == 0) frame_type = SYSCALL; #endif Modified: projects/altix/sys/amd64/amd64/exception.S ============================================================================== --- projects/altix/sys/amd64/amd64/exception.S Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/amd64/exception.S Wed Mar 17 00:53:58 2010 (r205235) @@ -572,7 +572,7 @@ ENTRY(fork_trampoline) * included. */ -#ifdef COMPAT_IA32 +#ifdef COMPAT_FREEBSD32 .data .p2align 4 .text Modified: projects/altix/sys/amd64/amd64/identcpu.c ============================================================================== --- projects/altix/sys/amd64/amd64/identcpu.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/amd64/identcpu.c Wed Mar 17 00:53:58 2010 (r205235) @@ -187,7 +187,9 @@ printcpuinfo(void) if (cpu_vendor_id == CPU_VENDOR_INTEL || cpu_vendor_id == CPU_VENDOR_AMD || cpu_vendor_id == CPU_VENDOR_CENTAUR) { - printf(" Stepping = %u", cpu_id & 0xf); + printf(" Family = %x", CPUID_TO_FAMILY(cpu_id)); + printf(" Model = %x", CPUID_TO_MODEL(cpu_id)); + printf(" Stepping = %u", cpu_id & CPUID_STEPPING); if (cpu_high > 0) { /* Modified: projects/altix/sys/amd64/amd64/mca.c ============================================================================== --- projects/altix/sys/amd64/amd64/mca.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/amd64/mca.c Wed Mar 17 00:53:58 2010 (r205235) @@ -186,19 +186,46 @@ mca_error_request(uint16_t mca_error) return ("???"); } +static const char * +mca_error_mmtype(uint16_t mca_error) +{ + + switch ((mca_error & 0x70) >> 4) { + case 0x0: + return ("GEN"); + case 0x1: + return ("RD"); + case 0x2: + return ("WR"); + case 0x3: + return ("AC"); + case 0x4: + return ("MS"); + } + return ("???"); +} + /* Dump details about a single machine check. */ static void __nonnull(1) mca_log(const struct mca_record *rec) { uint16_t mca_error; - printf("MCA: bank %d, status 0x%016llx\n", rec->mr_bank, + printf("MCA: Bank %d, Status 0x%016llx\n", rec->mr_bank, (long long)rec->mr_status); - printf("MCA: CPU %d ", rec->mr_apic_id); + printf("MCA: Global Cap 0x%016llx, Status 0x%016llx\n", + (long long)rec->mr_mcg_cap, (long long)rec->mr_mcg_status); + printf("MCA: Vendor \"%s\", ID 0x%x, APIC ID %d\n", cpu_vendor, + rec->mr_cpu_id, rec->mr_apic_id); + printf("MCA: CPU %d ", rec->mr_cpu); if (rec->mr_status & MC_STATUS_UC) printf("UNCOR "); - else + else { printf("COR "); + if (rec->mr_mcg_cap & MCG_CAP_TES_P) + printf("(%lld) ", ((long long)rec->mr_status & + MC_STATUS_COR_COUNT) >> 38); + } if (rec->mr_status & MC_STATUS_PCC) printf("PCC "); if (rec->mr_status & MC_STATUS_OVER) @@ -221,6 +248,9 @@ mca_log(const struct mca_record *rec) case 0x0004: printf("FRC error"); break; + case 0x0005: + printf("internal parity error"); + break; case 0x0400: printf("internal timer error"); break; @@ -245,6 +275,17 @@ mca_log(const struct mca_record *rec) break; } + /* Memory controller error. */ + if ((mca_error & 0xef80) == 0x0080) { + printf("%s channel ", mca_error_mmtype(mca_error)); + if ((mca_error & 0x000f) != 0x000f) + printf("%d", mca_error & 0x000f); + else + printf("??"); + printf(" memory error"); + break; + } + /* Cache error. */ if ((mca_error & 0xef00) == 0x0100) { printf("%sCACHE %s %s error", @@ -322,6 +363,11 @@ mca_check_status(int bank, struct mca_re rec->mr_misc = rdmsr(MSR_MC_MISC(bank)); rec->mr_tsc = rdtsc(); rec->mr_apic_id = PCPU_GET(apic_id); + rec->mr_mcg_cap = rdmsr(MSR_MCG_CAP); + rec->mr_mcg_status = rdmsr(MSR_MCG_STATUS); + rec->mr_cpu_id = cpu_id; + rec->mr_cpu_vendor_id = cpu_vendor_id; + rec->mr_cpu = PCPU_GET(cpuid); /* * Clear machine check. Don't do this for uncorrectable Modified: projects/altix/sys/amd64/amd64/pmap.c ============================================================================== --- projects/altix/sys/amd64/amd64/pmap.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/amd64/pmap.c Wed Mar 17 00:53:58 2010 (r205235) @@ -152,7 +152,7 @@ __FBSDID("$FreeBSD$"); #if !defined(DIAGNOSTIC) #ifdef __GNUC_GNU_INLINE__ -#define PMAP_INLINE inline +#define PMAP_INLINE __attribute__((__gnu_inline__)) inline #else #define PMAP_INLINE extern inline #endif @@ -1105,7 +1105,8 @@ pmap_invalidate_cache_range(vm_offset_t if (cpu_feature & CPUID_SS) ; /* If "Self Snoop" is supported, do nothing. */ - else if (cpu_feature & CPUID_CLFSH) { + else if ((cpu_feature & CPUID_CLFSH) != 0 && + eva - sva < 2 * 1024 * 1024) { /* * Otherwise, do per-cache line flush. Use the mfence @@ -1122,7 +1123,8 @@ pmap_invalidate_cache_range(vm_offset_t /* * No targeted cache flush methods are supported by CPU, - * globally invalidate cache as a last resort. + * or the supplied range is bigger then 2MB. + * Globally invalidate cache. */ pmap_invalidate_cache(); } Modified: projects/altix/sys/amd64/amd64/vm_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/vm_machdep.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/amd64/vm_machdep.c Wed Mar 17 00:53:58 2010 (r205235) @@ -439,7 +439,7 @@ cpu_set_upcall_kse(struct thread *td, vo */ cpu_thread_clean(td); -#ifdef COMPAT_IA32 +#ifdef COMPAT_FREEBSD32 if (td->td_proc->p_sysent->sv_flags & SV_ILP32) { /* * Set the trap frame to point at the beginning of the uts @@ -490,7 +490,7 @@ cpu_set_user_tls(struct thread *td, void if ((u_int64_t)tls_base >= VM_MAXUSER_ADDRESS) return (EINVAL); -#ifdef COMPAT_IA32 +#ifdef COMPAT_FREEBSD32 if (td->td_proc->p_sysent->sv_flags & SV_ILP32) { td->td_pcb->pcb_gsbase = (register_t)tls_base; return (0); Modified: projects/altix/sys/amd64/conf/GENERIC ============================================================================== --- projects/altix/sys/amd64/conf/GENERIC Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/conf/GENERIC Wed Mar 17 00:53:58 2010 (r205235) @@ -44,8 +44,7 @@ options PROCFS # Process filesystem ( options PSEUDOFS # Pseudo-filesystem framework options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization -options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty) -options COMPAT_IA32 # Compatible with i386 binaries +options COMPAT_FREEBSD32 # Compatible with i386 binaries options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_FREEBSD5 # Compatible with FreeBSD5 options COMPAT_FREEBSD6 # Compatible with FreeBSD6 Modified: projects/altix/sys/amd64/conf/NOTES ============================================================================== --- projects/altix/sys/amd64/conf/NOTES Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/conf/NOTES Wed Mar 17 00:53:58 2010 (r205235) @@ -483,7 +483,7 @@ options PMAP_SHPGPERPROC=201 #XXX these 32 bit binaries is added. # Enable 32-bit runtime support for FreeBSD/i386 binaries. -options COMPAT_IA32 +options COMPAT_FREEBSD32 # Enable iBCS2 runtime support for SCO and ISC binaries #XXX#options IBCS2 @@ -494,7 +494,7 @@ options COMPAT_IA32 # Enable Linux ABI emulation #XXX#options COMPAT_LINUX -# Enable 32-bit Linux ABI emulation (requires COMPAT_43 and COMPAT_IA32) +# Enable 32-bit Linux ABI emulation (requires COMPAT_43 and COMPAT_FREEBSD32) options COMPAT_LINUX32 # Enable the linux-like proc filesystem support (requires COMPAT_LINUX32 Modified: projects/altix/sys/amd64/conf/XENHVM ============================================================================== --- projects/altix/sys/amd64/conf/XENHVM Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/conf/XENHVM Wed Mar 17 00:53:58 2010 (r205235) @@ -45,8 +45,7 @@ options PROCFS # Process filesystem ( options PSEUDOFS # Pseudo-filesystem framework options GEOM_PART_GPT # GUID Partition Tables. options GEOM_LABEL # Provides labelization -options COMPAT_43TTY # BSD 4.3 TTY compat (sgtty) -options COMPAT_IA32 # Compatible with i386 binaries +options COMPAT_FREEBSD32 # Compatible with i386 binaries options COMPAT_FREEBSD4 # Compatible with FreeBSD4 options COMPAT_FREEBSD5 # Compatible with FreeBSD5 options COMPAT_FREEBSD6 # Compatible with FreeBSD6 Modified: projects/altix/sys/amd64/include/elf.h ============================================================================== --- projects/altix/sys/amd64/include/elf.h Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/include/elf.h Wed Mar 17 00:53:58 2010 (r205235) @@ -42,6 +42,7 @@ #include #define ELF_ARCH EM_X86_64 +#define ELF_ARCH32 EM_386 #define ELF_MACHINE_OK(x) ((x) == EM_X86_64) Modified: projects/altix/sys/amd64/include/mca.h ============================================================================== --- projects/altix/sys/amd64/include/mca.h Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/include/mca.h Wed Mar 17 00:53:58 2010 (r205235) @@ -37,6 +37,11 @@ struct mca_record { uint64_t mr_tsc; int mr_apic_id; int mr_bank; + uint64_t mr_mcg_cap; + uint64_t mr_mcg_status; + int mr_cpu_id; + int mr_cpu_vendor_id; + int mr_cpu; }; #ifdef _KERNEL Modified: projects/altix/sys/amd64/include/reg.h ============================================================================== --- projects/altix/sys/amd64/include/reg.h Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/include/reg.h Wed Mar 17 00:53:58 2010 (r205235) @@ -37,6 +37,10 @@ #ifndef _MACHINE_REG_H_ #define _MACHINE_REG_H_ +#if defined(_KERNEL) && !defined(_STANDALONE) +#include "opt_compat.h" +#endif + /* * Register set accessible via /proc/$pid/regs and PT_{SET,GET}REGS. */ @@ -116,6 +120,11 @@ struct dbreg { #define DBREG_DRX(d,x) ((d)->dr[(x)]) /* reference dr0 - dr15 by register number */ +#ifdef COMPAT_FREEBSD32 +#include +#include +#endif + #ifdef _KERNEL /* * XXX these interfaces are MI, so they should be declared in a MI place. Modified: projects/altix/sys/amd64/include/specialreg.h ============================================================================== --- projects/altix/sys/amd64/include/specialreg.h Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/include/specialreg.h Wed Mar 17 00:53:58 2010 (r205235) @@ -267,6 +267,7 @@ #define MSR_MTRR16kBase 0x258 #define MSR_MTRR4kBase 0x268 #define MSR_PAT 0x277 +#define MSR_MC0_CTL2 0x280 #define MSR_MTRRdefType 0x2ff #define MSR_MC0_CTL 0x400 #define MSR_MC0_STATUS 0x401 @@ -352,8 +353,10 @@ #define MCG_CAP_COUNT 0x000000ff #define MCG_CAP_CTL_P 0x00000100 #define MCG_CAP_EXT_P 0x00000200 +#define MCG_CAP_CMCI_P 0x00000400 #define MCG_CAP_TES_P 0x00000800 #define MCG_CAP_EXT_CNT 0x00ff0000 +#define MCG_CAP_SER_P 0x01000000 #define MCG_STATUS_RIPV 0x00000001 #define MCG_STATUS_EIPV 0x00000002 #define MCG_STATUS_MCIP 0x00000004 @@ -363,9 +366,14 @@ #define MSR_MC_STATUS(x) (MSR_MC0_STATUS + (x) * 4) #define MSR_MC_ADDR(x) (MSR_MC0_ADDR + (x) * 4) #define MSR_MC_MISC(x) (MSR_MC0_MISC + (x) * 4) +#define MSR_MC_CTL2(x) (MSR_MC0_CTL2 + (x)) /* If MCG_CAP_CMCI_P */ #define MC_STATUS_MCA_ERROR 0x000000000000ffffUL #define MC_STATUS_MODEL_ERROR 0x00000000ffff0000UL #define MC_STATUS_OTHER_INFO 0x01ffffff00000000UL +#define MC_STATUS_COR_COUNT 0x001fffc000000000UL /* If MCG_CAP_TES_P */ +#define MC_STATUS_TES_STATUS 0x0060000000000000UL /* If MCG_CAP_TES_P */ +#define MC_STATUS_AR 0x0080000000000000UL /* If MCG_CAP_CMCI_P */ +#define MC_STATUS_S 0x0100000000000000UL /* If MCG_CAP_CMCI_P */ #define MC_STATUS_PCC 0x0200000000000000UL #define MC_STATUS_ADDRV 0x0400000000000000UL #define MC_STATUS_MISCV 0x0800000000000000UL @@ -373,6 +381,10 @@ #define MC_STATUS_UC 0x2000000000000000UL #define MC_STATUS_OVER 0x4000000000000000UL #define MC_STATUS_VAL 0x8000000000000000UL +#define MC_MISC_RA_LSB 0x000000000000003fUL /* If MCG_CAP_SER_P */ +#define MC_MISC_ADDRESS_MODE 0x00000000000001c0UL /* If MCG_CAP_SER_P */ +#define MC_CTL2_THRESHOLD 0x0000000000003fffUL +#define MC_CTL2_CMCI_EN 0x0000000040000000UL /* * The following four 3-byte registers control the non-cacheable regions. Modified: projects/altix/sys/amd64/linux32/linux32_sysvec.c ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_sysvec.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/amd64/linux32/linux32_sysvec.c Wed Mar 17 00:53:58 2010 (r205235) @@ -34,8 +34,8 @@ __FBSDID("$FreeBSD$"); #include "opt_compat.h" -#ifndef COMPAT_IA32 -#error "Unable to compile Linux-emulator due to missing COMPAT_IA32 option!" +#ifndef COMPAT_FREEBSD32 +#error "Unable to compile Linux-emulator due to missing COMPAT_FREEBSD32 option!" #endif #define __ELF_WORD_SIZE 32 Modified: projects/altix/sys/arm/arm/busdma_machdep.c ============================================================================== --- projects/altix/sys/arm/arm/busdma_machdep.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/arm/arm/busdma_machdep.c Wed Mar 17 00:53:58 2010 (r205235) @@ -649,7 +649,8 @@ bus_dmamem_free(bus_dma_tag_t dmat, void KASSERT(map->allocbuffer == vaddr, ("Trying to freeing the wrong DMA buffer")); vaddr = map->origbuffer; - arm_unmap_nocache(map->allocbuffer, dmat->maxsize); + arm_unmap_nocache(map->allocbuffer, + dmat->maxsize + ((vm_offset_t)vaddr & PAGE_MASK)); } if (dmat->maxsize <= PAGE_SIZE && dmat->alignment < dmat->maxsize && Modified: projects/altix/sys/arm/arm/identcpu.c ============================================================================== --- projects/altix/sys/arm/arm/identcpu.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/arm/arm/identcpu.c Wed Mar 17 00:53:58 2010 (r205235) @@ -329,6 +329,7 @@ const struct cpu_classtab cpu_classes[] { "SA-1", "CPU_SA110" }, /* CPU_CLASS_SA1 */ { "XScale", "CPU_XSCALE_..." }, /* CPU_CLASS_XSCALE */ { "ARM11J", "CPU_ARM11" }, /* CPU_CLASS_ARM11J */ + { "Marvell", "CPU_MARVELL" }, /* CPU_CLASS_MARVELL */ }; /* @@ -404,6 +405,7 @@ identify_arm_cpu(void) case CPU_CLASS_SA1: case CPU_CLASS_XSCALE: case CPU_CLASS_ARM11J: + case CPU_CLASS_MARVELL: if ((ctrl & CPU_CONTROL_DC_ENABLE) == 0) printf(" DC disabled"); else Modified: projects/altix/sys/arm/arm/vm_machdep.c ============================================================================== --- projects/altix/sys/arm/arm/vm_machdep.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/arm/arm/vm_machdep.c Wed Mar 17 00:53:58 2010 (r205235) @@ -171,6 +171,9 @@ sf_buf_free(struct sf_buf *sf) if (sf->ref_count == 0) { TAILQ_INSERT_TAIL(&sf_buf_freelist, sf, free_entry); nsfbufsused--; + pmap_kremove(sf->kva); + sf->m = NULL; + LIST_REMOVE(sf, list_entry); if (sf_buf_alloc_want > 0) wakeup_one(&sf_buf_freelist); } @@ -502,9 +505,12 @@ arm_unmap_nocache(void *addr, vm_size_t size = round_page(size); i = (raddr - arm_nocache_startaddr) / (PAGE_SIZE); - for (; size > 0; size -= PAGE_SIZE, i++) + for (; size > 0; size -= PAGE_SIZE, i++) { arm_nocache_allocated[i / BITS_PER_INT] &= ~(1 << (i % BITS_PER_INT)); + pmap_kremove(raddr); + raddr += PAGE_SIZE; + } } #ifdef ARM_USE_SMALL_ALLOC Modified: projects/altix/sys/arm/conf/BWCT.hints ============================================================================== --- projects/altix/sys/arm/conf/BWCT.hints Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/arm/conf/BWCT.hints Wed Mar 17 00:53:58 2010 (r205235) @@ -4,6 +4,6 @@ hint.ds1672_rtc.0.at="iicbus0" hint.ds1672_rtc.0.addr=0xd0 -# NAtional Semiconductor LM75 temperature sensor sitting on the I2C bus +# National Semiconductor LM75 temperature sensor sitting on the I2C bus hint.lm75.0.at="iicbus0" hint.lm75.0.addr=0x9e Modified: projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Mar 17 00:37:15 2010 (r205234) +++ projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Mar 17 00:53:58 2010 (r205235) @@ -131,6 +131,7 @@ #include #include +#include #include static kmutex_t arc_reclaim_thr_lock; @@ -186,6 +187,11 @@ SYSCTL_QUAD(_vfs_zfs, OID_AUTO, arc_min, SYSCTL_INT(_vfs_zfs, OID_AUTO, mdcomp_disable, CTLFLAG_RDTUN, &zfs_mdcomp_disable, 0, "Disable metadata compression"); +#ifdef ZIO_USE_UMA +extern kmem_cache_t *zio_buf_cache[]; +extern kmem_cache_t *zio_data_buf_cache[]; +#endif + /* * Note that buffers can be in one of 6 states: * ARC_anon - anonymous (discussed below) @@ -218,13 +224,31 @@ SYSCTL_INT(_vfs_zfs, OID_AUTO, mdcomp_di * second level ARC benefit from these fast lookups. */ +#define ARCS_LOCK_PAD 128 +struct arcs_lock { + kmutex_t arcs_lock; +#ifdef _KERNEL + unsigned char pad[(ARCS_LOCK_PAD - sizeof (kmutex_t))]; +#endif +}; + +/* + * must be power of two for mask use to work + * + */ +#define ARC_BUFC_NUMDATALISTS 16 +#define ARC_BUFC_NUMMETADATALISTS 16 +#define ARC_BUFC_NUMLISTS (ARC_BUFC_NUMMETADATALISTS+ARC_BUFC_NUMDATALISTS) + typedef struct arc_state { - list_t arcs_list[ARC_BUFC_NUMTYPES]; /* list of evictable buffers */ uint64_t arcs_lsize[ARC_BUFC_NUMTYPES]; /* amount of evictable data */ uint64_t arcs_size; /* total amount of data in this state */ - kmutex_t arcs_mtx; + list_t arcs_lists[ARC_BUFC_NUMLISTS]; /* list of evictable buffers */ + struct arcs_lock arcs_locks[ARC_BUFC_NUMLISTS] __aligned(128); } arc_state_t; +#define ARCS_LOCK(s, i) &((s)->arcs_locks[(i)].arcs_lock) + /* The 6 states: */ static arc_state_t ARC_anon; static arc_state_t ARC_mru; @@ -248,7 +272,9 @@ typedef struct arc_stats { kstat_named_t arcstat_mru_ghost_hits; kstat_named_t arcstat_mfu_hits; kstat_named_t arcstat_mfu_ghost_hits; + kstat_named_t arcstat_allocated; kstat_named_t arcstat_deleted; + kstat_named_t arcstat_stolen; kstat_named_t arcstat_recycle_miss; kstat_named_t arcstat_mutex_miss; kstat_named_t arcstat_evict_skip; @@ -280,6 +306,19 @@ typedef struct arc_stats { kstat_named_t arcstat_l2_size; kstat_named_t arcstat_l2_hdr_size; kstat_named_t arcstat_memory_throttle_count; + kstat_named_t arcstat_l2_write_trylock_fail; + kstat_named_t arcstat_l2_write_in_l2; + kstat_named_t arcstat_l2_write_passed_headroom; + kstat_named_t arcstat_l2_write_spa_mismatch; + kstat_named_t arcstat_l2_write_hdr_io_in_progress; + kstat_named_t arcstat_l2_write_not_cacheable; + kstat_named_t arcstat_l2_write_full; + kstat_named_t arcstat_l2_write_buffer_iter; + kstat_named_t arcstat_l2_write_pios; + kstat_named_t arcstat_l2_write_bytes_written; + kstat_named_t arcstat_l2_write_buffer_bytes_scanned; + kstat_named_t arcstat_l2_write_buffer_list_iter; + kstat_named_t arcstat_l2_write_buffer_list_null_iter; } arc_stats_t; static arc_stats_t arc_stats = { @@ -297,7 +336,9 @@ static arc_stats_t arc_stats = { { "mru_ghost_hits", KSTAT_DATA_UINT64 }, { "mfu_hits", KSTAT_DATA_UINT64 }, { "mfu_ghost_hits", KSTAT_DATA_UINT64 }, + { "allocated", KSTAT_DATA_UINT64 }, { "deleted", KSTAT_DATA_UINT64 }, + { "stolen", KSTAT_DATA_UINT64 }, { "recycle_miss", KSTAT_DATA_UINT64 }, { "mutex_miss", KSTAT_DATA_UINT64 }, { "evict_skip", KSTAT_DATA_UINT64 }, @@ -328,7 +369,20 @@ static arc_stats_t arc_stats = { { "l2_io_error", KSTAT_DATA_UINT64 }, { "l2_size", KSTAT_DATA_UINT64 }, { "l2_hdr_size", KSTAT_DATA_UINT64 }, - { "memory_throttle_count", KSTAT_DATA_UINT64 } + { "memory_throttle_count", KSTAT_DATA_UINT64 }, + { "l2_write_trylock_fail", KSTAT_DATA_UINT64 }, + { "l2_write_in_l2", KSTAT_DATA_UINT64 }, + { "l2_write_passed_headroom", KSTAT_DATA_UINT64 }, + { "l2_write_spa_mismatch", KSTAT_DATA_UINT64 }, + { "l2_write_io_in_progress", KSTAT_DATA_UINT64 }, + { "l2_write_not_cacheable", KSTAT_DATA_UINT64 }, + { "l2_write_full", KSTAT_DATA_UINT64 }, + { "l2_write_buffer_iter", KSTAT_DATA_UINT64 }, + { "l2_write_pios", KSTAT_DATA_UINT64 }, + { "l2_write_bytes_written", KSTAT_DATA_UINT64 }, + { "l2_write_buffer_bytes_scanned", KSTAT_DATA_UINT64 }, + { "l2_write_buffer_list_iter", KSTAT_DATA_UINT64 }, + { "l2_write_buffer_list_null_iter", KSTAT_DATA_UINT64 } }; #define ARCSTAT(stat) (arc_stats.stat.value.ui64) @@ -541,13 +595,19 @@ static buf_hash_table_t buf_hash_table; uint64_t zfs_crc64_table[256]; +#ifdef ZIO_USE_UMA +extern kmem_cache_t *zio_buf_cache[]; +extern kmem_cache_t *zio_data_buf_cache[]; +#endif + /* * Level 2 ARC */ -#define L2ARC_WRITE_SIZE (8 * 1024 * 1024) /* initial write max */ -#define L2ARC_HEADROOM 4 /* num of writes */ +#define L2ARC_WRITE_SIZE (64 * 1024 * 1024) /* initial write max */ +#define L2ARC_HEADROOM 128 /* num of writes */ #define L2ARC_FEED_SECS 1 /* caching interval */ +#define L2ARC_FEED_SECS_SHIFT 1 /* caching interval shift */ #define l2arc_writes_sent ARCSTAT(arcstat_l2_writes_sent) #define l2arc_writes_done ARCSTAT(arcstat_l2_writes_done) @@ -559,7 +619,66 @@ uint64_t l2arc_write_max = L2ARC_WRITE_S uint64_t l2arc_write_boost = L2ARC_WRITE_SIZE; /* extra write during warmup */ uint64_t l2arc_headroom = L2ARC_HEADROOM; /* number of dev writes */ uint64_t l2arc_feed_secs = L2ARC_FEED_SECS; /* interval seconds */ -boolean_t l2arc_noprefetch = B_TRUE; /* don't cache prefetch bufs */ +uint64_t l2arc_feed_secs_shift = L2ARC_FEED_SECS_SHIFT; /* interval seconds shift */ +boolean_t l2arc_noprefetch = B_FALSE; /* don't cache prefetch bufs */ + + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, l2arc_write_max, CTLFLAG_RW, + &l2arc_write_max, 0, "max write size"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, l2arc_write_boost, CTLFLAG_RW, + &l2arc_write_boost, 0, "extra write during warmup"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, l2arc_headroom, CTLFLAG_RW, + &l2arc_headroom, 0, "number of dev writes"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, l2arc_feed_secs, CTLFLAG_RW, + &l2arc_feed_secs, 0, "interval seconds"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, l2arc_feed_secs_shift, CTLFLAG_RW, + &l2arc_feed_secs_shift, 0, "power of 2 division of feed seconds"); + +SYSCTL_INT(_vfs_zfs, OID_AUTO, l2arc_noprefetch, CTLFLAG_RW, + &l2arc_noprefetch, 0, "don't cache prefetch bufs"); + + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, anon_size, CTLFLAG_RD, + &ARC_anon.arcs_size, 0, "size of anonymous state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, anon_metadata_lsize, CTLFLAG_RD, + &ARC_anon.arcs_lsize[ARC_BUFC_METADATA], 0, "size of anonymous state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, anon_data_lsize, CTLFLAG_RD, + &ARC_anon.arcs_lsize[ARC_BUFC_DATA], 0, "size of anonymous state"); + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mru_size, CTLFLAG_RD, + &ARC_mru.arcs_size, 0, "size of mru state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mru_metadata_lsize, CTLFLAG_RD, + &ARC_mru.arcs_lsize[ARC_BUFC_METADATA], 0, "size of metadata in mru state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mru_data_lsize, CTLFLAG_RD, + &ARC_mru.arcs_lsize[ARC_BUFC_DATA], 0, "size of data in mru state"); + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mru_ghost_size, CTLFLAG_RD, + &ARC_mru_ghost.arcs_size, 0, "size of mru ghost state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mru_ghost_metadata_lsize, CTLFLAG_RD, + &ARC_mru_ghost.arcs_lsize[ARC_BUFC_METADATA], 0, + "size of metadata in mru ghost state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mru_ghost_data_lsize, CTLFLAG_RD, + &ARC_mru_ghost.arcs_lsize[ARC_BUFC_DATA], 0, + "size of data in mru ghost state"); + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mfu_size, CTLFLAG_RD, + &ARC_mfu.arcs_size, 0, "size of mfu state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mfu_metadata_lsize, CTLFLAG_RD, + &ARC_mfu.arcs_lsize[ARC_BUFC_METADATA], 0, "size of metadata in mfu state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mfu_data_lsize, CTLFLAG_RD, + &ARC_mfu.arcs_lsize[ARC_BUFC_DATA], 0, "size of data in mfu state"); + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mfu_ghost_size, CTLFLAG_RD, + &ARC_mfu_ghost.arcs_size, 0, "size of mfu ghost state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mfu_ghost_metadata_lsize, CTLFLAG_RD, + &ARC_mfu_ghost.arcs_lsize[ARC_BUFC_METADATA], 0, + "size of metadata in mfu ghost state"); +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, mfu_ghost_data_lsize, CTLFLAG_RD, + &ARC_mfu_ghost.arcs_lsize[ARC_BUFC_DATA], 0, + "size of data in mfu ghost state"); + +SYSCTL_QUAD(_vfs_zfs, OID_AUTO, l2c_only_size, CTLFLAG_RD, + &ARC_l2c_only.arcs_size, 0, "size of mru state"); /* * L2ARC Internals @@ -953,20 +1072,42 @@ arc_buf_freeze(arc_buf_t *buf) } static void +get_buf_info(arc_buf_hdr_t *ab, arc_state_t *state, list_t **list, kmutex_t **lock) +{ + uint64_t buf_hashid = buf_hash(ab->b_spa, &ab->b_dva, ab->b_birth); + + if (ab->b_type == ARC_BUFC_METADATA) + buf_hashid &= (ARC_BUFC_NUMMETADATALISTS-1); + else { + buf_hashid &= (ARC_BUFC_NUMDATALISTS-1); + buf_hashid += ARC_BUFC_NUMMETADATALISTS; + } + + *list = &state->arcs_lists[buf_hashid]; + *lock = ARCS_LOCK(state, buf_hashid); +} + + +static void add_reference(arc_buf_hdr_t *ab, kmutex_t *hash_lock, void *tag) { + ASSERT(MUTEX_HELD(hash_lock)); if ((refcount_add(&ab->b_refcnt, tag) == 1) && (ab->b_state != arc_anon)) { + list_t *list; + kmutex_t *lock; uint64_t delta = ab->b_size * ab->b_datacnt; - list_t *list = &ab->b_state->arcs_list[ab->b_type]; uint64_t *size = &ab->b_state->arcs_lsize[ab->b_type]; - ASSERT(!MUTEX_HELD(&ab->b_state->arcs_mtx)); - mutex_enter(&ab->b_state->arcs_mtx); + get_buf_info(ab, ab->b_state, &list, &lock); + ASSERT(!MUTEX_HELD(lock)); + mutex_enter(lock); ASSERT(list_link_active(&ab->b_arc_node)); list_remove(list, ab); + mutex_exit(lock); + if (GHOST_STATE(ab->b_state)) { ASSERT3U(ab->b_datacnt, ==, 0); ASSERT3P(ab->b_buf, ==, NULL); @@ -975,7 +1116,6 @@ add_reference(arc_buf_hdr_t *ab, kmutex_ ASSERT(delta > 0); ASSERT3U(*size, >=, delta); atomic_add_64(size, -delta); - mutex_exit(&ab->b_state->arcs_mtx); /* remove the prefetch flag if we get a reference */ if (ab->b_flags & ARC_PREFETCH) ab->b_flags &= ~ARC_PREFETCH; @@ -994,14 +1134,19 @@ remove_reference(arc_buf_hdr_t *ab, kmut if (((cnt = refcount_remove(&ab->b_refcnt, tag)) == 0) && (state != arc_anon)) { uint64_t *size = &state->arcs_lsize[ab->b_type]; + list_t *list; + kmutex_t *lock; - ASSERT(!MUTEX_HELD(&state->arcs_mtx)); - mutex_enter(&state->arcs_mtx); + get_buf_info(ab, state, &list, &lock); + + ASSERT(!MUTEX_HELD(lock)); + mutex_enter(lock); ASSERT(!list_link_active(&ab->b_arc_node)); - list_insert_head(&state->arcs_list[ab->b_type], ab); + list_insert_head(list, ab); + mutex_exit(lock); + ASSERT(ab->b_datacnt > 0); atomic_add_64(size, ab->b_size * ab->b_datacnt); - mutex_exit(&state->arcs_mtx); } return (cnt); } @@ -1016,6 +1161,8 @@ arc_change_state(arc_state_t *new_state, arc_state_t *old_state = ab->b_state; int64_t refcnt = refcount_count(&ab->b_refcnt); uint64_t from_delta, to_delta; + list_t *list; + kmutex_t *lock; ASSERT(MUTEX_HELD(hash_lock)); ASSERT(new_state != old_state); @@ -1030,14 +1177,17 @@ arc_change_state(arc_state_t *new_state, */ if (refcnt == 0) { if (old_state != arc_anon) { - int use_mutex = !MUTEX_HELD(&old_state->arcs_mtx); + int use_mutex; uint64_t *size = &old_state->arcs_lsize[ab->b_type]; + get_buf_info(ab, old_state, &list, &lock); + use_mutex = !MUTEX_HELD(lock); + if (use_mutex) - mutex_enter(&old_state->arcs_mtx); + mutex_enter(lock); ASSERT(list_link_active(&ab->b_arc_node)); - list_remove(&old_state->arcs_list[ab->b_type], ab); + list_remove(list, ab); /* * If prefetching out of the ghost cache, @@ -1052,16 +1202,20 @@ arc_change_state(arc_state_t *new_state, atomic_add_64(size, -from_delta); if (use_mutex) - mutex_exit(&old_state->arcs_mtx); + mutex_exit(lock); } if (new_state != arc_anon) { - int use_mutex = !MUTEX_HELD(&new_state->arcs_mtx); + int use_mutex; uint64_t *size = &new_state->arcs_lsize[ab->b_type]; + get_buf_info(ab, new_state, &list, &lock); + use_mutex = !MUTEX_HELD(lock); + + if (use_mutex) - mutex_enter(&new_state->arcs_mtx); + mutex_enter(lock); - list_insert_head(&new_state->arcs_list[ab->b_type], ab); + list_insert_head(list, ab); /* ghost elements have a ghost size */ if (GHOST_STATE(new_state)) { @@ -1072,7 +1226,7 @@ arc_change_state(arc_state_t *new_state, atomic_add_64(size, to_delta); if (use_mutex) - mutex_exit(&new_state->arcs_mtx); + mutex_exit(lock); } } @@ -1462,21 +1616,49 @@ arc_evict(arc_state_t *state, spa_t *spa { arc_state_t *evicted_state; uint64_t bytes_evicted = 0, skipped = 0, missed = 0; + int64_t bytes_remaining; arc_buf_hdr_t *ab, *ab_prev = NULL; - list_t *list = &state->arcs_list[type]; + list_t *evicted_list, *list, *evicted_list_start, *list_start; + kmutex_t *lock, *evicted_lock; kmutex_t *hash_lock; boolean_t have_lock; void *stolen = NULL; + static int evict_metadata_offset, evict_data_offset; + int i, idx, offset, list_count, count; ASSERT(state == arc_mru || state == arc_mfu); evicted_state = (state == arc_mru) ? arc_mru_ghost : arc_mfu_ghost; + + if (type == ARC_BUFC_METADATA) { + offset = 0; + list_count = ARC_BUFC_NUMMETADATALISTS; + list_start = &state->arcs_lists[0]; + evicted_list_start = &evicted_state->arcs_lists[0]; + idx = evict_metadata_offset; + } else { + offset = ARC_BUFC_NUMMETADATALISTS; + + list_start = &state->arcs_lists[offset]; + evicted_list_start = &evicted_state->arcs_lists[offset]; + list_count = ARC_BUFC_NUMDATALISTS; + idx = evict_data_offset; + } + bytes_remaining = evicted_state->arcs_lsize[type]; + count = 0; + +evict_start: + list = &list_start[idx]; + evicted_list = &evicted_list_start[idx]; + lock = ARCS_LOCK(state, (offset + idx)); + evicted_lock = ARCS_LOCK(evicted_state, (offset + idx)); - mutex_enter(&state->arcs_mtx); - mutex_enter(&evicted_state->arcs_mtx); + mutex_enter(lock); + mutex_enter(evicted_lock); for (ab = list_tail(list); ab; ab = ab_prev) { ab_prev = list_prev(list, ab); + bytes_remaining -= (ab->b_size * ab->b_datacnt); /* prefetch buffers have a minimum lifespan */ if (HDR_IO_IN_PROGRESS(ab) || (spa && ab->b_spa != spa) || @@ -1536,18 +1718,36 @@ arc_evict(arc_state_t *state, spa_t *spa mutex_exit(hash_lock); if (bytes >= 0 && bytes_evicted >= bytes) break; + if (bytes_remaining > 0) { + mutex_exit(evicted_lock); + mutex_exit(lock); + idx = ((idx + 1)&(list_count-1)); + count++; + goto evict_start; + } } else { missed += 1; } } - mutex_exit(&evicted_state->arcs_mtx); - mutex_exit(&state->arcs_mtx); - - if (bytes_evicted < bytes) - dprintf("only evicted %lld bytes from %x", - (longlong_t)bytes_evicted, state); + mutex_exit(evicted_lock); + mutex_exit(lock); + + idx = ((idx + 1)&(list_count-1)); + count++; + if (bytes_evicted < bytes) { + if (count < list_count) + goto evict_start; + else + dprintf("only evicted %lld bytes from %x", + (longlong_t)bytes_evicted, state); + } + if (type == ARC_BUFC_METADATA) + evict_metadata_offset = idx; + else + evict_data_offset = idx; + if (skipped) ARCSTAT_INCR(arcstat_evict_skip, skipped); @@ -1574,6 +1774,8 @@ arc_evict(arc_state_t *state, spa_t *spa arc_evict_ghost(arc_mfu_ghost, NULL, todelete); } } + if (stolen) + ARCSTAT_BUMP(arcstat_stolen); return (stolen); } @@ -1586,14 +1788,28 @@ static void arc_evict_ghost(arc_state_t *state, spa_t *spa, int64_t bytes) { arc_buf_hdr_t *ab, *ab_prev; - list_t *list = &state->arcs_list[ARC_BUFC_DATA]; - kmutex_t *hash_lock; + list_t *list, *list_start; + kmutex_t *hash_lock, *lock; uint64_t bytes_deleted = 0; uint64_t bufs_skipped = 0; + static int evict_offset; + int list_count, idx = evict_offset; + int offset, count = 0; ASSERT(GHOST_STATE(state)); -top: - mutex_enter(&state->arcs_mtx); + + /* + * data lists come after metadata lists + */ + list_start = &state->arcs_lists[ARC_BUFC_NUMMETADATALISTS]; + list_count = ARC_BUFC_NUMDATALISTS; + offset = ARC_BUFC_NUMMETADATALISTS; + +evict_start: + list = &list_start[idx]; + lock = ARCS_LOCK(state, idx + offset); + + mutex_enter(lock); for (ab = list_tail(list); ab; ab = ab_prev) { ab_prev = list_prev(list, ab); if (spa && ab->b_spa != spa) @@ -1623,20 +1839,31 @@ top: break; } else { if (bytes < 0) { - mutex_exit(&state->arcs_mtx); + /* + * we're draining the ARC, retry + */ + mutex_exit(lock); mutex_enter(hash_lock); mutex_exit(hash_lock); - goto top; + goto evict_start; } bufs_skipped += 1; } } - mutex_exit(&state->arcs_mtx); - - if (list == &state->arcs_list[ARC_BUFC_DATA] && + mutex_exit(lock); + idx = ((idx + 1)&(ARC_BUFC_NUMDATALISTS-1)); + count++; + + if (count < list_count) + goto evict_start; + + evict_offset = idx; + if ((uintptr_t)list > (uintptr_t)&state->arcs_lists[ARC_BUFC_NUMMETADATALISTS] && (bytes < 0 || bytes_deleted < bytes)) { - list = &state->arcs_list[ARC_BUFC_METADATA]; - goto top; + list_start = &state->arcs_lists[0]; + list_count = ARC_BUFC_NUMMETADATALISTS; + offset = count = 0; + goto evict_start; } if (bufs_skipped) { @@ -1750,22 +1977,22 @@ restart: void arc_flush(spa_t *spa) { - while (list_head(&arc_mru->arcs_list[ARC_BUFC_DATA])) { + while (arc_mru->arcs_lsize[ARC_BUFC_DATA]) { (void) arc_evict(arc_mru, spa, -1, FALSE, ARC_BUFC_DATA); if (spa) break; } - while (list_head(&arc_mru->arcs_list[ARC_BUFC_METADATA])) { + while (arc_mru->arcs_lsize[ARC_BUFC_METADATA]) { (void) arc_evict(arc_mru, spa, -1, FALSE, ARC_BUFC_METADATA); if (spa) break; } - while (list_head(&arc_mfu->arcs_list[ARC_BUFC_DATA])) { + while (arc_mfu->arcs_lsize[ARC_BUFC_DATA]) { (void) arc_evict(arc_mfu, spa, -1, FALSE, ARC_BUFC_DATA); if (spa) break; } - while (list_head(&arc_mfu->arcs_list[ARC_BUFC_METADATA])) { + while (arc_mfu->arcs_lsize[ARC_BUFC_METADATA]) { (void) arc_evict(arc_mfu, spa, -1, FALSE, ARC_BUFC_METADATA); if (spa) break; @@ -1896,8 +2123,6 @@ arc_kmem_reap_now(arc_reclaim_strategy_t size_t i; kmem_cache_t *prev_cache = NULL; kmem_cache_t *prev_data_cache = NULL; - extern kmem_cache_t *zio_buf_cache[]; - extern kmem_cache_t *zio_data_buf_cache[]; #endif #ifdef _KERNEL @@ -2203,6 +2428,7 @@ out: arc_anon->arcs_size + arc_mru->arcs_size > arc_p) arc_p = MIN(arc_c, arc_p + size); } + ARCSTAT_BUMP(arcstat_allocated); } /* @@ -2388,7 +2614,10 @@ arc_read_done(zio_t *zio) hdr->b_flags &= ~ARC_L2_EVICTED; if (l2arc_noprefetch && (hdr->b_flags & ARC_PREFETCH)) hdr->b_flags &= ~ARC_L2CACHE; - +#if 0 + else if ((hdr->b_flags & ARC_PREFETCH) == 0) + hdr->b_flags |= ARC_L2CACHE; +#endif /* byteswap if necessary */ callback_list = hdr->b_acb; ASSERT(callback_list != NULL); @@ -2502,6 +2731,7 @@ arc_read(zio_t *pio, spa_t *spa, blkptr_ uint32_t *arc_flags, const zbookmark_t *zb) { int err; + arc_buf_hdr_t *hdr = pbuf->b_hdr; ASSERT(!refcount_is_zero(&pbuf->b_hdr->b_refcnt)); ASSERT3U((char *)bp - (char *)pbuf->b_data, <, pbuf->b_hdr->b_size); @@ -2510,8 +2740,8 @@ arc_read(zio_t *pio, spa_t *spa, blkptr_ err = arc_read_nolock(pio, spa, bp, done, private, priority, zio_flags, arc_flags, zb); + ASSERT3P(hdr, ==, pbuf->b_hdr); rw_exit(&pbuf->b_lock); - return (err); } @@ -2822,7 +3052,9 @@ arc_buf_evict(arc_buf_t *buf) arc_buf_hdr_t *hdr; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Mar 19 01:38:04 2010 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 050791065672; Fri, 19 Mar 2010 01:38:04 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E91028FC12; Fri, 19 Mar 2010 01:38: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 o2J1c3Rq098775; Fri, 19 Mar 2010 01:38:03 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2J1c33W098773; Fri, 19 Mar 2010 01:38:03 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003190138.o2J1c33W098773@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 19 Mar 2010 01:38: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: r205308 - projects/ppc64/sys/powerpc/aim 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, 19 Mar 2010 01:38:04 -0000 Author: nwhitehorn Date: Fri Mar 19 01:38:03 2010 New Revision: 205308 URL: http://svn.freebsd.org/changeset/base/205308 Log: Remove a redundant mtx_assert() Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 01:16:53 2010 (r205307) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 01:38:03 2010 (r205308) @@ -1443,8 +1443,6 @@ moea64_enter_locked(pmap_t pmap, vm_offs zone = moea64_upvo_zone; pvo_flags = 0; } else { - mtx_assert(&vm_page_queue_mtx, MA_OWNED); - pvo_head = vm_page_to_pvoh(m); pg = m; zone = moea64_mpvo_zone; From owner-svn-src-projects@FreeBSD.ORG Fri Mar 19 16:15:11 2010 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 C8CC0106564A; Fri, 19 Mar 2010 16:15:11 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B69C78FC0C; Fri, 19 Mar 2010 16:15: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 o2JGFBPH000303; Fri, 19 Mar 2010 16:15:11 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2JGFBxk000295; Fri, 19 Mar 2010 16:15:11 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003191615.o2JGFBxk000295@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 19 Mar 2010 16:15: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: r205337 - in projects/ppc64/sys/powerpc: aim include powerpc 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, 19 Mar 2010 16:15:11 -0000 Author: nwhitehorn Date: Fri Mar 19 16:15:11 2010 New Revision: 205337 URL: http://svn.freebsd.org/changeset/base/205337 Log: Provide a long list of segment mappings for each process, and change the kernel mappings to be (a) calculated instead of looked up, and (b) cached per-CPU. This gives SMP a fighting chance at working, and should allow the use of more than 16 GB of RAM. It also allows the use of more than 16 GB of VA space per process, and allows some minor speed and correctness improvements in a few places. 32-bit kernels are probably very broken on this branch at the moment. This will be fixed later. More breakage should not be forthcoming -- this is the last major change to the memory management code. Modified: projects/ppc64/sys/powerpc/aim/machdep.c projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/aim/slb.c projects/ppc64/sys/powerpc/aim/trap.c projects/ppc64/sys/powerpc/aim/trap_subr64.S projects/ppc64/sys/powerpc/include/pcpu.h projects/ppc64/sys/powerpc/include/pmap.h projects/ppc64/sys/powerpc/include/slb.h projects/ppc64/sys/powerpc/powerpc/genassym.c Modified: projects/ppc64/sys/powerpc/aim/machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/machdep.c Fri Mar 19 16:09:57 2010 (r205336) +++ projects/ppc64/sys/powerpc/aim/machdep.c Fri Mar 19 16:15:11 2010 (r205337) @@ -738,7 +738,10 @@ kdb_cpu_set_singlestep(void) void cpu_pcpu_init(struct pcpu *pcpu, int cpuid, size_t sz) { - +#ifdef __powerpc64__ +/* Copy the SLB contents from the current CPU */ +memcpy(pcpu->pc_slb, PCPU_GET(slb), sizeof(pcpu->pc_slb)); +#endif } void Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 16:09:57 2010 (r205336) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 16:15:11 2010 (r205337) @@ -160,6 +160,7 @@ __FBSDID("$FreeBSD$"); #define MOEA_DEBUG #define TODO panic("%s: not implemented", __func__); +void moea64_release_vsid(uint64_t vsid); uintptr_t moea64_get_unique_vsid(void); static __inline register_t @@ -183,21 +184,14 @@ cntlzd(volatile register_t a) { struct mtx tlbie_mutex; static __inline void -TLBIE(pmap_t pmap, vm_offset_t va) { +TLBIE(uint64_t vpn) { #ifndef __powerpc64__ register_t vpn_hi, vpn_lo; register_t msr; register_t scratch; #endif - uint64_t vpn; - /* - * Compute the virtual page number we wish to invalidate. - */ - - vpn = (uint64_t)(va & ADDR_PIDX); - if (pmap != NULL) - vpn |= (va_to_vsid(pmap,va) << 28); + vpn <<= ADDR_PIDX_SHFT; vpn &= ~(0xffffULL << 48); mtx_lock_spin(&tlbie_mutex); @@ -257,6 +251,7 @@ TLBIE(pmap_t pmap, vm_offset_t va) { ((void)((pvo)->pvo_vaddr &= ~(PVO_PTEGIDX_VALID|PVO_PTEGIDX_MASK))) #define PVO_PTEGIDX_SET(pvo, i) \ ((void)((pvo)->pvo_vaddr |= (i)|PVO_PTEGIDX_VALID)) +#define PVO_VSID(pvo) ((pvo)->pvo_vpn >> 16) #define MOEA_PVO_CHECK(pvo) @@ -347,6 +342,7 @@ SYSCTL_INT(_machdep, OID_AUTO, moea64_pv &moea64_pvo_remove_calls, 0, ""); vm_offset_t moea64_scratchpage_va[2]; +uint64_t moea64_scratchpage_vpn[2]; struct lpte *moea64_scratchpage_pte[2]; struct mtx moea64_scratchpage_mtx; @@ -572,7 +568,7 @@ moea64_pte_synch(struct lpte *pt, struct } static __inline void -moea64_pte_clear(struct lpte *pt, pmap_t pmap, vm_offset_t va, u_int64_t ptebit) +moea64_pte_clear(struct lpte *pt, uint64_t vpn, u_int64_t ptebit) { ASSERT_TABLE_LOCK(); @@ -580,7 +576,7 @@ moea64_pte_clear(struct lpte *pt, pmap_t * As shown in Section 7.6.3.2.3 */ pt->pte_lo &= ~ptebit; - TLBIE(pmap,va); + TLBIE(vpn); } static __inline void @@ -603,7 +599,7 @@ moea64_pte_set(struct lpte *pt, struct l } static __inline void -moea64_pte_unset(struct lpte *pt, struct lpte *pvo_pt, pmap_t pmap, vm_offset_t va) +moea64_pte_unset(struct lpte *pt, struct lpte *pvo_pt, uint64_t vpn) { ASSERT_TABLE_LOCK(); pvo_pt->pte_hi &= ~LPTE_VALID; @@ -617,7 +613,7 @@ moea64_pte_unset(struct lpte *pt, struct * Invalidate the pte. */ pt->pte_hi &= ~LPTE_VALID; - TLBIE(pmap,va); + TLBIE(vpn); /* * Save the reg & chg bits. @@ -627,16 +623,14 @@ moea64_pte_unset(struct lpte *pt, struct } static __inline void -moea64_pte_change(struct lpte *pt, struct lpte *pvo_pt, pmap_t pmap, vm_offset_t va) +moea64_pte_change(struct lpte *pt, struct lpte *pvo_pt, uint64_t vpn) { /* * Invalidate the PTE */ - moea64_pte_unset(pt, pvo_pt, pmap, va); + moea64_pte_unset(pt, pvo_pt, vpn); moea64_pte_set(pt, pvo_pt); - if (pmap == kernel_pmap) - isync(); } static __inline uint64_t @@ -708,6 +702,9 @@ static void moea64_cpu_bootstrap(mmu_t mmup, int ap) { int i = 0; + #ifdef __powerpc64__ + struct slb *slb = PCPU_GET(slb); + #endif /* * Initialize segment registers and MMU @@ -723,12 +720,11 @@ moea64_cpu_bootstrap(mmu_t mmup, int ap) slbia(); for (i = 0; i < 64; i++) { - if (!(kernel_pmap->pm_slb[i].slbe & SLBE_VALID)) + if (!(slb[i].slbe & SLBE_VALID)) continue; __asm __volatile ("slbmte %0, %1" :: - "r"(kernel_pmap->pm_slb[i].slbv), - "r"(kernel_pmap->pm_slb[i].slbe)); + "r"(slb[i].slbv), "r"(slb[i].slbe)); } #else for (i = 0; i < 16; i++) @@ -796,6 +792,7 @@ moea64_add_ofw_mappings(mmu_t mmup, phan } } +#ifdef __powerpc64__ static void moea64_probe_large_page(void) { @@ -822,6 +819,32 @@ moea64_probe_large_page(void) } static void +moea64_bootstrap_slb_prefault(vm_offset_t va, int large) +{ + struct slb *cache; + struct slb entry; + uint64_t esid, slbe; + uint64_t i; + + cache = PCPU_GET(slb); + esid = va >> ADDR_SR_SHFT; + slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID; + + for (i = 0; i < 64; i++) { + if (cache[i].slbe == (slbe | i)) + return; + } + + entry.slbe = slbe; + entry.slbv = (esid | KERNEL_VSID_BIT) << SLBV_VSID_SHIFT; + if (large) + entry.slbv |= SLBV_L; + + slb_insert(kernel_pmap, cache, &entry); +} +#endif + +static void moea64_setup_direct_map(mmu_t mmup, vm_offset_t kernelstart, vm_offset_t kernelend) { @@ -836,6 +859,7 @@ moea64_setup_direct_map(mmu_t mmup, vm_o DISABLE_TRANS(msr); if (hw_direct_map) { + #ifdef __powerpc64__ PMAP_LOCK(kernel_pmap); for (i = 0; i < pregions_sz; i++) { for (pa = pregions[i].mr_start; pa < pregions[i].mr_start + @@ -854,14 +878,6 @@ moea64_setup_direct_map(mmu_t mmup, vm_o pregions[i].mr_start + pregions[i].mr_size) pte_lo |= LPTE_G; - /* - * Allocate a new SLB entry to make sure it is - * for large pages. - */ - if (va_to_slb_entry(kernel_pmap, pa) == NULL) - allocate_vsid(kernel_pmap, pa >> ADDR_SR_SHFT, - 1 /* large */); - moea64_pvo_enter(kernel_pmap, moea64_upvo_zone, &moea64_pvo_kunmanaged, pa, pa, pte_lo, PVO_WIRED | PVO_LARGE | @@ -869,6 +885,7 @@ moea64_setup_direct_map(mmu_t mmup, vm_o } } PMAP_UNLOCK(kernel_pmap); + #endif } else { size = moea64_pteg_count * sizeof(struct lpteg); off = (vm_offset_t)(moea64_pteg_table); @@ -1076,8 +1093,8 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t */ #ifdef __powerpc64__ for (i = 0; i < 64; i++) { - kernel_pmap->pm_slb[i].slbv = 0; - kernel_pmap->pm_slb[i].slbe = 0; + pcpup->pc_slb[i].slbv = 0; + pcpup->pc_slb[i].slbe = 0; } #else for (i = 0; i < 16; i++) @@ -1101,9 +1118,9 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t */ if (!ofw_real_mode) { + #ifndef __powerpc64__ moea64_pinit(mmup, &ofw_pmap); - #ifndef __powerpc64__ for (i = 0; i < 16; i++) ofw_pmap.pm_sr[i] = kernel_pmap->pm_sr[i]; #endif @@ -1148,6 +1165,14 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t virtual_end = VM_MAX_SAFE_KERNEL_ADDRESS; /* + * Map the entire KVA range into the SLB. We must not fault there. + */ + #ifdef __powerpc64__ + for (va = virtual_avail; va < virtual_end; va += SEGMENT_LENGTH) + moea64_bootstrap_slb_prefault(va, 0); + #endif + + /* * Figure out how far we can extend virtual_end into segment 16 * without running into existing mappings. Segment 16 is guaranteed * to contain neither RAM nor devices (at least on Apple hardware), @@ -1189,6 +1214,9 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t LPTE_NOEXEC, 0); pt.pte_hi |= LPTE_LOCKED; + moea64_scratchpage_vpn[i] = (vsid << 16) | + ((moea64_scratchpage_va[i] & ADDR_PIDX) >> + ADDR_PIDX_SHFT); ptegidx = va_to_pteg(vsid, moea64_scratchpage_va[i], 0); pteidx = moea64_pte_insert(ptegidx, &pt); if (pt.pte_hi & LPTE_HID) @@ -1245,23 +1273,22 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t } /* - * Activate a user pmap. The pmap must be activated before it's address + * Activate a user pmap. The pmap must be activated before its address * space can be accessed in any way. */ void moea64_activate(mmu_t mmu, struct thread *td) { - pmap_t pm, pmr; + pmap_t pm; - /* - * Load all the data we need up front to encourage the compiler to - * not issue any loads while we have interrupts disabled below. - */ pm = &td->td_proc->p_vmspace->vm_pmap; - pmr = pm->pmap_phys; - pm->pm_active |= PCPU_GET(cpumask); - PCPU_SET(curpmap, pmr); + + #ifdef __powerpc64__ + PCPU_SET(userslb, pm->pm_slb); + #else + PCPU_SET(curpmap, pm->pmap_phys); + #endif } void @@ -1271,7 +1298,11 @@ moea64_deactivate(mmu_t mmu, struct thre pm = &td->td_proc->p_vmspace->vm_pmap; pm->pm_active &= ~(PCPU_GET(cpumask)); + #ifdef __powerpc64__ + PCPU_SET(userslb, NULL); + #else PCPU_SET(curpmap, NULL); + #endif } void @@ -1310,7 +1341,7 @@ void moea64_set_scratchpage_pa(int which mtx_assert(&moea64_scratchpage_mtx, MA_OWNED); moea64_scratchpage_pte[which]->pte_hi &= ~LPTE_VALID; - TLBIE(kernel_pmap, moea64_scratchpage_va[which]); + TLBIE(moea64_scratchpage_vpn[which]); moea64_scratchpage_pte[which]->pte_lo &= ~(LPTE_WIMG | LPTE_RPGN); @@ -1742,7 +1773,9 @@ moea64_remove_write(mmu_t mmu, vm_page_t lo |= pvo->pvo_pte.lpte.pte_lo; pvo->pvo_pte.lpte.pte_lo &= ~LPTE_CHG; moea64_pte_change(pt, &pvo->pvo_pte.lpte, - pvo->pvo_pmap, PVO_VADDR(pvo)); + pvo->pvo_vpn); + if (pvo->pvo_pmap == kernel_pmap) + isync(); } } UNLOCK_TABLE(); @@ -1971,13 +2004,20 @@ moea64_get_unique_vsid(void) { panic("%s: out of segments",__func__); } +#ifdef __powerpc64__ void moea64_pinit(mmu_t mmu, pmap_t pmap) { + PMAP_LOCK_INIT(pmap); + + SPLAY_INIT(&pmap->pm_slbtree); + pmap->pm_slb = slb_alloc_user_cache(); +} +#else +void +moea64_pinit(mmu_t mmu, pmap_t pmap) int i; - #ifndef __powerpc64__ register_t hash; - #endif PMAP_LOCK_INIT(pmap); @@ -1987,18 +2027,6 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) else pmap->pmap_phys = pmap; - #ifdef __powerpc64__ - /* - * 64-bit PowerPC uses lazy segment allocation, so NULL - * all the segment entries for now. - */ - for (i = 0; i < sizeof(pmap->pm_slb)/sizeof(pmap->pm_slb[0]); i++) { - pmap->pm_slb[i].slbv = 0; - pmap->pm_slb[i].slbe = 0; - } - - #else - /* * Allocate some segment registers for this pmap. */ @@ -2006,9 +2034,8 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) for (i = 0; i < 16; i++) pmap->pm_sr[i] = VSID_MAKE(i, hash); - - #endif } +#endif /* * Initialize the pmap associated with process 0. @@ -2070,8 +2097,7 @@ moea64_protect(mmu_t mmu, pmap_t pm, vm_ * If the PVO is in the page table, update that pte as well. */ if (pt != NULL) { - moea64_pte_change(pt, &pvo->pvo_pte.lpte, - pvo->pvo_pmap, PVO_VADDR(pvo)); + moea64_pte_change(pt, &pvo->pvo_pte.lpte, pvo->pvo_vpn); if ((pvo->pvo_pte.lpte.pte_lo & (LPTE_I | LPTE_G | LPTE_NOEXEC)) == 0) { moea64_syncicache(pm, sva, @@ -2113,7 +2139,7 @@ moea64_qremove(mmu_t mmu, vm_offset_t va } } -static __inline void +void moea64_release_vsid(uint64_t vsid) { int idx, mask; @@ -2133,9 +2159,8 @@ moea64_release(mmu_t mmu, pmap_t pmap) * Free segment registers' VSIDs */ #ifdef __powerpc64__ - int i; - for (i = 0; i < sizeof(pmap->pm_slb)/sizeof(pmap->pm_slb[0]); i++) - moea64_release_vsid(pmap->pm_slb[i].slbv); + free_vsids(pmap); + slb_free_user_cache(pmap->pm_slb); #else if (pmap->pm_sr[0] == 0) panic("moea64_release"); @@ -2368,6 +2393,8 @@ moea64_pvo_enter(pmap_t pm, uma_zone_t z moea64_pvo_entries++; pvo->pvo_vaddr = va; + pvo->pvo_vpn = (uint64_t)((va & ADDR_PIDX) >> ADDR_PIDX_SHFT) + | (vsid << 16); pvo->pvo_pmap = pm; LIST_INSERT_HEAD(&moea64_pvo_table[ptegidx], pvo, pvo_olink); pvo->pvo_vaddr &= ~ADDR_POFF; @@ -2416,6 +2443,15 @@ moea64_pvo_enter(pmap_t pm, uma_zone_t z UNLOCK_TABLE(); +#ifdef __powerpc64__ + /* + * Make sure all our bootstrap mappings are in the SLB as soon + * as virtual memory is switched on. + */ + if (!pmap_bootstrapped) + moea64_bootstrap_slb_prefault(va, flags & PVO_LARGE); +#endif + return (first ? ENOENT : 0); } @@ -2431,8 +2467,7 @@ moea64_pvo_remove(struct pvo_entry *pvo, LOCK_TABLE(); pt = moea64_pvo_to_pte(pvo, pteidx); if (pt != NULL) { - moea64_pte_unset(pt, &pvo->pvo_pte.lpte, pvo->pvo_pmap, - PVO_VADDR(pvo)); + moea64_pte_unset(pt, &pvo->pvo_pte.lpte, pvo->pvo_vpn); PVO_PTEGIDX_CLR(pvo); } else { moea64_pte_overflow--; @@ -2500,18 +2535,18 @@ moea64_pvo_find_va(pmap_t pm, vm_offset_ int ptegidx; uint64_t vsid; #ifdef __powerpc64__ - struct slb *slb; + struct slb slb; - slb = va_to_slb_entry(pm, va); - if (slb == NULL) /* The page is not mapped if the segment isn't */ + /* The page is not mapped if the segment isn't */ + if (va_to_slb_entry(pm, va, &slb) != 0) return NULL; - vsid = (slb->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT; - if (slb->slbv & SLBV_L) + vsid = (slb.slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT; + if (slb.slbv & SLBV_L) va &= ~moea64_large_page_mask; else va &= ~ADDR_POFF; - ptegidx = va_to_pteg(vsid, va, slb->slbv & SLBV_L); + ptegidx = va_to_pteg(vsid, va, slb.slbv & SLBV_L); #else va &= ~ADDR_POFF; vsid = va_to_vsid(pm, va); @@ -2543,7 +2578,7 @@ moea64_pvo_to_pte(const struct pvo_entry int ptegidx; uint64_t vsid; - vsid = va_to_vsid(pvo->pvo_pmap, PVO_VADDR(pvo)); + vsid = PVO_VSID(pvo); ptegidx = va_to_pteg(vsid, PVO_VADDR(pvo), pvo->pvo_vaddr & PVO_LARGE); pteidx = moea64_pvo_pte_index(pvo, ptegidx); @@ -2724,7 +2759,7 @@ moea64_clear_bit(vm_page_t m, u_int64_t moea64_pte_synch(pt, &pvo->pvo_pte.lpte); if (pvo->pvo_pte.lpte.pte_lo & ptebit) { count++; - moea64_pte_clear(pt, pvo->pvo_pmap, PVO_VADDR(pvo), ptebit); + moea64_pte_clear(pt, pvo->pvo_vpn, ptebit); } } rv |= pvo->pvo_pte.lpte.pte_lo; Modified: projects/ppc64/sys/powerpc/aim/slb.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/slb.c Fri Mar 19 16:09:57 2010 (r205336) +++ projects/ppc64/sys/powerpc/aim/slb.c Fri Mar 19 16:15:11 2010 (r205337) @@ -25,95 +25,160 @@ */ #include -#include +#include +#include +#include #include #include +#include #include #include +#include +#include +#include +#include #include uintptr_t moea64_get_unique_vsid(void); +void moea64_release_vsid(uint64_t vsid); -struct slb * -va_to_slb_entry(pmap_t pm, vm_offset_t va) +struct slbcontainer { + struct slb slb; + SPLAY_ENTRY(slbcontainer) slb_node; +}; + +static int slb_compare(struct slbcontainer *a, struct slbcontainer *b); +static void slb_zone_init(void *); + +SPLAY_PROTOTYPE(slb_tree, slbcontainer, slb_node, slb_compare); +SPLAY_GENERATE(slb_tree, slbcontainer, slb_node, slb_compare); + +uma_zone_t slb_zone; +uma_zone_t slb_cache_zone; + +SYSINIT(slb_zone_init, SI_SUB_KMEM, SI_ORDER_ANY, slb_zone_init, NULL); + +int +va_to_slb_entry(pmap_t pm, vm_offset_t va, struct slb *slb) { - uint64_t slbe, i; + struct slbcontainer cont, *found; + uint64_t esid; - slbe = (uintptr_t)va >> ADDR_SR_SHFT; - slbe = (slbe << SLBE_ESID_SHIFT) | SLBE_VALID; + esid = (uintptr_t)va >> ADDR_SR_SHFT; + slb->slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID; - for (i = 0; i < sizeof(pm->pm_slb)/sizeof(pm->pm_slb[0]); i++) { - if (pm->pm_slb[i].slbe == (slbe | i)) - return &pm->pm_slb[i]; + if (pm == kernel_pmap) { + /* Set kernel VSID to ESID | KERNEL_VSID_BIT */ + slb->slbv = (esid | KERNEL_VSID_BIT) << SLBV_VSID_SHIFT; + + /* Figure out if this is a large-page mapping */ + if (hw_direct_map && va < VM_MIN_KERNEL_ADDRESS) { + /* + * XXX: If we have set up a direct map, assumes + * all physical memory is mapped with large pages. + */ + if (mem_valid(va, 0) == 0) + slb->slbv |= SLBV_L; + } + + return (0); } - /* XXX: Have a long list for processes mapping more than 16 GB */ + PMAP_LOCK_ASSERT(pm, MA_OWNED); - return (NULL); + cont.slb.slbe = slb->slbe; + found = SPLAY_FIND(slb_tree, &pm->pm_slbtree, &cont); + + if (found == NULL) + return (-1); + + slb->slbv = found->slb.slbv; + return (0); } uint64_t va_to_vsid(pmap_t pm, vm_offset_t va) { - struct slb *entry; + struct slb entry; - entry = va_to_slb_entry(pm, va); + /* Shortcut kernel case: VSID = ESID | KERNEL_VSID_BIT */ + if (pm == kernel_pmap) + return (((uintptr_t)va >> ADDR_SR_SHFT) | KERNEL_VSID_BIT); /* * If there is no vsid for this VA, we need to add a new entry * to the PMAP's segment table. - * - * XXX We assume (for now) that we are not mapping large pages. */ - if (entry == NULL) + if (va_to_slb_entry(pm, va, &entry) != 0) return (allocate_vsid(pm, (uintptr_t)va >> ADDR_SR_SHFT, 0)); - return ((entry->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT); + return ((entry.slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT); } uint64_t allocate_vsid(pmap_t pm, uint64_t esid, int large) { uint64_t vsid; - struct slb slb_entry; + struct slbcontainer *slb_entry, kern_entry; + struct slb *prespill; - vsid = moea64_get_unique_vsid(); + prespill = NULL; - slb_entry.slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID; - slb_entry.slbv = vsid << SLBV_VSID_SHIFT; + if (pm == kernel_pmap) { + vsid = esid | KERNEL_VSID_BIT; + slb_entry = &kern_entry; + prespill = PCPU_GET(slb); + } else { + vsid = moea64_get_unique_vsid(); + slb_entry = uma_zalloc(slb_zone, M_NOWAIT); + + if (slb_entry == NULL) + panic("Could not allocate SLB mapping!"); + + prespill = pm->pm_slb; + } + + slb_entry->slb.slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID; + slb_entry->slb.slbv = vsid << SLBV_VSID_SHIFT; if (large) - slb_entry.slbv |= SLBV_L; + slb_entry->slb.slbv |= SLBV_L; + + if (pm != kernel_pmap) { + PMAP_LOCK_ASSERT(pm, MA_OWNED); + SPLAY_INSERT(slb_tree, &pm->pm_slbtree, slb_entry); + } /* * Someone probably wants this soon, and it may be a wired * SLB mapping, so pre-spill this entry. */ - slb_insert(pm, &slb_entry, 1); + if (prespill != NULL) + slb_insert(pm, prespill, &slb_entry->slb); return (vsid); } -#ifdef NOTYET /* We don't have a back-up list. Spills are a bad idea. */ /* Lock entries mapping kernel text and stacks */ #define SLB_SPILLABLE(slbe) \ (((slbe & SLBE_ESID_MASK) < VM_MIN_KERNEL_ADDRESS && \ - (slbe & SLBE_ESID_MASK) > SEGMENT_LENGTH) || \ + (slbe & SLBE_ESID_MASK) > 16*SEGMENT_LENGTH) || \ (slbe & SLBE_ESID_MASK) > VM_MAX_KERNEL_ADDRESS) -#else -#define SLB_SPILLABLE(slbe) 0 -#endif - void -slb_insert(pmap_t pm, struct slb *slb_entry, int prefer_empty) +slb_insert(pmap_t pm, struct slb *slbcache, struct slb *slb_entry) { uint64_t slbe, slbv; int i, j, to_spill; + /* + * Note: no locking is necessary in this function because all slbcaches + * are either for the current thread or per-CPU. + */ + to_spill = -1; slbv = slb_entry->slbv; slbe = slb_entry->slbe; @@ -124,31 +189,104 @@ slb_insert(pmap_t pm, struct slb *slb_en if (pm == kernel_pmap && i == USER_SR) continue; - if (!(pm->pm_slb[i].slbe & SLBE_VALID)) { + if (!(slbcache[i].slbe & SLBE_VALID)) { to_spill = i; break; } if (to_spill < 0 && (pm != kernel_pmap || - SLB_SPILLABLE(pm->pm_slb[i].slbe))) { + SLB_SPILLABLE(slbcache[i].slbe))) to_spill = i; - if (!prefer_empty) - break; - } } if (to_spill < 0) panic("SLB spill on ESID %#lx, but no available candidates!\n", (slbe & SLBE_ESID_MASK) >> SLBE_ESID_SHIFT); - pm->pm_slb[to_spill].slbv = slbv; - pm->pm_slb[to_spill].slbe = slbe | (uint64_t)to_spill; + slbcache[to_spill].slbv = slbv; + slbcache[to_spill].slbe = slbe | (uint64_t)to_spill; + /* If it is for this CPU, put it in the SLB right away */ if (pm == kernel_pmap && pmap_bootstrapped) { /* slbie not required */ __asm __volatile ("slbmte %0, %1" :: - "r"(kernel_pmap->pm_slb[to_spill].slbv), - "r"(kernel_pmap->pm_slb[to_spill].slbe)); + "r"(slbcache[to_spill].slbv), + "r"(slbcache[to_spill].slbe)); + } +} + +int +vsid_to_esid(pmap_t pm, uint64_t vsid, uint64_t *esid) +{ + uint64_t slbv; + struct slbcontainer *entry; + +#ifdef INVARIANTS + if (pm == kernel_pmap) + panic("vsid_to_esid only works on user pmaps"); + + PMAP_LOCK_ASSERT(pm, MA_OWNED); +#endif + + slbv = vsid << SLBV_VSID_SHIFT; + + SPLAY_FOREACH(entry, slb_tree, &pm->pm_slbtree) { + if (slbv == entry->slb.slbv) { + *esid = entry->slb.slbe >> SLBE_ESID_SHIFT; + return (0); + } + } + + return (-1); +} + +void +free_vsids(pmap_t pm) +{ + struct slbcontainer *entry; + + while (!SPLAY_EMPTY(&pm->pm_slbtree)) { + entry = SPLAY_MIN(slb_tree, &pm->pm_slbtree); + + SPLAY_REMOVE(slb_tree, &pm->pm_slbtree, entry); + + moea64_release_vsid(entry->slb.slbv >> SLBV_VSID_SHIFT); + uma_zfree(slb_zone, entry); } } +static int +slb_compare(struct slbcontainer *a, struct slbcontainer *b) +{ + if (a->slb.slbe == b->slb.slbe) + return (0); + else if (a->slb.slbe < b->slb.slbe) + return (-1); + else + return (1); +} + +static void +slb_zone_init(void *dummy) +{ + + slb_zone = uma_zcreate("SLB segment", sizeof(struct slbcontainer), + NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM); + slb_cache_zone = uma_zcreate("SLB cache", 64*sizeof(struct slb), + NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_VM); +} + +struct slb * +slb_alloc_user_cache(void) +{ + struct slb *tmp; + tmp = uma_zalloc(slb_cache_zone, M_NOWAIT | M_ZERO); + bzero(tmp,64*sizeof(struct slb)); + return (tmp); +} + +void +slb_free_user_cache(struct slb *slb) +{ + uma_zfree(slb_cache_zone, slb); +} Modified: projects/ppc64/sys/powerpc/aim/trap.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap.c Fri Mar 19 16:09:57 2010 (r205336) +++ projects/ppc64/sys/powerpc/aim/trap.c Fri Mar 19 16:15:11 2010 (r205337) @@ -88,8 +88,7 @@ static int handle_onfault(struct trapfra static void syscall(struct trapframe *frame); #ifdef __powerpc64__ -static void handle_slb_spill(pmap_t pm, vm_offset_t addr); -static uint64_t slb_esid_lookup(pmap_t pm, uint64_t vsid); +static int handle_slb_spill(pmap_t pm, vm_offset_t addr); #endif int setfault(faultbuf); /* defined in locore.S */ @@ -187,9 +186,10 @@ trap(struct trapframe *frame) #ifdef __powerpc64__ case EXC_ISE: case EXC_DSE: - handle_slb_spill(&p->p_vmspace->vm_pmap, + if (handle_slb_spill(&p->p_vmspace->vm_pmap, (type == EXC_ISE) ? frame->srr0 : - frame->cpu.aim.dar); + frame->cpu.aim.dar) != 0) + sig = SIGSEGV; break; #endif case EXC_DSI: @@ -251,9 +251,10 @@ trap(struct trapframe *frame) #ifdef __powerpc64__ case EXC_ISE: case EXC_DSE: - handle_slb_spill(kernel_pmap, + if (handle_slb_spill(kernel_pmap, (type == EXC_ISE) ? frame->srr0 : - frame->cpu.aim.dar); + frame->cpu.aim.dar) != 0) + panic("Fault handling kernel SLB miss"); return; #endif case EXC_MCHK: @@ -503,37 +504,40 @@ syscall(struct trapframe *frame) } #ifdef __powerpc64__ -static uint64_t -slb_esid_lookup(pmap_t pm, uint64_t vsid) +static int +handle_slb_spill(pmap_t pm, vm_offset_t addr) { - uint64_t esid; - int i; + struct slb slb_entry; + int error, i; - vsid <<= SLBV_VSID_SHIFT; + if (pm == kernel_pmap) { + error = va_to_slb_entry(pm, addr, &slb_entry); + if (error) + return (error); - for (i = 0; i < sizeof(pm->pm_slb)/sizeof(pm->pm_slb[0]); i++) { - if ((pm->pm_slb[i].slbv & SLBV_VSID_MASK) == vsid) { - esid = pm->pm_slb[i].slbe & SLBE_ESID_MASK; - esid >>= SLBE_ESID_SHIFT; - return (esid); - } + slb_insert(pm, PCPU_GET(slb), &slb_entry); + return (0); } - return (0); -} - -static void -handle_slb_spill(pmap_t pm, vm_offset_t addr) -{ - struct slb *slb_entry; - PMAP_LOCK(pm); - slb_entry = va_to_slb_entry(pm, addr); - if (slb_entry == NULL) - (void)va_to_vsid(pm, addr); - else - slb_insert(pm, slb_entry, 0 /* Don't prefer empty */); + error = va_to_slb_entry(pm, addr, &slb_entry); + if (error != 0) + (void)allocate_vsid(pm, (uintptr_t)addr >> ADDR_SR_SHFT, 0); + else { + /* + * Check that another CPU has not already mapped this. + * XXX: Per-thread SLB caches would be better. + */ + for (i = 0; i < 64; i++) + if (pm->pm_slb[i].slbe == (slb_entry.slbe | i)) + break; + + if (i == 64) + slb_insert(pm, pm->pm_slb, &slb_entry); + } PMAP_UNLOCK(pm); + + return (0); } #endif @@ -568,15 +572,22 @@ trap_pfault(struct trapframe *frame, int if (p->p_vmspace == NULL) return (SIGSEGV); + map = &p->p_vmspace->vm_map; + #ifdef __powerpc64__ user_sr = 0; __asm ("slbmfev %0, %1" : "=r"(user_sr) : "r"(USER_SR)); - user_sr = (user_sr & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT; - user_sr = slb_esid_lookup(&p->p_vmspace->vm_pmap, user_sr); + PMAP_LOCK(&p->p_vmspace->vm_pmap); + user_sr >>= SLBV_VSID_SHIFT; + rv = vsid_to_esid(&p->p_vmspace->vm_pmap, user_sr, + &user_sr); + PMAP_UNLOCK(&p->p_vmspace->vm_pmap); + if (rv != 0) + return (SIGSEGV); #else __asm ("mfsr %0, %1" : "=r"(user_sr) @@ -584,7 +595,6 @@ trap_pfault(struct trapframe *frame, int #endif eva &= ADDR_PIDX | ADDR_POFF; eva |= user_sr << ADDR_SR_SHFT; - map = &p->p_vmspace->vm_map; } else { map = kernel_map; } Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr64.S Fri Mar 19 16:09:57 2010 (r205336) +++ projects/ppc64/sys/powerpc/aim/trap_subr64.S Fri Mar 19 16:15:11 2010 (r205337) @@ -46,7 +46,7 @@ /* * Restore SRs for a pmap * - * Requires that r28-r31 be scratch, with r28 initialized to the pmap + * Requires that r28-r31 be scratch, with r28 initialized to the SLB cache */ restoresrs: @@ -54,14 +54,15 @@ restoresrs: slbia slbmfee %r31,%r29 + clrrdi %r31,%r31,28 slbie %r31 instslb: - ld %r31, PM_SLB+8(%r28); /* Load SLBE */ + ld %r31, 8(%r28); /* Load SLBE */ cmpli 0, %r31, 0; /* If SLBE is not valid, get the next */ beq nslb; - ld %r30, PM_SLB(%r28) /* Load SLBV */ + ld %r30, 0(%r28) /* Load SLBV */ slbmte %r30, %r31; /* Install SLB entry */ nslb: @@ -77,15 +78,15 @@ nslb: */ #define RESTORE_USER_SRS() \ GET_CPUINFO(%r28); \ - ld %r28,PC_CURPMAP(%r28); \ + ld %r28,PC_USERSLB(%r28); \ bl restoresrs; /* * Kernel SRs are loaded directly from kernel_pmap_ */ #define RESTORE_KERN_SRS() \ - lis %r28,CNAME(kernel_pmap_store)@ha; \ - addi %r28,%r28,CNAME(kernel_pmap_store)@l; \ + GET_CPUINFO(%r28); \ + addi %r28,%r28,PC_KERNSLB; \ bl restoresrs; /* Modified: projects/ppc64/sys/powerpc/include/pcpu.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pcpu.h Fri Mar 19 16:09:57 2010 (r205336) +++ projects/ppc64/sys/powerpc/include/pcpu.h Fri Mar 19 16:15:11 2010 (r205337) @@ -31,6 +31,7 @@ #define _MACHINE_PCPU_H_ #include +#include #include struct pmap; @@ -50,7 +51,17 @@ struct pmap; register_t pc_disisave[CPUSAVE_LEN]; \ register_t pc_dbsave[CPUSAVE_LEN]; -#define PCPU_MD_AIM_FIELDS +#define PCPU_MD_AIM32_FIELDS + +#define PCPU_MD_AIM64_FIELDS \ + struct slb pc_slb[64]; \ + struct slb *pc_userslb; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Fri Mar 19 16:25:05 2010 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 97BD71065679; Fri, 19 Mar 2010 16:25:05 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 878E08FC12; Fri, 19 Mar 2010 16:25:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2JGP5Ah002555; Fri, 19 Mar 2010 16:25:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2JGP5JX002553; Fri, 19 Mar 2010 16:25:05 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003191625.o2JGP5JX002553@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 19 Mar 2010 16:25:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205338 - projects/ppc64/sys/powerpc/aim 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, 19 Mar 2010 16:25:05 -0000 Author: nwhitehorn Date: Fri Mar 19 16:25:05 2010 New Revision: 205338 URL: http://svn.freebsd.org/changeset/base/205338 Log: Fix build on 32-bit PowerPC. Submitted by: Andreas Tobler Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 16:15:11 2010 (r205337) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 16:25:05 2010 (r205338) @@ -859,7 +859,6 @@ moea64_setup_direct_map(mmu_t mmup, vm_o DISABLE_TRANS(msr); if (hw_direct_map) { - #ifdef __powerpc64__ PMAP_LOCK(kernel_pmap); for (i = 0; i < pregions_sz; i++) { for (pa = pregions[i].mr_start; pa < pregions[i].mr_start + @@ -885,7 +884,6 @@ moea64_setup_direct_map(mmu_t mmup, vm_o } } PMAP_UNLOCK(kernel_pmap); - #endif } else { size = moea64_pteg_count * sizeof(struct lpteg); off = (vm_offset_t)(moea64_pteg_table); @@ -1869,7 +1867,8 @@ moea64_kextract(mmu_t mmu, vm_offset_t v PMAP_LOCK(kernel_pmap); pvo = moea64_pvo_find_va(kernel_pmap, va, NULL); - KASSERT(pvo != NULL, ("moea64_kextract: no addr found for %#lx", va)); + KASSERT(pvo != NULL, ("moea64_kextract: no addr found for %#" PRIxPTR, + va)); pa = (pvo->pvo_pte.lpte.pte_lo & LPTE_RPGN) + (va - PVO_VADDR(pvo)); PMAP_UNLOCK(kernel_pmap); return (pa); @@ -2016,6 +2015,7 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) #else void moea64_pinit(mmu_t mmu, pmap_t pmap) +{ int i; register_t hash; From owner-svn-src-projects@FreeBSD.ORG Fri Mar 19 17:05:41 2010 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 C2475106566B; Fri, 19 Mar 2010 17:05:41 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B22EE8FC18; Fri, 19 Mar 2010 17:05: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 o2JH5ft4011520; Fri, 19 Mar 2010 17:05:41 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2JH5fCT011519; Fri, 19 Mar 2010 17:05:41 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003191705.o2JH5fCT011519@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 19 Mar 2010 17:05: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: r205339 - projects/ppc64/sys/powerpc/aim 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, 19 Mar 2010 17:05:41 -0000 Author: nwhitehorn Date: Fri Mar 19 17:05:41 2010 New Revision: 205339 URL: http://svn.freebsd.org/changeset/base/205339 Log: Fix some minor races during SLB spills, and correct a comment that no longer reflects the truth. Modified: projects/ppc64/sys/powerpc/aim/slb.c Modified: projects/ppc64/sys/powerpc/aim/slb.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/slb.c Fri Mar 19 16:25:05 2010 (r205338) +++ projects/ppc64/sys/powerpc/aim/slb.c Fri Mar 19 17:05:41 2010 (r205339) @@ -174,10 +174,8 @@ slb_insert(pmap_t pm, struct slb *slbcac uint64_t slbe, slbv; int i, j, to_spill; - /* - * Note: no locking is necessary in this function because all slbcaches - * are either for the current thread or per-CPU. - */ + /* We don't want to be preempted while modifying the kernel map */ + critical_enter(); to_spill = -1; slbv = slb_entry->slbv; @@ -203,6 +201,11 @@ slb_insert(pmap_t pm, struct slb *slbcac panic("SLB spill on ESID %#lx, but no available candidates!\n", (slbe & SLBE_ESID_MASK) >> SLBE_ESID_SHIFT); + if (slbcache[to_spill].slbe & SLBE_VALID) { + /* Invalidate this first to avoid races */ + slbcache[to_spill].slbe = 0; + mb(); + } slbcache[to_spill].slbv = slbv; slbcache[to_spill].slbe = slbe | (uint64_t)to_spill; @@ -213,6 +216,8 @@ slb_insert(pmap_t pm, struct slb *slbcac "r"(slbcache[to_spill].slbv), "r"(slbcache[to_spill].slbe)); } + + critical_exit(); } int From owner-svn-src-projects@FreeBSD.ORG Fri Mar 19 17:48:05 2010 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 0D728106564A; Fri, 19 Mar 2010 17:48:05 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F15348FC18; Fri, 19 Mar 2010 17:48:04 +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 o2JHm48E020812; Fri, 19 Mar 2010 17:48:04 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2JHm4w4020810; Fri, 19 Mar 2010 17:48:04 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003191748.o2JHm4w4020810@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 19 Mar 2010 17:48:04 +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: r205340 - projects/ppc64/sys/powerpc/aim 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, 19 Mar 2010 17:48:05 -0000 Author: nwhitehorn Date: Fri Mar 19 17:48:04 2010 New Revision: 205340 URL: http://svn.freebsd.org/changeset/base/205340 Log: Less than is different than less than or equal to. Fascinating. Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr64.S Fri Mar 19 17:05:41 2010 (r205339) +++ projects/ppc64/sys/powerpc/aim/trap_subr64.S Fri Mar 19 17:48:04 2010 (r205340) @@ -68,7 +68,7 @@ instslb: nslb: addi %r28, %r28, 16; /* Advance */ addi %r29, %r29, 1; - cmpli 0, %r29, 63; /* Repeat if we are not at the end */ + cmpli 0, %r29, 64; /* Repeat if we are not at the end */ blt instslb; blr; From owner-svn-src-projects@FreeBSD.ORG Fri Mar 19 17:48:35 2010 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 6499A106566B; Fri, 19 Mar 2010 17:48:35 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 39CD38FC0C; Fri, 19 Mar 2010 17:48:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2JHmZbU020946; Fri, 19 Mar 2010 17:48:35 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2JHmZuF020942; Fri, 19 Mar 2010 17:48:35 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003191748.o2JHmZuF020942@svn.freebsd.org> From: Nathan Whitehorn Date: Fri, 19 Mar 2010 17:48:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205341 - in projects/ppc64/sys/powerpc: aim powerpc 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, 19 Mar 2010 17:48:35 -0000 Author: nwhitehorn Date: Fri Mar 19 17:48:34 2010 New Revision: 205341 URL: http://svn.freebsd.org/changeset/base/205341 Log: Miscellaneous cleanups and debugging improvements. Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/aim/slb.c projects/ppc64/sys/powerpc/powerpc/db_trace.c Modified: projects/ppc64/sys/powerpc/aim/mmu_oea64.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 17:48:04 2010 (r205340) +++ projects/ppc64/sys/powerpc/aim/mmu_oea64.c Fri Mar 19 17:48:34 2010 (r205341) @@ -1261,6 +1261,7 @@ moea64_bootstrap(mmu_t mmup, vm_offset_t */ pa = moea64_bootstrap_alloc(DPCPU_SIZE, PAGE_SIZE); dpcpu = (void *)virtual_avail; + va = virtual_avail; virtual_avail += DPCPU_SIZE; while (va < virtual_avail) { moea64_kenter(mmup, va, pa); Modified: projects/ppc64/sys/powerpc/aim/slb.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/slb.c Fri Mar 19 17:48:04 2010 (r205340) +++ projects/ppc64/sys/powerpc/aim/slb.c Fri Mar 19 17:48:34 2010 (r205341) @@ -284,10 +284,7 @@ slb_zone_init(void *dummy) struct slb * slb_alloc_user_cache(void) { - struct slb *tmp; - tmp = uma_zalloc(slb_cache_zone, M_NOWAIT | M_ZERO); - bzero(tmp,64*sizeof(struct slb)); - return (tmp); + return (uma_zalloc(slb_cache_zone, M_ZERO)); } void Modified: projects/ppc64/sys/powerpc/powerpc/db_trace.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/db_trace.c Fri Mar 19 17:48:04 2010 (r205340) +++ projects/ppc64/sys/powerpc/powerpc/db_trace.c Fri Mar 19 17:48:34 2010 (r205341) @@ -229,6 +229,15 @@ db_backtrace(struct thread *td, db_addr_ tf->cpu.aim.dar, (uint32_t)tf->cpu.aim.dsisr); goto print_trap; +#ifdef __powerpc64__ + case EXC_DSE: + db_printf("DSE trap @ %#zx by ", + tf->cpu.aim.dar); + goto print_trap; + case EXC_ISE: + db_printf("ISE trap @ %#zx by ", tf->srr0); + goto print_trap; +#endif case EXC_ISI: trapstr = "ISI"; break; case EXC_PGM: trapstr = "PGM"; break; case EXC_SC: trapstr = "SC"; break; From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 01:17:13 2010 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 8EF6C106564A; Sat, 20 Mar 2010 01:17:13 +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 7CB848FC0C; Sat, 20 Mar 2010 01:17:13 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2K1HDcH022661; Sat, 20 Mar 2010 01:17:13 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K1HDkG022655; Sat, 20 Mar 2010 01:17:13 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003200117.o2K1HDkG022655@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 20 Mar 2010 01:17:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205350 - in projects/altix/sys: conf dev/uart 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, 20 Mar 2010 01:17:13 -0000 Author: marcel Date: Sat Mar 20 01:17:12 2010 New Revision: 205350 URL: http://svn.freebsd.org/changeset/base/205350 Log: Add minimal support for SGI Altix l1 console -- a SAL-based character device. This may not be here to stay, because it's not a real serial device. Then again, who cares? Added: projects/altix/sys/dev/uart/uart_dev_sgisn.c Modified: projects/altix/sys/conf/files.ia64 projects/altix/sys/dev/uart/uart.h projects/altix/sys/dev/uart/uart_cpu_ia64.c projects/altix/sys/dev/uart/uart_subr.c Modified: projects/altix/sys/conf/files.ia64 ============================================================================== --- projects/altix/sys/conf/files.ia64 Fri Mar 19 22:39:27 2010 (r205349) +++ projects/altix/sys/conf/files.ia64 Sat Mar 20 01:17:12 2010 (r205350) @@ -60,6 +60,7 @@ dev/syscons/scterm-teken.c optional sc dev/syscons/scvgarndr.c optional sc vga dev/syscons/scvtb.c optional sc dev/uart/uart_cpu_ia64.c optional uart +dev/uart/uart_dev_sgisn.c optional uart dev/acpica/acpi_if.m standard ia64/acpica/OsdEnvironment.c optional acpi ia64/acpica/acpi_machdep.c optional acpi Modified: projects/altix/sys/dev/uart/uart.h ============================================================================== --- projects/altix/sys/dev/uart/uart.h Fri Mar 19 22:39:27 2010 (r205349) +++ projects/altix/sys/dev/uart/uart.h Sat Mar 20 01:17:12 2010 (r205350) @@ -67,6 +67,7 @@ struct uart_class; extern struct uart_class uart_ns8250_class __attribute__((weak)); extern struct uart_class uart_quicc_class __attribute__((weak)); extern struct uart_class uart_sab82532_class __attribute__((weak)); +extern struct uart_class uart_sgisn_class __attribute__((weak)); extern struct uart_class uart_z8530_class __attribute__((weak)); #ifdef PC98 Modified: projects/altix/sys/dev/uart/uart_cpu_ia64.c ============================================================================== --- projects/altix/sys/dev/uart/uart_cpu_ia64.c Fri Mar 19 22:39:27 2010 (r205349) +++ projects/altix/sys/dev/uart/uart_cpu_ia64.c Sat Mar 20 01:17:12 2010 (r205350) @@ -66,6 +66,8 @@ uart_cpu_getdev(int devtype, struct uart class = &uart_ns8250_class; if (class == NULL) + class = &uart_sgisn_class; + if (class == NULL) return (ENXIO); /* Added: projects/altix/sys/dev/uart/uart_dev_sgisn.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/altix/sys/dev/uart/uart_dev_sgisn.c Sat Mar 20 01:17:12 2010 (r205350) @@ -0,0 +1,291 @@ +/*- + * Copyright (c) 2010 Marcel Moolenaar + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR 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 "uart_if.h" + +#define SAL_SGISN_PUTC 0x02000021 +#define SAL_SGISN_GETC 0x02000022 +#define SAL_SGISN_POLL 0x02000026 + +/* + * Low-level UART interface. + */ +static int sgisn_probe(struct uart_bas *bas); +static void sgisn_init(struct uart_bas *bas, int, int, int, int); +static void sgisn_term(struct uart_bas *bas); +static void sgisn_putc(struct uart_bas *bas, int); +static int sgisn_rxready(struct uart_bas *bas); +static int sgisn_getc(struct uart_bas *bas, struct mtx *); + +static struct uart_ops uart_sgisn_ops = { + .probe = sgisn_probe, + .init = sgisn_init, + .term = sgisn_term, + .putc = sgisn_putc, + .rxready = sgisn_rxready, + .getc = sgisn_getc, +}; + +static int +sgisn_probe(struct uart_bas *bas) +{ + + /* XXX Check that we're running on the Altix 350 */ + return (0); +} + +static void +sgisn_init(struct uart_bas *bas, int baudrate, int databits, int stopbits, + int parity) +{ +} + +static void +sgisn_term(struct uart_bas *bas) +{ +} + +static void +sgisn_putc(struct uart_bas *bas, int c) +{ + struct ia64_sal_result result; + + result = ia64_sal_entry(SAL_SGISN_PUTC, c, 0, 0, 0, 0, 0, 0); +} + +static int +sgisn_rxready(struct uart_bas *bas) +{ + struct ia64_sal_result result; + + result = ia64_sal_entry(SAL_SGISN_POLL, 0, 0, 0, 0, 0, 0, 0); + return (!result.sal_status && result.sal_result[0]); +} + +static int +sgisn_getc(struct uart_bas *bas, struct mtx *hwmtx) +{ + struct ia64_sal_result result; + + result = ia64_sal_entry(SAL_SGISN_GETC, 0, 0, 0, 0, 0, 0, 0); + return ((!result.sal_status) ? result.sal_result[0] : -1); +} + +/* + * High-level UART interface. + */ +struct sgisn_softc { + struct uart_softc base; +}; + +static int sgisn_bus_attach(struct uart_softc *); +static int sgisn_bus_detach(struct uart_softc *); +static int sgisn_bus_flush(struct uart_softc *, int); +static int sgisn_bus_getsig(struct uart_softc *); +static int sgisn_bus_ioctl(struct uart_softc *, int, intptr_t); +static int sgisn_bus_ipend(struct uart_softc *); +static int sgisn_bus_param(struct uart_softc *, int, int, int, int); +static int sgisn_bus_probe(struct uart_softc *); +static int sgisn_bus_receive(struct uart_softc *); +static int sgisn_bus_setsig(struct uart_softc *, int); +static int sgisn_bus_transmit(struct uart_softc *); + +static kobj_method_t sgisn_methods[] = { + KOBJMETHOD(uart_attach, sgisn_bus_attach), + KOBJMETHOD(uart_detach, sgisn_bus_detach), + KOBJMETHOD(uart_flush, sgisn_bus_flush), + KOBJMETHOD(uart_getsig, sgisn_bus_getsig), + KOBJMETHOD(uart_ioctl, sgisn_bus_ioctl), + KOBJMETHOD(uart_ipend, sgisn_bus_ipend), + KOBJMETHOD(uart_param, sgisn_bus_param), + KOBJMETHOD(uart_probe, sgisn_bus_probe), + KOBJMETHOD(uart_receive, sgisn_bus_receive), + KOBJMETHOD(uart_setsig, sgisn_bus_setsig), + KOBJMETHOD(uart_transmit, sgisn_bus_transmit), + { 0, 0 } +}; + +struct uart_class uart_sgisn_class = { + "sgisn", + sgisn_methods, + sizeof(struct sgisn_softc), + .uc_ops = &uart_sgisn_ops, + .uc_range = 2, + .uc_rclk = 0 +}; + +#define SIGCHG(c, i, s, d) \ + if (c) { \ + i |= (i & s) ? s : s | d; \ + } else { \ + i = (i & s) ? (i & ~s) | d : i; \ + } + +static int +sgisn_bus_attach(struct uart_softc *sc) +{ + + sc->sc_rxfifosz = 1; + sc->sc_txfifosz = 1; + + (void)sgisn_bus_getsig(sc); + + return (0); +} + +static int +sgisn_bus_detach(struct uart_softc *sc) +{ + + return (0); +} + +static int +sgisn_bus_flush(struct uart_softc *sc, int what) +{ + + return (0); +} + +static int +sgisn_bus_getsig(struct uart_softc *sc) +{ + uint32_t new, old, sig; + uint32_t dummy; + + do { + old = sc->sc_hwsig; + sig = old; + /* XXX SIGNALS */ + dummy = 0; + SIGCHG(dummy, sig, SER_CTS, SER_DCTS); + SIGCHG(dummy, sig, SER_DCD, SER_DDCD); + SIGCHG(dummy, sig, SER_DSR, SER_DDSR); + new = sig & ~SER_MASK_DELTA; + } while (!atomic_cmpset_32(&sc->sc_hwsig, old, new)); + return (sig); +} + +static int +sgisn_bus_ioctl(struct uart_softc *sc, int request, intptr_t data) +{ + int error; + + error = 0; + switch (request) { + case UART_IOCTL_BREAK: + break; + default: + error = EINVAL; + break; + } + return (error); +} + +static int +sgisn_bus_ipend(struct uart_softc *sc) +{ + int ipend; + + ipend = 0; + return (ipend); +} + +static int +sgisn_bus_param(struct uart_softc *sc, int baudrate, int databits, + int stopbits, int parity) +{ + + return (0); +} + +static int +sgisn_bus_probe(struct uart_softc *sc) +{ + char buf[80]; + int error; + + error = sgisn_probe(&sc->sc_bas); + if (error) + return (error); + + snprintf(buf, sizeof(buf), "SGI L1"); + device_set_desc_copy(sc->sc_dev, buf); + return (0); +} + +static int +sgisn_bus_receive(struct uart_softc *sc) +{ + + return (0); +} + +static int +sgisn_bus_setsig(struct uart_softc *sc, int sig) +{ + struct uart_bas *bas; + uint32_t new, old; + + bas = &sc->sc_bas; + do { + old = sc->sc_hwsig; + new = old; + if (sig & SER_DDTR) { + SIGCHG(sig & SER_DTR, new, SER_DTR, + SER_DDTR); + } + if (sig & SER_DRTS) { + SIGCHG(sig & SER_RTS, new, SER_RTS, + SER_DRTS); + } + } while (!atomic_cmpset_32(&sc->sc_hwsig, old, new)); + + /* XXX SIGNALS */ + return (0); +} + +static int +sgisn_bus_transmit(struct uart_softc *sc) +{ + + return (0); +} Modified: projects/altix/sys/dev/uart/uart_subr.c ============================================================================== --- projects/altix/sys/dev/uart/uart_subr.c Fri Mar 19 22:39:27 2010 (r205349) +++ projects/altix/sys/dev/uart/uart_subr.c Sat Mar 20 01:17:12 2010 (r205350) @@ -51,6 +51,7 @@ __FBSDID("$FreeBSD$"); static struct uart_class *uart_classes[] = { &uart_ns8250_class, &uart_sab82532_class, + &uart_sgisn_class, &uart_z8530_class, }; static size_t uart_nclasses = sizeof(uart_classes) / sizeof(uart_classes[0]); From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 01:39:35 2010 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 50009106566B; Sat, 20 Mar 2010 01:39:35 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 3EFAB8FC08; Sat, 20 Mar 2010 01:39:35 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2K1dZan027553; Sat, 20 Mar 2010 01:39:35 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K1dZEH027551; Sat, 20 Mar 2010 01:39:35 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003200139.o2K1dZEH027551@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 01:39:35 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205351 - projects/ppc64/sys/powerpc/include 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, 20 Mar 2010 01:39:35 -0000 Author: nwhitehorn Date: Sat Mar 20 01:39:34 2010 New Revision: 205351 URL: http://svn.freebsd.org/changeset/base/205351 Log: Increase max user address to 63 bits (63 instead of 64 for compatibility with 64-bit Book-E). I seem to have inadvertantly fixed whatever bug was truncating user addresses to 32 bits before. Modified: projects/ppc64/sys/powerpc/include/vmparam.h Modified: projects/ppc64/sys/powerpc/include/vmparam.h ============================================================================== --- projects/ppc64/sys/powerpc/include/vmparam.h Sat Mar 20 01:17:12 2010 (r205350) +++ projects/ppc64/sys/powerpc/include/vmparam.h Sat Mar 20 01:39:34 2010 (r205351) @@ -81,7 +81,7 @@ #if !defined(LOCORE) #ifdef __powerpc64__ #define VM_MIN_ADDRESS (0x0000000000000000UL) -#define VM_MAXUSER_ADDRESS (0x000000007ffff000UL) +#define VM_MAXUSER_ADDRESS (0x7ffffffffffff000UL) #define VM_MAX_ADDRESS (0xffffffffffffffffUL) #else #define VM_MIN_ADDRESS ((vm_offset_t)0) From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 02:23:58 2010 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 AB21A1065670; Sat, 20 Mar 2010 02:23:58 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 991B48FC0A; Sat, 20 Mar 2010 02:23:58 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2K2NwHH037414; Sat, 20 Mar 2010 02:23:58 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K2NwFH037409; Sat, 20 Mar 2010 02:23:58 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003200223.o2K2NwFH037409@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 02:23:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205352 - in projects/ppc64/sys/powerpc: aim include 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, 20 Mar 2010 02:23:58 -0000 Author: nwhitehorn Date: Sat Mar 20 02:23:58 2010 New Revision: 205352 URL: http://svn.freebsd.org/changeset/base/205352 Log: Fixes for SMP support for powerpc64. This gets the system booted multiuser on both threads in the Cell simulator, and adds speculative support for G5 systems. Modified: projects/ppc64/sys/powerpc/aim/mp_cpudep.c projects/ppc64/sys/powerpc/aim/trap_subr32.S projects/ppc64/sys/powerpc/aim/trap_subr64.S projects/ppc64/sys/powerpc/include/smp.h Modified: projects/ppc64/sys/powerpc/aim/mp_cpudep.c ============================================================================== --- projects/ppc64/sys/powerpc/aim/mp_cpudep.c Sat Mar 20 01:39:34 2010 (r205351) +++ projects/ppc64/sys/powerpc/aim/mp_cpudep.c Sat Mar 20 02:23:58 2010 (r205352) @@ -55,6 +55,31 @@ static register_t bsp_state[8] __aligned static void cpudep_save_config(void *dummy); SYSINIT(cpu_save_config, SI_SUB_CPU, SI_ORDER_ANY, cpudep_save_config, NULL); +void +cpudep_ap_early_bootstrap(void) +{ + register_t reg; + + __asm __volatile("mtsprg 0, %0" :: "r"(ap_pcpu)); + powerpc_sync(); + + switch (mfpvr() >> 16) { + case IBM970: + case IBM970FX: + case IBM970MP: + /* Restore HID4 and HID5, which are necessary for the MMU */ + + __asm __volatile("ld %0, 16(%2); sync; isync; \ + mtspr %1, %0; sync; isync;" + : "=r"(reg) : "K"(SPR_HID4), "r"(bsp_state)); + __asm __volatile("ld %0, 24(%2); sync; isync; \ + mtspr %1, %0; sync; isync;" + : "=r"(reg) : "K"(SPR_HID5), "r"(bsp_state)); + powerpc_sync(); + break; + } +} + uintptr_t cpudep_ap_bootstrap(void) { @@ -64,9 +89,6 @@ cpudep_ap_bootstrap(void) mtmsr(msr); isync(); - __asm __volatile("mtsprg 0, %0" :: "r"(ap_pcpu)); - powerpc_sync(); - pcpup->pc_curthread = pcpup->pc_idlethread; pcpup->pc_curpcb = pcpup->pc_curthread->td_pcb; sp = pcpup->pc_curpcb->pcb_sp; Modified: projects/ppc64/sys/powerpc/aim/trap_subr32.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr32.S Sat Mar 20 01:39:34 2010 (r205351) +++ projects/ppc64/sys/powerpc/aim/trap_subr32.S Sat Mar 20 02:23:58 2010 (r205352) @@ -294,6 +294,7 @@ cpu_reset: addi %r1,%r1,(124-16)@l lis %r3,1@l + bla CNAME(cpudep_ap_early_bootstrap) bla CNAME(pmap_cpu_bootstrap) bla CNAME(cpudep_ap_bootstrap) mr %r1,%r3 Modified: projects/ppc64/sys/powerpc/aim/trap_subr64.S ============================================================================== --- projects/ppc64/sys/powerpc/aim/trap_subr64.S Sat Mar 20 01:39:34 2010 (r205351) +++ projects/ppc64/sys/powerpc/aim/trap_subr64.S Sat Mar 20 02:23:58 2010 (r205352) @@ -281,12 +281,14 @@ cpu_reset: lis %r3,tocbase@ha ld %r2,tocbase@l(%r3) lis %r3,1@l - bl CNAME(.pmap_cpu_bootstrap) + bl CNAME(.cpudep_ap_early_bootstrap) /* Set PCPU */ nop - bl CNAME(.cpudep_ap_bootstrap) + bl CNAME(.pmap_cpu_bootstrap) /* Turn on virtual memory */ nop - mr %r1,%r3 - bl CNAME(.machdep_ap_bootstrap) + bl CNAME(.cpudep_ap_bootstrap) /* Set up PCPU and stack */ + nop + mr %r1,%r3 /* Use new stack */ + bl CNAME(.machdep_ap_bootstrap) /* And away! */ nop /* Should not be reached */ Modified: projects/ppc64/sys/powerpc/include/smp.h ============================================================================== --- projects/ppc64/sys/powerpc/include/smp.h Sat Mar 20 01:39:34 2010 (r205351) +++ projects/ppc64/sys/powerpc/include/smp.h Sat Mar 20 02:23:58 2010 (r205352) @@ -48,6 +48,7 @@ struct cpuref { }; void pmap_cpu_bootstrap(int); +void cpudep_ap_early_bootstrap(void); uintptr_t cpudep_ap_bootstrap(void); void cpudep_ap_setup(void); void machdep_ap_bootstrap(void); From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 03:39:02 2010 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 869EA106564A; Sat, 20 Mar 2010 03:39:02 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5A16B8FC0C; Sat, 20 Mar 2010 03:39:02 +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 o2K3d2cl054115; Sat, 20 Mar 2010 03:39:02 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K3d2iR054112; Sat, 20 Mar 2010 03:39:02 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003200339.o2K3d2iR054112@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 03:39:02 +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: r205353 - projects/ppc64/sys/powerpc/powerpc 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, 20 Mar 2010 03:39:02 -0000 Author: nwhitehorn Date: Sat Mar 20 03:39:02 2010 New Revision: 205353 URL: http://svn.freebsd.org/changeset/base/205353 Log: Correct stack setup. This incorporates two changes: 1. The MI code in kern_exec.c will produce a mis-aligned stack if sigcodesz is not a multiple of register_t. Fix this with a hammer. 2. C functions (like _start) write their parent LR to the parent's stack frame. As such, the 48 bytes above the stack address, which used to include argv, can be overwritten by garbage in certain circumstances. The correct amount of stack padding is now applied. Modified: projects/ppc64/sys/powerpc/powerpc/exec_machdep.c projects/ppc64/sys/powerpc/powerpc/sigcode64.S Modified: projects/ppc64/sys/powerpc/powerpc/exec_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Sat Mar 20 02:23:58 2010 (r205352) +++ projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Sat Mar 20 03:39:02 2010 (r205353) @@ -496,7 +496,11 @@ exec_setregs(struct thread *td, struct i tf = trapframe(td); bzero(tf, sizeof *tf); + #ifdef __powerpc64__ + tf->fixreg[1] = -roundup(-stack + 48, 16); + #else tf->fixreg[1] = -roundup(-stack + 8, 16); + #endif /* * XXX Machine-independent code has already copied arguments and @@ -1000,8 +1004,13 @@ cpu_set_upcall_kse(struct thread *td, vo tf = td->td_frame; /* align stack and alloc space for frame ptr and saved LR */ - sp = ((uintptr_t)stack->ss_sp + stack->ss_size - sizeof(uint64_t)) & + #ifdef __powerpc64__ + sp = ((uintptr_t)stack->ss_sp + stack->ss_size - 48) & ~0x1f; + #else + sp = ((uintptr_t)stack->ss_sp + stack->ss_size - 8) & + ~0x1f; + #endif bzero(tf, sizeof(struct trapframe)); tf->fixreg[1] = (register_t)sp; Modified: projects/ppc64/sys/powerpc/powerpc/sigcode64.S ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/sigcode64.S Sat Mar 20 02:23:58 2010 (r205352) +++ projects/ppc64/sys/powerpc/powerpc/sigcode64.S Sat Mar 20 03:39:02 2010 (r205353) @@ -58,6 +58,7 @@ CNAME(sigcode64): sc /* sigreturn(scp) */ li 0,SYS_exit sc /* exit(errno) */ + nop /* align to doubleword */ endsigcode64: .data From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 03:54:02 2010 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 9181E106566C; Sat, 20 Mar 2010 03:54:02 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7F6638FC0A; Sat, 20 Mar 2010 03:54:02 +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 o2K3s2PR057513; Sat, 20 Mar 2010 03:54:02 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K3s2tD057511; Sat, 20 Mar 2010 03:54:02 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003200354.o2K3s2tD057511@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 03:54:02 +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: r205355 - projects/ppc64/usr.sbin 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, 20 Mar 2010 03:54:02 -0000 Author: nwhitehorn Date: Sat Mar 20 03:54:02 2010 New Revision: 205355 URL: http://svn.freebsd.org/changeset/base/205355 Log: Build ofwdump and friends on PPC64. Modified: projects/ppc64/usr.sbin/Makefile Modified: projects/ppc64/usr.sbin/Makefile ============================================================================== --- projects/ppc64/usr.sbin/Makefile Sat Mar 20 03:39:35 2010 (r205354) +++ projects/ppc64/usr.sbin/Makefile Sat Mar 20 03:54:02 2010 (r205355) @@ -503,7 +503,7 @@ _mount_smbfs= mount_smbfs _zzz= zzz .endif -.if ${MACHINE_ARCH} == "powerpc" +.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" _mount_smbfs= mount_smbfs _nvram= nvram _ofwdump= ofwdump From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 05:06:48 2010 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 37464106566B; Sat, 20 Mar 2010 05:06:48 +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 25B168FC17; Sat, 20 Mar 2010 05:06: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 o2K56mXt073686; Sat, 20 Mar 2010 05:06:48 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K56mLP073684; Sat, 20 Mar 2010 05:06:48 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003200506.o2K56mLP073684@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 20 Mar 2010 05:06: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: r205359 - projects/altix/sys/boot/ia64/common 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, 20 Mar 2010 05:06:48 -0000 Author: marcel Date: Sat Mar 20 05:06:47 2010 New Revision: 205359 URL: http://svn.freebsd.org/changeset/base/205359 Log: Rather than assume we need to wire the first 256MB, wire the 256MB that contains the entry point of the kernel. Modified: projects/altix/sys/boot/ia64/common/exec.c Modified: projects/altix/sys/boot/ia64/common/exec.c ============================================================================== --- projects/altix/sys/boot/ia64/common/exec.c Sat Mar 20 04:40:15 2010 (r205358) +++ projects/altix/sys/boot/ia64/common/exec.c Sat Mar 20 05:06:47 2010 (r205359) @@ -117,11 +117,12 @@ elf64_exec(struct preloaded_file *fp) pte = PTE_PRESENT | PTE_MA_WB | PTE_ACCESSED | PTE_DIRTY | PTE_PL_KERN | PTE_AR_RWX | PTE_ED; + pte |= IA64_RR_MASK(hdr->e_entry) & PTE_PPN_MASK; - __asm __volatile("mov cr.ifa=%0" :: "r"(IA64_RR_BASE(7))); + __asm __volatile("mov cr.ifa=%0" :: "r"(hdr->e_entry)); __asm __volatile("mov cr.itir=%0" :: "r"(28 << 2)); - __asm __volatile("ptr.i %0,%1" :: "r"(IA64_RR_BASE(7)), "r"(28<<2)); - __asm __volatile("ptr.d %0,%1" :: "r"(IA64_RR_BASE(7)), "r"(28<<2)); + __asm __volatile("ptr.i %0,%1" :: "r"(hdr->e_entry), "r"(28<<2)); + __asm __volatile("ptr.d %0,%1" :: "r"(hdr->e_entry), "r"(28<<2)); __asm __volatile("srlz.i;;"); __asm __volatile("itr.i itr[%0]=%1;;" :: "r"(0), "r"(pte)); __asm __volatile("srlz.i;;"); From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 05:11:56 2010 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 A16BD1065670; Sat, 20 Mar 2010 05:11:56 +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 759978FC13; Sat, 20 Mar 2010 05:11: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 o2K5BuVs074939; Sat, 20 Mar 2010 05:11:56 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2K5Buhu074936; Sat, 20 Mar 2010 05:11:56 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201003200511.o2K5Buhu074936@svn.freebsd.org> From: Marcel Moolenaar Date: Sat, 20 Mar 2010 05:11: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: r205362 - projects/altix/sys/dev/uart 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, 20 Mar 2010 05:11:56 -0000 Author: marcel Date: Sat Mar 20 05:11:56 2010 New Revision: 205362 URL: http://svn.freebsd.org/changeset/base/205362 Log: Allow specifications that lack an I/O port or memory mapped I/O address when the UART class doesn't need it. A class doesn't need it when the I/O range is 0. This makes the L1 console work with the following specification: set hw.uart.console="dt:sgisn" Modified: projects/altix/sys/dev/uart/uart_dev_sgisn.c projects/altix/sys/dev/uart/uart_subr.c Modified: projects/altix/sys/dev/uart/uart_dev_sgisn.c ============================================================================== --- projects/altix/sys/dev/uart/uart_dev_sgisn.c Sat Mar 20 05:10:44 2010 (r205361) +++ projects/altix/sys/dev/uart/uart_dev_sgisn.c Sat Mar 20 05:11:56 2010 (r205362) @@ -148,7 +148,7 @@ struct uart_class uart_sgisn_class = { sgisn_methods, sizeof(struct sgisn_softc), .uc_ops = &uart_sgisn_ops, - .uc_range = 2, + .uc_range = 0, .uc_rclk = 0 }; Modified: projects/altix/sys/dev/uart/uart_subr.c ============================================================================== --- projects/altix/sys/dev/uart/uart_subr.c Sat Mar 20 05:10:44 2010 (r205361) +++ projects/altix/sys/dev/uart/uart_subr.c Sat Mar 20 05:11:56 2010 (r205362) @@ -195,7 +195,7 @@ uart_getenv(int devtype, struct uart_dev { __const char *spec; bus_addr_t addr = ~0U; - int error; + int error, range; /* * All uart_class references are weak. Make sure the default @@ -273,13 +273,25 @@ uart_getenv(int devtype, struct uart_dev spec++; } + di->ops = uart_getops(class); + range = uart_getrange(class); + /* * If we still have an invalid address, the specification must be - * missing an I/O port or memory address. We don't like that. + * missing an I/O port or memory address. We don't like that if + * the class expects an I/O port or memory range. */ - if (addr == ~0U) + if (addr == ~0U && range != 0) return (EINVAL); + /* Create a bus space handle if applicable. */ + if (addr != ~0U && range != 0) { + error = bus_space_map(di->bas.bst, addr, range, 0, + &di->bas.bsh); + if (error) + return (error); + } + /* * Accept only the well-known baudrates. Any invalid baudrate * is silently replaced with a 0-valued baudrate. The 0 baudrate @@ -299,9 +311,5 @@ uart_getenv(int devtype, struct uart_dev } else di->baudrate = 0; - /* Set the ops and create a bus space handle. */ - di->ops = uart_getops(class); - error = bus_space_map(di->bas.bst, addr, uart_getrange(class), 0, - &di->bas.bsh); - return (error); + return (0); } From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 14:24:57 2010 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 AF744106564A; Sat, 20 Mar 2010 14:24:57 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9BA198FC1A; Sat, 20 Mar 2010 14:24:57 +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 o2KEOvJ1097410; Sat, 20 Mar 2010 14:24:57 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KEOvrY097405; Sat, 20 Mar 2010 14:24:57 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003201424.o2KEOvrY097405@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 14:24:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r205368 - in projects/ppc64/sys/powerpc: booke include powerpc 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, 20 Mar 2010 14:24:57 -0000 Author: nwhitehorn Date: Sat Mar 20 14:24:57 2010 New Revision: 205368 URL: http://svn.freebsd.org/changeset/base/205368 Log: Fix the Book-E build. Due to lack of hardware, I have no idea if Book-E still works on this branch, but at least make universe now completes. Modified: projects/ppc64/sys/powerpc/booke/machdep.c projects/ppc64/sys/powerpc/include/psl.h projects/ppc64/sys/powerpc/include/pte.h projects/ppc64/sys/powerpc/include/vmparam.h projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Modified: projects/ppc64/sys/powerpc/booke/machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/booke/machdep.c Sat Mar 20 12:39:28 2010 (r205367) +++ projects/ppc64/sys/powerpc/booke/machdep.c Sat Mar 20 14:24:57 2010 (r205368) @@ -209,7 +209,7 @@ cpu_e500_startup(void *dummy) for (indx = 0; phys_avail[indx + 1] != 0; indx += 2) { size = phys_avail[indx + 1] - phys_avail[indx]; - printf("0x%08x - 0x%08x, %d bytes (%d pages)\n", + printf("0x%08x - 0x%08x, %d bytes (%ld pages)\n", phys_avail[indx], phys_avail[indx + 1] - 1, size, size / PAGE_SIZE); } @@ -507,24 +507,6 @@ cpu_pcpu_init(struct pcpu *pcpu, int cpu #endif } -int -fill_regs(struct thread *td, struct reg *regs) -{ - struct trapframe *tf; - - tf = td->td_frame; - memcpy(regs, tf, sizeof(struct reg)); - - return (0); -} - -int -fill_fpregs(struct thread *td, struct fpreg *fpregs) -{ - - return (0); -} - /* * Flush the D-cache for non-DMA I/O so that the I-cache can * be made coherent later. @@ -535,106 +517,6 @@ cpu_flush_dcache(void *ptr, size_t len) /* TBD */ } -/* - * Construct a PCB from a trapframe. This is called from kdb_trap() where - * we want to start a backtrace from the function that caused us to enter - * the debugger. We have the context in the trapframe, but base the trace - * on the PCB. The PCB doesn't have to be perfect, as long as it contains - * enough for a backtrace. - */ -void -makectx(struct trapframe *tf, struct pcb *pcb) -{ - - pcb->pcb_lr = tf->srr0; - pcb->pcb_sp = tf->fixreg[1]; -} - -/* - * get_mcontext/sendsig helper routine that doesn't touch the - * proc lock. - */ -static int -grab_mcontext(struct thread *td, mcontext_t *mcp, int flags) -{ - struct pcb *pcb; - - pcb = td->td_pcb; - memset(mcp, 0, sizeof(mcontext_t)); - - mcp->mc_vers = _MC_VERSION; - mcp->mc_flags = 0; - memcpy(&mcp->mc_frame, td->td_frame, sizeof(struct trapframe)); - if (flags & GET_MC_CLEAR_RET) { - mcp->mc_gpr[3] = 0; - mcp->mc_gpr[4] = 0; - } - - /* XXX Altivec context ? */ - - mcp->mc_len = sizeof(*mcp); - return (0); -} - -int -get_mcontext(struct thread *td, mcontext_t *mcp, int flags) -{ - int error; - - error = grab_mcontext(td, mcp, flags); - if (error == 0) { - PROC_LOCK(curthread->td_proc); - mcp->mc_onstack = sigonstack(td->td_frame->fixreg[1]); - PROC_UNLOCK(curthread->td_proc); - } - - return (error); -} - -int -set_mcontext(struct thread *td, const mcontext_t *mcp) -{ - struct pcb *pcb; - struct trapframe *tf; - - pcb = td->td_pcb; - tf = td->td_frame; - - if (mcp->mc_vers != _MC_VERSION || mcp->mc_len != sizeof(*mcp)) - return (EINVAL); - - memcpy(tf, mcp->mc_frame, sizeof(mcp->mc_frame)); - - /* XXX Altivec context? */ - - return (0); -} - -int -sigreturn(struct thread *td, struct sigreturn_args *uap) -{ - ucontext_t uc; - int error; - - CTR2(KTR_SIG, "sigreturn: td=%p ucp=%p", td, uap->sigcntxp); - - if (copyin(uap->sigcntxp, &uc, sizeof(uc)) != 0) { - CTR1(KTR_SIG, "sigreturn: efault td=%p", td); - return (EFAULT); - } - - error = set_mcontext(td, &uc.uc_mcontext); - if (error != 0) - return (error); - - kern_sigprocmask(td, SIG_SETMASK, &uc.uc_sigmask, NULL, 0); - - CTR3(KTR_SIG, "sigreturn: return td=%p pc=%#x sp=%#x", - td, uc.uc_mcontext.mc_srr0, uc.uc_mcontext.mc_gpr[1]); - - return (EJUSTRETURN); -} - #ifdef COMPAT_FREEBSD4 int freebsd4_sigreturn(struct thread *td, struct freebsd4_sigreturn_args *uap) @@ -718,39 +600,6 @@ cpu_halt(void) } int -set_regs(struct thread *td, struct reg *regs) -{ - struct trapframe *tf; - - tf = td->td_frame; - memcpy(tf, regs, sizeof(struct reg)); - return (0); -} - -int -fill_dbregs(struct thread *td, struct dbreg *dbregs) -{ - - /* No debug registers on PowerPC */ - return (ENOSYS); -} - -int -set_dbregs(struct thread *td, struct dbreg *dbregs) -{ - - /* No debug registers on PowerPC */ - return (ENOSYS); -} - -int -set_fpregs(struct thread *td, struct fpreg *fpregs) -{ - - return (0); -} - -int ptrace_set_pc(struct thread *td, unsigned long addr) { struct trapframe *tf; @@ -804,124 +653,6 @@ kdb_cpu_set_singlestep(void) } void -sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) -{ - struct trapframe *tf; - struct sigframe *sfp; - struct sigacts *psp; - struct sigframe sf; - struct thread *td; - struct proc *p; - int oonstack, rndfsize; - int sig, code; - - td = curthread; - p = td->td_proc; - PROC_LOCK_ASSERT(p, MA_OWNED); - sig = ksi->ksi_signo; - code = ksi->ksi_code; - psp = p->p_sigacts; - mtx_assert(&psp->ps_mtx, MA_OWNED); - tf = td->td_frame; - oonstack = sigonstack(tf->fixreg[1]); - - rndfsize = ((sizeof(sf) + 15) / 16) * 16; - - CTR4(KTR_SIG, "sendsig: td=%p (%s) catcher=%p sig=%d", td, p->p_comm, - catcher, sig); - - /* - * Save user context - */ - memset(&sf, 0, sizeof(sf)); - grab_mcontext(td, &sf.sf_uc.uc_mcontext, 0); - sf.sf_uc.uc_sigmask = *mask; - sf.sf_uc.uc_stack = td->td_sigstk; - sf.sf_uc.uc_stack.ss_flags = (td->td_pflags & TDP_ALTSTACK) - ? ((oonstack) ? SS_ONSTACK : 0) : SS_DISABLE; - - sf.sf_uc.uc_mcontext.mc_onstack = (oonstack) ? 1 : 0; - - /* - * Allocate and validate space for the signal handler context. - */ - if ((td->td_pflags & TDP_ALTSTACK) != 0 && !oonstack && - SIGISMEMBER(psp->ps_sigonstack, sig)) { - sfp = (struct sigframe *)((caddr_t)td->td_sigstk.ss_sp + - td->td_sigstk.ss_size - rndfsize); - } else { - sfp = (struct sigframe *)(tf->fixreg[1] - rndfsize); - } - - /* - * Translate the signal if appropriate (Linux emu ?) - */ - if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize) - sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)]; - - /* - * Save the floating-point state, if necessary, then copy it. - */ - /* XXX */ - - /* - * Set up the registers to return to sigcode. - * - * r1/sp - sigframe ptr - * lr - sig function, dispatched to by blrl in trampoline - * r3 - sig number - * r4 - SIGINFO ? &siginfo : exception code - * r5 - user context - * srr0 - trampoline function addr - */ - tf->lr = (register_t)catcher; - tf->fixreg[1] = (register_t)sfp; - tf->fixreg[FIRSTARG] = sig; - tf->fixreg[FIRSTARG+2] = (register_t)&sfp->sf_uc; - if (SIGISMEMBER(psp->ps_siginfo, sig)) { - /* - * Signal handler installed with SA_SIGINFO. - */ - tf->fixreg[FIRSTARG+1] = (register_t)&sfp->sf_si; - - /* - * Fill siginfo structure. - */ - sf.sf_si = ksi->ksi_info; - sf.sf_si.si_signo = sig; - sf.sf_si.si_addr = (void *) ((tf->exc == EXC_DSI) ? - tf->cpu.booke.dear : tf->srr0); - } else { - /* Old FreeBSD-style arguments. */ - tf->fixreg[FIRSTARG+1] = code; - tf->fixreg[FIRSTARG+3] = (tf->exc == EXC_DSI) ? - tf->cpu.booke.dear : tf->srr0; - } - mtx_unlock(&psp->ps_mtx); - PROC_UNLOCK(p); - - tf->srr0 = (register_t)(PS_STRINGS - *(p->p_sysent->sv_szsigcode)); - - /* - * copy the frame out to userland. - */ - if (copyout((caddr_t)&sf, (caddr_t)sfp, sizeof(sf)) != 0) { - /* - * Process has trashed its stack. Kill it. - */ - CTR2(KTR_SIG, "sendsig: sigexit td=%p sfp=%p", td, sfp); - PROC_LOCK(p); - sigexit(td, SIGILL); - } - - CTR3(KTR_SIG, "sendsig: return td=%p pc=%#x sp=%#x", td, - tf->srr0, tf->fixreg[1]); - - PROC_LOCK(p); - mtx_lock(&psp->ps_mtx); -} - -void bzero(void *buf, size_t len) { caddr_t p; Modified: projects/ppc64/sys/powerpc/include/psl.h ============================================================================== --- projects/ppc64/sys/powerpc/include/psl.h Sat Mar 20 12:39:28 2010 (r205367) +++ projects/ppc64/sys/powerpc/include/psl.h Sat Mar 20 14:24:57 2010 (r205368) @@ -60,6 +60,10 @@ #define PSL_DS 0x00000010 /* Data address space */ #define PSL_PMM 0x00000004 /* Performance monitor mark */ +#define PSL_PMM 0x00000004 /* Performance monitor mark */ + +#define PSL_FE_DFLT 0x00000000 /* default == none */ + /* Initial kernel MSR, use IS=1 ad DS=1. */ #define PSL_KERNSET_INIT (PSL_IS | PSL_DS) #define PSL_KERNSET (PSL_CE | PSL_ME | PSL_EE) Modified: projects/ppc64/sys/powerpc/include/pte.h ============================================================================== --- projects/ppc64/sys/powerpc/include/pte.h Sat Mar 20 12:39:28 2010 (r205367) +++ projects/ppc64/sys/powerpc/include/pte.h Sat Mar 20 14:24:57 2010 (r205368) @@ -190,7 +190,7 @@ extern u_int dsisr(void); */ #define PTBL_SHIFT PAGE_SHIFT #define PTBL_SIZE PAGE_SIZE /* va range mapped by ptbl entry */ -#define PTBL_MASK ((PDIR_SIZE - 1) & ~PAGE_MASK) +#define PTBL_MASK ((PDIR_SIZE - 1) & ~((1 << PAGE_SHIFT) - 1)) #define PTBL_NENTRIES 1024 /* number of pages mapped by ptbl */ /* Returns ptbl entry number for given va */ Modified: projects/ppc64/sys/powerpc/include/vmparam.h ============================================================================== --- projects/ppc64/sys/powerpc/include/vmparam.h Sat Mar 20 12:39:28 2010 (r205367) +++ projects/ppc64/sys/powerpc/include/vmparam.h Sat Mar 20 14:24:57 2010 (r205368) @@ -88,6 +88,11 @@ #define VM_MAXUSER_ADDRESS ((vm_offset_t)0x7ffff000) #define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS #endif +#else /* LOCORE */ +#ifndef __powerpc64__ +#define VM_MIN_ADDRESS 0 +#define VM_MAXUSER_ADDRESS 0x7ffff000 +#endif #endif /* LOCORE */ #define FREEBSD32_USRSTACK 0x7ffff000 Modified: projects/ppc64/sys/powerpc/powerpc/exec_machdep.c ============================================================================== --- projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Sat Mar 20 12:39:28 2010 (r205367) +++ projects/ppc64/sys/powerpc/powerpc/exec_machdep.c Sat Mar 20 14:24:57 2010 (r205368) @@ -283,7 +283,7 @@ sendsig(sig_t catcher, ksiginfo_t *ksi, tf->cpu.aim.dar : tf->srr0; #else tf->fixreg[FIRSTARG+3] = (tf->exc == EXC_DSI) ? - tf->cpu.booke.dear : tf->srr0); + tf->cpu.booke.dear : tf->srr0; #endif } mtx_unlock(&psp->ps_mtx); @@ -381,6 +381,7 @@ grab_mcontext(struct thread *td, mcontex mcp->mc_gpr[4] = 0; } +#ifdef AIM /* * This assumes that floating-point context is *not* lazy, * so if the thread has used FP there would have been a @@ -413,6 +414,7 @@ grab_mcontext(struct thread *td, mcontex mcp->mc_vrsave = pcb->pcb_vec.vrsave; memcpy(mcp->mc_avec, pcb->pcb_vec.vr, sizeof(mcp->mc_avec)); } +#endif mcp->mc_len = sizeof(*mcp); @@ -457,6 +459,7 @@ set_mcontext(struct thread *td, const mc memcpy(tf, mcp->mc_frame, sizeof(mcp->mc_frame)); +#ifdef AIM if (mcp->mc_flags & _MC_FP_VALID) { if ((pcb->pcb_flags & PCB_FPU) != PCB_FPU) { critical_enter(); @@ -477,7 +480,7 @@ set_mcontext(struct thread *td, const mc pcb->pcb_vec.vrsave = mcp->mc_vrsave; memcpy(pcb->pcb_vec.vr, mcp->mc_avec, sizeof(mcp->mc_avec)); } - +#endif return (0); } @@ -550,10 +553,10 @@ exec_setregs(struct thread *td, struct i tf->srr0 = entry_desc[0] + imgp->reloc_base; tf->fixreg[2] = entry_desc[1] + imgp->reloc_base; tf->fixreg[11] = entry_desc[2] + imgp->reloc_base; - tf->srr1 = PSL_SF | PSL_MBO | PSL_USERSET | PSL_FE_DFLT; + tf->srr1 = PSL_SF | PSL_USERSET | PSL_FE_DFLT; #else tf->srr0 = imgp->entry_addr; - tf->srr1 = PSL_MBO | PSL_USERSET | PSL_FE_DFLT; + tf->srr1 = PSL_USERSET | PSL_FE_DFLT; #endif td->td_pcb->pcb_flags = 0; } @@ -641,12 +644,14 @@ set_dbregs(struct thread *td, struct dbr int set_fpregs(struct thread *td, struct fpreg *fpregs) { +#ifdef AIM struct pcb *pcb; pcb = td->td_pcb; if ((pcb->pcb_flags & PCB_FPU) == 0) enable_fpu(td); memcpy(&pcb->pcb_fpu, fpregs, sizeof(struct fpreg)); +#endif return (0); } From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 14:26:30 2010 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 A76201065784; Sat, 20 Mar 2010 14:26:30 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 95A338FC08; Sat, 20 Mar 2010 14:26:30 +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 o2KEQUFi097772; Sat, 20 Mar 2010 14:26:30 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KEQUBp097770; Sat, 20 Mar 2010 14:26:30 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003201426.o2KEQUBp097770@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 14:26: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: r205369 - projects/ppc64/sys/powerpc/include 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, 20 Mar 2010 14:26:30 -0000 Author: nwhitehorn Date: Sat Mar 20 14:26:30 2010 New Revision: 205369 URL: http://svn.freebsd.org/changeset/base/205369 Log: vi went haywire. Fix it. Modified: projects/ppc64/sys/powerpc/include/psl.h Modified: projects/ppc64/sys/powerpc/include/psl.h ============================================================================== --- projects/ppc64/sys/powerpc/include/psl.h Sat Mar 20 14:24:57 2010 (r205368) +++ projects/ppc64/sys/powerpc/include/psl.h Sat Mar 20 14:26:30 2010 (r205369) @@ -60,8 +60,6 @@ #define PSL_DS 0x00000010 /* Data address space */ #define PSL_PMM 0x00000004 /* Performance monitor mark */ -#define PSL_PMM 0x00000004 /* Performance monitor mark */ - #define PSL_FE_DFLT 0x00000000 /* default == none */ /* Initial kernel MSR, use IS=1 ad DS=1. */ From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 14:53:54 2010 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 58A7C106564A; Sat, 20 Mar 2010 14:53:54 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 425968FC13; Sat, 20 Mar 2010 14:53: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 o2KErsmA004226; Sat, 20 Mar 2010 14:53:54 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KErrQV004210; Sat, 20 Mar 2010 14:53:53 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003201453.o2KErrQV004210@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 14:53:53 +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: r205374 - in projects/ppc64: . bin/ps bin/sh cddl/contrib/opensolaris/cmd/zfs cddl/contrib/opensolaris/lib/libzfs/common contrib/bind9 contrib/bind9/bin/named contrib/bind9/doc/arm cont... 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, 20 Mar 2010 14:53:54 -0000 Author: nwhitehorn Date: Sat Mar 20 14:53:52 2010 New Revision: 205374 URL: http://svn.freebsd.org/changeset/base/205374 Log: IFC @ 205370 Added: projects/ppc64/lib/libcompat/4.3/re_comp.c - copied unchanged from r205371, head/lib/libcompat/4.3/re_comp.c projects/ppc64/sys/arm/conf/LN2410SBC - copied unchanged from r205371, head/sys/arm/conf/LN2410SBC projects/ppc64/sys/arm/s3c2xx0/ - copied from r205371, head/sys/arm/s3c2xx0/ projects/ppc64/sys/dev/usb/controller/ohci_s3c24x0.c - copied unchanged from r205371, head/sys/dev/usb/controller/ohci_s3c24x0.c projects/ppc64/tools/regression/bin/sh/builtins/command11.0 - copied unchanged from r205371, head/tools/regression/bin/sh/builtins/command11.0 projects/ppc64/tools/regression/bin/sh/errors/assignment-error1.0 - copied unchanged from r205371, head/tools/regression/bin/sh/errors/assignment-error1.0 projects/ppc64/tools/regression/bin/sh/errors/redirection-error4.0 - copied unchanged from r205371, head/tools/regression/bin/sh/errors/redirection-error4.0 projects/ppc64/tools/regression/bin/sh/errors/redirection-error5.0 - copied unchanged from r205371, head/tools/regression/bin/sh/errors/redirection-error5.0 projects/ppc64/tools/regression/bin/sh/errors/redirection-error6.0 - copied unchanged from r205371, head/tools/regression/bin/sh/errors/redirection-error6.0 projects/ppc64/tools/regression/bin/sh/expansion/cmdsubst2.0 - copied unchanged from r205371, head/tools/regression/bin/sh/expansion/cmdsubst2.0 projects/ppc64/tools/regression/usr.bin/ncal/ - copied from r205371, head/tools/regression/usr.bin/ncal/ Deleted: projects/ppc64/crypto/openssl/apps/genpkey.c projects/ppc64/crypto/openssl/apps/pkey.c projects/ppc64/crypto/openssl/apps/pkeyparam.c projects/ppc64/crypto/openssl/apps/pkeyutl.c projects/ppc64/crypto/openssl/apps/ts.c projects/ppc64/crypto/openssl/apps/tsget projects/ppc64/crypto/openssl/crypto/aes/aes_x86core.c projects/ppc64/crypto/openssl/crypto/aes/asm/aes-armv4.pl projects/ppc64/crypto/openssl/crypto/aes/asm/aes-ppc.pl projects/ppc64/crypto/openssl/crypto/aes/asm/aes-s390x.pl projects/ppc64/crypto/openssl/crypto/aes/asm/aes-sparcv9.pl projects/ppc64/crypto/openssl/crypto/asn1/ameth_lib.c projects/ppc64/crypto/openssl/crypto/asn1/asn1_locl.h projects/ppc64/crypto/openssl/crypto/asn1/bio_asn1.c projects/ppc64/crypto/openssl/crypto/asn1/bio_ndef.c projects/ppc64/crypto/openssl/crypto/asn1/x_nx509.c projects/ppc64/crypto/openssl/crypto/bn/asm/alpha-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/armv4-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/mips3-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/ppc-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/ppc64-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/s390x-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/s390x.S projects/ppc64/crypto/openssl/crypto/bn/asm/sparcv9-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/sparcv9a-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/via-mont.pl projects/ppc64/crypto/openssl/crypto/bn/asm/x86-mont.pl projects/ppc64/crypto/openssl/crypto/camellia/asm/cmll-x86.pl projects/ppc64/crypto/openssl/crypto/camellia/asm/cmll-x86_64.pl projects/ppc64/crypto/openssl/crypto/ppccpuid.pl projects/ppc64/crypto/openssl/crypto/s390xcpuid.S projects/ppc64/crypto/openssl/crypto/sparcv9cap.c projects/ppc64/crypto/openssl/engines/axp.opt projects/ppc64/include/regexp.h projects/ppc64/lib/libcompat/4.3/regex.c projects/ppc64/lib/libcompat/regexp/ Modified: projects/ppc64/MAINTAINERS projects/ppc64/Makefile projects/ppc64/ObsoleteFiles.inc projects/ppc64/bin/ps/extern.h projects/ppc64/bin/ps/keyword.c projects/ppc64/bin/ps/print.c projects/ppc64/bin/ps/ps.1 projects/ppc64/bin/sh/eval.c projects/ppc64/bin/sh/parser.c projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.h projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_impl.h projects/ppc64/contrib/bind9/CHANGES projects/ppc64/contrib/bind9/bin/named/server.c projects/ppc64/contrib/bind9/doc/arm/Bv9ARM-book.xml projects/ppc64/contrib/bind9/doc/arm/Bv9ARM.ch06.html projects/ppc64/contrib/bind9/doc/arm/Bv9ARM.ch07.html projects/ppc64/contrib/bind9/doc/arm/Bv9ARM.ch08.html projects/ppc64/contrib/bind9/doc/arm/Bv9ARM.ch09.html projects/ppc64/contrib/bind9/doc/arm/Bv9ARM.html projects/ppc64/contrib/bind9/doc/arm/Bv9ARM.pdf projects/ppc64/contrib/bind9/doc/arm/man.dig.html projects/ppc64/contrib/bind9/doc/arm/man.dnssec-dsfromkey.html projects/ppc64/contrib/bind9/doc/arm/man.dnssec-keyfromlabel.html projects/ppc64/contrib/bind9/doc/arm/man.dnssec-keygen.html projects/ppc64/contrib/bind9/doc/arm/man.dnssec-signzone.html projects/ppc64/contrib/bind9/doc/arm/man.host.html projects/ppc64/contrib/bind9/doc/arm/man.named-checkconf.html projects/ppc64/contrib/bind9/doc/arm/man.named-checkzone.html projects/ppc64/contrib/bind9/doc/arm/man.named.html projects/ppc64/contrib/bind9/doc/arm/man.nsupdate.html projects/ppc64/contrib/bind9/doc/arm/man.rndc-confgen.html projects/ppc64/contrib/bind9/doc/arm/man.rndc.conf.html projects/ppc64/contrib/bind9/doc/arm/man.rndc.html projects/ppc64/contrib/bind9/lib/dns/api projects/ppc64/contrib/bind9/lib/dns/include/dns/rdataset.h projects/ppc64/contrib/bind9/lib/dns/include/dns/resolver.h projects/ppc64/contrib/bind9/lib/dns/include/dns/result.h projects/ppc64/contrib/bind9/lib/dns/include/dns/validator.h projects/ppc64/contrib/bind9/lib/dns/ncache.c projects/ppc64/contrib/bind9/lib/dns/rbtdb.c projects/ppc64/contrib/bind9/lib/dns/rdatalist.c projects/ppc64/contrib/bind9/lib/dns/rdataset.c projects/ppc64/contrib/bind9/lib/dns/rdataslab.c projects/ppc64/contrib/bind9/lib/dns/resolver.c projects/ppc64/contrib/bind9/lib/dns/result.c projects/ppc64/contrib/bind9/lib/dns/sdb.c projects/ppc64/contrib/bind9/lib/dns/sdlz.c projects/ppc64/contrib/bind9/lib/dns/validator.c projects/ppc64/contrib/bind9/lib/dns/view.c projects/ppc64/contrib/bind9/lib/lwres/man/lwres.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_buffer.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_config.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_context.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_gabn.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_gai_strerror.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_getaddrinfo.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_gethostent.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_getipnode.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_getnameinfo.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_getrrsetbyname.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_gnba.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_hstrerror.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_inetntop.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_noop.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_packet.html projects/ppc64/contrib/bind9/lib/lwres/man/lwres_resutil.html projects/ppc64/contrib/bind9/version projects/ppc64/contrib/bsnmp/gensnmptree/gensnmptree.1 projects/ppc64/contrib/bsnmp/snmpd/snmpmod.3 projects/ppc64/contrib/top/utils.c projects/ppc64/crypto/openssl/CHANGES projects/ppc64/crypto/openssl/Configure projects/ppc64/crypto/openssl/FAQ projects/ppc64/crypto/openssl/Makefile projects/ppc64/crypto/openssl/Makefile.org projects/ppc64/crypto/openssl/NEWS projects/ppc64/crypto/openssl/README projects/ppc64/crypto/openssl/apps/CA.sh projects/ppc64/crypto/openssl/apps/Makefile projects/ppc64/crypto/openssl/apps/apps.c projects/ppc64/crypto/openssl/apps/ca.c projects/ppc64/crypto/openssl/apps/dsa.c projects/ppc64/crypto/openssl/apps/dsaparam.c projects/ppc64/crypto/openssl/apps/enc.c projects/ppc64/crypto/openssl/apps/gendsa.c projects/ppc64/crypto/openssl/apps/genrsa.c projects/ppc64/crypto/openssl/apps/openssl.c projects/ppc64/crypto/openssl/apps/pkcs12.c projects/ppc64/crypto/openssl/apps/req.c projects/ppc64/crypto/openssl/apps/s_apps.h projects/ppc64/crypto/openssl/apps/s_cb.c projects/ppc64/crypto/openssl/apps/s_client.c projects/ppc64/crypto/openssl/apps/s_server.c projects/ppc64/crypto/openssl/apps/s_socket.c projects/ppc64/crypto/openssl/apps/speed.c projects/ppc64/crypto/openssl/apps/x509.c projects/ppc64/crypto/openssl/config projects/ppc64/crypto/openssl/crypto/aes/aes_cfb.c projects/ppc64/crypto/openssl/crypto/aes/asm/aes-x86_64.pl projects/ppc64/crypto/openssl/crypto/asn1/a_mbstr.c projects/ppc64/crypto/openssl/crypto/asn1/a_object.c projects/ppc64/crypto/openssl/crypto/asn1/asn1.h projects/ppc64/crypto/openssl/crypto/asn1/asn1_err.c projects/ppc64/crypto/openssl/crypto/asn1/asn1_gen.c projects/ppc64/crypto/openssl/crypto/asn1/asn1_par.c projects/ppc64/crypto/openssl/crypto/asn1/t_x509.c projects/ppc64/crypto/openssl/crypto/bio/bio.h projects/ppc64/crypto/openssl/crypto/bio/bss_dgram.c projects/ppc64/crypto/openssl/crypto/bio/bss_file.c projects/ppc64/crypto/openssl/crypto/bn/asm/x86_64-gcc.c projects/ppc64/crypto/openssl/crypto/bn/bn_div.c projects/ppc64/crypto/openssl/crypto/bn/bn_exp.c projects/ppc64/crypto/openssl/crypto/bn/bn_gf2m.c projects/ppc64/crypto/openssl/crypto/bn/bn_mul.c projects/ppc64/crypto/openssl/crypto/bn/bntest.c projects/ppc64/crypto/openssl/crypto/camellia/Makefile projects/ppc64/crypto/openssl/crypto/cast/c_cfb64.c projects/ppc64/crypto/openssl/crypto/cast/c_ecb.c projects/ppc64/crypto/openssl/crypto/cast/c_enc.c projects/ppc64/crypto/openssl/crypto/cast/c_ofb64.c projects/ppc64/crypto/openssl/crypto/cast/cast.h projects/ppc64/crypto/openssl/crypto/cms/cms_ess.c projects/ppc64/crypto/openssl/crypto/cms/cms_lib.c projects/ppc64/crypto/openssl/crypto/comp/c_zlib.c projects/ppc64/crypto/openssl/crypto/cryptlib.c projects/ppc64/crypto/openssl/crypto/dsa/Makefile projects/ppc64/crypto/openssl/crypto/dsa/dsa_asn1.c projects/ppc64/crypto/openssl/crypto/dsa/dsa_lib.c projects/ppc64/crypto/openssl/crypto/dso/dso_dlfcn.c projects/ppc64/crypto/openssl/crypto/ec/ec2_smpl.c projects/ppc64/crypto/openssl/crypto/ecdsa/Makefile projects/ppc64/crypto/openssl/crypto/ecdsa/ecs_ossl.c projects/ppc64/crypto/openssl/crypto/ecdsa/ecs_sign.c projects/ppc64/crypto/openssl/crypto/engine/Makefile projects/ppc64/crypto/openssl/crypto/engine/eng_cnf.c projects/ppc64/crypto/openssl/crypto/engine/eng_cryptodev.c projects/ppc64/crypto/openssl/crypto/engine/eng_ctrl.c projects/ppc64/crypto/openssl/crypto/engine/eng_err.c projects/ppc64/crypto/openssl/crypto/engine/eng_table.c projects/ppc64/crypto/openssl/crypto/engine/engine.h projects/ppc64/crypto/openssl/crypto/err/Makefile projects/ppc64/crypto/openssl/crypto/err/err_all.c projects/ppc64/crypto/openssl/crypto/evp/c_allc.c projects/ppc64/crypto/openssl/crypto/evp/c_alld.c projects/ppc64/crypto/openssl/crypto/evp/digest.c projects/ppc64/crypto/openssl/crypto/evp/evp_lib.c projects/ppc64/crypto/openssl/crypto/evp/evp_locl.h projects/ppc64/crypto/openssl/crypto/lhash/lhash.c projects/ppc64/crypto/openssl/crypto/md5/asm/md5-x86_64.pl projects/ppc64/crypto/openssl/crypto/o_init.c projects/ppc64/crypto/openssl/crypto/o_str.c projects/ppc64/crypto/openssl/crypto/objects/obj_dat.c projects/ppc64/crypto/openssl/crypto/objects/obj_dat.h projects/ppc64/crypto/openssl/crypto/objects/obj_mac.h projects/ppc64/crypto/openssl/crypto/objects/obj_mac.num projects/ppc64/crypto/openssl/crypto/objects/objects.txt projects/ppc64/crypto/openssl/crypto/ocsp/ocsp_prn.c projects/ppc64/crypto/openssl/crypto/opensslv.h projects/ppc64/crypto/openssl/crypto/pem/pem_seal.c projects/ppc64/crypto/openssl/crypto/perlasm/x86_64-xlate.pl projects/ppc64/crypto/openssl/crypto/pkcs12/p12_attr.c projects/ppc64/crypto/openssl/crypto/pkcs12/p12_key.c projects/ppc64/crypto/openssl/crypto/pkcs12/p12_utl.c projects/ppc64/crypto/openssl/crypto/pkcs12/pkcs12.h projects/ppc64/crypto/openssl/crypto/pkcs7/pk7_mime.c projects/ppc64/crypto/openssl/crypto/rand/rand_win.c projects/ppc64/crypto/openssl/crypto/rand/randfile.c projects/ppc64/crypto/openssl/crypto/rsa/rsa.h projects/ppc64/crypto/openssl/crypto/rsa/rsa_eay.c projects/ppc64/crypto/openssl/crypto/rsa/rsa_eng.c projects/ppc64/crypto/openssl/crypto/rsa/rsa_oaep.c projects/ppc64/crypto/openssl/crypto/rsa/rsa_pss.c projects/ppc64/crypto/openssl/crypto/rsa/rsa_sign.c projects/ppc64/crypto/openssl/crypto/sha/sha512.c projects/ppc64/crypto/openssl/crypto/stack/safestack.h projects/ppc64/crypto/openssl/crypto/symhacks.h projects/ppc64/crypto/openssl/crypto/ui/ui_openssl.c projects/ppc64/crypto/openssl/crypto/x509/by_dir.c projects/ppc64/crypto/openssl/crypto/x509/x509.h projects/ppc64/crypto/openssl/crypto/x509/x509_lu.c projects/ppc64/crypto/openssl/crypto/x509/x509_vfy.c projects/ppc64/crypto/openssl/crypto/x509/x509_vfy.h projects/ppc64/crypto/openssl/crypto/x509/x509_vpm.c projects/ppc64/crypto/openssl/crypto/x509v3/pcy_tree.c projects/ppc64/crypto/openssl/crypto/x509v3/v3_alt.c projects/ppc64/crypto/openssl/crypto/x509v3/v3_ocsp.c projects/ppc64/crypto/openssl/demos/x509/mkcert.c projects/ppc64/crypto/openssl/demos/x509/mkreq.c projects/ppc64/crypto/openssl/doc/apps/enc.pod projects/ppc64/crypto/openssl/doc/apps/verify.pod projects/ppc64/crypto/openssl/doc/crypto/ASN1_generate_nconf.pod projects/ppc64/crypto/openssl/doc/crypto/EVP_DigestInit.pod projects/ppc64/crypto/openssl/doc/crypto/PKCS12_parse.pod projects/ppc64/crypto/openssl/doc/crypto/bn_internal.pod projects/ppc64/crypto/openssl/doc/crypto/d2i_X509.pod projects/ppc64/crypto/openssl/doc/crypto/d2i_X509_CRL.pod projects/ppc64/crypto/openssl/doc/crypto/d2i_X509_REQ.pod projects/ppc64/crypto/openssl/doc/crypto/hmac.pod projects/ppc64/crypto/openssl/doc/crypto/pem.pod projects/ppc64/crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod projects/ppc64/crypto/openssl/doc/ssl/SSL_CTX_set_options.pod projects/ppc64/crypto/openssl/engines/Makefile projects/ppc64/crypto/openssl/engines/e_capi.c projects/ppc64/crypto/openssl/engines/e_capi_err.c projects/ppc64/crypto/openssl/engines/e_capi_err.h projects/ppc64/crypto/openssl/engines/e_ubsec.c projects/ppc64/crypto/openssl/fips/Makefile projects/ppc64/crypto/openssl/fips/aes/fips_aesavs.c projects/ppc64/crypto/openssl/fips/des/fips_desmovs.c projects/ppc64/crypto/openssl/fips/dsa/fips_dsa_key.c projects/ppc64/crypto/openssl/fips/dsa/fips_dsa_sign.c projects/ppc64/crypto/openssl/fips/dsa/fips_dsatest.c projects/ppc64/crypto/openssl/fips/dsa/fips_dssvs.c projects/ppc64/crypto/openssl/fips/fips_locl.h projects/ppc64/crypto/openssl/fips/fips_test_suite.c projects/ppc64/crypto/openssl/fips/fips_utl.h projects/ppc64/crypto/openssl/fips/fipsalgtest.pl projects/ppc64/crypto/openssl/fips/fipsld projects/ppc64/crypto/openssl/fips/hmac/fips_hmac.c projects/ppc64/crypto/openssl/fips/hmac/fips_hmac_selftest.c projects/ppc64/crypto/openssl/fips/rand/fips_rand.c projects/ppc64/crypto/openssl/fips/rand/fips_rngvs.c projects/ppc64/crypto/openssl/fips/rsa/fips_rsagtest.c projects/ppc64/crypto/openssl/fips/rsa/fips_rsastest.c projects/ppc64/crypto/openssl/fips/rsa/fips_rsavtest.c projects/ppc64/crypto/openssl/fips/sha/Makefile projects/ppc64/crypto/openssl/fips/sha/fips_sha1_selftest.c projects/ppc64/crypto/openssl/openssl.spec projects/ppc64/crypto/openssl/ssl/Makefile projects/ppc64/crypto/openssl/ssl/d1_both.c projects/ppc64/crypto/openssl/ssl/d1_clnt.c projects/ppc64/crypto/openssl/ssl/d1_enc.c projects/ppc64/crypto/openssl/ssl/d1_lib.c projects/ppc64/crypto/openssl/ssl/d1_pkt.c projects/ppc64/crypto/openssl/ssl/d1_srvr.c projects/ppc64/crypto/openssl/ssl/dtls1.h projects/ppc64/crypto/openssl/ssl/kssl.c projects/ppc64/crypto/openssl/ssl/s23_clnt.c projects/ppc64/crypto/openssl/ssl/s23_srvr.c projects/ppc64/crypto/openssl/ssl/s2_srvr.c projects/ppc64/crypto/openssl/ssl/s3_both.c projects/ppc64/crypto/openssl/ssl/s3_clnt.c projects/ppc64/crypto/openssl/ssl/s3_lib.c projects/ppc64/crypto/openssl/ssl/s3_pkt.c projects/ppc64/crypto/openssl/ssl/s3_srvr.c projects/ppc64/crypto/openssl/ssl/ssl.h projects/ppc64/crypto/openssl/ssl/ssl3.h projects/ppc64/crypto/openssl/ssl/ssl_algs.c projects/ppc64/crypto/openssl/ssl/ssl_asn1.c projects/ppc64/crypto/openssl/ssl/ssl_cert.c projects/ppc64/crypto/openssl/ssl/ssl_ciph.c projects/ppc64/crypto/openssl/ssl/ssl_err.c projects/ppc64/crypto/openssl/ssl/ssl_lib.c projects/ppc64/crypto/openssl/ssl/ssl_locl.h projects/ppc64/crypto/openssl/ssl/ssl_rsa.c projects/ppc64/crypto/openssl/ssl/ssl_sess.c projects/ppc64/crypto/openssl/ssl/ssl_stat.c projects/ppc64/crypto/openssl/ssl/ssl_txt.c projects/ppc64/crypto/openssl/ssl/t1_enc.c projects/ppc64/crypto/openssl/ssl/t1_lib.c projects/ppc64/crypto/openssl/ssl/tls1.h projects/ppc64/crypto/openssl/test/Makefile projects/ppc64/crypto/openssl/test/cms-test.pl projects/ppc64/crypto/openssl/util/domd projects/ppc64/crypto/openssl/util/libeay.num projects/ppc64/crypto/openssl/util/mk1mf.pl projects/ppc64/crypto/openssl/util/mkdef.pl projects/ppc64/crypto/openssl/util/mkerr.pl projects/ppc64/crypto/openssl/util/pl/Mingw32.pl projects/ppc64/crypto/openssl/util/pl/VC-32.pl projects/ppc64/crypto/openssl/util/pod2man.pl projects/ppc64/crypto/openssl/util/shlib_wrap.sh projects/ppc64/etc/Makefile projects/ppc64/etc/rc.d/tmp projects/ppc64/games/pom/pom.6 projects/ppc64/gnu/usr.bin/gdb/arch/arm/nm-fbsd.h projects/ppc64/include/Makefile projects/ppc64/lib/Makefile projects/ppc64/lib/bind/config.h projects/ppc64/lib/csu/mips/crti.S projects/ppc64/lib/libc/compat-43/sigpause.2 projects/ppc64/lib/libc/gen/daemon.c projects/ppc64/lib/libc/rpc/rpc_generic.c projects/ppc64/lib/libc/stdio/findfp.c projects/ppc64/lib/libc/stdio/local.h projects/ppc64/lib/libc/stdio/snprintf.c projects/ppc64/lib/libc/stdio/vasprintf.c projects/ppc64/lib/libc/stdio/vdprintf.c projects/ppc64/lib/libc/stdio/vfprintf.c projects/ppc64/lib/libc/stdio/vsnprintf.c projects/ppc64/lib/libc/stdio/vsprintf.c projects/ppc64/lib/libc/stdio/vsscanf.c projects/ppc64/lib/libc/stdio/vswprintf.c projects/ppc64/lib/libc/stdio/vswscanf.c projects/ppc64/lib/libc/stdio/xprintf.c projects/ppc64/lib/libc/string/strlen.c projects/ppc64/lib/libcompat/4.1/ascftime.c projects/ppc64/lib/libcompat/4.1/cftime.c projects/ppc64/lib/libcompat/4.1/ftime.c projects/ppc64/lib/libcompat/4.1/getpw.c projects/ppc64/lib/libcompat/4.3/cfree.c projects/ppc64/lib/libcompat/4.3/re_comp.3 projects/ppc64/lib/libcompat/Makefile projects/ppc64/lib/libgssapi/gss_init_sec_context.3 projects/ppc64/lib/libgssapi/gss_unwrap.3 projects/ppc64/lib/libkvm/kvm_getpcpu.3 projects/ppc64/lib/librpcsec_gss/rpcsec_gss.3 projects/ppc64/lib/libstand/bzipfs.c projects/ppc64/lib/libstand/gzipfs.c projects/ppc64/lib/msun/man/cimag.3 projects/ppc64/libexec/tftpd/tftpd.8 projects/ppc64/sbin/ifconfig/ifconfig.c projects/ppc64/sbin/ipfw/dummynet.c projects/ppc64/sbin/ipfw/ipfw2.c projects/ppc64/sbin/ipfw/ipfw2.h projects/ppc64/sbin/quotacheck/quotacheck.8 projects/ppc64/sbin/sysctl/sysctl.c projects/ppc64/secure/lib/libcrypto/Makefile.inc projects/ppc64/secure/lib/libcrypto/Makefile.man projects/ppc64/secure/lib/libcrypto/man/ASN1_OBJECT_new.3 projects/ppc64/secure/lib/libcrypto/man/ASN1_STRING_length.3 projects/ppc64/secure/lib/libcrypto/man/ASN1_STRING_new.3 projects/ppc64/secure/lib/libcrypto/man/ASN1_STRING_print_ex.3 projects/ppc64/secure/lib/libcrypto/man/ASN1_generate_nconf.3 projects/ppc64/secure/lib/libcrypto/man/BIO_ctrl.3 projects/ppc64/secure/lib/libcrypto/man/BIO_f_base64.3 projects/ppc64/secure/lib/libcrypto/man/BIO_f_buffer.3 projects/ppc64/secure/lib/libcrypto/man/BIO_f_cipher.3 projects/ppc64/secure/lib/libcrypto/man/BIO_f_md.3 projects/ppc64/secure/lib/libcrypto/man/BIO_f_null.3 projects/ppc64/secure/lib/libcrypto/man/BIO_f_ssl.3 projects/ppc64/secure/lib/libcrypto/man/BIO_find_type.3 projects/ppc64/secure/lib/libcrypto/man/BIO_new.3 projects/ppc64/secure/lib/libcrypto/man/BIO_push.3 projects/ppc64/secure/lib/libcrypto/man/BIO_read.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_accept.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_bio.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_connect.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_fd.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_file.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_mem.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_null.3 projects/ppc64/secure/lib/libcrypto/man/BIO_s_socket.3 projects/ppc64/secure/lib/libcrypto/man/BIO_set_callback.3 projects/ppc64/secure/lib/libcrypto/man/BIO_should_retry.3 projects/ppc64/secure/lib/libcrypto/man/BN_BLINDING_new.3 projects/ppc64/secure/lib/libcrypto/man/BN_CTX_new.3 projects/ppc64/secure/lib/libcrypto/man/BN_CTX_start.3 projects/ppc64/secure/lib/libcrypto/man/BN_add.3 projects/ppc64/secure/lib/libcrypto/man/BN_add_word.3 projects/ppc64/secure/lib/libcrypto/man/BN_bn2bin.3 projects/ppc64/secure/lib/libcrypto/man/BN_cmp.3 projects/ppc64/secure/lib/libcrypto/man/BN_copy.3 projects/ppc64/secure/lib/libcrypto/man/BN_generate_prime.3 projects/ppc64/secure/lib/libcrypto/man/BN_mod_inverse.3 projects/ppc64/secure/lib/libcrypto/man/BN_mod_mul_montgomery.3 projects/ppc64/secure/lib/libcrypto/man/BN_mod_mul_reciprocal.3 projects/ppc64/secure/lib/libcrypto/man/BN_new.3 projects/ppc64/secure/lib/libcrypto/man/BN_num_bytes.3 projects/ppc64/secure/lib/libcrypto/man/BN_rand.3 projects/ppc64/secure/lib/libcrypto/man/BN_set_bit.3 projects/ppc64/secure/lib/libcrypto/man/BN_swap.3 projects/ppc64/secure/lib/libcrypto/man/BN_zero.3 projects/ppc64/secure/lib/libcrypto/man/CONF_modules_free.3 projects/ppc64/secure/lib/libcrypto/man/CONF_modules_load_file.3 projects/ppc64/secure/lib/libcrypto/man/CRYPTO_set_ex_data.3 projects/ppc64/secure/lib/libcrypto/man/DH_generate_key.3 projects/ppc64/secure/lib/libcrypto/man/DH_generate_parameters.3 projects/ppc64/secure/lib/libcrypto/man/DH_get_ex_new_index.3 projects/ppc64/secure/lib/libcrypto/man/DH_new.3 projects/ppc64/secure/lib/libcrypto/man/DH_set_method.3 projects/ppc64/secure/lib/libcrypto/man/DH_size.3 projects/ppc64/secure/lib/libcrypto/man/DSA_SIG_new.3 projects/ppc64/secure/lib/libcrypto/man/DSA_do_sign.3 projects/ppc64/secure/lib/libcrypto/man/DSA_dup_DH.3 projects/ppc64/secure/lib/libcrypto/man/DSA_generate_key.3 projects/ppc64/secure/lib/libcrypto/man/DSA_generate_parameters.3 projects/ppc64/secure/lib/libcrypto/man/DSA_get_ex_new_index.3 projects/ppc64/secure/lib/libcrypto/man/DSA_new.3 projects/ppc64/secure/lib/libcrypto/man/DSA_set_method.3 projects/ppc64/secure/lib/libcrypto/man/DSA_sign.3 projects/ppc64/secure/lib/libcrypto/man/DSA_size.3 projects/ppc64/secure/lib/libcrypto/man/ERR_GET_LIB.3 projects/ppc64/secure/lib/libcrypto/man/ERR_clear_error.3 projects/ppc64/secure/lib/libcrypto/man/ERR_error_string.3 projects/ppc64/secure/lib/libcrypto/man/ERR_get_error.3 projects/ppc64/secure/lib/libcrypto/man/ERR_load_crypto_strings.3 projects/ppc64/secure/lib/libcrypto/man/ERR_load_strings.3 projects/ppc64/secure/lib/libcrypto/man/ERR_print_errors.3 projects/ppc64/secure/lib/libcrypto/man/ERR_put_error.3 projects/ppc64/secure/lib/libcrypto/man/ERR_remove_state.3 projects/ppc64/secure/lib/libcrypto/man/ERR_set_mark.3 projects/ppc64/secure/lib/libcrypto/man/EVP_BytesToKey.3 projects/ppc64/secure/lib/libcrypto/man/EVP_DigestInit.3 projects/ppc64/secure/lib/libcrypto/man/EVP_EncryptInit.3 projects/ppc64/secure/lib/libcrypto/man/EVP_OpenInit.3 projects/ppc64/secure/lib/libcrypto/man/EVP_PKEY_new.3 projects/ppc64/secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3 projects/ppc64/secure/lib/libcrypto/man/EVP_SealInit.3 projects/ppc64/secure/lib/libcrypto/man/EVP_SignInit.3 projects/ppc64/secure/lib/libcrypto/man/EVP_VerifyInit.3 projects/ppc64/secure/lib/libcrypto/man/OBJ_nid2obj.3 projects/ppc64/secure/lib/libcrypto/man/OPENSSL_Applink.3 projects/ppc64/secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.3 projects/ppc64/secure/lib/libcrypto/man/OPENSSL_config.3 projects/ppc64/secure/lib/libcrypto/man/OPENSSL_ia32cap.3 projects/ppc64/secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.3 projects/ppc64/secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.3 projects/ppc64/secure/lib/libcrypto/man/PKCS12_create.3 projects/ppc64/secure/lib/libcrypto/man/PKCS12_parse.3 projects/ppc64/secure/lib/libcrypto/man/PKCS7_decrypt.3 projects/ppc64/secure/lib/libcrypto/man/PKCS7_encrypt.3 projects/ppc64/secure/lib/libcrypto/man/PKCS7_sign.3 projects/ppc64/secure/lib/libcrypto/man/PKCS7_verify.3 projects/ppc64/secure/lib/libcrypto/man/RAND_add.3 projects/ppc64/secure/lib/libcrypto/man/RAND_bytes.3 projects/ppc64/secure/lib/libcrypto/man/RAND_cleanup.3 projects/ppc64/secure/lib/libcrypto/man/RAND_egd.3 projects/ppc64/secure/lib/libcrypto/man/RAND_load_file.3 projects/ppc64/secure/lib/libcrypto/man/RAND_set_rand_method.3 projects/ppc64/secure/lib/libcrypto/man/RSA_blinding_on.3 projects/ppc64/secure/lib/libcrypto/man/RSA_check_key.3 projects/ppc64/secure/lib/libcrypto/man/RSA_generate_key.3 projects/ppc64/secure/lib/libcrypto/man/RSA_get_ex_new_index.3 projects/ppc64/secure/lib/libcrypto/man/RSA_new.3 projects/ppc64/secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.3 projects/ppc64/secure/lib/libcrypto/man/RSA_print.3 projects/ppc64/secure/lib/libcrypto/man/RSA_private_encrypt.3 projects/ppc64/secure/lib/libcrypto/man/RSA_public_encrypt.3 projects/ppc64/secure/lib/libcrypto/man/RSA_set_method.3 projects/ppc64/secure/lib/libcrypto/man/RSA_sign.3 projects/ppc64/secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.3 projects/ppc64/secure/lib/libcrypto/man/RSA_size.3 projects/ppc64/secure/lib/libcrypto/man/SMIME_read_PKCS7.3 projects/ppc64/secure/lib/libcrypto/man/SMIME_write_PKCS7.3 projects/ppc64/secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.3 projects/ppc64/secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.3 projects/ppc64/secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 projects/ppc64/secure/lib/libcrypto/man/X509_NAME_print_ex.3 projects/ppc64/secure/lib/libcrypto/man/X509_new.3 projects/ppc64/secure/lib/libcrypto/man/bio.3 projects/ppc64/secure/lib/libcrypto/man/blowfish.3 projects/ppc64/secure/lib/libcrypto/man/bn.3 projects/ppc64/secure/lib/libcrypto/man/bn_internal.3 projects/ppc64/secure/lib/libcrypto/man/buffer.3 projects/ppc64/secure/lib/libcrypto/man/crypto.3 projects/ppc64/secure/lib/libcrypto/man/d2i_ASN1_OBJECT.3 projects/ppc64/secure/lib/libcrypto/man/d2i_DHparams.3 projects/ppc64/secure/lib/libcrypto/man/d2i_DSAPublicKey.3 projects/ppc64/secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.3 projects/ppc64/secure/lib/libcrypto/man/d2i_RSAPublicKey.3 projects/ppc64/secure/lib/libcrypto/man/d2i_X509.3 projects/ppc64/secure/lib/libcrypto/man/d2i_X509_ALGOR.3 projects/ppc64/secure/lib/libcrypto/man/d2i_X509_CRL.3 projects/ppc64/secure/lib/libcrypto/man/d2i_X509_NAME.3 projects/ppc64/secure/lib/libcrypto/man/d2i_X509_REQ.3 projects/ppc64/secure/lib/libcrypto/man/d2i_X509_SIG.3 projects/ppc64/secure/lib/libcrypto/man/des.3 projects/ppc64/secure/lib/libcrypto/man/dh.3 projects/ppc64/secure/lib/libcrypto/man/dsa.3 projects/ppc64/secure/lib/libcrypto/man/ecdsa.3 projects/ppc64/secure/lib/libcrypto/man/engine.3 projects/ppc64/secure/lib/libcrypto/man/err.3 projects/ppc64/secure/lib/libcrypto/man/evp.3 projects/ppc64/secure/lib/libcrypto/man/hmac.3 projects/ppc64/secure/lib/libcrypto/man/lh_stats.3 projects/ppc64/secure/lib/libcrypto/man/lhash.3 projects/ppc64/secure/lib/libcrypto/man/md5.3 projects/ppc64/secure/lib/libcrypto/man/mdc2.3 projects/ppc64/secure/lib/libcrypto/man/pem.3 projects/ppc64/secure/lib/libcrypto/man/rand.3 projects/ppc64/secure/lib/libcrypto/man/rc4.3 projects/ppc64/secure/lib/libcrypto/man/ripemd.3 projects/ppc64/secure/lib/libcrypto/man/rsa.3 projects/ppc64/secure/lib/libcrypto/man/sha.3 projects/ppc64/secure/lib/libcrypto/man/threads.3 projects/ppc64/secure/lib/libcrypto/man/ui.3 projects/ppc64/secure/lib/libcrypto/man/ui_compat.3 projects/ppc64/secure/lib/libcrypto/man/x509.3 projects/ppc64/secure/lib/libssl/Makefile projects/ppc64/secure/lib/libssl/Makefile.man projects/ppc64/secure/lib/libssl/man/SSL_CIPHER_get_name.3 projects/ppc64/secure/lib/libssl/man/SSL_COMP_add_compression_method.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_add_session.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_ctrl.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_flush_sessions.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_free.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_get_ex_new_index.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_get_verify_mode.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_load_verify_locations.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_new.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_sess_number.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_sessions.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_cert_store.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_cipher_list.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_client_CA_list.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_generate_session_id.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_info_callback.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_max_cert_list.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_mode.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_msg_callback.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_options.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_session_id_context.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_ssl_version.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_timeout.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_set_verify.3 projects/ppc64/secure/lib/libssl/man/SSL_CTX_use_certificate.3 projects/ppc64/secure/lib/libssl/man/SSL_SESSION_free.3 projects/ppc64/secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.3 projects/ppc64/secure/lib/libssl/man/SSL_SESSION_get_time.3 projects/ppc64/secure/lib/libssl/man/SSL_accept.3 projects/ppc64/secure/lib/libssl/man/SSL_alert_type_string.3 projects/ppc64/secure/lib/libssl/man/SSL_clear.3 projects/ppc64/secure/lib/libssl/man/SSL_connect.3 projects/ppc64/secure/lib/libssl/man/SSL_do_handshake.3 projects/ppc64/secure/lib/libssl/man/SSL_free.3 projects/ppc64/secure/lib/libssl/man/SSL_get_SSL_CTX.3 projects/ppc64/secure/lib/libssl/man/SSL_get_ciphers.3 projects/ppc64/secure/lib/libssl/man/SSL_get_client_CA_list.3 projects/ppc64/secure/lib/libssl/man/SSL_get_current_cipher.3 projects/ppc64/secure/lib/libssl/man/SSL_get_default_timeout.3 projects/ppc64/secure/lib/libssl/man/SSL_get_error.3 projects/ppc64/secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.3 projects/ppc64/secure/lib/libssl/man/SSL_get_ex_new_index.3 projects/ppc64/secure/lib/libssl/man/SSL_get_fd.3 projects/ppc64/secure/lib/libssl/man/SSL_get_peer_cert_chain.3 projects/ppc64/secure/lib/libssl/man/SSL_get_peer_certificate.3 projects/ppc64/secure/lib/libssl/man/SSL_get_rbio.3 projects/ppc64/secure/lib/libssl/man/SSL_get_session.3 projects/ppc64/secure/lib/libssl/man/SSL_get_verify_result.3 projects/ppc64/secure/lib/libssl/man/SSL_get_version.3 projects/ppc64/secure/lib/libssl/man/SSL_library_init.3 projects/ppc64/secure/lib/libssl/man/SSL_load_client_CA_file.3 projects/ppc64/secure/lib/libssl/man/SSL_new.3 projects/ppc64/secure/lib/libssl/man/SSL_pending.3 projects/ppc64/secure/lib/libssl/man/SSL_read.3 projects/ppc64/secure/lib/libssl/man/SSL_rstate_string.3 projects/ppc64/secure/lib/libssl/man/SSL_session_reused.3 projects/ppc64/secure/lib/libssl/man/SSL_set_bio.3 projects/ppc64/secure/lib/libssl/man/SSL_set_connect_state.3 projects/ppc64/secure/lib/libssl/man/SSL_set_fd.3 projects/ppc64/secure/lib/libssl/man/SSL_set_session.3 projects/ppc64/secure/lib/libssl/man/SSL_set_shutdown.3 projects/ppc64/secure/lib/libssl/man/SSL_set_verify_result.3 projects/ppc64/secure/lib/libssl/man/SSL_shutdown.3 projects/ppc64/secure/lib/libssl/man/SSL_state_string.3 projects/ppc64/secure/lib/libssl/man/SSL_want.3 projects/ppc64/secure/lib/libssl/man/SSL_write.3 projects/ppc64/secure/lib/libssl/man/d2i_SSL_SESSION.3 projects/ppc64/secure/lib/libssl/man/ssl.3 projects/ppc64/secure/usr.bin/openssl/man/CA.pl.1 projects/ppc64/secure/usr.bin/openssl/man/asn1parse.1 projects/ppc64/secure/usr.bin/openssl/man/ca.1 projects/ppc64/secure/usr.bin/openssl/man/ciphers.1 projects/ppc64/secure/usr.bin/openssl/man/crl.1 projects/ppc64/secure/usr.bin/openssl/man/crl2pkcs7.1 projects/ppc64/secure/usr.bin/openssl/man/dgst.1 projects/ppc64/secure/usr.bin/openssl/man/dhparam.1 projects/ppc64/secure/usr.bin/openssl/man/dsa.1 projects/ppc64/secure/usr.bin/openssl/man/dsaparam.1 projects/ppc64/secure/usr.bin/openssl/man/ec.1 projects/ppc64/secure/usr.bin/openssl/man/ecparam.1 projects/ppc64/secure/usr.bin/openssl/man/enc.1 projects/ppc64/secure/usr.bin/openssl/man/errstr.1 projects/ppc64/secure/usr.bin/openssl/man/gendsa.1 projects/ppc64/secure/usr.bin/openssl/man/genrsa.1 projects/ppc64/secure/usr.bin/openssl/man/nseq.1 projects/ppc64/secure/usr.bin/openssl/man/ocsp.1 projects/ppc64/secure/usr.bin/openssl/man/openssl.1 projects/ppc64/secure/usr.bin/openssl/man/passwd.1 projects/ppc64/secure/usr.bin/openssl/man/pkcs12.1 projects/ppc64/secure/usr.bin/openssl/man/pkcs7.1 projects/ppc64/secure/usr.bin/openssl/man/pkcs8.1 projects/ppc64/secure/usr.bin/openssl/man/rand.1 projects/ppc64/secure/usr.bin/openssl/man/req.1 projects/ppc64/secure/usr.bin/openssl/man/rsa.1 projects/ppc64/secure/usr.bin/openssl/man/rsautl.1 projects/ppc64/secure/usr.bin/openssl/man/s_client.1 projects/ppc64/secure/usr.bin/openssl/man/s_server.1 projects/ppc64/secure/usr.bin/openssl/man/s_time.1 projects/ppc64/secure/usr.bin/openssl/man/sess_id.1 projects/ppc64/secure/usr.bin/openssl/man/smime.1 projects/ppc64/secure/usr.bin/openssl/man/speed.1 projects/ppc64/secure/usr.bin/openssl/man/spkac.1 projects/ppc64/secure/usr.bin/openssl/man/verify.1 projects/ppc64/secure/usr.bin/openssl/man/version.1 projects/ppc64/secure/usr.bin/openssl/man/x509.1 projects/ppc64/secure/usr.bin/openssl/man/x509v3_config.1 projects/ppc64/share/dict/web2 projects/ppc64/share/man/man4/acpi_wmi.4 projects/ppc64/share/man/man4/altq.4 projects/ppc64/share/man/man4/amdtemp.4 projects/ppc64/share/man/man4/cxgb.4 projects/ppc64/share/man/man4/ddb.4 projects/ppc64/share/man/man4/iscsi_initiator.4 projects/ppc64/share/man/man4/ndis.4 projects/ppc64/share/man/man4/sysmouse.4 projects/ppc64/share/man/man4/textdump.4 projects/ppc64/share/man/man4/uart.4 projects/ppc64/share/man/man4/urio.4 projects/ppc64/share/man/man9/fail.9 projects/ppc64/share/man/man9/vfs_mount.9 projects/ppc64/share/misc/pci_vendors projects/ppc64/sys/amd64/acpica/acpi_machdep.c projects/ppc64/sys/amd64/amd64/mca.c projects/ppc64/sys/amd64/amd64/pmap.c projects/ppc64/sys/amd64/conf/GENERIC projects/ppc64/sys/amd64/conf/XENHVM projects/ppc64/sys/amd64/include/mca.h projects/ppc64/sys/amd64/include/specialreg.h projects/ppc64/sys/arm/arm/busdma_machdep.c projects/ppc64/sys/arm/arm/identcpu.c projects/ppc64/sys/arm/arm/vm_machdep.c projects/ppc64/sys/arm/conf/BWCT.hints projects/ppc64/sys/cam/scsi/scsi_sg.c projects/ppc64/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c projects/ppc64/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c projects/ppc64/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c projects/ppc64/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/arc.h projects/ppc64/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/ppc64/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zio.c projects/ppc64/sys/compat/freebsd32/freebsd32.h projects/ppc64/sys/compat/freebsd32/freebsd32_ipc.h projects/ppc64/sys/compat/freebsd32/freebsd32_misc.c projects/ppc64/sys/compat/freebsd32/freebsd32_proto.h projects/ppc64/sys/compat/freebsd32/freebsd32_syscall.h projects/ppc64/sys/compat/freebsd32/freebsd32_syscalls.c projects/ppc64/sys/compat/freebsd32/freebsd32_sysent.c projects/ppc64/sys/compat/freebsd32/freebsd32_util.h projects/ppc64/sys/compat/freebsd32/syscalls.master projects/ppc64/sys/compat/x86bios/x86bios.c projects/ppc64/sys/dev/aac/aac.c projects/ppc64/sys/dev/agp/agp_i810.c projects/ppc64/sys/dev/ata/ata-raid.c projects/ppc64/sys/dev/bce/if_bce.c projects/ppc64/sys/dev/bce/if_bcefw.h projects/ppc64/sys/dev/bce/if_bcereg.h projects/ppc64/sys/dev/bwn/if_bwn.c projects/ppc64/sys/dev/drm/drm_pciids.h projects/ppc64/sys/dev/drm/i915_drv.h projects/ppc64/sys/dev/drm/i915_reg.h projects/ppc64/sys/dev/isp/isp_freebsd.c projects/ppc64/sys/dev/isp/isp_freebsd.h projects/ppc64/sys/dev/isp/isp_pci.c projects/ppc64/sys/dev/isp/isp_sbus.c projects/ppc64/sys/dev/mii/brgphy.c projects/ppc64/sys/dev/mii/brgphyreg.h projects/ppc64/sys/dev/mii/mii.c projects/ppc64/sys/dev/mii/miidevs projects/ppc64/sys/dev/msk/if_msk.c projects/ppc64/sys/dev/msk/if_mskreg.h projects/ppc64/sys/dev/mxge/if_mxge.c projects/ppc64/sys/dev/pci/vga_pci.c projects/ppc64/sys/dev/siis/siis.c projects/ppc64/sys/dev/usb/controller/uss820dci.c projects/ppc64/sys/dev/usb/input/ukbd.c projects/ppc64/sys/dev/usb/serial/uftdi.c projects/ppc64/sys/dev/usb/serial/uvisor.c projects/ppc64/sys/dev/usb/template/usb_template.c projects/ppc64/sys/dev/usb/template/usb_template.h projects/ppc64/sys/dev/usb/template/usb_template_mtp.c projects/ppc64/sys/dev/usb/usb_device.c projects/ppc64/sys/dev/usb/usb_device.h projects/ppc64/sys/dev/usb/usb_generic.c projects/ppc64/sys/dev/usb/usb_transfer.c projects/ppc64/sys/dev/usb/usbdevs projects/ppc64/sys/dev/usb/wlan/if_run.c projects/ppc64/sys/dev/usb/wlan/if_runreg.h projects/ppc64/sys/dev/usb/wlan/if_runvar.h projects/ppc64/sys/dev/xen/netback/netback.c projects/ppc64/sys/fs/fdescfs/fdesc_vnops.c projects/ppc64/sys/geom/gate/g_gate.c projects/ppc64/sys/i386/acpica/acpi_machdep.c projects/ppc64/sys/i386/conf/GENERIC projects/ppc64/sys/i386/conf/XEN projects/ppc64/sys/i386/i386/mca.c projects/ppc64/sys/i386/i386/pmap.c projects/ppc64/sys/i386/include/mca.h projects/ppc64/sys/i386/include/specialreg.h projects/ppc64/sys/ia64/conf/GENERIC projects/ppc64/sys/ia64/ia64/clock.c projects/ppc64/sys/ia64/ia64/exception.S projects/ppc64/sys/ia64/ia64/highfp.c projects/ppc64/sys/ia64/ia64/interrupt.c projects/ppc64/sys/ia64/ia64/locore.S projects/ppc64/sys/ia64/ia64/machdep.c projects/ppc64/sys/ia64/ia64/mp_machdep.c projects/ppc64/sys/ia64/ia64/nexus.c projects/ppc64/sys/ia64/ia64/sal.c projects/ppc64/sys/ia64/include/clock.h projects/ppc64/sys/ia64/include/intr.h projects/ppc64/sys/ia64/include/intrcnt.h projects/ppc64/sys/ia64/include/smp.h projects/ppc64/sys/kern/kern_ktr.c projects/ppc64/sys/kern/kern_syscalls.c projects/ppc64/sys/kern/subr_eventhandler.c projects/ppc64/sys/kern/sysv_ipc.c projects/ppc64/sys/kern/sysv_msg.c projects/ppc64/sys/kern/sysv_sem.c projects/ppc64/sys/kern/sysv_shm.c projects/ppc64/sys/kern/uipc_mqueue.c projects/ppc64/sys/kern/uipc_sem.c projects/ppc64/sys/kern/uipc_syscalls.c projects/ppc64/sys/kern/vfs_aio.c projects/ppc64/sys/mips/cavium/dev/rgmii/octeon_rgmx.c projects/ppc64/sys/mips/cavium/octeon_machdep.c projects/ppc64/sys/mips/conf/AR71XX projects/ppc64/sys/mips/conf/OCTEON1 projects/ppc64/sys/mips/conf/OCTEON1-32 projects/ppc64/sys/mips/include/clock.h projects/ppc64/sys/mips/include/cpuregs.h projects/ppc64/sys/mips/include/db_machdep.h projects/ppc64/sys/mips/include/param.h projects/ppc64/sys/mips/include/pmap.h projects/ppc64/sys/mips/include/trap.h projects/ppc64/sys/mips/mips/db_trace.c projects/ppc64/sys/mips/mips/exception.S projects/ppc64/sys/mips/mips/mp_machdep.c projects/ppc64/sys/mips/mips/nexus.c projects/ppc64/sys/mips/mips/pmap.c projects/ppc64/sys/mips/mips/tick.c projects/ppc64/sys/mips/mips/trap.c projects/ppc64/sys/mips/mips/vm_machdep.c projects/ppc64/sys/mips/sibyte/sb_asm.S projects/ppc64/sys/mips/sibyte/sb_machdep.c projects/ppc64/sys/mips/sibyte/sb_scd.c projects/ppc64/sys/mips/sibyte/sb_scd.h projects/ppc64/sys/modules/zfs/Makefile projects/ppc64/sys/net/bpf.c projects/ppc64/sys/net/flowtable.c projects/ppc64/sys/net/flowtable.h projects/ppc64/sys/net/if.h projects/ppc64/sys/net/if_llatbl.c projects/ppc64/sys/net/if_llatbl.h projects/ppc64/sys/net/if_tap.c projects/ppc64/sys/net/if_tun.c projects/ppc64/sys/net/if_var.h projects/ppc64/sys/net/route.h projects/ppc64/sys/net/vnet.c projects/ppc64/sys/net/vnet.h projects/ppc64/sys/net80211/ieee80211_adhoc.c projects/ppc64/sys/net80211/ieee80211_ht.c projects/ppc64/sys/net80211/ieee80211_mesh.c projects/ppc64/sys/net80211/ieee80211_proto.c projects/ppc64/sys/net80211/ieee80211_sta.c projects/ppc64/sys/net80211/ieee80211_tdma.c projects/ppc64/sys/netgraph/ng_socket.c projects/ppc64/sys/netgraph/ng_socketvar.h projects/ppc64/sys/netinet/in_pcb.c projects/ppc64/sys/netinet/in_pcb.h projects/ppc64/sys/netinet/ip_divert.c projects/ppc64/sys/netinet/ip_fw.h projects/ppc64/sys/netinet/ip_input.c projects/ppc64/sys/netinet/ip_ipsec.c projects/ppc64/sys/netinet/ip_output.c projects/ppc64/sys/netinet/ipfw/ip_dn_io.c projects/ppc64/sys/netinet/ipfw/ip_dn_private.h projects/ppc64/sys/netinet/ipfw/ip_dummynet.c projects/ppc64/sys/netinet/ipfw/ip_fw2.c projects/ppc64/sys/netinet/ipfw/ip_fw_dynamic.c projects/ppc64/sys/netinet/ipfw/ip_fw_log.c projects/ppc64/sys/netinet/raw_ip.c projects/ppc64/sys/netinet/sctp_crc32.c projects/ppc64/sys/netinet/sctp_crc32.h projects/ppc64/sys/netinet/tcp_subr.c projects/ppc64/sys/netinet/udp_usrreq.c projects/ppc64/sys/netinet6/ip6_output.c projects/ppc64/sys/pc98/conf/GENERIC projects/ppc64/sys/powerpc/aim/mmu_oea64.c projects/ppc64/sys/powerpc/conf/GENERIC projects/ppc64/sys/powerpc/powermac/uninorth.c projects/ppc64/sys/sparc64/conf/GENERIC projects/ppc64/sys/sparc64/include/dcr.h projects/ppc64/sys/sparc64/include/tlb.h projects/ppc64/sys/sparc64/include/tte.h projects/ppc64/sys/sparc64/include/ver.h projects/ppc64/sys/sparc64/pci/schizo.c projects/ppc64/sys/sparc64/pci/schizovar.h projects/ppc64/sys/sparc64/sparc64/cheetah.c projects/ppc64/sys/sparc64/sparc64/genassym.c projects/ppc64/sys/sparc64/sparc64/pmap.c projects/ppc64/sys/sparc64/sparc64/swtch.S projects/ppc64/sys/sun4v/conf/GENERIC projects/ppc64/sys/sys/eventhandler.h projects/ppc64/sys/sys/pmc.h projects/ppc64/sys/sys/sysent.h projects/ppc64/sys/vm/uma_int.h projects/ppc64/tools/regression/aio/aiotest/aiotest.c projects/ppc64/tools/regression/mqueue/mqtest1/mqtest1.c projects/ppc64/tools/regression/mqueue/mqtest2/mqtest2.c projects/ppc64/tools/regression/mqueue/mqtest3/mqtest3.c projects/ppc64/tools/regression/mqueue/mqtest4/mqtest4.c projects/ppc64/tools/regression/mqueue/mqtest5/mqtest5.c projects/ppc64/tools/regression/posixsem/posixsem.c projects/ppc64/tools/regression/posixsem2/semtest.c projects/ppc64/tools/regression/usr.bin/Makefile projects/ppc64/usr.bin/find/find.1 projects/ppc64/usr.bin/ncal/ncal.1 projects/ppc64/usr.bin/ncal/ncal.c projects/ppc64/usr.bin/netstat/netgraph.c projects/ppc64/usr.bin/tar/bsdtar.1 projects/ppc64/usr.bin/unifdef/unifdef.1 projects/ppc64/usr.bin/unifdef/unifdef.c projects/ppc64/usr.bin/unifdef/unifdefall.sh projects/ppc64/usr.sbin/bsnmpd/modules/snmp_pf/BEGEMOT-PF-MIB.txt projects/ppc64/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c projects/ppc64/usr.sbin/bsnmpd/modules/snmp_pf/pf_tree.def projects/ppc64/usr.sbin/freebsd-update/freebsd-update.8 projects/ppc64/usr.sbin/jls/jls.c projects/ppc64/usr.sbin/lastlogin/lastlogin.c projects/ppc64/usr.sbin/mergemaster/mergemaster.8 projects/ppc64/usr.sbin/mergemaster/mergemaster.sh projects/ppc64/usr.sbin/pkg_install/updating/pkg_updating.1 projects/ppc64/usr.sbin/pmcannotate/pmcannotate.8 projects/ppc64/usr.sbin/powerd/powerd.8 projects/ppc64/usr.sbin/ppp/arp.c projects/ppc64/usr.sbin/uhsoctl/uhsoctl.1 projects/ppc64/usr.sbin/zic/Makefile Directory Properties: projects/ppc64/ (props changed) projects/ppc64/contrib/bind9/ (props changed) projects/ppc64/contrib/expat/ (props changed) projects/ppc64/contrib/groff/ (props changed) projects/ppc64/contrib/one-true-awk/ (props changed) projects/ppc64/contrib/tzcode/stdtime/ (props changed) projects/ppc64/contrib/tzcode/zic/ (props changed) projects/ppc64/contrib/tzdata/ (props changed) projects/ppc64/crypto/openssl/ (props changed) projects/ppc64/lib/libz/ (props changed) projects/ppc64/sys/ (props changed) projects/ppc64/sys/contrib/x86emu/ (props changed) projects/ppc64/sys/dev/xen/xenpci/ (props changed) Modified: projects/ppc64/MAINTAINERS ============================================================================== --- projects/ppc64/MAINTAINERS Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/MAINTAINERS Sat Mar 20 14:53:52 2010 (r205374) @@ -36,8 +36,6 @@ pci bus imp,jhb Pre-commit review reque cdboot jhb Pre-commit review requested. pxeboot jhb Pre-commit review requested. witness jhb Pre-commit review requested. -twe aradford@amcc.com Pre-commit review requested -twa aradford@amcc.com Pre-commit review requested CAM gibbs, ken Pre-commit review requested. send to scsi@freebsd.org devstat(9) ken Pre-commit review requested. @@ -65,9 +63,6 @@ linprocfs des Advance notification reque lpr gad Pre-commit review requested, particularly for lpd/recvjob.c and lpd/printjob.c. newsyslog(8) gad Heads-up appreciated. I'm going thru the PR's for it. -pkill gad Heads-up appreciated. -ps gad I am working on a number of changes to this. Would - like advance notice of major changes planned to it. cvs peter Heads-up appreciated, try not to break it. nvi peter Try not to break it. libz peter Try not to break it. @@ -76,9 +71,6 @@ share/mk ru This is a vital component of offer a pre-commit review for anything non-trivial. ipfw ipfw Pre-commit review preferred. send to ipfw@freebsd.org drm rnoland Just keep me informed of changes, try not to break it. -libufs jmallett Willing to handle problems, help with work. -fdc(4) joerg Just keep me informed of changes, try not to break it. -sppp(4) joerg Just keep me informed of changes, try not to break it. unifdef(1) fanf Pre-commit review requested. ntp roberto Pre-commit review requested. inetd dwmalone Recommends pre-commit review. @@ -144,4 +136,3 @@ $ cd /usr/src; find */* -type f|xargs eg sys/modules/3dfx/Makefile:MAINTAINER= cokane@FreeBSD.org sys/modules/urio/Makefile:MAINTAINER= Iwasa Kazmi tools/tools/sysdoc/Makefile:MAINTAINER= trhodes@FreeBSD.org -usr.sbin/zic/Makefile:MAINTAINER= wollman@FreeBSD.org Modified: projects/ppc64/Makefile ============================================================================== --- projects/ppc64/Makefile Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/Makefile Sat Mar 20 14:53:52 2010 (r205374) @@ -311,6 +311,7 @@ universe_${target}: "check _.${target}.buildworld for details" | ${MAKEFAIL})) @echo ">> ${target} buildworld completed on `LC_ALL=C date`" .endif +.if !defined(MAKE_JUST_WORLDS) .if exists(${.CURDIR}/sys/${target}/conf/NOTES) @(cd ${.CURDIR}/sys/${target}/conf && env __MAKE_CONF=/dev/null \ ${MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \ @@ -319,6 +320,7 @@ universe_${target}: .endif @cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} TARGET=${target} \ universe_kernels +.endif @echo ">> ${target} completed on `LC_ALL=C date`" .endfor universe_kernels: universe_kernconfs Modified: projects/ppc64/ObsoleteFiles.inc ============================================================================== --- projects/ppc64/ObsoleteFiles.inc Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/ObsoleteFiles.inc Sat Mar 20 14:53:52 2010 (r205374) @@ -14,6 +14,10 @@ # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last. # +# 20100314: removal of regexp.h +OLD_FILES+=usr/include/regexp.h +OLD_FILES+=usr/share/man/man3/regexp.3.gz +OLD_FILES+=usr/share/man/man3/regsub.3.gz # 20100303: actual removal of utmp.h OLD_FILES+=usr/include/utmp.h # 20100227: [ia64] removed and Modified: projects/ppc64/bin/ps/extern.h ============================================================================== --- projects/ppc64/bin/ps/extern.h Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/bin/ps/extern.h Sat Mar 20 14:53:52 2010 (r205374) @@ -48,6 +48,7 @@ void command(KINFO *, VARENT *); void cputime(KINFO *, VARENT *); int donlist(void); void elapsed(KINFO *, VARENT *); +void elapseds(KINFO *, VARENT *); void emulname(KINFO *, VARENT *); VARENT *find_varentry(VAR *); const char *fmt_argv(char **, char *, size_t); Modified: projects/ppc64/bin/ps/keyword.c ============================================================================== --- projects/ppc64/bin/ps/keyword.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/bin/ps/keyword.c Sat Mar 20 14:53:52 2010 (r205374) @@ -89,6 +89,7 @@ static VAR var[] = { {"emul", "EMUL", NULL, LJUST, emulname, NULL, EMULLEN, 0, CHAR, NULL, 0}, {"etime", "ELAPSED", NULL, USER, elapsed, NULL, 12, 0, CHAR, NULL, 0}, + {"etimes", "ELAPSED", NULL, USER, elapseds, NULL, 12, 0, CHAR, NULL, 0}, {"f", "F", NULL, 0, kvar, NULL, 7, KOFF(ki_flag), INT, "x", 0}, {"flags", "", "f", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, {"ignored", "", "sigignore", 0, NULL, NULL, 0, 0, CHAR, NULL, 0}, Modified: projects/ppc64/bin/ps/print.c ============================================================================== --- projects/ppc64/bin/ps/print.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/bin/ps/print.c Sat Mar 20 14:53:52 2010 (r205374) @@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -618,6 +619,21 @@ elapsed(KINFO *k, VARENT *ve) (void)printf("%*s", v->width, obuff); } +void +elapseds(KINFO *k, VARENT *ve) +{ + VAR *v; + time_t val; + + v = ve->var; + if (!k->ki_valid) { + (void)printf("%-*s", v->width, "-"); + return; + } + val = now - k->ki_p->ki_start.tv_sec; + (void)printf("%*jd", v->width, (intmax_t)val); +} + double getpcpu(const KINFO *k) { Modified: projects/ppc64/bin/ps/ps.1 ============================================================================== --- projects/ppc64/bin/ps/ps.1 Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/bin/ps/ps.1 Sat Mar 20 14:53:52 2010 (r205374) @@ -29,7 +29,7 @@ .\" @(#)ps.1 8.3 (Berkeley) 4/18/94 .\" $FreeBSD$ .\" -.Dd March 5, 2010 +.Dd March 17, 2010 .Dt PS 1 .Os .Sh NAME @@ -479,7 +479,12 @@ command and arguments .It Cm cpu short-term CPU usage factor (for scheduling) .It Cm etime -elapsed running time +elapsed running time, format +.Op days- Ns +.Op hours: Ns +minutes:seconds. +.It Cm etimes +elapsed running time, in decimal integer seconds .It Cm flags the process flags, in hexadecimal (alias .Cm f ) Modified: projects/ppc64/bin/sh/eval.c ============================================================================== --- projects/ppc64/bin/sh/eval.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/bin/sh/eval.c Sat Mar 20 14:53:52 2010 (r205374) @@ -91,6 +91,7 @@ STATIC void evalloop(union node *, int); STATIC void evalfor(union node *, int); STATIC void evalcase(union node *, int); STATIC void evalsubshell(union node *, int); +STATIC void evalredir(union node *, int); STATIC void expredir(union node *); STATIC void evalpipe(union node *); STATIC void evalcommand(union node *, int, struct backcmd *); @@ -221,10 +222,7 @@ evaltree(union node *n, int flags) evaltree(n->nbinary.ch2, flags); break; case NREDIR: - expredir(n->nredir.redirect); - redirect(n->nredir.redirect, REDIR_PUSH); - evaltree(n->nredir.n, flags); - popredir(); + evalredir(n, flags); break; case NSUBSHELL: evalsubshell(n, flags); @@ -415,6 +413,46 @@ evalsubshell(union node *n, int flags) } +/* + * Evaluate a redirected compound command. + */ + +STATIC void +evalredir(union node *n, int flags) +{ + struct jmploc jmploc; + struct jmploc *savehandler; + volatile int in_redirect = 1; + + expredir(n->nredir.redirect); + savehandler = handler; + if (setjmp(jmploc.loc)) { + int e; + + handler = savehandler; + e = exception; + if (e == EXERROR || e == EXEXEC) { + popredir(); + if (in_redirect) { + exitstatus = 2; + return; + } + } + longjmp(handler->loc, 1); + } else { + INTOFF; + handler = &jmploc; + redirect(n->nredir.redirect, REDIR_PUSH); + in_redirect = 0; + INTON; + evaltree(n->nredir.n, flags); + } + INTOFF; + handler = savehandler; + popredir(); + INTON; +} + /* * Compute the names of the files in a redirection list. @@ -680,7 +718,7 @@ evalcommand(union node *cmd, int flags, /* Variable assignment(s) without command */ cmdentry.cmdtype = CMDBUILTIN; cmdentry.u.index = BLTINCMD; - cmdentry.special = 1; + cmdentry.special = 0; } else { static const char PATH[] = "PATH="; int cmd_flags = 0, bltinonly = 0; @@ -891,6 +929,12 @@ evalcommand(union node *cmd, int flags, } handler = &jmploc; redirect(cmd->ncmd.redirect, mode); + /* + * If there is no command word, redirection errors should + * not be fatal but assignment errors should. + */ + if (argc == 0 && !(flags & EV_BACKCMD)) + cmdentry.special = 1; if (cmdentry.special) listsetvar(cmdenviron); commandname = argv[0]; Modified: projects/ppc64/bin/sh/parser.c ============================================================================== --- projects/ppc64/bin/sh/parser.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/bin/sh/parser.c Sat Mar 20 14:53:52 2010 (r205374) @@ -863,6 +863,164 @@ breakloop: } +/* + * Called to parse command substitutions. + */ + +STATIC char * +parsebackq(char *out, struct nodelist **pbqlist, + int oldstyle, int dblquote, int quoted) +{ + struct nodelist **nlpp; + union node *n; + char *volatile str; + struct jmploc jmploc; + struct jmploc *const savehandler = handler; + int savelen; + int saveprompt; + const int bq_startlinno = plinno; + char *volatile ostr = NULL; + struct parsefile *const savetopfile = getcurrentfile(); + + str = NULL; + if (setjmp(jmploc.loc)) { + popfilesupto(savetopfile); + if (str) + ckfree(str); + if (ostr) + ckfree(ostr); + handler = savehandler; + if (exception == EXERROR) { + startlinno = bq_startlinno; + synerror("Error in command substitution"); + } + longjmp(handler->loc, 1); + } + INTOFF; + savelen = out - stackblock(); + if (savelen > 0) { + str = ckmalloc(savelen); + memcpy(str, stackblock(), savelen); + } + handler = &jmploc; + INTON; + if (oldstyle) { + /* We must read until the closing backquote, giving special + treatment to some slashes, and then push the string and + reread it as input, interpreting it normally. */ + char *oout; + int c; + int olen; + + + STARTSTACKSTR(oout); + for (;;) { + if (needprompt) { + setprompt(2); + needprompt = 0; + } + switch (c = pgetc()) { + case '`': + goto done; + + case '\\': + if ((c = pgetc()) == '\n') { + plinno++; + if (doprompt) + setprompt(2); + else + setprompt(0); + /* + * If eating a newline, avoid putting + * the newline into the new character + * stream (via the STPUTC after the + * switch). + */ + continue; + } + if (c != '\\' && c != '`' && c != '$' + && (!dblquote || c != '"')) + STPUTC('\\', oout); + break; + + case '\n': + plinno++; + needprompt = doprompt; + break; + + case PEOF: + startlinno = plinno; + synerror("EOF in backquote substitution"); + break; + + default: + break; + } + STPUTC(c, oout); + } +done: + STPUTC('\0', oout); + olen = oout - stackblock(); + INTOFF; + ostr = ckmalloc(olen); + memcpy(ostr, stackblock(), olen); + setinputstring(ostr, 1); + INTON; + } + nlpp = pbqlist; + while (*nlpp) + nlpp = &(*nlpp)->next; + *nlpp = (struct nodelist *)stalloc(sizeof (struct nodelist)); + (*nlpp)->next = NULL; + + if (oldstyle) { + saveprompt = doprompt; + doprompt = 0; + } + + n = list(0); + + if (oldstyle) + doprompt = saveprompt; + else { + if (readtoken() != TRP) + synexpect(TRP); + } + + (*nlpp)->n = n; + if (oldstyle) { + /* + * Start reading from old file again, ignoring any pushed back + * tokens left from the backquote parsing + */ + popfile(); + tokpushback = 0; + } + while (stackblocksize() <= savelen) + growstackblock(); + STARTSTACKSTR(out); + if (str) { + memcpy(out, str, savelen); + STADJUST(savelen, out); + INTOFF; + ckfree(str); + str = NULL; + INTON; + } + if (ostr) { + INTOFF; + ckfree(ostr); + ostr = NULL; + INTON; + } + handler = savehandler; + if (quoted) + USTPUTC(CTLBACKQ | CTLQUOTE, out); + else + USTPUTC(CTLBACKQ, out); + return out; +} + /* * If eofmark is NULL, read a word or a redirection symbol. If eofmark @@ -879,8 +1037,6 @@ breakloop: #define CHECKEND() {goto checkend; checkend_return:;} #define PARSEREDIR() {goto parseredir; parseredir_return:;} #define PARSESUB() {goto parsesub; parsesub_return:;} -#define PARSEBACKQOLD() {oldstyle = 1; goto parsebackq; parsebackq_oldreturn:;} -#define PARSEBACKQNEW() {oldstyle = 0; goto parsebackq; parsebackq_newreturn:;} #define PARSEARITH() {goto parsearith; parsearith_return:;} STATIC int @@ -896,7 +1052,6 @@ readtoken1(int firstc, char const *synta int varnest; /* levels of variables expansion */ int arinest; /* levels of arithmetic expansion */ int parenlevel; /* levels of parens in arithmetic */ - int oldstyle; char const *prevsyntax; /* syntax before arithmetic */ int synentry; @@ -1029,7 +1184,8 @@ readtoken1(int firstc, char const *synta } break; case CBQUOTE: /* '`' */ - PARSEBACKQOLD(); + out = parsebackq(out, &bqlist, 1, dblquote, + arinest || dblquote); break; case CEOF: goto endword; /* exit outer loop */ @@ -1189,7 +1345,8 @@ parsesub: { PARSEARITH(); } else { pungetc(); - PARSEBACKQNEW(); + out = parsebackq(out, &bqlist, 0, dblquote, + arinest || dblquote); } } else { USTPUTC(CTLVAR, out); @@ -1296,167 +1453,6 @@ parsesub: { /* - * Called to parse command substitutions. Newstyle is set if the command - * is enclosed inside $(...); nlpp is a pointer to the head of the linked - * list of commands (passed by reference), and savelen is the number of - * characters on the top of the stack which must be preserved. - */ - -parsebackq: { - struct nodelist **nlpp; - union node *n; - char *volatile str; - struct jmploc jmploc; - struct jmploc *const savehandler = handler; - int savelen; - int saveprompt; - const int bq_startlinno = plinno; - char *volatile ostr = NULL; - struct parsefile *const savetopfile = getcurrentfile(); - - str = NULL; - if (setjmp(jmploc.loc)) { - popfilesupto(savetopfile); - if (str) - ckfree(str); - if (ostr) - ckfree(ostr); - handler = savehandler; - if (exception == EXERROR) { - startlinno = bq_startlinno; - synerror("Error in command substitution"); - } - longjmp(handler->loc, 1); - } - INTOFF; - savelen = out - stackblock(); - if (savelen > 0) { - str = ckmalloc(savelen); - memcpy(str, stackblock(), savelen); - } - handler = &jmploc; - INTON; - if (oldstyle) { - /* We must read until the closing backquote, giving special - treatment to some slashes, and then push the string and - reread it as input, interpreting it normally. */ - char *oout; - int c; - int olen; - - - STARTSTACKSTR(oout); - for (;;) { - if (needprompt) { - setprompt(2); - needprompt = 0; - } - switch (c = pgetc()) { - case '`': - goto done; - - case '\\': - if ((c = pgetc()) == '\n') { - plinno++; - if (doprompt) - setprompt(2); - else - setprompt(0); - /* - * If eating a newline, avoid putting - * the newline into the new character - * stream (via the STPUTC after the - * switch). - */ - continue; - } - if (c != '\\' && c != '`' && c != '$' - && (!dblquote || c != '"')) - STPUTC('\\', oout); - break; - - case '\n': - plinno++; - needprompt = doprompt; - break; - - case PEOF: - startlinno = plinno; - synerror("EOF in backquote substitution"); - break; - - default: - break; - } - STPUTC(c, oout); - } -done: - STPUTC('\0', oout); - olen = oout - stackblock(); - INTOFF; - ostr = ckmalloc(olen); - memcpy(ostr, stackblock(), olen); - setinputstring(ostr, 1); - INTON; - } - nlpp = &bqlist; - while (*nlpp) - nlpp = &(*nlpp)->next; - *nlpp = (struct nodelist *)stalloc(sizeof (struct nodelist)); - (*nlpp)->next = NULL; - - if (oldstyle) { - saveprompt = doprompt; - doprompt = 0; - } - - n = list(0); - - if (oldstyle) - doprompt = saveprompt; - else { - if (readtoken() != TRP) - synexpect(TRP); - } - - (*nlpp)->n = n; - if (oldstyle) { - /* - * Start reading from old file again, ignoring any pushed back - * tokens left from the backquote parsing - */ - popfile(); - tokpushback = 0; - } - while (stackblocksize() <= savelen) - growstackblock(); - STARTSTACKSTR(out); - if (str) { - memcpy(out, str, savelen); - STADJUST(savelen, out); - INTOFF; - ckfree(str); - str = NULL; - INTON; - } - if (ostr) { - INTOFF; - ckfree(ostr); - ostr = NULL; - INTON; - } - handler = savehandler; - if (arinest || dblquote) - USTPUTC(CTLBACKQ | CTLQUOTE, out); - else - USTPUTC(CTLBACKQ, out); - if (oldstyle) - goto parsebackq_oldreturn; - else - goto parsebackq_newreturn; -} - -/* * Parse an arithmetic expansion (indicate start of one and set state) */ parsearith: { Modified: projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c ============================================================================== --- projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.c Sat Mar 20 14:53:52 2010 (r205374) @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -53,11 +53,14 @@ typedef struct zfs_node { } zfs_node_t; typedef struct callback_data { - uu_avl_t *cb_avl; - int cb_flags; - zfs_type_t cb_types; - zfs_sort_column_t *cb_sortcol; - zprop_list_t **cb_proplist; + uu_avl_t *cb_avl; + int cb_flags; + zfs_type_t cb_types; + zfs_sort_column_t *cb_sortcol; + zprop_list_t **cb_proplist; + int cb_depth_limit; + int cb_depth; + uint8_t cb_props_table[ZFS_NUM_PROPS]; } callback_data_t; uu_avl_pool_t *avl_pool; @@ -98,10 +101,17 @@ zfs_callback(zfs_handle_t *zhp, void *da uu_avl_node_init(node, &node->zn_avlnode, avl_pool); if (uu_avl_find(cb->cb_avl, node, cb->cb_sortcol, &idx) == NULL) { - if (cb->cb_proplist && - zfs_expand_proplist(zhp, cb->cb_proplist) != 0) { - free(node); - return (-1); + if (cb->cb_proplist) { + if ((*cb->cb_proplist) && + !(*cb->cb_proplist)->pl_all) + zfs_prune_proplist(zhp, + cb->cb_props_table); + + if (zfs_expand_proplist(zhp, cb->cb_proplist) + != 0) { + free(node); + return (-1); + } } uu_avl_insert(cb->cb_avl, node, idx); dontclose = 1; @@ -113,11 +123,15 @@ zfs_callback(zfs_handle_t *zhp, void *da /* * Recurse if necessary. */ - if (cb->cb_flags & ZFS_ITER_RECURSE) { + if (cb->cb_flags & ZFS_ITER_RECURSE && + ((cb->cb_flags & ZFS_ITER_DEPTH_LIMIT) == 0 || + cb->cb_depth < cb->cb_depth_limit)) { + cb->cb_depth++; if (zfs_get_type(zhp) == ZFS_TYPE_FILESYSTEM) (void) zfs_iter_filesystems(zhp, zfs_callback, data); if ((zfs_get_type(zhp) != ZFS_TYPE_SNAPSHOT) && include_snaps) (void) zfs_iter_snapshots(zhp, zfs_callback, data); + cb->cb_depth--; } if (!dontclose) @@ -325,10 +339,10 @@ zfs_sort(const void *larg, const void *r int zfs_for_each(int argc, char **argv, int flags, zfs_type_t types, - zfs_sort_column_t *sortcol, zprop_list_t **proplist, + zfs_sort_column_t *sortcol, zprop_list_t **proplist, int limit, zfs_iter_f callback, void *data) { - callback_data_t cb; + callback_data_t cb = {0}; int ret = 0; zfs_node_t *node; uu_avl_walk_t *walk; @@ -346,6 +360,45 @@ zfs_for_each(int argc, char **argv, int cb.cb_flags = flags; cb.cb_proplist = proplist; cb.cb_types = types; + cb.cb_depth_limit = limit; + /* + * If cb_proplist is provided then in the zfs_handles created we + * retain only those properties listed in cb_proplist and sortcol. + * The rest are pruned. So, the caller should make sure that no other + * properties other than those listed in cb_proplist/sortcol are + * accessed. + * + * If cb_proplist is NULL then we retain all the properties. We + * always retain the zoned property, which some other properties + * need (userquota & friends), and the createtxg property, which + * we need to sort snapshots. + */ + if (cb.cb_proplist && *cb.cb_proplist) { + zprop_list_t *p = *cb.cb_proplist; + + while (p) { + if (p->pl_prop >= ZFS_PROP_TYPE && + p->pl_prop < ZFS_NUM_PROPS) { + cb.cb_props_table[p->pl_prop] = B_TRUE; + } + p = p->pl_next; + } + + while (sortcol) { + if (sortcol->sc_prop >= ZFS_PROP_TYPE && + sortcol->sc_prop < ZFS_NUM_PROPS) { + cb.cb_props_table[sortcol->sc_prop] = B_TRUE; + } + sortcol = sortcol->sc_next; + } + + cb.cb_props_table[ZFS_PROP_ZONED] = B_TRUE; + cb.cb_props_table[ZFS_PROP_CREATETXG] = B_TRUE; + } else { + (void) memset(cb.cb_props_table, B_TRUE, + sizeof (cb.cb_props_table)); + } + if ((cb.cb_avl = uu_avl_create(avl_pool, NULL, UU_DEFAULT)) == NULL) { (void) fprintf(stderr, gettext("internal error: out of memory\n")); Modified: projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.h ============================================================================== --- projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.h Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_iter.h Sat Mar 20 14:53:52 2010 (r205374) @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -41,9 +41,10 @@ typedef struct zfs_sort_column { #define ZFS_ITER_RECURSE (1 << 0) #define ZFS_ITER_ARGS_CAN_BE_PATHS (1 << 1) #define ZFS_ITER_PROP_LISTSNAPS (1 << 2) +#define ZFS_ITER_DEPTH_LIMIT (1 << 3) int zfs_for_each(int, char **, int options, zfs_type_t, - zfs_sort_column_t *, zprop_list_t **, zfs_iter_f, void *); + zfs_sort_column_t *, zprop_list_t **, int, zfs_iter_f, void *); int zfs_add_sort_column(zfs_sort_column_t **, const char *, boolean_t); void zfs_free_sort_columns(zfs_sort_column_t *); Modified: projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c ============================================================================== --- projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c Sat Mar 20 14:53:52 2010 (r205374) @@ -190,8 +190,8 @@ get_usage(zfs_help_t idx) return (gettext("\tdestroy [-rRf] " "\n")); case HELP_GET: - return (gettext("\tget [-rHp] [-o field[,...]] " - "[-s source[,...]]\n" + return (gettext("\tget [-rHp] [-d max] " + "[-o field[,...]] [-s source[,...]]\n" "\t <\"all\" | property[,...]> " "[filesystem|volume|snapshot] ...\n")); case HELP_INHERIT: @@ -205,8 +205,8 @@ get_usage(zfs_help_t idx) case HELP_UNJAIL: return (gettext("\tunjail \n")); case HELP_LIST: - return (gettext("\tlist [-rH] [-o property[,...]] " - "[-t type[,...]] [-s property] ...\n" + return (gettext("\tlist [-rH][-d max] " + "[-o property[,...]] [-t type[,...]] [-s property] ...\n" "\t [-S property] ... " "[filesystem|volume|snapshot] ...\n")); case HELP_MOUNT: @@ -432,6 +432,27 @@ parseprop(nvlist_t *props) } +static int +parse_depth(char *opt, int *flags) +{ + char *tmp; + int depth; + + depth = (int)strtol(opt, &tmp, 0); + if (*tmp) { + (void) fprintf(stderr, + gettext("%s is not an integer\n"), optarg); + usage(B_FALSE); + } + if (depth < 0) { + (void) fprintf(stderr, + gettext("Depth can not be negative.\n")); + usage(B_FALSE); + } + *flags |= (ZFS_ITER_DEPTH_LIMIT|ZFS_ITER_RECURSE); + return (depth); +} + /* * zfs clone [-p] [-o prop=value] ... * @@ -1119,6 +1140,7 @@ zfs_do_get(int argc, char **argv) int i, c, flags = 0; char *value, *fields; int ret; + int limit = 0; zprop_list_t fake_name = { 0 }; /* @@ -1132,11 +1154,14 @@ zfs_do_get(int argc, char **argv) cb.cb_type = ZFS_TYPE_DATASET; /* check options */ - while ((c = getopt(argc, argv, ":o:s:rHp")) != -1) { + while ((c = getopt(argc, argv, ":d:o:s:rHp")) != -1) { switch (c) { case 'p': cb.cb_literal = B_TRUE; break; + case 'd': + limit = parse_depth(optarg, &flags); + break; case 'r': flags |= ZFS_ITER_RECURSE; break; @@ -1267,7 +1292,7 @@ zfs_do_get(int argc, char **argv) /* run for each object */ ret = zfs_for_each(argc, argv, flags, ZFS_TYPE_DATASET, NULL, - &cb.cb_proplist, get_callback, &cb); + &cb.cb_proplist, limit, get_callback, &cb); if (cb.cb_proplist == &fake_name) zprop_free_list(fake_name.pl_next); @@ -1380,10 +1405,10 @@ zfs_do_inherit(int argc, char **argv) if (flags & ZFS_ITER_RECURSE) { ret = zfs_for_each(argc, argv, flags, ZFS_TYPE_DATASET, - NULL, NULL, inherit_recurse_cb, propname); + NULL, NULL, 0, inherit_recurse_cb, propname); } else { ret = zfs_for_each(argc, argv, flags, ZFS_TYPE_DATASET, - NULL, NULL, inherit_cb, propname); + NULL, NULL, 0, inherit_cb, propname); } return (ret); @@ -1578,7 +1603,7 @@ zfs_do_upgrade(int argc, char **argv) if (cb.cb_version == 0) cb.cb_version = ZPL_VERSION; ret = zfs_for_each(argc, argv, flags, ZFS_TYPE_FILESYSTEM, - NULL, NULL, upgrade_set_callback, &cb); + NULL, NULL, 0, upgrade_set_callback, &cb); (void) printf(gettext("%llu filesystems upgraded\n"), cb.cb_numupgraded); if (cb.cb_numsamegraded) { @@ -1596,14 +1621,14 @@ zfs_do_upgrade(int argc, char **argv) flags |= ZFS_ITER_RECURSE; ret = zfs_for_each(0, NULL, flags, ZFS_TYPE_FILESYSTEM, - NULL, NULL, upgrade_list_callback, &cb); + NULL, NULL, 0, upgrade_list_callback, &cb); found = cb.cb_foundone; cb.cb_foundone = B_FALSE; cb.cb_newer = B_TRUE; ret = zfs_for_each(0, NULL, flags, ZFS_TYPE_FILESYSTEM, - NULL, NULL, upgrade_list_callback, &cb); + NULL, NULL, 0, upgrade_list_callback, &cb); if (!cb.cb_foundone && !found) { (void) printf(gettext("All filesystems are " @@ -1615,11 +1640,12 @@ zfs_do_upgrade(int argc, char **argv) } /* - * list [-rH] [-o property[,property]...] [-t type[,type]...] + * list [-r][-d max] [-H] [-o property[,property]...] [-t type[,type]...] * [-s property [-s property]...] [-S property [-S property]...] * ... * * -r Recurse over all children + * -d Limit recursion by depth. * -H Scripted mode; elide headers and separate columns by tabs * -o Control which fields to display. * -t Control which object types to display. @@ -1769,16 +1795,20 @@ zfs_do_list(int argc, char **argv) char *fields = NULL; list_cbdata_t cb = { 0 }; char *value; + int limit = 0; int ret; zfs_sort_column_t *sortcol = NULL; int flags = ZFS_ITER_PROP_LISTSNAPS | ZFS_ITER_ARGS_CAN_BE_PATHS; /* check options */ - while ((c = getopt(argc, argv, ":o:rt:Hs:S:")) != -1) { + while ((c = getopt(argc, argv, ":d:o:rt:Hs:S:")) != -1) { switch (c) { case 'o': fields = optarg; break; + case 'd': + limit = parse_depth(optarg, &flags); + break; case 'r': flags |= ZFS_ITER_RECURSE; break; @@ -1869,7 +1899,7 @@ zfs_do_list(int argc, char **argv) cb.cb_first = B_TRUE; ret = zfs_for_each(argc, argv, flags, types, sortcol, &cb.cb_proplist, - list_callback, &cb); + limit, list_callback, &cb); zprop_free_list(cb.cb_proplist); zfs_free_sort_columns(sortcol); @@ -2252,7 +2282,7 @@ zfs_do_set(int argc, char **argv) } ret = zfs_for_each(argc - 2, argv + 2, NULL, - ZFS_TYPE_DATASET, NULL, NULL, set_callback, &cb); + ZFS_TYPE_DATASET, NULL, NULL, 0, set_callback, &cb); return (ret); } @@ -2886,7 +2916,7 @@ zfs_do_unallow(int argc, char **argv) flags |= ZFS_ITER_RECURSE; error = zfs_for_each(argc, argv, flags, ZFS_TYPE_FILESYSTEM|ZFS_TYPE_VOLUME, NULL, - NULL, unallow_callback, (void *)zperms); + NULL, 0, unallow_callback, (void *)zperms); if (zperms) nvlist_free(zperms); Modified: projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h ============================================================================== --- projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs.h Sat Mar 20 14:53:52 2010 (r205374) @@ -369,6 +369,7 @@ typedef struct zprop_list { } zprop_list_t; extern int zfs_expand_proplist(zfs_handle_t *, zprop_list_t **); +extern void zfs_prune_proplist(zfs_handle_t *, uint8_t *); #define ZFS_MOUNTPOINT_NONE "none" #define ZFS_MOUNTPOINT_LEGACY "legacy" Modified: projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c ============================================================================== --- projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Sat Mar 20 14:49:44 2010 (r205373) +++ projects/ppc64/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c Sat Mar 20 14:53:52 2010 (r205374) @@ -20,7 +20,7 @@ */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -2045,6 +2045,8 @@ getprop_uint64(zfs_handle_t *zhp, zfs_pr verify(nvlist_lookup_uint64(nv, ZPROP_VALUE, &value) == 0); (void) nvlist_lookup_string(nv, ZPROP_SOURCE, source); } else { + verify(!zhp->zfs_props_table || + zhp->zfs_props_table[prop] == B_TRUE); value = zfs_prop_default_numeric(prop); *source = ""; } @@ -2064,6 +2066,8 @@ getprop_string(zfs_handle_t *zhp, zfs_pr verify(nvlist_lookup_string(nv, ZPROP_VALUE, &value) == 0); (void) nvlist_lookup_string(nv, ZPROP_SOURCE, source); } else { + verify(!zhp->zfs_props_table || + zhp->zfs_props_table[prop] == B_TRUE); if ((value = (char *)zfs_prop_default_string(prop)) == NULL) value = ""; *source = ""; @@ -4267,6 +4271,30 @@ zfs_deleg_share_nfs(libzfs_handle_t *hdl return (error); } +void +zfs_prune_proplist(zfs_handle_t *zhp, uint8_t *props) +{ + nvpair_t *curr; + + /* + * Keep a reference to the props-table against which we prune the + * properties. + */ + zhp->zfs_props_table = props; + *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 16:42:24 2010 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 189B1106564A; Sat, 20 Mar 2010 16:42:24 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 0844A8FC08; Sat, 20 Mar 2010 16:42:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2KGgNZc029936; Sat, 20 Mar 2010 16:42:23 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KGgNM4029934; Sat, 20 Mar 2010 16:42:23 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003201642.o2KGgNM4029934@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 16:42: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: r205388 - projects/ppc64/include 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, 20 Mar 2010 16:42:24 -0000 Author: nwhitehorn Date: Sat Mar 20 16:42:23 2010 New Revision: 205388 URL: http://svn.freebsd.org/changeset/base/205388 Log: Install powermac_nvram headers on powerpc64. Modified: projects/ppc64/include/Makefile Modified: projects/ppc64/include/Makefile ============================================================================== --- projects/ppc64/include/Makefile Sat Mar 20 16:39:28 2010 (r205387) +++ projects/ppc64/include/Makefile Sat Mar 20 16:42:23 2010 (r205388) @@ -56,7 +56,7 @@ LSUBDIRS= cam/ata cam/scsi \ LSUBSUBDIRS= dev/mpt/mpilib -.if ${MACHINE_ARCH} == "powerpc" +.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" _dev_powermac_nvram= dev/powermac_nvram .endif From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 17:37:22 2010 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 60F7B106564A; Sat, 20 Mar 2010 17:37:22 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 50CE58FC17; Sat, 20 Mar 2010 17:37:22 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o2KHbMFo041961; Sat, 20 Mar 2010 17:37:22 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KHbMeX041960; Sat, 20 Mar 2010 17:37:22 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003201737.o2KHbMeX041960@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 17:37: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: r205389 - projects/ppc64/lib X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 20 Mar 2010 17:37:22 -0000 Author: nwhitehorn Date: Sat Mar 20 17:37:22 2010 New Revision: 205389 URL: http://svn.freebsd.org/changeset/base/205389 Log: Add libsmb to the build on PPC64. This unbreaks world. Modified: projects/ppc64/lib/Makefile Modified: projects/ppc64/lib/Makefile ============================================================================== --- projects/ppc64/lib/Makefile Sat Mar 20 16:42:23 2010 (r205388) +++ projects/ppc64/lib/Makefile Sat Mar 20 17:37:22 2010 (r205389) @@ -181,7 +181,7 @@ _libsmb= libsmb _libvgl= libvgl .endif -.if ${MACHINE_ARCH} == "powerpc" +.if ${MACHINE_ARCH} == "powerpc" || ${MACHINE_ARCH} == "powerpc64" _libsmb= libsmb .endif From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 18:55:54 2010 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 792B7106566B; Sat, 20 Mar 2010 18:55:54 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6872C8FC18; Sat, 20 Mar 2010 18:55: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 o2KItsB8059181; Sat, 20 Mar 2010 18:55:54 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KItsWR059179; Sat, 20 Mar 2010 18:55:54 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003201855.o2KItsWR059179@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 18:55: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: r205390 - projects/ppc64/sys/kern 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, 20 Mar 2010 18:55:54 -0000 Author: nwhitehorn Date: Sat Mar 20 18:55:54 2010 New Revision: 205390 URL: http://svn.freebsd.org/changeset/base/205390 Log: Remove a hack of questionable continuing relevance, though checks will be needed on all architectures before this can go into HEAD. The ELF image activator used the segment containing the image entry point as the official text segment, and the last other loadable segment as the official data segment, instead of checking whether the segments were executable. This was apparently required for Alpha support. On PPC64, the executable entry point points to a non-executable function descriptor in the .opd data section, which breaks this logic. As we no longer support Alpha, it may now be safe to turn off this hack. Modified: projects/ppc64/sys/kern/imgact_elf.c Modified: projects/ppc64/sys/kern/imgact_elf.c ============================================================================== --- projects/ppc64/sys/kern/imgact_elf.c Sat Mar 20 17:37:22 2010 (r205389) +++ projects/ppc64/sys/kern/imgact_elf.c Sat Mar 20 18:55:54 2010 (r205390) @@ -832,26 +832,14 @@ __CONCAT(exec_, __elfN(imgact))(struct i phdr[i].p_vaddr + et_dyn_addr - seg_addr); /* - * Is this .text or .data? We can't use - * VM_PROT_WRITE or VM_PROT_EXEC, it breaks the - * alpha terribly and possibly does other bad - * things so we stick to the old way of figuring - * it out: If the segment contains the program - * entry point, it's a text segment, otherwise it - * is a data segment. - * - * Note that obreak() assumes that data_addr + - * data_size == end of data load area, and the ELF - * file format expects segments to be sorted by - * address. If multiple data segments exist, the - * last one will be used. + * Make the largest executable segment the official + * text segment and all others data. The data_addr + * and data_size parameters are used for obreak(). */ - if (hdr->e_entry >= phdr[i].p_vaddr && - hdr->e_entry < (phdr[i].p_vaddr + - phdr[i].p_memsz)) { + + if (phdr[i].p_flags & PF_X && text_size < seg_size) { text_size = seg_size; text_addr = seg_addr; - entry = (u_long)hdr->e_entry + et_dyn_addr; } else { data_size = seg_size; data_addr = seg_addr; @@ -871,6 +859,8 @@ __CONCAT(exec_, __elfN(imgact))(struct i data_size = text_size; } + entry = (u_long)hdr->e_entry + et_dyn_addr; + /* * Check limits. It should be safe to check the * limits after loading the segments since we do From owner-svn-src-projects@FreeBSD.ORG Sat Mar 20 20:58:09 2010 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 82348106566C; Sat, 20 Mar 2010 20:58:09 +0000 (UTC) (envelope-from nwhitehorn@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 565DE8FC30; Sat, 20 Mar 2010 20:58: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 o2KKw9li086151; Sat, 20 Mar 2010 20:58:09 GMT (envelope-from nwhitehorn@svn.freebsd.org) Received: (from nwhitehorn@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o2KKw9K0086150; Sat, 20 Mar 2010 20:58:09 GMT (envelope-from nwhitehorn@svn.freebsd.org) Message-Id: <201003202058.o2KKw9K0086150@svn.freebsd.org> From: Nathan Whitehorn Date: Sat, 20 Mar 2010 20:58: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: r205392 - in projects/ppc64: contrib/gcc/config/rs6000 sys/powerpc/include 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, 20 Mar 2010 20:58:09 -0000 Author: nwhitehorn Date: Sat Mar 20 20:58:08 2010 New Revision: 205392 URL: http://svn.freebsd.org/changeset/base/205392 Log: Support profiling on powerpc64. The only remaining thing on the todo list is DMA bounce buffers. Modified: projects/ppc64/contrib/gcc/config/rs6000/freebsd.h projects/ppc64/sys/powerpc/include/profile.h Modified: projects/ppc64/contrib/gcc/config/rs6000/freebsd.h ============================================================================== --- projects/ppc64/contrib/gcc/config/rs6000/freebsd.h Sat Mar 20 19:47:30 2010 (r205391) +++ projects/ppc64/contrib/gcc/config/rs6000/freebsd.h Sat Mar 20 20:58:08 2010 (r205392) @@ -237,3 +237,9 @@ are compatible. */ #define OS_MISSING_POWERPC64 !TARGET_64BIT +/* Function profiling bits */ +#undef RS6000_MCOUNT +#define RS6000_MCOUNT ((TARGET_64BIT) ? "._mcount" : "_mcount") +#define PROFILE_HOOK(LABEL) \ + do { if (TARGET_64BIT) output_profile_hook (LABEL); } while (0) + Modified: projects/ppc64/sys/powerpc/include/profile.h ============================================================================== --- projects/ppc64/sys/powerpc/include/profile.h Sat Mar 20 19:47:30 2010 (r205391) +++ projects/ppc64/sys/powerpc/include/profile.h Sat Mar 20 20:58:08 2010 (r205392) @@ -76,10 +76,47 @@ typedef __ptrdiff_t fptrdiff_t; */ #ifdef __powerpc64__ -/* XXX not implemented */ - -#define MCOUNT int _mcount(void) {return (0);} - +#define MCOUNT \ +__asm( " .text \n" \ + " .align 2 \n" \ + " .globl _mcount \n" \ + " .section \".opd\",\"aw\" \n" \ + " .align 3 \n" \ + "_mcount: \n" \ + " .quad ._mcount,.TOC.@tocbase,0 \n" \ + " .previous \n" \ + " .align 4 \n" \ + " .globl ._mcount \n" \ + " .type ._mcount,@function \n" \ + "._mcount: \n" \ + " stdu %r1,-(288+120)(%r1) \n" \ + " std %r3,48(%r1) \n" \ + " std %r4,56(%r1) \n" \ + " std %r5,64(%r1) \n" \ + " std %r6,72(%r1) \n" \ + " std %r7,80(%r1) \n" \ + " std %r8,88(%r1) \n" \ + " std %r9,96(%r1) \n" \ + " std %r10,104(%r1) \n" \ + " mflr %r4 \n" \ + " std %r4,112(%r1) \n" \ + " ld %r3,0(%r1) \n" \ + " ld %r3,0(%r3) \n" \ + " ld %r3,16(%r3) \n" \ + " bl .__mcount \n" \ + " nop \n" \ + " ld %r4,112(%r1) \n" \ + " mtlr %r4 \n" \ + " ld %r3,48(%r1) \n" \ + " ld %r4,56(%r1) \n" \ + " ld %r5,64(%r1) \n" \ + " ld %r6,72(%r1) \n" \ + " ld %r7,80(%r1) \n" \ + " ld %r8,88(%r1) \n" \ + " ld %r9,96(%r1) \n" \ + " ld %r10,104(%r1) \n" \ + " addi %r1,%r1,(288+120) \n" \ + " blr \n"); #else #ifdef PIC