svn commit: r212284 - head/sys/mips/mips
Author: jchandra Date: Tue Sep 7 06:02:43 2010 New Revision: 212284 URL: http://svn.freebsd.org/changeset/base/212284 Log: Whitespace fixes - indent with tabs instead of spaces. Few other style(9) changes. Modified: head/sys/mips/mips/busdma_machdep.c Modified: head/sys/mips/mips/busdma_machdep.c == --- head/sys/mips/mips/busdma_machdep.c Tue Sep 7 05:39:24 2010 (r212283) +++ head/sys/mips/mips/busdma_machdep.c Tue Sep 7 06:02:43 2010 (r212284) @@ -133,7 +133,7 @@ struct bus_dmamap { struct bp_list bpages; int pagesneeded; int pagesreserved; -bus_dma_tag_t dmat; + bus_dma_tag_t dmat; int flags; void*buffer; void*origbuffer; @@ -142,7 +142,7 @@ struct bus_dmamap { int len; STAILQ_ENTRY(bus_dmamap) links; bus_dmamap_callback_t *callback; - void *callback_arg; + void*callback_arg; }; @@ -310,11 +310,11 @@ _busdma_free_dmamap(bus_dmamap_t map) int bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment, - bus_size_t boundary, bus_addr_t lowaddr, - bus_addr_t highaddr, bus_dma_filter_t *filter, - void *filterarg, bus_size_t maxsize, int nsegments, - bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc, - void *lockfuncarg, bus_dma_tag_t *dmat) +bus_size_t boundary, bus_addr_t lowaddr, +bus_addr_t highaddr, bus_dma_filter_t *filter, +void *filterarg, bus_size_t maxsize, int nsegments, +bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc, +void *lockfuncarg, bus_dma_tag_t *dmat) { bus_dma_tag_t newtag; int error = 0; @@ -337,8 +337,8 @@ bus_dma_tag_create(bus_dma_tag_t parent, newtag-highaddr = trunc_page((vm_offset_t)highaddr) + (PAGE_SIZE - 1); newtag-filter = filter; newtag-filterarg = filterarg; -newtag-maxsize = maxsize; -newtag-nsegments = nsegments; + newtag-maxsize = maxsize; + newtag-nsegments = nsegments; newtag-maxsegsz = maxsegsz; newtag-flags = flags; if (cpuinfo.cache_coherent_dma) @@ -352,28 +352,28 @@ bus_dma_tag_create(bus_dma_tag_t parent, newtag-lockfunc = dflt_lock; newtag-lockfuncarg = NULL; } -/* + /* * Take into account any restrictions imposed by our parent tag */ -if (parent != NULL) { -newtag-lowaddr = min(parent-lowaddr, newtag-lowaddr); -newtag-highaddr = max(parent-highaddr, newtag-highaddr); + if (parent != NULL) { + newtag-lowaddr = min(parent-lowaddr, newtag-lowaddr); + newtag-highaddr = max(parent-highaddr, newtag-highaddr); if (newtag-boundary == 0) newtag-boundary = parent-boundary; else if (parent-boundary != 0) - newtag-boundary = min(parent-boundary, - newtag-boundary); + newtag-boundary = + min(parent-boundary, newtag-boundary); if ((newtag-filter != NULL) || ((parent-flags BUS_DMA_COULD_BOUNCE) != 0)) newtag-flags |= BUS_DMA_COULD_BOUNCE; -if (newtag-filter == NULL) { -/* - * Short circuit looking at our parent directly - * since we have encapsulated all of its information - */ -newtag-filter = parent-filter; -newtag-filterarg = parent-filterarg; -newtag-parent = parent-parent; + if (newtag-filter == NULL) { + /* + * Short circuit looking at our parent directly + * since we have encapsulated all of its information + */ + newtag-filter = parent-filter; + newtag-filterarg = parent-filterarg; + newtag-parent = parent-parent; } if (newtag-parent != NULL) atomic_add_int(parent-ref_count, 1); @@ -425,29 +425,29 @@ bus_dma_tag_destroy(bus_dma_tag_t dmat) #endif if (dmat != NULL) { -if (dmat-map_count != 0) -return (EBUSY); + if (dmat-map_count != 0) + return (EBUSY); -while (dmat != NULL) { -bus_dma_tag_t parent; + while (dmat != NULL) { + bus_dma_tag_t parent; -
svn commit: r212285 - head/sys/mips/rmi
Author: jchandra Date: Tue Sep 7 07:31:58 2010 New Revision: 212285 URL: http://svn.freebsd.org/changeset/base/212285 Log: PCIe updates for XLS. Fix interrupt routing so that the irq returned is correct for XLR and XLS. This also updates the MSI hack we had earlier - we still don't really support MSI, but we support some drivers that use MSI, by providing support for allocating one MSI per pci link - this MSI is directly mapped to the link IRQ. Modified: head/sys/mips/rmi/xlr_pci.c Modified: head/sys/mips/rmi/xlr_pci.c == --- head/sys/mips/rmi/xlr_pci.c Tue Sep 7 06:02:43 2010(r212284) +++ head/sys/mips/rmi/xlr_pci.c Tue Sep 7 07:31:58 2010(r212285) @@ -326,51 +326,77 @@ xlr_pcib_identify(driver_t * driver, dev BUS_ADD_CHILD(parent, 0, pcib, 0); } +/* + * XLS PCIe can have upto 4 links, and each link has its on IRQ + * Find the link on which the device is on + */ static int -xlr_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs) +xls_pcie_link(device_t pcib, device_t dev) { - int pciirq; - int i; device_t parent, tmp; /* find the lane on which the slot is connected to */ + printf(xls_pcie_link : bus %s dev %s\n, device_get_nameunit(pcib), + device_get_nameunit(dev)); tmp = dev; while (1) { parent = device_get_parent(tmp); if (parent == NULL || parent == pcib) { device_printf(dev, Cannot find parent bus\n); - return (ENXIO); + return (-1); } if (strcmp(device_get_nameunit(parent), pci0) == 0) break; tmp = parent; } + return (pci_get_slot(tmp)); +} + +/* + * Find the IRQ for the link, each link has a different interrupt + * at the XLS pic + */ +static int +xls_pcie_link_irq(int link) +{ - switch (pci_get_slot(tmp)) { + switch (link) { case 0: - pciirq = PIC_PCIE_LINK0_IRQ; - break; + return (PIC_PCIE_LINK0_IRQ); case 1: - pciirq = PIC_PCIE_LINK1_IRQ; - break; + return (PIC_PCIE_LINK1_IRQ); case 2: - pciirq = PIC_PCIE_LINK2_IRQ; - break; + return (PIC_PCIE_LINK2_IRQ); case 3: - pciirq = PIC_PCIE_LINK3_IRQ; - break; - default: - return (ENXIO); + return (PIC_PCIE_LINK3_IRQ); } + return (-1); +} + +static int +xlr_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs) +{ + int i, link; - irqs[0] = pciirq; /* -* For now put in some fixed values for the other requested MSI, -* TODO handle multiple messages +* Each link has 32 MSIs that can be allocated, but for now +* we only support one device per link. +* msi_alloc() equivalent is needed when we start supporting +* bridges on the PCIe link. */ - for (i = 1; i count; i++) - irqs[i] = pciirq + 64 * i; + link = xls_pcie_link(pcib, dev); + if (link == -1) + return (ENXIO); + + /* +* encode the irq so that we know it is a MSI interrupt when we +* setup interrupts +*/ + for (i = 0; i count; i++) + irqs[i] = 64 + link * 32 + i; + device_printf(dev, Alloc MSI count %d maxcount %d irq %d link %d\n, + count, maxcount, i, link); return (0); } @@ -383,20 +409,18 @@ xlr_release_msi(device_t pcib, device_t } static int -xlr_map_msi(device_t pcib, device_t dev, int irq, uint64_t * addr, -uint32_t * data) +xlr_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, +uint32_t *data) { + int msi; - switch (irq) { - case PIC_PCIE_LINK0_IRQ: - case PIC_PCIE_LINK1_IRQ: - case PIC_PCIE_LINK2_IRQ: - case PIC_PCIE_LINK3_IRQ: + device_printf(dev, MAP MSI irq %d\n, irq); + if (irq = 64) { + msi = irq - 64; *addr = MIPS_MSI_ADDR(0); - *data = MIPS_MSI_DATA(irq); + *data = MIPS_MSI_DATA(msi); return (0); - - default: + } else { device_printf(dev, %s: map_msi for irq %d - ignored, device_get_nameunit(pcib), irq); return (ENXIO); @@ -437,10 +461,8 @@ bridge_pcie_ack(int irq) static int mips_platform_pci_setup_intr(device_t dev, device_t child, -struct resource *irq, int flags, -driver_filter_t * filt, -driver_intr_t * intr, void *arg, -void **cookiep) +struct resource *irq, int flags, driver_filter_t *filt, +driver_intr_t *intr, void *arg, void **cookiep) { int error = 0;
Re: svn commit: r212177 - in head/sys: amd64/include i386/include
On Fri, 3 Sep 2010, Roman Divacky wrote: Log: Change the parameter passed to the inline assembly to u_short as we are dealing with 16bit segment registers. Change mov to movw. u_ints were used intentionally to avoid operand size prefixes here and extra code for promotions in callers. Segment registers are always stored as 32 bits in trap frames, pcbs and regs structs, to avoid the operand size prefixes in pure assembler code for at least the trap frames and to avoid packing problems. Why break this? This was last broken in 2003, in rev.1.131 for i386, and last backed out soon after. Then the reason for breaking it was stated in the log message -- it was to avoid returning garbage in the top bits. The garbage, if any, is due to not wasting time to remove it. Instead, we always used 32-bit accesses to segment registers and depended on the CPU supplying harmless garbage. This depended on undocumented features and on avoidance of gas bugs in this area when it was first used. Some of the gas bugs seem to be still there: (1) the original i486 manual only documents mov of a segreg to/from memory as being 16 bits. Gas bugs required writing 32-bit mov's to get 16-bit ones. Now, the operand size can be left for gas to determine, but gas still produces a spurious operand size prefixs for movw in 1 case: %%% GAS LISTING z.s page 1 1 8C1D mov %ds,mem 1 2 0006 8C1D movl%ds,mem 2 3 000c 668C1D00 movw%ds,mem--- spurious 66 3 00 4 0013 8E1D mov mem,%ds 4 5 0019 8E1D movlmem,%ds 5 6 001f 8E1D movwmem,%ds 6 %%% For loads there is no problem now -- the operand size prefix is never generated now, and the contents of the upper 16 bits is irrelevant. There is a problem with stores -- the above spurious 66 has no effect, at least on an Athlon64, and the upper 16 bits of `mem' are not changed by the store. Thus the optimization is broken for the m case of rgs() etc. I think there is no problem in practice since the m case is never used, except possibly with -O0 (the r case is always preferred). (2) mov of a segreg to a general register is quite different (mov of a segreg _from_ a general register is unproblematic, as above, so its details are not given here). 32-bit movs change the top bits, but the details of this are not documented in the original i486 manual. Later manuals give the details, and they are CPU-dependent (IIRC, in general newer CPUs (Athlon64 at least) zero the top bits, while older CPUs set them to garbage). Gas bugs in this area seem to be fixed: %%% GAS LISTING z.s page 1 1 668CD8mov %ds,%ax 2 0003 668CD8movw%ds,%ax 3 0006 8CD8 mov %ds,%eax 4 0008 8CD8 movl%ds,%eax %%% Now the operand size prefix is not spurious, and it is generated as necessary without an explicit `w' in the opcode -- it forces the CPU to do extra decoding and Icache work (for the prefix) in order for the instruction to do less (not touch the top bits of the target registers). This is the main pessimization in this commit -- we do extra work here so that we can do even more extra work in callers, to promote the result to the 32-bit one that is needed for storing in the pcb or similar. (3) push of a segreg is like mov of a segreg to a general register. Again, it is important to write sufficiently secure garbage to the top bits. FreeBSD has always used pushl for segment registers in the trap frame and dependent on this to write something harmless, since the registers in the trap frame are copied without cleaning by ptrace() etc. You can also see the garbage in the segment registers in the trap frame using debuggers, and doing extra work to clean it in rgs() etc. won't even affect it there. Gas didn't have any problems with push of a segreg AFAIR, but my assembler does. My assembler doesn't even know that 32-bit movs of segregs exist, so it mis-assembles push %ds as a 16-bit push in both 16-bit and 32-bit mode. I used this in the first 386 protected mode version of Minix to give bad packing for segment registers in the trap frame. Modified: head/sys/amd64/include/cpufunc.h == --- head/sys/amd64/include/cpufunc.hFri Sep 3 13:54:02 2010 (r212176) +++ head/sys/amd64/include/cpufunc.hFri Sep 3 14:25:17 2010 (r212177) @@ -421,40 +421,40 @@ invlpg(u_long addr) __asm __volatile(invlpg %0 : : m (*(char *)addr) : memory); } -static __inline u_int +static __inline u_short rfs(void) { - u_int sel; - __asm __volatile(mov %%fs,%0 : =rm (sel)); + u_short sel; + __asm __volatile(movw %%fs,%0 : =rm (sel)); return
Re: svn commit: r212281 - head/sys/vm
On Tue, Sep 07, 2010 at 12:23:45AM +, Ryan Stone wrote: Author: rstone Date: Tue Sep 7 00:23:45 2010 New Revision: 212281 URL: http://svn.freebsd.org/changeset/base/212281 Log: In munmap() downgrade the vm_map_lock to a read lock before taking a read lock on the pmc-sx lock. This prevents a deadlock with pmc_log_process_mappings, which has an exclusive lock on pmc-sx and tries to get a read lock on a vm_map. Downgrading the vm_map_lock in munmap allows pmc_log_process_mappings to continue, preventing the deadlock. Without this change I could cause a deadlock on a multicore 8.1-RELEASE system by having one thread constantly mmap'ing and then munmap'ing a PROT_EXEC mapping in a loop while I repeatedly invoked and stopped pmcstat in system-wide sampling mode. Reviewed by:fabient Approved by:emaste (mentor) MFC after: 2 weeks Modified: head/sys/vm/vm_mmap.c Modified: head/sys/vm/vm_mmap.c == --- head/sys/vm/vm_mmap.c Mon Sep 6 23:52:04 2010(r212280) +++ head/sys/vm/vm_mmap.c Tue Sep 7 00:23:45 2010(r212281) @@ -579,6 +579,7 @@ munmap(td, uap) * Inform hwpmc if the address range being unmapped contains * an executable region. */ + pkm.pm_address = (uintptr_t) NULL; if (vm_map_lookup_entry(map, addr, entry)) { for (; entry != map-header entry-start addr + size; @@ -587,16 +588,23 @@ munmap(td, uap) entry-end, VM_PROT_EXECUTE) == TRUE) { pkm.pm_address = (uintptr_t) addr; pkm.pm_size = (size_t) size; - PMC_CALL_HOOK(td, PMC_FN_MUNMAP, - (void *) pkm); break; } } } #endif - /* returns nothing but KERN_SUCCESS anyway */ vm_map_delete(map, addr, addr + size); + +#ifdef HWPMC_HOOKS + /* downgrade the lock to prevent a LOR with the pmc-sx lock */ + vm_map_lock_downgrade(map); + if (pkm.pm_address != (uintptr) NULL) + PMC_CALL_HOOK(td, PMC_FN_MUNMAP, (void *) pkm); + vm_map_unlock_read(map); +#else vm_map_unlock(map); +#endif + /* vm_map_delete returns nothing but KERN_SUCCESS anyway */ return (0); } Note that vm_map_unlock() is more then just dropping the lock on the map. Due to ordering of the vnode lock before vm map lock, vm_map_unlock() processes the deferred free entries after map lock is dropped. After your change, the deferred list might keep entries for some time until next unlock is performed. I think the two changes could be done: - only perform downgrade when hook is indeed going to be called; - before vm_map_unlock_read, check for deferred_freelist being not NULL, and if so, do vm_map_lock()/vm_map_unlock() after unlock_read. pgpqa1MwnjjC0.pgp Description: PGP signature
svn commit: r212286 - head/gnu/lib/libstdc++
Author: tijl Date: Tue Sep 7 08:33:17 2010 New Revision: 212286 URL: http://svn.freebsd.org/changeset/base/212286 Log: GCC defines built-ins for atomic instructions found on i486 and higher. Because FreeBSD no longer supports the 80386 cpu all code targeting FreeBSD/i386 necessarily runs on i486 or higher so the compiler built-ins can be used by default inside libstdc++ and in C++ headers. This allows newly compiled C++ code to inline some atomic operations. Old binaries continue to use libstdc++ functions. PR: 148926 Tested by:Yuri Karaban tech askold net Reviewed by: kan Approved by: kib (mentor) MFC after:2 weeks Modified: head/gnu/lib/libstdc++/Makefile head/gnu/lib/libstdc++/config.h Modified: head/gnu/lib/libstdc++/Makefile == --- head/gnu/lib/libstdc++/Makefile Tue Sep 7 07:31:58 2010 (r212285) +++ head/gnu/lib/libstdc++/Makefile Tue Sep 7 08:33:17 2010 (r212286) @@ -83,7 +83,7 @@ ATOMICITY_H= ${SRCDIR}/config/cpu/${MARC ATOMICITY_H= ${SRCDIR}/config/cpu/generic/atomicity_mutex/atomicity.h .endif -.if ${MACHINE_CPUARCH} == amd64 +.if ${MACHINE_CPUARCH} == amd64 || ${MACHINE_CPUARCH} == i386 .if exists(${SRCDIR}/config/cpu/generic/atomicity_builtins/atomicity.h) ATOMICITY_H= ${SRCDIR}/config/cpu/generic/atomicity_builtins/atomicity.h .endif Modified: head/gnu/lib/libstdc++/config.h == --- head/gnu/lib/libstdc++/config.h Tue Sep 7 07:31:58 2010 (r212285) +++ head/gnu/lib/libstdc++/config.h Tue Sep 7 08:33:17 2010 (r212286) @@ -671,7 +671,7 @@ /* #undef VERSION */ /* Define if builtin atomic operations are supported on this host. */ -#if defined(__amd64__) +#if defined(__amd64__) || defined(__i386__) #define _GLIBCXX_ATOMIC_BUILTINS 1 #endif ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212287 - stable/8/sys/net
Author: bz Date: Tue Sep 7 11:46:09 2010 New Revision: 212287 URL: http://svn.freebsd.org/changeset/base/212287 Log: MFC r212152: MFp4 CH=183259: No reason to use if_free_type() as we don't change our type. Just if_free() is fine. Modified: stable/8/sys/net/if_epair.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/net/if_epair.c == --- stable/8/sys/net/if_epair.c Tue Sep 7 08:33:17 2010(r212286) +++ stable/8/sys/net/if_epair.c Tue Sep 7 11:46:09 2010(r212287) @@ -901,9 +901,9 @@ epair_clone_destroy(struct if_clone *ifc * we need to switch before freeing them. */ CURVNET_SET_QUIET(oifp-if_vnet); - if_free_type(oifp, IFT_ETHER); + if_free(oifp); CURVNET_RESTORE(); - if_free_type(ifp, IFT_ETHER); + if_free(ifp); free(scb, M_EPAIR); free(sca, M_EPAIR); ifc_free_unit(ifc, unit); ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212288 - stable/8/lib/libthr/thread
Author: kib Date: Tue Sep 7 12:02:34 2010 New Revision: 212288 URL: http://svn.freebsd.org/changeset/base/212288 Log: MFC r211742: The __hidden definition is provided by sys/cdefs.h. Modified: stable/8/lib/libthr/thread/thr_private.h Directory Properties: stable/8/lib/libthr/ (props changed) Modified: stable/8/lib/libthr/thread/thr_private.h == --- stable/8/lib/libthr/thread/thr_private.hTue Sep 7 11:46:09 2010 (r212287) +++ stable/8/lib/libthr/thread/thr_private.hTue Sep 7 12:02:34 2010 (r212288) @@ -52,10 +52,6 @@ #include sys/thr.h #include pthread.h -#ifndef __hidden -#define __hidden __attribute__((visibility(hidden))) -#endif - #include pthread_md.h #include thr_umtx.h #include thread_db.h ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212289 - stable/8/lib/libthr/thread
Author: kib Date: Tue Sep 7 12:04:07 2010 New Revision: 212289 URL: http://svn.freebsd.org/changeset/base/212289 Log: MFC r211743: Remove unused source. Deleted: stable/8/lib/libthr/thread/thr_atfork.c Modified: Directory Properties: stable/8/lib/libthr/ (props changed) ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212290 - stable/8/lib/libc/sys
Author: kib Date: Tue Sep 7 12:06:41 2010 New Revision: 212290 URL: http://svn.freebsd.org/changeset/base/212290 Log: MFC r211748: Move the __stack_chk_fail_lo...@fbsd_1.0 compat symbol definition into the separate .o for libc_pic.a. This prevents rtld from making the symbol global. Added: stable/8/lib/libc/sys/stack_protector_compat.c - copied unchanged from r211748, head/lib/libc/sys/stack_protector_compat.c Modified: stable/8/lib/libc/sys/Makefile.inc stable/8/lib/libc/sys/stack_protector.c Directory Properties: stable/8/lib/libc/ (props changed) stable/8/lib/libc/locale/ (props changed) stable/8/lib/libc/stdtime/ (props changed) stable/8/lib/libc/sys/ (props changed) Modified: stable/8/lib/libc/sys/Makefile.inc == --- stable/8/lib/libc/sys/Makefile.inc Tue Sep 7 12:04:07 2010 (r212289) +++ stable/8/lib/libc/sys/Makefile.inc Tue Sep 7 12:06:41 2010 (r212290) @@ -18,7 +18,7 @@ .endif # Sources common to both syscall interfaces: -SRCS+= stack_protector.c __error.c +SRCS+= stack_protector.c stack_protector_compat.c __error.c .if !defined(WITHOUT_SYSCALL_COMPAT) SRCS+= fcntl.c ftruncate.c lseek.c mmap.c pread.c pwrite.c truncate.c PSEUDO+= _fcntl.o Modified: stable/8/lib/libc/sys/stack_protector.c == --- stable/8/lib/libc/sys/stack_protector.c Tue Sep 7 12:04:07 2010 (r212289) +++ stable/8/lib/libc/sys/stack_protector.c Tue Sep 7 12:06:41 2010 (r212290) @@ -107,8 +107,6 @@ __chk_fail(void) __fail(buffer overflow detected; terminated); } -#ifdef PIC -__sym_compat(__stack_chk_fail_local, __stack_chk_fail, FBSD_1.0); -#else +#ifndef PIC __weak_reference(__stack_chk_fail, __stack_chk_fail_local); #endif Copied: stable/8/lib/libc/sys/stack_protector_compat.c (from r211748, head/lib/libc/sys/stack_protector_compat.c) == --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/8/lib/libc/sys/stack_protector_compat.c Tue Sep 7 12:06:41 2010(r212290, copy of r211748, head/lib/libc/sys/stack_protector_compat.c) @@ -0,0 +1,20 @@ +/* + * Written by Alexander Kabaev k...@freebsd.org + * The file is in public domain. + */ + +#include sys/cdefs.h +__FBSDID($FreeBSD$); + +void __stack_chk_fail(void); + +#ifdef PIC +void +__stack_chk_fail_local_hidden(void) +{ + + __stack_chk_fail(); +} + +__sym_compat(__stack_chk_fail_local, __stack_chk_fail_local_hidden, FBSD_1.0); +#endif ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212291 - stable/8/sys/netinet
Author: bz Date: Tue Sep 7 13:10:46 2010 New Revision: 212291 URL: http://svn.freebsd.org/changeset/base/212291 Log: MFC r212209: In case of RADIX_MPATH do not leak the IN_IFADDR read lock on early return. Modified: stable/8/sys/netinet/in.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/netinet/in.c == --- stable/8/sys/netinet/in.c Tue Sep 7 12:06:41 2010(r212290) +++ stable/8/sys/netinet/in.c Tue Sep 7 13:10:46 2010(r212291) @@ -1042,9 +1042,10 @@ in_addprefix(struct in_ifaddr *target, i if (ia-ia_flags IFA_ROUTE) { #ifdef RADIX_MPATH if (ia-ia_addr.sin_addr.s_addr == - target-ia_addr.sin_addr.s_addr) + target-ia_addr.sin_addr.s_addr) { + IN_IFADDR_RUNLOCK(); return (EEXIST); - else + } else break; #endif if (V_sameprefixcarponly ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212292 - head/sys/x86/pci
Author: jhb Date: Tue Sep 7 13:50:02 2010 New Revision: 212292 URL: http://svn.freebsd.org/changeset/base/212292 Log: Each processor socket in a QPI system has a special PCI bus for the uncore devices (such as the memory controller) in that socket. Stop hardcoding support for two busses, but instead start probing buses at domain 0, bus 255 and walk down until a bus probe fails. Also, do not probe a bus if it has already been enumerated elsewhere (e.g. if ACPI ever enumerates these buses in the future). Modified: head/sys/x86/pci/qpi.c Modified: head/sys/x86/pci/qpi.c == --- head/sys/x86/pci/qpi.c Tue Sep 7 13:10:46 2010(r212291) +++ head/sys/x86/pci/qpi.c Tue Sep 7 13:50:02 2010(r212292) @@ -47,6 +47,7 @@ __FBSDID($FreeBSD$); #include machine/pci_cfgreg.h #include machine/specialreg.h +#include dev/pci/pcireg.h #include dev/pci/pcivar.h #include dev/pci/pcib_private.h #include pcib_if.h @@ -84,31 +85,62 @@ qpi_probe(device_t dev) return (BUS_PROBE_SPECIFIC); } +/* + * Look for a PCI bus with the specified bus address. If one is found, + * add a pcib device and return 0. Otherwise, return an error code. + */ static int -qpi_attach(device_t dev) +qpi_probe_pcib(device_t dev, int bus) { struct qpi_device *qdev; device_t child; + uint32_t devid; /* -* Add two Host-PCI bridge devices, one for PCI bus 254 and -* one for PCI bus 255. +* If a PCI bus already exists for this bus number, then +* fail. */ - child = BUS_ADD_CHILD(dev, 0, pcib, -1); - if (child == NULL) - panic(%s: failed to add pci bus 254, - device_get_nameunit(dev)); - qdev = malloc(sizeof(struct qpi_device), M_QPI, M_WAITOK); - qdev-qd_pcibus = 254; - device_set_ivars(child, qdev); + if (pci_find_bsf(bus, 0, 0) != NULL) + return (EEXIST); + + /* +* Attempt to read the device id for device 0, function 0 on +* the bus. A value of 0x means that the bus is not +* present. +*/ + devid = pci_cfgregread(bus, 0, 0, PCIR_DEVVENDOR, 4); + if (devid == 0x) + return (ENOENT); + + if ((devid 0x) != 0x8086) { + device_printf(dev, + Device at pci%d.0.0 has non-Intel vendor 0x%x\n, bus, + devid 0x); + return (ENXIO); + } child = BUS_ADD_CHILD(dev, 0, pcib, -1); if (child == NULL) - panic(%s: failed to add pci bus 255, - device_get_nameunit(dev)); + panic(%s: failed to add pci bus %d, device_get_nameunit(dev), + bus); qdev = malloc(sizeof(struct qpi_device), M_QPI, M_WAITOK); - qdev-qd_pcibus = 255; + qdev-qd_pcibus = bus; device_set_ivars(child, qdev); + return (0); +} + +static int +qpi_attach(device_t dev) +{ + int bus; + + /* +* Each processor socket has a dedicated PCI bus counting down from +* 255. We keep probing buses until one fails. +*/ + for (bus = 255;; bus--) + if (qpi_probe_pcib(dev, bus) != 0) + break; return (bus_generic_attach(dev)); } ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212293 - in head/sys: fs/nfsclient nfsclient
Author: jhb Date: Tue Sep 7 14:29:45 2010 New Revision: 212293 URL: http://svn.freebsd.org/changeset/base/212293 Log: Store the full timestamp when caching timestamps of files and directories for purposes of validating name cache entries. This closes races where two updates to a file or directory within the same second could result in stale entries in the name cache. While here, remove the 'n_expiry' field as it is no longer used. Reviewed by: rmacklem MFC after:1 week Modified: head/sys/fs/nfsclient/nfs_clrpcops.c head/sys/fs/nfsclient/nfs_clvnops.c head/sys/fs/nfsclient/nfsnode.h head/sys/nfsclient/nfs_vnops.c head/sys/nfsclient/nfsnode.h Modified: head/sys/fs/nfsclient/nfs_clrpcops.c == --- head/sys/fs/nfsclient/nfs_clrpcops.cTue Sep 7 13:50:02 2010 (r212292) +++ head/sys/fs/nfsclient/nfs_clrpcops.cTue Sep 7 14:29:45 2010 (r212293) @@ -3293,8 +3293,7 @@ nfsrpc_readdirplus(vnode_t vp, struct ui ndp-ni_vp = newvp; NFSCNHASH(cnp, HASHINIT); if (cnp-cn_namelen = NCHNAMLEN) { - np-n_ctime = - np-n_vattr.na_ctime.tv_sec; + np-n_ctime = np-n_vattr.na_ctime; cache_enter(ndp-ni_dvp,ndp-ni_vp,cnp); } if (unlocknewvp) Modified: head/sys/fs/nfsclient/nfs_clvnops.c == --- head/sys/fs/nfsclient/nfs_clvnops.c Tue Sep 7 13:50:02 2010 (r212292) +++ head/sys/fs/nfsclient/nfs_clvnops.c Tue Sep 7 14:29:45 2010 (r212293) @@ -988,7 +988,7 @@ nfs_lookup(struct vop_lookup_args *ap) struct nfsfh *nfhp; struct nfsvattr dnfsva, nfsva; struct vattr vattr; - time_t dmtime; + struct timespec dmtime; *vpp = NULLVP; if ((flags ISLASTCN) (mp-mnt_flag MNT_RDONLY) @@ -1038,7 +1038,7 @@ nfs_lookup(struct vop_lookup_args *ap) } if (nfscl_nodeleg(newvp, 0) == 0 || (VOP_GETATTR(newvp, vattr, cnp-cn_cred) == 0 - vattr.va_ctime.tv_sec == newnp-n_ctime)) { + timespeccmp(vattr.va_ctime, newnp-n_ctime, ==))) { NFSINCRGLOBAL(newnfsstats.lookupcache_hits); if (cnp-cn_nameiop != LOOKUP (flags ISLASTCN)) @@ -1065,13 +1065,13 @@ nfs_lookup(struct vop_lookup_args *ap) if ((u_int)(ticks - np-n_dmtime_ticks) (nmp-nm_negnametimeo * hz) VOP_GETATTR(dvp, vattr, cnp-cn_cred) == 0 - vattr.va_mtime.tv_sec == np-n_dmtime) { + timespeccmp(vattr.va_mtime, np-n_dmtime, ==)) { NFSINCRGLOBAL(newnfsstats.lookupcache_hits); return (ENOENT); } cache_purge_negative(dvp); mtx_lock(np-n_mtx); - np-n_dmtime = 0; + timespecclear(np-n_dmtime); mtx_unlock(np-n_mtx); } @@ -1086,7 +1086,7 @@ nfs_lookup(struct vop_lookup_args *ap) * the lookup RPC has been performed on the server but before * n_dmtime is set at the end of this function. */ - dmtime = np-n_vattr.na_mtime.tv_sec; + dmtime = np-n_vattr.na_mtime; error = 0; newvp = NULLVP; NFSINCRGLOBAL(newnfsstats.lookupcache_misses); @@ -1139,8 +1139,8 @@ nfs_lookup(struct vop_lookup_args *ap) * lookup. */ mtx_lock(np-n_mtx); - if (np-n_dmtime = dmtime) { - if (np-n_dmtime == 0) { + if (timespeccmp(np-n_dmtime, dmtime, =)) { + if (!timespecisset(np-n_dmtime)) { np-n_dmtime = dmtime; np-n_dmtime_ticks = ticks; } @@ -1241,7 +1241,7 @@ nfs_lookup(struct vop_lookup_args *ap) cnp-cn_flags |= SAVENAME; if ((cnp-cn_flags MAKEENTRY) (cnp-cn_nameiop != DELETE || !(flags ISLASTCN))) { - np-n_ctime = np-n_vattr.na_vattr.va_ctime.tv_sec; + np-n_ctime = np-n_vattr.na_vattr.va_ctime; cache_enter(dvp, newvp, cnp); } *vpp = newvp; Modified: head/sys/fs/nfsclient/nfsnode.h == --- head/sys/fs/nfsclient/nfsnode.h Tue Sep 7 13:50:02 2010 (r212292) +++ head/sys/fs/nfsclient/nfsnode.h
svn commit: r212296 - head/usr.sbin/bluetooth/bthidcontrol
Author: emax Date: Tue Sep 7 16:36:03 2010 New Revision: 212296 URL: http://svn.freebsd.org/changeset/base/212296 Log: Do not request SDP attributes using ranges. Apparently some devices do not like it. MFC after:1 week Tested by:Buganini buganini at gmail dot com Modified: head/usr.sbin/bluetooth/bthidcontrol/sdp.c Modified: head/usr.sbin/bluetooth/bthidcontrol/sdp.c == --- head/usr.sbin/bluetooth/bthidcontrol/sdp.c Tue Sep 7 15:23:00 2010 (r212295) +++ head/usr.sbin/bluetooth/bthidcontrol/sdp.c Tue Sep 7 16:36:03 2010 (r212296) @@ -54,7 +54,9 @@ SDP_ATTR_RANGE( SDP_ATTR_PROTOCOL_DESCRI SDP_ATTR_RANGE (SDP_ATTR_ADDITIONAL_PROTOCOL_DESCRIPTOR_LISTS, SDP_ATTR_ADDITIONAL_PROTOCOL_DESCRIPTOR_LISTS), SDP_ATTR_RANGE(0x0205, /* HIDReconnectInitiate */ - 0x0206),/* HIDDescriptorList */ + 0x0205), +SDP_ATTR_RANGE(0x0206, /* HIDDescriptorList */ + 0x0206), SDP_ATTR_RANGE(0x0209, /* HIDBatteryPower */ 0x0209), SDP_ATTR_RANGE(0x020d, /* HIDNormallyConnectable */ @@ -149,7 +151,7 @@ hid_sdp_query(bdaddr_t const *local, str } if (control_psm == -1 || interrupt_psm == -1 || - reconnect_initiate == -1 || normally_connectable == -1 || + reconnect_initiate == -1 || hid_descriptor == NULL || hid_descriptor_length == -1) hid_sdp_query_exit(ENOATTR); ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
Re: svn commit: r212254 - head/release/doc/share/misc
On Mon, Sep 06, 2010 at 11:02:50AM +, Christian Brueffer wrote: Author: brueffer Date: Mon Sep 6 11:02:50 2010 New Revision: 212254 URL: http://svn.freebsd.org/changeset/base/212254 Log: sis(4) should work on all architectures now. Thanks a lot! ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212300 - in stable/7/sys/boot/i386: boot2 gptboot loader zfsboot zfsloader
Author: delphij Date: Tue Sep 7 18:14:50 2010 New Revision: 212300 URL: http://svn.freebsd.org/changeset/base/212300 Log: MFC r205662 + r212066 (except efi part): Our boot loader is capable of booting both i386 and amd64 kernels so call it x86 instead of i386. Modified: stable/7/sys/boot/i386/boot2/boot2.c stable/7/sys/boot/i386/gptboot/gptboot.c stable/7/sys/boot/i386/loader/Makefile stable/7/sys/boot/i386/zfsboot/zfsboot.c stable/7/sys/boot/i386/zfsloader/Makefile Directory Properties: stable/7/sys/ (props changed) stable/7/sys/cddl/contrib/opensolaris/ (props changed) stable/7/sys/contrib/dev/acpica/ (props changed) stable/7/sys/contrib/pf/ (props changed) Modified: stable/7/sys/boot/i386/boot2/boot2.c == --- stable/7/sys/boot/i386/boot2/boot2.cTue Sep 7 17:56:29 2010 (r212299) +++ stable/7/sys/boot/i386/boot2/boot2.cTue Sep 7 18:14:50 2010 (r212300) @@ -283,7 +283,7 @@ main(void) for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf(\nFreeBSD/i386 boot\n + printf(\nFreeBSD/x86 boot\n Default: %u:%s(%u,%c)%s\n boot: , dsk.drive DRV_MASK, dev_nm[dsk.type], dsk.unit, Modified: stable/7/sys/boot/i386/gptboot/gptboot.c == --- stable/7/sys/boot/i386/gptboot/gptboot.cTue Sep 7 17:56:29 2010 (r212299) +++ stable/7/sys/boot/i386/gptboot/gptboot.cTue Sep 7 18:14:50 2010 (r212300) @@ -281,7 +281,7 @@ main(void) for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf(\nFreeBSD/i386 boot\n + printf(\nFreeBSD/x86 boot\n Default: %u:%s(%up%u)%s\n boot: , dsk.drive DRV_MASK, dev_nm[dsk.type], dsk.unit, Modified: stable/7/sys/boot/i386/loader/Makefile == --- stable/7/sys/boot/i386/loader/Makefile Tue Sep 7 17:56:29 2010 (r212299) +++ stable/7/sys/boot/i386/loader/Makefile Tue Sep 7 18:14:50 2010 (r212300) @@ -5,7 +5,7 @@ LOADER?= loader PROG= ${LOADER}.sym INTERNALPROG= -NEWVERSWHAT?= bootstrap loader i386 +NEWVERSWHAT?= bootstrap loader x86 # architecture-specific loader code SRCS= main.c conf.c vers.c Modified: stable/7/sys/boot/i386/zfsboot/zfsboot.c == --- stable/7/sys/boot/i386/zfsboot/zfsboot.cTue Sep 7 17:56:29 2010 (r212299) +++ stable/7/sys/boot/i386/zfsboot/zfsboot.cTue Sep 7 18:14:50 2010 (r212300) @@ -731,7 +731,7 @@ main(void) for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf(\nFreeBSD/i386 boot\n + printf(\nFreeBSD/x86 boot\n Default: %s:%s\n boot: , spa-spa_name, kname); Modified: stable/7/sys/boot/i386/zfsloader/Makefile == --- stable/7/sys/boot/i386/zfsloader/Makefile Tue Sep 7 17:56:29 2010 (r212299) +++ stable/7/sys/boot/i386/zfsloader/Makefile Tue Sep 7 18:14:50 2010 (r212300) @@ -3,7 +3,7 @@ .PATH: ${.CURDIR}/../loader LOADER=zfsloader -NEWVERSWHAT= ZFS enabled bootstrap loader i386 +NEWVERSWHAT= ZFS enabled bootstrap loader x86 LOADER_ZFS_SUPPORT=yes LOADER_ONLY= yes NO_MAN=yes ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212301 - in stable/8/sys/boot/i386: boot2 gptboot loader zfsboot zfsloader
Author: delphij Date: Tue Sep 7 18:14:59 2010 New Revision: 212301 URL: http://svn.freebsd.org/changeset/base/212301 Log: MFC r205662 + r212066 (except efi part): Our boot loader is capable of booting both i386 and amd64 kernels so call it x86 instead of i386. Modified: stable/8/sys/boot/i386/boot2/boot2.c stable/8/sys/boot/i386/gptboot/gptboot.c stable/8/sys/boot/i386/loader/Makefile stable/8/sys/boot/i386/zfsboot/zfsboot.c stable/8/sys/boot/i386/zfsloader/Makefile Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/boot/i386/boot2/boot2.c == --- stable/8/sys/boot/i386/boot2/boot2.cTue Sep 7 18:14:50 2010 (r212300) +++ stable/8/sys/boot/i386/boot2/boot2.cTue Sep 7 18:14:59 2010 (r212301) @@ -283,7 +283,7 @@ main(void) for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf(\nFreeBSD/i386 boot\n + printf(\nFreeBSD/x86 boot\n Default: %u:%s(%u,%c)%s\n boot: , dsk.drive DRV_MASK, dev_nm[dsk.type], dsk.unit, Modified: stable/8/sys/boot/i386/gptboot/gptboot.c == --- stable/8/sys/boot/i386/gptboot/gptboot.cTue Sep 7 18:14:50 2010 (r212300) +++ stable/8/sys/boot/i386/gptboot/gptboot.cTue Sep 7 18:14:59 2010 (r212301) @@ -281,7 +281,7 @@ main(void) for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf(\nFreeBSD/i386 boot\n + printf(\nFreeBSD/x86 boot\n Default: %u:%s(%up%u)%s\n boot: , dsk.drive DRV_MASK, dev_nm[dsk.type], dsk.unit, Modified: stable/8/sys/boot/i386/loader/Makefile == --- stable/8/sys/boot/i386/loader/Makefile Tue Sep 7 18:14:50 2010 (r212300) +++ stable/8/sys/boot/i386/loader/Makefile Tue Sep 7 18:14:59 2010 (r212301) @@ -6,7 +6,7 @@ MK_SSP= no LOADER?= loader PROG= ${LOADER}.sym INTERNALPROG= -NEWVERSWHAT?= bootstrap loader i386 +NEWVERSWHAT?= bootstrap loader x86 # architecture-specific loader code SRCS= main.c conf.c vers.c Modified: stable/8/sys/boot/i386/zfsboot/zfsboot.c == --- stable/8/sys/boot/i386/zfsboot/zfsboot.cTue Sep 7 18:14:50 2010 (r212300) +++ stable/8/sys/boot/i386/zfsboot/zfsboot.cTue Sep 7 18:14:59 2010 (r212301) @@ -731,7 +731,7 @@ main(void) for (;;) { if (!autoboot || !OPT_CHECK(RBX_QUIET)) - printf(\nFreeBSD/i386 boot\n + printf(\nFreeBSD/x86 boot\n Default: %s:%s\n boot: , spa-spa_name, kname); Modified: stable/8/sys/boot/i386/zfsloader/Makefile == --- stable/8/sys/boot/i386/zfsloader/Makefile Tue Sep 7 18:14:50 2010 (r212300) +++ stable/8/sys/boot/i386/zfsloader/Makefile Tue Sep 7 18:14:59 2010 (r212301) @@ -3,7 +3,7 @@ .PATH: ${.CURDIR}/../loader LOADER=zfsloader -NEWVERSWHAT= ZFS enabled bootstrap loader i386 +NEWVERSWHAT= ZFS enabled bootstrap loader x86 LOADER_ZFS_SUPPORT=yes LOADER_ONLY= yes NO_MAN=yes ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212302 - head/sys/dev/bge
Author: yongari Date: Tue Sep 7 18:29:29 2010 New Revision: 212302 URL: http://svn.freebsd.org/changeset/base/212302 Log: Make sure to create DMA'able memory for statistics block. This was missed in r212061 and it caused crashes for 570x controllers as controller DMAed statistics to physical address 0. Reported by: kan Modified: head/sys/dev/bge/if_bge.c Modified: head/sys/dev/bge/if_bge.c == --- head/sys/dev/bge/if_bge.c Tue Sep 7 18:14:59 2010(r212301) +++ head/sys/dev/bge/if_bge.c Tue Sep 7 18:29:29 2010(r212302) @@ -2258,6 +2258,15 @@ bge_dma_alloc(struct bge_softc *sc) if (error) return (error); + /* Create tag for statistics block. */ + error = bge_dma_ring_alloc(sc, PAGE_SIZE, BGE_STATS_SZ, + sc-bge_cdata.bge_stats_tag, + (uint8_t **)sc-bge_ldata.bge_stats, + sc-bge_cdata.bge_stats_map, + sc-bge_ldata.bge_stats_paddr, statistics block); + if (error) + return (error); + /* Create tag for jumbo RX ring. */ if (BGE_IS_JUMBO_CAPABLE(sc)) { error = bge_dma_ring_alloc(sc, PAGE_SIZE, BGE_JUMBO_RX_RING_SZ, ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
Re: svn commit: r212061 - head/sys/dev/bge
On Fri, Sep 03, 2010 at 11:27:14PM -0700, Pyun YongHyeon wrote: On Fri, Sep 3, 2010 at 9:29 PM, Alexander Kabaev kab...@gmail.com wrote: On Tue, 31 Aug 2010 17:33:48 + (UTC) Pyun YongHyeon yong...@freebsd.org wrote: Author: yongari Date: Tue Aug 31 17:33:48 2010 New Revision: 212061 URL: http://svn.freebsd.org/changeset/base/212061 Log: ? Split common parent DMA tag into ring DMA tag and TX/RX mbuf DMA ? tag. All controllers that are not BCM5755 or higher have 4GB ? boundary DMA bug. Previously bge(4) used 32bit DMA address to ? workaround the bug(r199670). However this caused the use of bounce ? buffers such that it resulted in poor performance for systems which ? have more than 4GB memory. Because bus_dma(9) honors boundary ? restriction requirement of DMA tag for dynamic buffers, having a ? separate TX/RX mbuf DMA tag will greatly reduce the possibility of ? using bounce buffers. For DMA buffers allocated with ? bus_dmamem_alloc(9), now bge(4) explicitly checks whether the ? requested memory region crossed the boundary or not. ? With this change, only the DMA buffer that crossed the boundary ? will use 32bit DMA address. Other DMA buffers are not affected as ? separate DMA tag is created for each DMA buffer. ? Even if 32bit DMA address space is used for a buffer, the chance to ? use bounce buffer is still very low as the size of buffer is small. ? This change should eliminate most usage of bounce buffers on ? systems that have more than 4GB memory. ? More correct fix would be teaching bus_dma(9) to honor boundary ? restriction for buffers created with bus_dmamem_alloc(9) but it ? seems that is not easy. ? While I'm here cleanup bge_dma_map_addr() and remove unnecessary ? member variables in bge_dmamap_arg structure. ? Tested by: ?marcel Modified: ? head/sys/dev/bge/if_bge.c ? head/sys/dev/bge/if_bgereg.h Hi, with this commit my AMD64 machine reliably reboots after several minutes of uptime. Attempting cvs update of ports from repository located on NFS server seems to make it happen sooner. bge0: Broadcom NetXtreme Gigabit Ethernet Controller, ASIC rev. ?0x001002 mem 0xfd8f-0xfd8f irq 24 at device 9.0 on pci2 miibus0: MII bus on bge0 brgphy0: BCM5703 10/100/1000baseTX PHY PHY 1 on miibus0 brgphy0: ?10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, 1000baseT, 1000baseT-FDX, auto bge0: Ethernet address: 00:e0:81:28:24:e7 bge0: [ITHREAD] Booting kernel tree from just before this commit makes everything work again. Sorry, it seems I forgot allocating statistics block. This may cause issues for controllers(e.g. 570x) that support hardware MAC statistics counters. This could be the reason why I couldn't see the issue on 5761. I'm on vacation so I'll fix it Tuesday. If it's urgent please back out this change. Fix committed in r212302. ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212303 - head/sys/dev/e1000
Author: jfv Date: Tue Sep 7 20:13:08 2010 New Revision: 212303 URL: http://svn.freebsd.org/changeset/base/212303 Log: Tighten up the rx mbuf refresh code, there were some discrepencies from the igb version which was the target. Change the message when neither MSI or MSIX are enabled and a fallback to Legacy interrupts happen, the existing message was confusing. Modified: head/sys/dev/e1000/if_em.c head/sys/dev/e1000/if_em.h Modified: head/sys/dev/e1000/if_em.c == --- head/sys/dev/e1000/if_em.c Tue Sep 7 18:29:29 2010(r212302) +++ head/sys/dev/e1000/if_em.c Tue Sep 7 20:13:08 2010(r212303) @@ -93,7 +93,7 @@ int em_display_debug_stats = 0; /* * Driver version: */ -char em_driver_version[] = 7.0.5; +char em_driver_version[] = 7.0.6; /* @@ -281,6 +281,8 @@ static void em_handle_link(void *context static voidem_add_rx_process_limit(struct adapter *, const char *, const char *, int *, int); +static __inline void em_rx_discard(struct rx_ring *, int); + #ifdef DEVICE_POLLING static poll_handler_t em_poll; #endif /* POLLING */ @@ -2563,11 +2565,11 @@ msi: val = pci_msi_count(dev); if (val == 1 pci_alloc_msi(dev, val) == 0) { adapter-msix = 1; - device_printf(adapter-dev,Using MSI interrupt\n); + device_printf(adapter-dev,Using an MSI interrupt\n); return (val); } - /* Should only happen due to manual invention */ - device_printf(adapter-dev,Setup MSIX failure\n); + /* Should only happen due to manual configuration */ + device_printf(adapter-dev,No MSI/MSIX using a Legacy IRQ\n); return (0); } @@ -3681,14 +3683,27 @@ em_refresh_mbufs(struct rx_ring *rxr, in struct adapter *adapter = rxr-adapter; struct mbuf *m; bus_dma_segment_t segs[1]; - bus_dmamap_tmap; struct em_buffer*rxbuf; int i, error, nsegs, cleaned; i = rxr-next_to_refresh; cleaned = -1; while (i != limit) { + rxbuf = rxr-rx_buffers[i]; + /* + ** Just skip entries with a buffer, + ** they can only be due to an error + ** and are to be reused. + */ + if (rxbuf-m_head != NULL) + continue; m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); + /* + ** If we have a temporary resource shortage + ** that causes a failure, just abort refresh + ** for now, we will return to this point when + ** reinvoked from em_rxeof. + */ if (m == NULL) goto update; m-m_len = m-m_pkthdr.len = MCLBYTES; @@ -3696,11 +3711,8 @@ em_refresh_mbufs(struct rx_ring *rxr, in if (adapter-max_frame_size = (MCLBYTES - ETHER_ALIGN)) m_adj(m, ETHER_ALIGN); - /* -* Using memory from the mbuf cluster pool, invoke the -* bus_dma machinery to arrange the memory mapping. -*/ - error = bus_dmamap_load_mbuf_sg(rxr-rxtag, rxr-rx_sparemap, + /* Use bus_dma machinery to setup the memory mapping */ + error = bus_dmamap_load_mbuf_sg(rxr-rxtag, rxbuf-map, m, segs, nsegs, BUS_DMA_NOWAIT); if (error != 0) { m_free(m); @@ -3710,13 +3722,6 @@ em_refresh_mbufs(struct rx_ring *rxr, in /* If nsegs is wrong then the stack is corrupt. */ KASSERT(nsegs == 1, (Too many segments returned!)); - rxbuf = rxr-rx_buffers[i]; - if (rxbuf-m_head != NULL) - bus_dmamap_unload(rxr-rxtag, rxbuf-map); - - map = rxbuf-map; - rxbuf-map = rxr-rx_sparemap; - rxr-rx_sparemap = map; bus_dmamap_sync(rxr-rxtag, rxbuf-map, BUS_DMASYNC_PREREAD); rxbuf-m_head = m; @@ -3730,8 +3735,10 @@ em_refresh_mbufs(struct rx_ring *rxr, in rxr-next_to_refresh = i; } update: - bus_dmamap_sync(rxr-rxdma.dma_tag, rxr-rxdma.dma_map, - BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE); + /* + ** Update the tail pointer only if, + ** and as far as we have refreshed. + */ if (cleaned != -1) /* Update tail index */ E1000_WRITE_REG(adapter-hw,
svn commit: r212304 - head/sys/dev/e1000
Author: jfv Date: Tue Sep 7 21:28:45 2010 New Revision: 212304 URL: http://svn.freebsd.org/changeset/base/212304 Log: Code correction in refresh_mbufs, just continuing without index recalc was wrong. Modified: head/sys/dev/e1000/if_em.c Modified: head/sys/dev/e1000/if_em.c == --- head/sys/dev/e1000/if_em.c Tue Sep 7 20:13:08 2010(r212303) +++ head/sys/dev/e1000/if_em.c Tue Sep 7 21:28:45 2010(r212304) @@ -3696,7 +3696,7 @@ em_refresh_mbufs(struct rx_ring *rxr, in ** and are to be reused. */ if (rxbuf-m_head != NULL) - continue; + goto reuse; m = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); /* ** If we have a temporary resource shortage @@ -3726,7 +3726,7 @@ em_refresh_mbufs(struct rx_ring *rxr, in rxbuf-map, BUS_DMASYNC_PREREAD); rxbuf-m_head = m; rxr-rx_base[i].buffer_addr = htole64(segs[0].ds_addr); - +reuse: cleaned = i; /* Calculate next index */ if (++i == adapter-num_rx_desc) ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
Re: svn commit: r212251 - head/sys/dev/acpi_support
On Monday 06 September 2010 11:28 am, John Baldwin wrote: On Monday 06 September 2010 03:34:32 am Andriy Gapon wrote: Author: avg Date: Mon Sep 6 07:34:32 2010 New Revision: 212251 URL: http://svn.freebsd.org/changeset/base/212251 Log: acpi_hp: fix bus attachment code - add identify method to create driver's own device_t - successfully probe only driver's own device_t instead of any device_t - (ab)use device order to hopefully be probed/attached after acpi_wmi Perhaps this should be a child of acpi_wmi0 instead? That would fix the ordering issue as well as remove the need to avoid real ACPI devices in the attach routine. +1 Jung-uk Kim ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212305 - head/sys/fs/tmpfs
Author: ivoras Date: Tue Sep 7 22:40:45 2010 New Revision: 212305 URL: http://svn.freebsd.org/changeset/base/212305 Log: Avoid Entry can disappear before we lock fdvp panic. PR: 150143 Submitted by: Gleb Kurtsou gk at FreeBSD.org Pretty sure it won't blow up: mckusick MFC after:2 weeks Modified: head/sys/fs/tmpfs/tmpfs_vnops.c Modified: head/sys/fs/tmpfs/tmpfs_vnops.c == --- head/sys/fs/tmpfs/tmpfs_vnops.c Tue Sep 7 21:28:45 2010 (r212304) +++ head/sys/fs/tmpfs/tmpfs_vnops.c Tue Sep 7 22:40:45 2010 (r212305) @@ -981,10 +981,14 @@ tmpfs_rename(struct vop_rename_args *v) fnode = VP_TO_TMPFS_NODE(fvp); de = tmpfs_dir_lookup(fdnode, fnode, fcnp); - /* Avoid manipulating '.' and '..' entries. */ + /* Entry can disappear before we lock fdvp, +* also avoid manipulating '.' and '..' entries. */ if (de == NULL) { - MPASS(fvp-v_type == VDIR); - error = EINVAL; + if ((fcnp-cn_flags ISDOTDOT) != 0 || + (fcnp-cn_namelen == 1 fcnp-cn_nameptr[0] == '.')) + error = EINVAL; + else + error = ENOENT; goto out_locked; } MPASS(de-td_node == fnode); ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212306 - head/sys/dev/mii
Author: yongari Date: Tue Sep 7 22:44:29 2010 New Revision: 212306 URL: http://svn.freebsd.org/changeset/base/212306 Log: Remove trailing CR at EOL. Modified: head/sys/dev/mii/brgphyreg.h Modified: head/sys/dev/mii/brgphyreg.h == --- head/sys/dev/mii/brgphyreg.hTue Sep 7 22:40:45 2010 (r212305) +++ head/sys/dev/mii/brgphyreg.hTue Sep 7 22:44:29 2010 (r212306) @@ -262,103 +262,103 @@ #defineBRGPHY_IMR_LNK_CHG 0x0002 /* Link status change */ #defineBRGPHY_IMR_CRCERR 0x0001 /* CRC error */ -/***/ -/* Begin: Shared SerDes PHY register definitions */ -/***/ - -/* SerDes autoneg is different from copper */ -#define BRGPHY_SERDES_ANAR 0x04 -#define BRGPHY_SERDES_ANAR_FDX 0x0020 -#define BRGPHY_SERDES_ANAR_HDX 0x0040 -#define BRGPHY_SERDES_ANAR_NO_PAUSE(0x0 7) -#define BRGPHY_SERDES_ANAR_SYM_PAUSE (0x1 7) -#define BRGPHY_SERDES_ANAR_ASYM_PAUSE (0x2 7) -#define BRGPHY_SERDES_ANAR_BOTH_PAUSE (0x3 7) - -#define BRGPHY_SERDES_ANLPAR 0x05 -#define BRGPHY_SERDES_ANLPAR_FDX 0x0020 -#define BRGPHY_SERDES_ANLPAR_HDX 0x0040 -#define BRGPHY_SERDES_ANLPAR_NO_PAUSE (0x0 7) -#define BRGPHY_SERDES_ANLPAR_SYM_PAUSE (0x1 7) -#define BRGPHY_SERDES_ANLPAR_ASYM_PAUSE(0x2 7) -#define BRGPHY_SERDES_ANLPAR_BOTH_PAUSE(0x3 7) - -/***/ -/* End: Shared SerDes PHY register definitions */ -/***/ - -/***/ -/* Begin: PHY register values for the 5706 PHY */ -/***/ - -/* - * Shadow register 0x1C, bit 15 is write enable, - * bits 14-10 select function (0x00 to 0x1F). - */ -#define BRGPHY_MII_SHADOW_1C 0x1C +/***/ +/* Begin: Shared SerDes PHY register definitions */ +/***/ + +/* SerDes autoneg is different from copper */ +#define BRGPHY_SERDES_ANAR 0x04 +#define BRGPHY_SERDES_ANAR_FDX 0x0020 +#define BRGPHY_SERDES_ANAR_HDX 0x0040 +#define BRGPHY_SERDES_ANAR_NO_PAUSE(0x0 7) +#define BRGPHY_SERDES_ANAR_SYM_PAUSE (0x1 7) +#define BRGPHY_SERDES_ANAR_ASYM_PAUSE (0x2 7) +#define BRGPHY_SERDES_ANAR_BOTH_PAUSE (0x3 7) + +#define BRGPHY_SERDES_ANLPAR 0x05 +#define BRGPHY_SERDES_ANLPAR_FDX 0x0020 +#define BRGPHY_SERDES_ANLPAR_HDX 0x0040 +#define BRGPHY_SERDES_ANLPAR_NO_PAUSE (0x0 7) +#define BRGPHY_SERDES_ANLPAR_SYM_PAUSE (0x1 7) +#define BRGPHY_SERDES_ANLPAR_ASYM_PAUSE(0x2 7) +#define BRGPHY_SERDES_ANLPAR_BOTH_PAUSE(0x3 7) + +/***/ +/* End: Shared SerDes PHY register definitions */ +/***/ + +/***/ +/* Begin: PHY register values for the 5706 PHY */ +/***/ + +/* + * Shadow register 0x1C, bit 15 is write enable, + * bits 14-10 select function (0x00 to 0x1F). + */ +#define BRGPHY_MII_SHADOW_1C 0x1C #define BRGPHY_SHADOW_1C_WRITE_EN 0x8000 #define BRGPHY_SHADOW_1C_SELECT_MASK 0x7C00 - + /* Shadow 0x1C Mode Control Register (select value 0x1F) */ #define BRGPHY_SHADOW_1C_MODE_CTRL (0x1F 10) /* When set, Regs 0-0x0F are 1000X, else 1000T */ -#define BRGPHY_SHADOW_1C_ENA_1000X 0x0001 +#define BRGPHY_SHADOW_1C_ENA_1000X 0x0001 #defineBRGPHY_MII_TEST10x1E #defineBRGPHY_TEST1_TRIM_EN0x0010 #defineBRGPHY_TEST1_CRC_EN 0x8000 #define BRGPHY_MII_TEST2 0x1F - -/***/ -/* End: PHY register values for the 5706 PHY */ -/***/ - -/***/ -/* Begin: PHY register values for the 5708S SerDes PHY */ -/***/ - -/* Autoneg Next Page Transmit 1 Regiser */ -#define BRGPHY_5708S_ANEG_NXT_PG_XMIT1 0x0B -#define BRGPHY_5708S_ANEG_NXT_PG_XMIT1_25G 0x0001 - -/* Use the BLOCK_ADDR register to select the page for registers 0x10 to 0x1E */ -#define BRGPHY_5708S_BLOCK_ADDR0x1f + +/***/ +/* End: PHY register values
svn commit: r212307 - head/sys/dev/mii
Author: yongari Date: Tue Sep 7 23:08:38 2010 New Revision: 212307 URL: http://svn.freebsd.org/changeset/base/212307 Log: Consistently use tab characters instead of tab + space characters. No functional changes. Modified: head/sys/dev/mii/brgphy.c head/sys/dev/mii/brgphyreg.h Modified: head/sys/dev/mii/brgphy.c == --- head/sys/dev/mii/brgphy.c Tue Sep 7 22:44:29 2010(r212306) +++ head/sys/dev/mii/brgphy.c Tue Sep 7 23:08:38 2010(r212307) @@ -140,7 +140,7 @@ static const struct mii_phydesc brgphys[ MII_PHY_DESC(xxBROADCOM_ALT1, BCM5784), MII_PHY_DESC(xxBROADCOM_ALT1, BCM5709C), MII_PHY_DESC(xxBROADCOM_ALT1, BCM5761), -MII_PHY_DESC(xxBROADCOM_ALT1, BCM5709S), + MII_PHY_DESC(xxBROADCOM_ALT1, BCM5709S), MII_PHY_DESC(BROADCOM2, BCM5906), MII_PHY_END }; @@ -242,11 +242,12 @@ brgphy_attach(device_t dev) bsc-serdes_flags |= BRGPHY_5708S; sc-mii_flags |= MIIF_HAVEFIBER; break; -case MII_MODEL_xxBROADCOM_ALT1_BCM5709S: -bsc-serdes_flags |= BRGPHY_5709S; -sc-mii_flags |= MIIF_HAVEFIBER; -break; - } break; + case MII_MODEL_xxBROADCOM_ALT1_BCM5709S: + bsc-serdes_flags |= BRGPHY_5709S; + sc-mii_flags |= MIIF_HAVEFIBER; + break; + } + break; default: device_printf(dev, Unrecognized OUI for PHY!\n); } @@ -637,7 +638,7 @@ brgphy_status(struct mii_softc *sc) PHY_WRITE(sc, BRGPHY_5708S_BLOCK_ADDR, BRGPHY_5708S_DIG_PG0); xstat = PHY_READ(sc, BRGPHY_5708S_PG0_1000X_STAT1); -/* Check for MRBE auto-negotiated speed results. */ + /* Check for MRBE auto-negotiated speed results. */ switch (xstat BRGPHY_5708S_PG0_1000X_STAT1_SPEED_MASK) { case BRGPHY_5708S_PG0_1000X_STAT1_SPEED_10: mii-mii_media_active |= IFM_10_FL; break; @@ -649,39 +650,39 @@ brgphy_status(struct mii_softc *sc) mii-mii_media_active |= IFM_2500_SX; break; } -/* Check for MRBE auto-negotiated duplex results. */ + /* Check for MRBE auto-negotiated duplex results. */ if (xstat BRGPHY_5708S_PG0_1000X_STAT1_FDX) mii-mii_media_active |= IFM_FDX; else mii-mii_media_active |= IFM_HDX; -} else if (bsc-serdes_flags BRGPHY_5709S) { + } else if (bsc-serdes_flags BRGPHY_5709S) { -/* Select GP Status Block of the AN MMD, get autoneg results. */ -PHY_WRITE(sc, BRGPHY_BLOCK_ADDR, BRGPHY_BLOCK_ADDR_GP_STATUS); + /* Select GP Status Block of the AN MMD, get autoneg results. */ + PHY_WRITE(sc, BRGPHY_BLOCK_ADDR, BRGPHY_BLOCK_ADDR_GP_STATUS); xstat = PHY_READ(sc, BRGPHY_GP_STATUS_TOP_ANEG_STATUS); -/* Restore IEEE0 block (assumed in all brgphy(4) code). */ -PHY_WRITE(sc, BRGPHY_BLOCK_ADDR, BRGPHY_BLOCK_ADDR_COMBO_IEEE0); + /* Restore IEEE0 block (assumed in all brgphy(4) code). */ + PHY_WRITE(sc, BRGPHY_BLOCK_ADDR, BRGPHY_BLOCK_ADDR_COMBO_IEEE0); -/* Check for MRBE auto-negotiated speed results. */ -switch (xstat BRGPHY_GP_STATUS_TOP_ANEG_SPEED_MASK) { - case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_10: - mii-mii_media_active |= IFM_10_FL; break; - case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_100: - mii-mii_media_active |= IFM_100_FX; break; - case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_1G: - mii-mii_media_active |= IFM_1000_SX; break; - case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_25G: - mii-mii_media_active |= IFM_2500_SX; break; + /* Check for MRBE auto-negotiated speed results. */ + switch (xstat BRGPHY_GP_STATUS_TOP_ANEG_SPEED_MASK) { + case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_10: + mii-mii_media_active |= IFM_10_FL; break; + case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_100: + mii-mii_media_active |= IFM_100_FX; break; + case BRGPHY_GP_STATUS_TOP_ANEG_SPEED_1G: + mii-mii_media_active |= IFM_1000_SX; break; + case
svn commit: r212308 - head/sys/powerpc/aim
Author: nwhitehorn Date: Tue Sep 7 23:31:48 2010 New Revision: 212308 URL: http://svn.freebsd.org/changeset/base/212308 Log: Fix an error made in r209975 related to context ID allocation for 64-bit PowerPC CPUs running a 32-bit kernel. This bug could cause in-use VSIDs to be allocated again to another process, causing memory space overlaps and corruption. Reported by: linimon Modified: head/sys/powerpc/aim/mmu_oea64.c Modified: head/sys/powerpc/aim/mmu_oea64.c == --- head/sys/powerpc/aim/mmu_oea64.cTue Sep 7 23:08:38 2010 (r212307) +++ head/sys/powerpc/aim/mmu_oea64.cTue Sep 7 23:31:48 2010 (r212308) @@ -2108,7 +2108,7 @@ void moea64_pinit(mmu_t mmu, pmap_t pmap) { int i; - register_t hash; + uint32_t hash; PMAP_LOCK_INIT(pmap); @@ -2125,6 +2125,8 @@ moea64_pinit(mmu_t mmu, pmap_t pmap) for (i = 0; i 16; i++) pmap-pm_sr[i] = VSID_MAKE(i, hash); + + KASSERT(pmap-pm_sr[0] != 0, (moea64_pinit: pm_sr[0] = 0)); } #endif @@ -2238,6 +2240,8 @@ moea64_release_vsid(uint64_t vsid) idx = vsid (NVSIDS-1); mask = 1 (idx % VSID_NBPW); idx /= VSID_NBPW; + KASSERT(moea64_vsid_bitmap[idx] mask, + (Freeing unallocated VSID %#jx, vsid)); moea64_vsid_bitmap[idx] = ~mask; mtx_unlock(moea64_slb_mutex); } @@ -2254,10 +2258,9 @@ moea64_release(mmu_t mmu, pmap_t pmap) free_vsids(pmap); slb_free_user_cache(pmap-pm_slb); #else -if (pmap-pm_sr[0] == 0) -panic(moea64_release: pm_sr[0] = 0); + KASSERT(pmap-pm_sr[0] != 0, (moea64_release: pm_sr[0] = 0)); - moea64_release_vsid(pmap-pm_sr[0]); + moea64_release_vsid(VSID_TO_HASH(pmap-pm_sr[0])); #endif PMAP_LOCK_DESTROY(pmap); ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212309 - stable/8/sys/rpc
Author: rmacklem Date: Wed Sep 8 01:18:09 2010 New Revision: 212309 URL: http://svn.freebsd.org/changeset/base/212309 Log: MFC: r211789 If the first iteration of the do loop in replay_prune() succeeded and a subsequent interation failed to find an entry to prune, it could loop infinitely, since the freed variable wasn't reset to FALSE. This patch moves setting freed FALSE to inside the loop to fix the problem. Modified: stable/8/sys/rpc/replay.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/rpc/replay.c == --- stable/8/sys/rpc/replay.c Tue Sep 7 23:31:48 2010(r212308) +++ stable/8/sys/rpc/replay.c Wed Sep 8 01:18:09 2010(r212309) @@ -144,8 +144,8 @@ replay_prune(struct replay_cache *rc) bool_t freed_one; if (rc-rc_count = REPLAY_MAX || rc-rc_size rc-rc_maxsize) { - freed_one = FALSE; do { + freed_one = FALSE; /* * Try to free an entry. Don't free in-progress entries */ ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212310 - stable/8/sys/rpc
Author: rmacklem Date: Wed Sep 8 01:41:22 2010 New Revision: 212310 URL: http://svn.freebsd.org/changeset/base/212310 Log: MFC: r211830 Add mutex locking for the call to replay_prune() in replay_setsize(), since replay_prune() expects the rc_lock to be held when it is called. Modified: stable/8/sys/rpc/replay.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/rpc/replay.c == --- stable/8/sys/rpc/replay.c Wed Sep 8 01:18:09 2010(r212309) +++ stable/8/sys/rpc/replay.c Wed Sep 8 01:41:22 2010(r212310) @@ -90,8 +90,10 @@ void replay_setsize(struct replay_cache *rc, size_t newmaxsize) { + mtx_lock(rc-rc_lock); rc-rc_maxsize = newmaxsize; replay_prune(rc); + mtx_unlock(rc-rc_lock); } void ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212311 - stable/8/sys/kern
Author: davidxu Date: Wed Sep 8 01:55:03 2010 New Revision: 212311 URL: http://svn.freebsd.org/changeset/base/212311 Log: MFC: r212047 If a process is being debugged, skips job control caused by SIGSTOP/SIGCONT signals, because it is managed by debugger, however a normal signal sent to a interruptibly sleeping thread wakes up the thread so it will handle the signal when the process leaves the stopped state. Modified: stable/8/sys/kern/kern_sig.c Directory Properties: stable/8/sys/ (props changed) stable/8/sys/amd64/include/xen/ (props changed) stable/8/sys/cddl/contrib/opensolaris/ (props changed) stable/8/sys/contrib/dev/acpica/ (props changed) stable/8/sys/contrib/pf/ (props changed) stable/8/sys/dev/xen/xenpci/ (props changed) Modified: stable/8/sys/kern/kern_sig.c == --- stable/8/sys/kern/kern_sig.cWed Sep 8 01:41:22 2010 (r212310) +++ stable/8/sys/kern/kern_sig.cWed Sep 8 01:55:03 2010 (r212311) @@ -2129,20 +2129,13 @@ tdsignal(struct proc *p, struct thread * * We try do the per-process part here. */ if (P_SHOULDSTOP(p)) { - /* -* The process is in stopped mode. All the threads should be -* either winding down or already on the suspended queue. -*/ - if (p-p_flag P_TRACED) { + if (sig == SIGKILL) { /* -* The traced process is already stopped, -* so no further action is necessary. -* No signal can restart us. +* If traced process is already stopped, +* then no further action is necessary. */ - goto out; - } - - if (sig == SIGKILL) { + if (p-p_flag P_TRACED) + goto out; /* * SIGKILL sets process running. * It will die elsewhere. @@ -2154,6 +2147,12 @@ tdsignal(struct proc *p, struct thread * if (prop SA_CONT) { /* +* If traced process is already stopped, +* then no further action is necessary. +*/ + if (p-p_flag P_TRACED) + goto out; + /* * If SIGCONT is default (or ignored), we continue the * process but don't leave the signal in sigqueue as * it has no further action. If SIGCONT is held, we @@ -2198,6 +2197,12 @@ tdsignal(struct proc *p, struct thread * if (prop SA_STOP) { /* +* If traced process is already stopped, +* then no further action is necessary. +*/ + if (p-p_flag P_TRACED) + goto out; + /* * Already stopped, don't need to stop again * (If we did the shell could get confused). * Just make sure the signal STOP bit set. ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org
svn commit: r212312 - head/lib/libthr/thread
Author: davidxu Date: Wed Sep 8 02:18:20 2010 New Revision: 212312 URL: http://svn.freebsd.org/changeset/base/212312 Log: To avoid possible race condition, SIGCANCEL is always sent except the thread is dead. Modified: head/lib/libthr/thread/thr_cancel.c Modified: head/lib/libthr/thread/thr_cancel.c == --- head/lib/libthr/thread/thr_cancel.c Wed Sep 8 01:55:03 2010 (r212311) +++ head/lib/libthr/thread/thr_cancel.c Wed Sep 8 02:18:20 2010 (r212312) @@ -67,7 +67,7 @@ _pthread_cancel(pthread_t pthread) THR_THREAD_LOCK(curthread, pthread); if (!pthread-cancel_pending) { pthread-cancel_pending = 1; - if (pthread-cancel_enable) + if (pthread-state != PS_DEAD) _thr_send_sig(pthread, SIGCANCEL); } THR_THREAD_UNLOCK(curthread, pthread); ___ svn-src-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-all To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org