From owner-p4-projects@FreeBSD.ORG Fri Sep 16 12:19:48 2005 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 61CCE16A421; Fri, 16 Sep 2005 12:19:48 +0000 (GMT) X-Original-To: perforce@freebsd.org Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id F264516A41F for ; Fri, 16 Sep 2005 12:19:47 +0000 (GMT) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 869EA43D45 for ; Fri, 16 Sep 2005 12:19:47 +0000 (GMT) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j8GCJl8u084399 for ; Fri, 16 Sep 2005 12:19:47 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j8GCJjhR084396 for perforce@freebsd.org; Fri, 16 Sep 2005 12:19:45 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 16 Sep 2005 12:19:45 GMT Message-Id: <200509161219.j8GCJjhR084396@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson To: Perforce Change Reviews Cc: Subject: PERFORCE change 83743 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Sep 2005 12:19:49 -0000 http://perforce.freebsd.org/chv.cgi?CH=83743 Change 83743 by rwatson@rwatson_zoo on 2005/09/16 12:19:41 Integrate netsmp branch from FreeBSD CVS: - Busdma memory barrier for Alpha. - !+ for assembly. - CAM tweaks for probing. - More wide use of time_uptime() rather than time_second(). - Sundry ATA attachment and failure tweaks. - Several ethernet interfaces get free/detach fixes; if_tl mpsafe! - if_ed retrofitting and mii. - pccard cis and other attachment cleanups. - several devfs rules tweaks and devfs locking work - If IPI gets stuck... stumble onwards! - TSS fix - execve() and symlink locking fixes - Kqueue race fix - THREAD_NO_SLEEPING()/TDF_NOSLEEPING - Broken bpf optimization removed. - more fifo regression test work Affected files ... .. //depot/projects/netsmp/src/sys/alpha/alpha/busdma_machdep.c#2 integrate .. //depot/projects/netsmp/src/sys/alpha/include/atomic.h#2 integrate .. //depot/projects/netsmp/src/sys/amd64/include/atomic.h#4 integrate .. //depot/projects/netsmp/src/sys/boot/pc98/boot2/io.c#2 integrate .. //depot/projects/netsmp/src/sys/cam/cam_xpt.c#2 integrate .. //depot/projects/netsmp/src/sys/conf/NOTES#3 integrate .. //depot/projects/netsmp/src/sys/conf/files#9 integrate .. //depot/projects/netsmp/src/sys/dev/aac/aac.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/aac/aac_cam.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/acpica/acpi_pcib_acpi.c#3 integrate .. //depot/projects/netsmp/src/sys/dev/ata/ata-all.c#5 integrate .. //depot/projects/netsmp/src/sys/dev/ata/ata-chipset.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/ata/ata-lowlevel.c#3 integrate .. //depot/projects/netsmp/src/sys/dev/ata/ata-queue.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/ath/if_ath.c#11 integrate .. //depot/projects/netsmp/src/sys/dev/bfe/if_bfe.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/bge/if_bge.c#8 integrate .. //depot/projects/netsmp/src/sys/dev/cnw/if_cnw.c#5 integrate .. //depot/projects/netsmp/src/sys/dev/digi/digi.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/ed/if_ed.c#8 integrate .. //depot/projects/netsmp/src/sys/dev/ed/if_ed_cbus.c#3 integrate .. //depot/projects/netsmp/src/sys/dev/ed/if_ed_pccard.c#4 integrate .. //depot/projects/netsmp/src/sys/dev/ed/if_ed_pci.c#3 integrate .. //depot/projects/netsmp/src/sys/dev/ed/if_edreg.h#3 integrate .. //depot/projects/netsmp/src/sys/dev/ed/if_edvar.h#4 integrate .. //depot/projects/netsmp/src/sys/dev/em/if_em.c#7 integrate .. //depot/projects/netsmp/src/sys/dev/en/if_en_pci.c#4 integrate .. //depot/projects/netsmp/src/sys/dev/ep/if_ep_pccard.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/ex/if_ex.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/ex/if_ex_pccard.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/hatm/if_hatm.c#4 integrate .. //depot/projects/netsmp/src/sys/dev/ie/if_ie.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/ieee488/tnt4882.c#1 branch .. //depot/projects/netsmp/src/sys/dev/ieee488/upd7210.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/ieee488/upd7210.h#3 integrate .. //depot/projects/netsmp/src/sys/dev/nge/if_nge.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/pccard/card_if.m#2 integrate .. //depot/projects/netsmp/src/sys/dev/pccard/pccard.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/pccard/pccard_cis.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/pccard/pccardvar.h#2 integrate .. //depot/projects/netsmp/src/sys/dev/re/if_re.c#8 integrate .. //depot/projects/netsmp/src/sys/dev/sn/if_sn.c#7 integrate .. //depot/projects/netsmp/src/sys/dev/sn/if_sn_pccard.c#3 integrate .. //depot/projects/netsmp/src/sys/dev/sn/if_snvar.h#3 integrate .. //depot/projects/netsmp/src/sys/dev/sound/pcm/sndstat.c#2 integrate .. //depot/projects/netsmp/src/sys/dev/txp/if_txp.c#7 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_aue.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_axe.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_cdce.c#4 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_cue.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_kue.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_rue.c#8 integrate .. //depot/projects/netsmp/src/sys/dev/usb/if_udav.c#7 integrate .. //depot/projects/netsmp/src/sys/dev/vge/if_vge.c#6 integrate .. //depot/projects/netsmp/src/sys/dev/xe/if_xe_pccard.c#4 integrate .. //depot/projects/netsmp/src/sys/fs/devfs/devfs.h#3 integrate .. //depot/projects/netsmp/src/sys/fs/devfs/devfs_devs.c#3 integrate .. //depot/projects/netsmp/src/sys/fs/devfs/devfs_rule.c#3 integrate .. //depot/projects/netsmp/src/sys/fs/devfs/devfs_vnops.c#7 integrate .. //depot/projects/netsmp/src/sys/fs/fifofs/fifo_vnops.c#16 integrate .. //depot/projects/netsmp/src/sys/fs/nullfs/null_vnops.c#3 integrate .. //depot/projects/netsmp/src/sys/geom/geom_io.c#4 integrate .. //depot/projects/netsmp/src/sys/geom/geom_slice.c#2 integrate .. //depot/projects/netsmp/src/sys/i386/i386/local_apic.c#2 integrate .. //depot/projects/netsmp/src/sys/i386/i386/sys_machdep.c#2 integrate .. //depot/projects/netsmp/src/sys/i386/include/atomic.h#2 integrate .. //depot/projects/netsmp/src/sys/i386/include/pcb_ext.h#2 integrate .. //depot/projects/netsmp/src/sys/i386/pci/pci_bus.c#2 integrate .. //depot/projects/netsmp/src/sys/kern/imgact_elf.c#2 integrate .. //depot/projects/netsmp/src/sys/kern/init_main.c#2 integrate .. //depot/projects/netsmp/src/sys/kern/kern_conf.c#3 integrate .. //depot/projects/netsmp/src/sys/kern/kern_event.c#2 integrate .. //depot/projects/netsmp/src/sys/kern/kern_intr.c#2 integrate .. //depot/projects/netsmp/src/sys/kern/kern_timeout.c#3 integrate .. //depot/projects/netsmp/src/sys/kern/subr_sleepqueue.c#2 integrate .. //depot/projects/netsmp/src/sys/kern/subr_witness.c#9 integrate .. //depot/projects/netsmp/src/sys/kern/uipc_socket.c#6 integrate .. //depot/projects/netsmp/src/sys/kern/vfs_lookup.c#3 integrate .. //depot/projects/netsmp/src/sys/kern/vfs_syscalls.c#3 integrate .. //depot/projects/netsmp/src/sys/net/bpf.c#6 integrate .. //depot/projects/netsmp/src/sys/net/if_vlan.c#9 integrate .. //depot/projects/netsmp/src/sys/net/route.h#2 integrate .. //depot/projects/netsmp/src/sys/netinet/ip_fw2.c#6 integrate .. //depot/projects/netsmp/src/sys/netinet/tcp_syncache.c#3 integrate .. //depot/projects/netsmp/src/sys/netinet6/nd6_nbr.c#7 integrate .. //depot/projects/netsmp/src/sys/pc98/cbus/fdc.c#2 integrate .. //depot/projects/netsmp/src/sys/pc98/cbus/gdc.c#2 integrate .. //depot/projects/netsmp/src/sys/pc98/cbus/nmi.c#2 integrate .. //depot/projects/netsmp/src/sys/pc98/cbus/sio.c#2 integrate .. //depot/projects/netsmp/src/sys/pc98/pc98/epsonio.h#2 delete .. //depot/projects/netsmp/src/sys/pc98/pc98/machdep.c#2 integrate .. //depot/projects/netsmp/src/sys/pc98/pc98/pc98_machdep.c#2 integrate .. //depot/projects/netsmp/src/sys/pc98/pc98/pc98_machdep.h#2 integrate .. //depot/projects/netsmp/src/sys/pci/if_dc.c#9 integrate .. //depot/projects/netsmp/src/sys/pci/if_pcn.c#10 integrate .. //depot/projects/netsmp/src/sys/pci/if_rl.c#6 integrate .. //depot/projects/netsmp/src/sys/pci/if_sf.c#8 integrate .. //depot/projects/netsmp/src/sys/pci/if_sis.c#7 integrate .. //depot/projects/netsmp/src/sys/pci/if_sk.c#7 integrate .. //depot/projects/netsmp/src/sys/pci/if_ste.c#8 integrate .. //depot/projects/netsmp/src/sys/pci/if_ti.c#6 integrate .. //depot/projects/netsmp/src/sys/pci/if_tl.c#6 integrate .. //depot/projects/netsmp/src/sys/pci/if_tlreg.h#2 integrate .. //depot/projects/netsmp/src/sys/pci/if_vr.c#6 integrate .. //depot/projects/netsmp/src/sys/pci/if_wb.c#7 integrate .. //depot/projects/netsmp/src/sys/pci/if_xl.c#8 integrate .. //depot/projects/netsmp/src/sys/powerpc/include/atomic.h#2 integrate .. //depot/projects/netsmp/src/sys/sys/conf.h#4 integrate .. //depot/projects/netsmp/src/sys/sys/filedesc.h#2 integrate .. //depot/projects/netsmp/src/sys/sys/proc.h#3 integrate .. //depot/projects/netsmp/src/tools/regression/fifo/fifo_io/fifo_io.c#3 integrate .. //depot/projects/netsmp/src/tools/regression/fifo/fifo_misc/fifo_misc.c#3 integrate .. //depot/projects/netsmp/src/tools/regression/sockets/shutdown/shutdown.c#2 integrate Differences ... ==== //depot/projects/netsmp/src/sys/alpha/alpha/busdma_machdep.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.51 2005/05/25 07:25:12 marcel Exp $"); +__FBSDID("$FreeBSD: src/sys/alpha/alpha/busdma_machdep.c,v 1.52 2005/09/15 17:09:42 jhb Exp $"); #include #include @@ -891,6 +891,10 @@ } } } + + /* Ensure any pending writes have drained. */ + if (op & (BUS_DMASYNC_PREWRITE)) + alpha_mb(); } static void ==== //depot/projects/netsmp/src/sys/alpha/include/atomic.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/alpha/include/atomic.h,v 1.22 2005/07/15 18:17:57 jhb Exp $ + * $FreeBSD: src/sys/alpha/include/atomic.h,v 1.23 2005/09/15 19:31:22 jhb Exp $ */ #ifndef _MACHINE_ATOMIC_H_ @@ -56,12 +56,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldl_l %0, %2\n\t" /* load old value */ - "bis %0, %3, %0\n\t" /* calculate new value */ + "1:\tldl_l %0, %3\n\t" /* load old value */ + "bis %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ : "=&r" (temp), "=m" (*p) - : "m" (*p), "r" (v) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -72,12 +72,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldl_l %0, %1\n\t" /* load old value */ + "1:\tldl_l %0, %3\n\t" /* load old value */ "bic %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -88,12 +88,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldl_l %0, %1\n\t" /* load old value */ + "1:\tldl_l %0, %3\n\t" /* load old value */ "addl %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -104,12 +104,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldl_l %0, %1\n\t" /* load old value */ + "1:\tldl_l %0, %3\n\t" /* load old value */ "subl %0, %2, %0\n\t" /* calculate new value */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -121,12 +121,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( "wmb\n" /* ensure pending writes have drained */ - "1:\tldl_l %0,%2\n\t" /* load current value, asserting lock */ + "1:\tldl_l %0,%3\n\t" /* load current value, asserting lock */ "ldiq %1,0\n\t" /* value to store */ "stl_c %1,%2\n\t" /* attempt to store */ "beq %1,1b\n" /* if the store failed, spin */ - : "=&r"(result), "=&r"(temp), "+m" (*addr) - : + : "=&r"(result), "=&r"(temp), "=m" (*addr) + : "m" (*addr) : "memory"); #endif @@ -139,12 +139,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldq_l %0, %1\n\t" /* load old value */ + "1:\tldq_l %0, %3\n\t" /* load old value */ "bis %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -155,12 +155,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldq_l %0, %1\n\t" /* load old value */ + "1:\tldq_l %0, %3\n\t" /* load old value */ "bic %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -171,12 +171,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldq_l %0, %1\n\t" /* load old value */ + "1:\tldq_l %0, %3\n\t" /* load old value */ "addq %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -187,12 +187,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldq_l %0, %1\n\t" /* load old value */ + "1:\tldq_l %0, %3\n\t" /* load old value */ "subq %0, %2, %0\n\t" /* calculate new value */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n" /* spin if failed */ - : "=&r" (temp), "+m" (*p) - : "r" (v) + : "=&r" (temp), "=m" (*p) + : "r" (v), "m" (*p) : "memory"); #endif } @@ -204,12 +204,12 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( "wmb\n" /* ensure pending writes have drained */ - "1:\tldq_l %0,%2\n\t" /* load current value, asserting lock */ + "1:\tldq_l %0,%3\n\t" /* load current value, asserting lock */ "ldiq %1,0\n\t" /* value to store */ "stq_c %1,%2\n\t" /* attempt to store */ "beq %1,1b\n" /* if the store failed, spin */ - : "=&r"(result), "=&r"(temp), "+m" (*addr) - : + : "=&r"(result), "=&r"(temp), "=m" (*addr) + : "m" (*addr) : "memory"); #endif @@ -289,15 +289,15 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldl_l %0, %1\n\t" /* load old value */ + "1:\tldl_l %0, %4\n\t" /* load old value */ "cmpeq %0, %2, %0\n\t" /* compare */ "beq %0, 2f\n\t" /* exit if not equal */ "mov %3, %0\n\t" /* value to store */ "stl_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n\t" /* if it failed, spin */ "2:\n" - : "=&r" (ret), "+m" (*p) - : "r" ((long)(int)cmpval), "r" (newval) + : "=&r" (ret), "=m" (*p) + : "r" ((long)(int)cmpval), "r" (newval), "m" (*p) : "memory"); #endif @@ -316,15 +316,15 @@ #ifdef __GNUCLIKE_ASM __asm __volatile ( - "1:\tldq_l %0, %1\n\t" /* load old value */ + "1:\tldq_l %0, %4\n\t" /* load old value */ "cmpeq %0, %2, %0\n\t" /* compare */ "beq %0, 2f\n\t" /* exit if not equal */ "mov %3, %0\n\t" /* value to store */ "stq_c %0, %1\n\t" /* attempt to store */ "beq %0, 1b\n\t" /* if it failed, spin */ "2:\n" - : "=&r" (ret), "+m" (*p) - : "r" (cmpval), "r" (newval) + : "=&r" (ret), "=m" (*p) + : "r" (cmpval), "r" (newval), "m" (*p) : "memory"); #endif ==== //depot/projects/netsmp/src/sys/amd64/include/atomic.h#4 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/atomic.h,v 1.37 2005/08/18 14:36:47 jhb Exp $ + * $FreeBSD: src/sys/amd64/include/atomic.h,v 1.38 2005/09/15 19:31:22 jhb Exp $ */ #ifndef _MACHINE_ATOMIC_H_ #define _MACHINE_ATOMIC_H_ @@ -99,8 +99,8 @@ atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(__XSTRING(MPLOCKED) OP \ - : "+m" (*p) \ - : CONS (V)); \ + : "=m" (*p) \ + : CONS (V), "m" (*p)); \ } \ struct __hack @@ -119,15 +119,16 @@ __asm __volatile ( " " __XSTRING(MPLOCKED) " " - " cmpxchgl %1,%2 ; " + " cmpxchgl %2,%1 ; " " setz %%al ; " " movzbl %%al,%0 ; " "1: " "# atomic_cmpset_int" - : "+a" (res) /* 0 (result) */ - : "r" (src), /* 1 */ - "m" (*(dst)) /* 2 */ - : "memory"); + : "+a" (res), /* 0 (result) */ + "=m" (*dst) /* 1 */ + : "r" (src), /* 2 */ + "m" (*dst) /* 3 */ + : "memory"); return (res); } @@ -139,15 +140,16 @@ __asm __volatile ( " " __XSTRING(MPLOCKED) " " - " cmpxchgq %1,%2 ; " + " cmpxchgq %2,%1 ; " " setz %%al ; " " movzbq %%al,%0 ; " "1: " "# atomic_cmpset_long" - : "+a" (res) /* 0 (result) */ - : "r" (src), /* 1 */ - "m" (*(dst)) /* 2 */ - : "memory"); + : "+a" (res), /* 0 (result) */ + "=m" (*dst) /* 1 */ + : "r" (src), /* 2 */ + "m" (*dst) /* 3 */ + : "memory"); return (res); } @@ -185,8 +187,9 @@ \ __asm __volatile(__XSTRING(MPLOCKED) LOP \ : "=a" (res), /* 0 (result) */\ - "+m" (*p) /* 1 */ \ - : : "memory"); \ + "=m" (*p) /* 1 */ \ + : "m" (*p) /* 2 */ \ + : "memory"); \ \ return (res); \ } \ @@ -198,9 +201,9 @@ atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(SOP \ - : "+m" (*p), /* 0 */ \ + : "=m" (*p), /* 0 */ \ "+r" (v) /* 1 */ \ - : : "memory"); \ + : "m" (*p)); /* 2 */ \ } \ struct __hack @@ -246,12 +249,13 @@ { u_int result; + result = 0; __asm __volatile ( - " xorl %0,%0 ; " " xchgl %1,%0 ; " "# atomic_readandclear_int" - : "=&r" (result) /* 0 (result) */ - : "m" (*addr)); /* 1 (addr) */ + : "+r" (result), /* 0 (result) */ + "=m" (*addr) /* 1 (addr) */ + : "m" (*addr)); return (result); } @@ -261,12 +265,13 @@ { u_long result; + result = 0; __asm __volatile ( - " xorq %0,%0 ; " " xchgq %1,%0 ; " "# atomic_readandclear_long" - : "=&r" (result) /* 0 (result) */ - : "m" (*addr)); /* 1 (addr) */ + : "+r" (result), /* 0 (result) */ + "=m" (*addr) /* 1 (addr) */ + : "m" (*addr)); return (result); } ==== //depot/projects/netsmp/src/sys/boot/pc98/boot2/io.c#2 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/pc98/boot2/io.c,v 1.8 2005/05/10 12:02:14 nyan Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/pc98/boot2/io.c,v 1.9 2005/09/14 12:39:06 nyan Exp $"); #include "boot.h" #include @@ -354,7 +354,6 @@ int ret; int i; int data = 0; - u_char epson_machine_id = *(unsigned char *)V(0xA1624); /* PC98_SYSTEM_PARAMETER(0x501) */ ret = ((*(unsigned char*)V(0xA1501)) & 0x08) >> 3; @@ -390,18 +389,8 @@ } else { ret |= M_NOT_H98; } - } else { + } else ret |= M_NOT_H98; - switch (epson_machine_id) { - case 0x20: /* note A */ - case 0x22: /* note W */ - case 0x27: /* note AE */ - case 0x2a: /* note WR */ - ret |= M_NOTE; - break; - default: - break; - } - } + (*(unsigned long *)V(0xA1620)) = ret; } ==== //depot/projects/netsmp/src/sys/cam/cam_xpt.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.155 2005/07/01 15:21:29 avatar Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.156 2005/09/16 01:26:17 mjacob Exp $"); #include #include @@ -45,6 +45,7 @@ #include #include +#include #ifdef PC98 #include /* geometry translation */ @@ -208,16 +209,31 @@ u_int mintags; u_int maxtags; }; + +static int cam_srch_hi = 0; +TUNABLE_INT("kern.cam.cam_srch_hi", &cam_srch_hi); +static int sysctl_cam_search_luns(SYSCTL_HANDLER_ARGS); +SYSCTL_PROC(_kern_cam, OID_AUTO, cam_srch_hi, CTLTYPE_INT|CTLFLAG_RW, 0, 0, + sysctl_cam_search_luns, "I", + "allow search above LUN 7 for SCSI3 and greater devices"); + #define CAM_SCSI2_MAXLUN 8 /* * If we're not quirked to search <= the first 8 luns * and we are either quirked to search above lun 8, - * or we're > SCSI-2, we can look for luns above lun 8. + * or we're > SCSI-2 and we've enabled hilun searching, + * or we're > SCSI-2 and the last lun was a success, + * we can look for luns above lun 8. */ -#define CAN_SRCH_HI(dv) \ +#define CAN_SRCH_HI_SPARSE(dv) \ + (((dv->quirk->quirks & CAM_QUIRK_NOHILUNS) == 0) \ + && ((dv->quirk->quirks & CAM_QUIRK_HILUNS) \ + || (SID_ANSI_REV(&dv->inq_data) > SCSI_REV_2 && cam_srch_hi))) + +#define CAN_SRCH_HI_DENSE(dv) \ (((dv->quirk->quirks & CAM_QUIRK_NOHILUNS) == 0) \ && ((dv->quirk->quirks & CAM_QUIRK_HILUNS) \ - || SID_ANSI_REV(&dv->inq_data) > SCSI_REV_2)) + || (SID_ANSI_REV(&dv->inq_data) > SCSI_REV_2))) typedef enum { XPT_FLAG_OPEN = 0x01 @@ -5334,7 +5350,7 @@ s = splcam(); device = TAILQ_FIRST(&target->ed_entries); if (device != NULL) { - phl = CAN_SRCH_HI(device); + phl = CAN_SRCH_HI_SPARSE(device); if (device->lun_id == 0) device = TAILQ_NEXT(device, links); } @@ -5351,7 +5367,7 @@ if ((device->quirk->quirks & CAM_QUIRK_NOLUNS) == 0) { /* Try the next lun */ if (lun_id < (CAM_SCSI2_MAXLUN-1) - || CAN_SRCH_HI(device)) + || CAN_SRCH_HI_DENSE(device)) lun_id++; } } @@ -6115,6 +6131,23 @@ device->quirk = (struct xpt_quirk_entry *)match; } +static int +sysctl_cam_search_luns(SYSCTL_HANDLER_ARGS) +{ + int error, bool; + + bool = cam_srch_hi; + error = sysctl_handle_int(oidp, &bool, sizeof(bool), req); + if (error != 0 || req->newptr == NULL) + return (error); + if (bool == 0 || bool == 1) { + cam_srch_hi = bool; + return (0); + } else { + return (EINVAL); + } +} + #ifdef CAM_NEW_TRAN_CODE static void ==== //depot/projects/netsmp/src/sys/conf/NOTES#3 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/NOTES,v 1.1328 2005/07/27 21:47:55 pjd Exp $ +# $FreeBSD: src/sys/conf/NOTES,v 1.1329 2005/09/15 13:28:33 phk Exp $ # # NOTES -- Lines that can be cut/pasted into kernel and hints configs. # @@ -1999,13 +1999,17 @@ # # IEEE-488 hardware: -# pcii: PCIIA cards (uPD7210 based isa cards) +# pcii: PCIIA cards (uPD7210 based isa cards) +# tnt4882: National Instruments PCI-GPIB card. + device pcii hint.pcii.0.at="isa" hint.pcii.0.port="0x2e1" hint.pcii.0.irq="5" hint.pcii.0.drq="1" +device tnt4882 + # # Miscellaneous hardware: # ==== //depot/projects/netsmp/src/sys/conf/files#9 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/files,v 1.1047 2005/09/11 03:38:18 obrien Exp $ +# $FreeBSD: src/sys/conf/files,v 1.1048 2005/09/15 13:28:33 phk Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -648,9 +648,12 @@ dev/ida/ida_pci.c optional ida pci dev/ie/if_ie.c optional ie isa nowerror dev/ie/if_ie_isa.c optional ie isa -dev/ieee488/ibfoo.c optional pcii -dev/ieee488/pcii.c optional pcii +dev/ieee488/ibfoo.c optional pcii +dev/ieee488/ibfoo.c optional tnt4882 +dev/ieee488/pcii.c optional pcii +dev/ieee488/tnt4882.c optional tnt4882 dev/ieee488/upd7210.c optional pcii +dev/ieee488/upd7210.c optional tnt4882 dev/iicbus/if_ic.c optional ic dev/iicbus/iic.c optional iic dev/iicbus/iicbb.c optional iicbb ==== //depot/projects/netsmp/src/sys/dev/aac/aac.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/aac/aac.c,v 1.109 2005/06/01 07:11:17 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/aac/aac.c,v 1.110 2005/09/14 05:46:28 scottl Exp $"); /* * Driver for the Adaptec 'FSA' family of PCI/SCSI RAID adapters. @@ -925,7 +925,7 @@ cm->cm_datalen = bp->bio_bcount; cm->cm_complete = aac_bio_complete; cm->cm_private = bp; - cm->cm_timestamp = time_second; + cm->cm_timestamp = time_uptime; cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE; /* build the FIB */ @@ -1426,7 +1426,7 @@ /* * First wait for the adapter to come ready. */ - then = time_second; + then = time_uptime; do { code = AAC_GET_FWSTATUS(sc); if (code & AAC_SELF_TEST_FAILED) { @@ -1438,7 +1438,7 @@ "FATAL: controller kernel panic\n"); return(ENXIO); } - if (time_second > (then + AAC_BOOT_TIMEOUT)) { + if (time_uptime > (then + AAC_BOOT_TIMEOUT)) { device_printf(sc->aac_dev, "FATAL: controller not coming ready, " "status %x\n", code); @@ -1573,7 +1573,7 @@ ip->HostPhysMemPages = (ip->HostPhysMemPages + AAC_PAGE_SIZE) / AAC_PAGE_SIZE; } - ip->HostElapsedSeconds = time_second; /* reset later if invalid */ + ip->HostElapsedSeconds = time_uptime; /* reset later if invalid */ /* * Initialise FIB queues. Note that it appears that the layout of the @@ -1701,9 +1701,9 @@ AAC_QNOTIFY(sc, AAC_DB_SYNC_COMMAND); /* spin waiting for the command to complete */ - then = time_second; + then = time_uptime; do { - if (time_second > (then + AAC_IMMEDIATE_TIMEOUT)) { + if (time_uptime > (then + AAC_IMMEDIATE_TIMEOUT)) { debug(1, "timed out"); return(EIO); } @@ -1997,14 +1997,14 @@ * only. */ timedout = 0; - deadline = time_second - AAC_CMD_TIMEOUT; + deadline = time_uptime - AAC_CMD_TIMEOUT; TAILQ_FOREACH(cm, &sc->aac_busy, cm_link) { if ((cm->cm_timestamp < deadline) /* && !(cm->cm_flags & AAC_CMD_TIMEDOUT) */) { cm->cm_flags |= AAC_CMD_TIMEDOUT; device_printf(sc->aac_dev, "COMMAND %p TIMEOUT AFTER %d SECONDS\n", - cm, (int)(time_second-cm->cm_timestamp)); + cm, (int)(time_uptime-cm->cm_timestamp)); AAC_PRINT_FIB(sc, cm->cm_fib); timedout++; } @@ -2602,7 +2602,7 @@ if ((error = copyin(ufib, cm->cm_fib, size)) != 0) goto out; cm->cm_fib->Header.Size = size; - cm->cm_timestamp = time_second; + cm->cm_timestamp = time_uptime; /* * Pass the FIB to the controller, wait for it to complete. ==== //depot/projects/netsmp/src/sys/dev/aac/aac_cam.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/aac/aac_cam.c,v 1.20 2005/02/09 11:47:05 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/aac/aac_cam.c,v 1.21 2005/09/14 05:49:34 scottl Exp $"); /* * CAM front-end for communicating with non-DASD devices @@ -397,7 +397,7 @@ cm->cm_complete = aac_cam_complete; cm->cm_private = ccb; - cm->cm_timestamp = time_second; + cm->cm_timestamp = time_uptime; cm->cm_queue = AAC_ADAP_NORM_CMD_QUEUE; fib->Header.XferState = ==== //depot/projects/netsmp/src/sys/dev/acpica/acpi_pcib_acpi.c#3 (text+ko) ==== @@ -26,7 +26,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pcib_acpi.c,v 1.48 2005/09/11 18:39:01 obrien Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/acpica/acpi_pcib_acpi.c,v 1.49 2005/09/16 07:02:29 imp Exp $"); #include "opt_acpi.h" #include @@ -322,6 +322,8 @@ */ if (type == SYS_RES_MEMORY && start == 0UL && end == ~0UL) start = acpi_host_mem_start; + if (type == SYS_RES_IOPORT && start == 0UL && end == ~0UL) + start = 0x1000; return (bus_generic_alloc_resource(dev, child, type, rid, start, end, count, flags)); } ==== //depot/projects/netsmp/src/sys/dev/ata/ata-all.c#5 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.256 2005/08/29 18:19:06 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-all.c,v 1.257 2005/09/14 12:45:06 sos Exp $"); #include "opt_ata.h" #include @@ -158,7 +158,7 @@ device_t *children; int nchildren, i; - /* check that we have a vaild channel to detach */ + /* check that we have a valid channel to detach */ if (!ch->r_irq) return ENXIO; @@ -183,10 +183,11 @@ ata_reinit(device_t dev) { struct ata_channel *ch = device_get_softc(dev); + struct ata_request *request; device_t *children; int nchildren, i; - /* check that we have a vaild channel to reinit */ + /* check that we have a valid channel to reinit */ if (!ch || !ch->r_irq) return ENXIO; @@ -216,12 +217,25 @@ * this child we need to inform the request that the * device is gone and remove it from ch->running */ + mtx_lock(&ch->state_mtx); if (ch->running && ch->running->dev == children[i]) { - device_printf(ch->running->dev, + callout_stop(&ch->running->callout); + request = ch->running; + ch->running = NULL; + } + else + request = NULL; + mtx_unlock(&ch->state_mtx); + + if (request) { + request->result = ENXIO; + device_printf(request->dev, "FAILURE - device detached\n"); - ch->running->dev = NULL; - ch->running = NULL; - } + + /* if not timeout finish request here */ + if (!(request->flags & ATA_R_TIMEOUT)) + ata_finish(request); + } device_delete_child(dev, children[i]); } } @@ -230,7 +244,23 @@ } /* catch request in ch->running if we havn't already */ - ata_catch_inflight(dev); + mtx_lock(&ch->state_mtx); + if ((request = ch->running)) + callout_stop(&request->callout); + ch->running = NULL; + mtx_unlock(&ch->state_mtx); + + /* if we got one put it on the queue again */ + if (request) { + device_printf(request->dev, + "WARNING - %s requeued due to channel reset", + ata_cmd2str(request)); + if (!(request->flags & (ATA_R_ATAPI | ATA_R_CONTROL))) + printf(" LBA=%llu", (unsigned long long)request->u.ata.lba); + printf("\n"); + request->flags |= ATA_R_REQUEUE; + ata_queue_request(request); + } /* we're done release the channel for new work */ mtx_lock(&ch->state_mtx); @@ -297,7 +327,7 @@ mtx_lock(&ch->state_mtx); do { /* do we have a running request */ - if (!(request = ch->running) || (request->flags & ATA_R_TIMEOUT)) + if (!(request = ch->running)) break; ATA_DEBUG_RQ(request, "interrupt"); @@ -311,8 +341,7 @@ /* check for the right state */ if (ch->state != ATA_ACTIVE && ch->state != ATA_STALL_QUEUE) { - device_printf(request->dev, - "interrupt state=%d unexpected\n", ch->state); + device_printf(request->dev, "interrupt on idle channel ignored\n"); break; } ==== //depot/projects/netsmp/src/sys/dev/ata/ata-chipset.c#6 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.132 2005/08/29 09:01:57 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-chipset.c,v 1.133 2005/09/14 12:45:06 sos Exp $"); #include "opt_ata.h" #include @@ -313,13 +313,12 @@ ata_sata_phy_event(void *context, int dummy) { struct ata_connect_task *tp = (struct ata_connect_task *)context; + struct ata_channel *ch = device_get_softc(tp->dev); device_t *children; int nchildren, i; mtx_lock(&Giant); /* newbus suckage it needs Giant */ if (tp->action == ATA_C_ATTACH) { - struct ata_channel *ch = device_get_softc(tp->dev); - device_printf(tp->dev, "CONNECTED\n"); ata_sata_connect(ch); ata_identify(tp->dev); @@ -331,6 +330,9 @@ device_delete_child(tp->dev, children[i]); free(children, M_TEMP); } + mtx_lock(&ch->state_mtx); + ch->state = ATA_IDLE; + mtx_unlock(&ch->state_mtx); device_printf(tp->dev, "DISCONNECTED\n"); } mtx_unlock(&Giant); /* suckage code dealt with, release Giant */ ==== //depot/projects/netsmp/src/sys/dev/ata/ata-lowlevel.c#3 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/dev/ata/ata-lowlevel.c,v 1.70 2005/08/17 15:00:33 sos Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/ata/ata-lowlevel.c,v 1.71 2005/09/14 12:45:06 sos Exp $"); #include "opt_ata.h" #include @@ -117,7 +117,8 @@ /* if write command output the data */ if (write) { if (ata_wait(ch, atadev, (ATA_S_READY | ATA_S_DRQ)) < 0) { - device_printf(request->dev,"timeout waiting for write DRQ"); + device_printf(request->dev, + "timeout waiting for write DRQ\n"); request->result = EIO; goto begin_finished; } @@ -278,7 +279,8 @@ /* if read data get it */ if (request->flags & ATA_R_READ) { if (ata_wait(ch, atadev, (ATA_S_READY | ATA_S_DRQ)) < 0) { - device_printf(request->dev, "timeout waiting for read DRQ"); + device_printf(request->dev, + "timeout waiting for read DRQ\n"); request->result = EIO; goto end_finished; } @@ -302,7 +304,7 @@ /* if we get an error here we are done with the HW */ if (ata_wait(ch, atadev, (ATA_S_READY | ATA_S_DRQ)) < 0) { device_printf(request->dev, - "timeout waiting for write DRQ"); + "timeout waiting for write DRQ\n"); request->status = ATA_IDX_INB(ch, ATA_STATUS); goto end_finished; } >>> TRUNCATED FOR MAIL (1000 lines) <<<