Date: Sun, 16 Dec 2007 01:09:59 GMT From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 130988 for review Message-ID: <200712160109.lBG19x2k088229@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=130988 Change 130988 by marcel@marcel_cluster on 2007/12/16 01:09:28 IFC @130987 Affected files ... .. //depot/projects/e500/include/complex.h#3 integrate .. //depot/projects/e500/lib/msun/Makefile#4 integrate .. //depot/projects/e500/lib/msun/Symbol.map#3 integrate .. //depot/projects/e500/lib/msun/man/csqrt.3#1 branch .. //depot/projects/e500/lib/msun/src/s_csqrt.c#1 branch .. //depot/projects/e500/lib/msun/src/s_csqrtf.c#1 branch .. //depot/projects/e500/share/man/man3/tgmath.3#2 integrate .. //depot/projects/e500/share/man/man4/Makefile#8 integrate .. //depot/projects/e500/share/man/man4/hptrr.4#1 branch .. //depot/projects/e500/sys/amd64/conf/GENERIC#8 integrate .. //depot/projects/e500/sys/amd64/conf/NOTES#5 integrate .. //depot/projects/e500/sys/conf/files.amd64#6 integrate .. //depot/projects/e500/sys/conf/files.i386#6 integrate .. //depot/projects/e500/sys/conf/files.powerpc#11 integrate .. //depot/projects/e500/sys/conf/options#8 integrate .. //depot/projects/e500/sys/conf/options.powerpc#3 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_adapter.h#5 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_include.h#3 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_l2t.c#3 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_l2t.h#3 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_main.c#6 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_offload.c#3 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_offload.h#4 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_osdep.h#5 integrate .. //depot/projects/e500/sys/dev/cxgb/cxgb_sge.c#5 integrate .. //depot/projects/e500/sys/dev/cxgb/t3cdev.h#1 branch .. //depot/projects/e500/sys/dev/cxgb/ulp/toecore/cxgb_toedev.h#1 branch .. //depot/projects/e500/sys/dev/cxgb/ulp/toecore/toedev.c#1 branch .. //depot/projects/e500/sys/dev/cxgb/ulp/toecore/toedev.h#2 delete .. //depot/projects/e500/sys/dev/hptrr/amd64-elf.hptrr_lib.o.uu#1 branch .. //depot/projects/e500/sys/dev/hptrr/array.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/him.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/himfuncs.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/hptintf.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/hptrr_config.c#1 branch .. //depot/projects/e500/sys/dev/hptrr/hptrr_config.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/hptrr_os_bsd.c#1 branch .. //depot/projects/e500/sys/dev/hptrr/hptrr_osm_bsd.c#1 branch .. //depot/projects/e500/sys/dev/hptrr/i386-elf.hptrr_lib.o.uu#1 branch .. //depot/projects/e500/sys/dev/hptrr/ldm.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/list.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/os_bsd.h#1 branch .. //depot/projects/e500/sys/dev/hptrr/osm.h#1 branch .. //depot/projects/e500/sys/i386/conf/GENERIC#8 integrate .. //depot/projects/e500/sys/i386/conf/NOTES#5 integrate .. //depot/projects/e500/sys/i386/conf/PAE#4 integrate .. //depot/projects/e500/sys/kern/kern_mbuf.c#5 integrate .. //depot/projects/e500/sys/kern/kern_mutex.c#6 integrate .. //depot/projects/e500/sys/kern/kern_rwlock.c#6 integrate .. //depot/projects/e500/sys/kern/kern_sx.c#7 integrate .. //depot/projects/e500/sys/kern/kern_thread.c#8 integrate .. //depot/projects/e500/sys/kern/sched_4bsd.c#6 integrate .. //depot/projects/e500/sys/kern/sched_ule.c#6 integrate .. //depot/projects/e500/sys/kern/subr_lock.c#6 integrate .. //depot/projects/e500/sys/modules/Makefile#6 integrate .. //depot/projects/e500/sys/modules/cxgb/Makefile#5 integrate .. //depot/projects/e500/sys/modules/cxgb/cxgb/Makefile#1 branch .. //depot/projects/e500/sys/modules/cxgb/toecore/Makefile#1 branch .. //depot/projects/e500/sys/modules/hptrr/Makefile#1 branch .. //depot/projects/e500/sys/net/if.h#5 integrate .. //depot/projects/e500/sys/netinet/toedev.h#2 integrate .. //depot/projects/e500/sys/powerpc/conf/GENERIC#7 integrate .. //depot/projects/e500/sys/powerpc/conf/NOTES#4 integrate .. //depot/projects/e500/sys/powerpc/include/fpu.h#3 integrate .. //depot/projects/e500/sys/sys/_lock.h#2 integrate .. //depot/projects/e500/sys/sys/lock_profile.h#5 integrate .. //depot/projects/e500/sys/sys/proc.h#7 integrate .. //depot/projects/e500/sys/sys/sx.h#5 integrate .. //depot/projects/e500/tools/regression/lib/msun/Makefile#2 integrate .. //depot/projects/e500/tools/regression/lib/msun/test-csqrt.c#1 branch .. //depot/projects/e500/tools/regression/lib/msun/test-csqrt.t#1 branch Differences ... ==== //depot/projects/e500/include/complex.h#3 (text+ko) ==== @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2001 The FreeBSD Project. + * Copyright (c) 2001-2007 The FreeBSD Project. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/include/complex.h,v 1.7 2007/12/12 23:43:51 das Exp $ + * $FreeBSD: src/include/complex.h,v 1.8 2007/12/15 08:38:44 das Exp $ */ #ifndef _COMPLEX_H @@ -57,6 +57,8 @@ double creal(double complex); float crealf(float complex); long double creall(long double complex); +double complex csqrt(double complex); +float complex csqrtf(float complex); __END_DECLS ==== //depot/projects/e500/lib/msun/Makefile#4 (text+ko) ==== @@ -1,5 +1,5 @@ # @(#)Makefile 5.1beta 93/09/24 -# $FreeBSD: src/lib/msun/Makefile,v 1.79 2007/12/12 23:43:50 das Exp $ +# $FreeBSD: src/lib/msun/Makefile,v 1.80 2007/12/15 08:38:44 das Exp $ # # ==================================================== # Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. @@ -40,7 +40,8 @@ k_tan.c k_tanf.c \ s_asinh.c s_asinhf.c s_atan.c s_atanf.c s_carg.c s_cargf.c \ s_cbrt.c s_cbrtf.c s_ceil.c s_ceilf.c s_ceill.c \ - s_copysign.c s_copysignf.c s_cos.c s_cosf.c s_erf.c s_erff.c \ + s_copysign.c s_copysignf.c s_cos.c s_cosf.c \ + s_csqrt.c s_csqrtf.c s_erf.c s_erff.c \ s_exp2.c s_exp2f.c s_expm1.c s_expm1f.c s_fabsf.c s_fdim.c \ s_finite.c s_finitef.c \ s_floor.c s_floorf.c s_floorl.c s_fma.c s_fmaf.c \ @@ -93,7 +94,7 @@ INCS= fenv.h math.h MAN= acos.3 acosh.3 asin.3 asinh.3 atan.3 atan2.3 atanh.3 ceil.3 \ - cimag.3 copysign.3 cos.3 cosh.3 erf.3 exp.3 fabs.3 fdim.3 \ + cimag.3 copysign.3 cos.3 cosh.3 csqrt.3 erf.3 exp.3 fabs.3 fdim.3 \ feclearexcept.3 feenableexcept.3 fegetenv.3 \ fegetround.3 fenv.3 floor.3 \ fma.3 fmax.3 fmod.3 hypot.3 ieee.3 ieee_test.3 ilogb.3 j0.3 \ @@ -114,6 +115,7 @@ MLINKS+=copysign.3 copysignf.3 copysign.3 copysignl.3 MLINKS+=cos.3 cosf.3 MLINKS+=cosh.3 coshf.3 +MLINKS+=csqrt.3 csqrtf.3 MLINKS+=erf.3 erfc.3 erf.3 erff.3 erf.3 erfcf.3 MLINKS+=exp.3 expm1.3 exp.3 log.3 exp.3 log10.3 exp.3 log1p.3 exp.3 pow.3 \ exp.3 exp2.3 exp.3 exp2f.3 exp.3 expf.3 \ ==== //depot/projects/e500/lib/msun/Symbol.map#3 (text) ==== @@ -1,6 +1,8 @@ /* - * $FreeBSD: src/lib/msun/Symbol.map,v 1.6 2007/12/14 03:08:10 das Exp $ + * $FreeBSD: src/lib/msun/Symbol.map,v 1.7 2007/12/15 08:39:03 das Exp $ */ + +/* 7.0-CURRENT */ FBSD_1.0 { __fe_dfl_env; tgamma; @@ -60,8 +62,6 @@ asinhf; atan; atanf; - carg; - cargf; cbrt; cbrtf; ceil; @@ -183,3 +183,11 @@ drem; dremf; }; + +/* First added in 8.0-CURRENT */ +FBSD_1.1 { + carg; + cargf; + csqrt; + csqrtf; +}; ==== //depot/projects/e500/share/man/man3/tgmath.3#2 (text+ko) ==== @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man3/tgmath.3,v 1.2 2005/01/13 11:22:29 ru Exp $ +.\" $FreeBSD: src/share/man/man3/tgmath.3,v 1.3 2007/12/15 02:40:10 das Exp $ .\" .Dd August 14, 2004 .Os @@ -101,6 +101,7 @@ .It Fn exp Ta Fn exp Ta Fn cexp .It Fn log Ta Fn log Ta Fn clog .It Fn pow Ta Fn pow Ta Fn cpow +.It Fn sqrt Ta Fn sqrt Ta Fn csqrt .It Fn fabs Ta Fn fabs Ta Fn cabs .El .Pp ==== //depot/projects/e500/share/man/man4/Makefile#8 (text+ko) ==== @@ -1,5 +1,5 @@ # @(#)Makefile 8.1 (Berkeley) 6/18/93 -# $FreeBSD: src/share/man/man4/Makefile,v 1.399 2007/11/13 11:23:52 ru Exp $ +# $FreeBSD: src/share/man/man4/Makefile,v 1.400 2007/12/15 00:56:15 scottl Exp $ MAN= aac.4 \ acpi.4 \ @@ -103,6 +103,7 @@ hme.4 \ ${_hptiop.4} \ ${_hptmv.4} \ + ${_hptrr.4} \ hwpmc.4 \ ichsmb.4 \ ${_ichwd.4} \ @@ -547,6 +548,7 @@ _coretemp.4= coretemp.4 _hptiop.4= hptiop.4 _hptmv.4= hptmv.4 +_hptrr.4= hptrr.4 _ichwd.4= ichwd.4 _if_nfe.4= if_nfe.4 _if_nve.4= if_nve.4 ==== //depot/projects/e500/sys/amd64/conf/GENERIC#8 (text+ko) ==== @@ -16,7 +16,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.489 2007/12/02 20:40:30 rwatson Exp $ +# $FreeBSD: src/sys/amd64/conf/GENERIC,v 1.490 2007/12/15 00:56:16 scottl Exp $ cpu HAMMER ident GENERIC @@ -131,6 +131,7 @@ device ciss # Compaq Smart RAID 5* device dpt # DPT Smartcache III, IV - See NOTES for options device hptmv # Highpoint RocketRAID 182x +device hptrr # Highpoint RocketRAID 17xx, 22xx, 23xx, 25xx device rr232x # Highpoint RocketRAID 232x device iir # Intel Integrated RAID device ips # IBM (Adaptec) ServeRAID ==== //depot/projects/e500/sys/amd64/conf/NOTES#5 (text+ko) ==== @@ -4,7 +4,7 @@ # This file contains machine dependent kernel configuration notes. For # machine independent notes, look in /sys/conf/NOTES. # -# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.72 2007/12/01 20:07:44 phk Exp $ +# $FreeBSD: src/sys/amd64/conf/NOTES,v 1.73 2007/12/15 00:56:16 scottl Exp $ # # @@ -372,11 +372,15 @@ device aacp # SCSI Passthrough interface (optional, CAM required) # -# Highpoint RocketRAID 182x. This is really just software RAID on a -# Marvell SATA chip. +# Highpoint RocketRAID 182x. device hptmv # +# Highpoint RocketRAID. Supports RR172x, RR222x, RR2240, RR232x, RR2340, +# RR2210, RR174x, RR2522, RR231x, RR230x. +device hptrr + +# # Highpoint RocketRAID 232x. This is software RAID but with hardware # acceleration assistance for RAID_5. device rr232x ==== //depot/projects/e500/sys/conf/files.amd64#6 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.amd64,v 1.116 2007/12/09 21:00:36 alc Exp $ +# $FreeBSD: src/sys/conf/files.amd64,v 1.117 2007/12/15 00:56:15 scottl Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -72,6 +72,11 @@ dependency "$S/dev/hptmv/amd64-elf.raid.o.uu" \ compile-with "uudecode < $S/dev/hptmv/amd64-elf.raid.o.uu" \ no-implicit-rule +hptrr_lib.o optional hptrr \ + dependency "$S/dev/hptrr/amd64-elf.hptrr_lib.o.uu" \ + compile-with "uudecode < $S/dev/hptrr/amd64-elf.hptrr_lib.o.uu" \ + no-implicit-rule +# rr232x_lib.o optional rr232x \ dependency "$S/dev/rr232x/amd64-elf.rr232x_lib.o.uu" \ compile-with "uudecode < $S/dev/rr232x/amd64-elf.rr232x_lib.o.uu" \ @@ -183,6 +188,9 @@ dev/hptmv/gui_lib.c optional hptmv dev/hptmv/hptproc.c optional hptmv dev/hptmv/ioctl.c optional hptmv +dev/hptrr/hptrr_os_bsd.c optional hptrr +dev/hptrr/hptrr_osm_bsd.c optional hptrr +dev/hptrr/hptrr_config.c optional hptrr dev/hwpmc/hwpmc_amd.c optional hwpmc dev/hwpmc/hwpmc_piv.c optional hwpmc dev/hwpmc/hwpmc_x86.c optional hwpmc ==== //depot/projects/e500/sys/conf/files.i386#6 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.i386,v 1.589 2007/12/09 21:00:36 alc Exp $ +# $FreeBSD: src/sys/conf/files.i386,v 1.590 2007/12/15 00:56:15 scottl Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and @@ -77,12 +77,16 @@ compile-with "uudecode < $S/dev/hptmv/i386-elf.raid.o.uu" \ no-implicit-rule # +hptrr_lib.o optional hptrr \ + dependency "$S/dev/hptrr/i386-elf.hptrr_lib.o.uu" \ + compile-with "uudecode < $S/dev/hptrr/i386-elf.hptrr_lib.o.uu" \ + no-implicit-rule +# rr232x_lib.o optional rr232x \ dependency "$S/dev/rr232x/i386-elf.rr232x_lib.o.uu" \ compile-with "uudecode < $S/dev/rr232x/i386-elf.rr232x_lib.o.uu" \ no-implicit-rule # -# compat/linprocfs/linprocfs.c optional linprocfs compat/linsysfs/linsysfs.c optional linsysfs compat/linux/linux_emul.c optional compat_linux @@ -194,6 +198,9 @@ dev/hptmv/gui_lib.c optional hptmv dev/hptmv/hptproc.c optional hptmv dev/hptmv/ioctl.c optional hptmv +dev/hptrr/hptrr_os_bsd.c optional hptrr +dev/hptrr/hptrr_osm_bsd.c optional hptrr +dev/hptrr/hptrr_config.c optional hptrr dev/hwpmc/hwpmc_amd.c optional hwpmc dev/hwpmc/hwpmc_pentium.c optional hwpmc dev/hwpmc/hwpmc_piv.c optional hwpmc ==== //depot/projects/e500/sys/conf/files.powerpc#11 (text+ko) ==== @@ -1,7 +1,7 @@ # This file tells config what files go into building a kernel, # files marked standard are always included. # -# $FreeBSD: src/sys/conf/files.powerpc,v 1.69 2007/12/14 23:47:39 marcel Exp $ +# $FreeBSD: src/sys/conf/files.powerpc,v 1.70 2007/12/16 01:02:47 marcel Exp $ # # The long compile-with and dependency lines are required because of # limitations in config: backslash-newline doesn't work in strings, and ==== //depot/projects/e500/sys/conf/options#8 (text+ko) ==== @@ -1,4 +1,4 @@ -# $FreeBSD: src/sys/conf/options,v 1.611 2007/12/06 02:32:42 marcel Exp $ +# $FreeBSD: src/sys/conf/options,v 1.613 2007/12/15 23:13:31 jeff Exp $ # # On the handling of kernel options # @@ -540,7 +540,6 @@ MUTEX_NOINLINE opt_global.h LOCK_PROFILING opt_global.h LOCK_PROFILING_FAST opt_global.h -LOCK_PROFILING_SHARED opt_global.h MSIZE opt_global.h REGRESSION opt_global.h RESTARTABLE_PANICS opt_global.h @@ -752,3 +751,6 @@ # Interrupt filtering INTR_FILTER opt_global.h + +#Disable code to dispatch tcp offloading +TCP_OFFLOAD_DISABLE opt_inet.h ==== //depot/projects/e500/sys/conf/options.powerpc#3 (text+ko) ==== @@ -1,9 +1,8 @@ -# $FreeBSD: src/sys/conf/options.powerpc,v 1.9 2004/06/25 13:44:34 grehan Exp $ +# $FreeBSD: src/sys/conf/options.powerpc,v 1.10 2007/12/16 00:45:56 marcel Exp $ # Options specific to the powerpc platform kernels AIM opt_global.h E500 opt_global.h -IPKDB GFB_DEBUG opt_gfb.h GFB_NO_FONT_LOADING opt_gfb.h ==== //depot/projects/e500/sys/dev/cxgb/cxgb_adapter.h#5 (text+ko) ==== @@ -26,7 +26,7 @@ POSSIBILITY OF SUCH DAMAGE. -$FreeBSD: src/sys/dev/cxgb/cxgb_adapter.h,v 1.20 2007/09/10 00:59:51 kmacy Exp $ +$FreeBSD: src/sys/dev/cxgb/cxgb_adapter.h,v 1.21 2007/12/15 21:54:58 kmacy Exp $ ***************************************************************************/ @@ -55,12 +55,14 @@ #ifdef CONFIG_DEFINED #include <cxgb_osdep.h> -#include <ulp/toecore/toedev.h> +#include <t3cdev.h> #include <sys/mbufq.h> +#include <ulp/toecore/cxgb_toedev.h> #else #include <dev/cxgb/cxgb_osdep.h> +#include <dev/cxgb/t3cdev.h> #include <dev/cxgb/sys/mbufq.h> -#include <dev/cxgb/ulp/toecore/toedev.h> +#include <dev/cxgb/ulp/toecore/cxgb_toedev.h> #endif #define USE_SX @@ -371,7 +373,7 @@ struct port_info port[MAX_NPORTS]; device_t portdev[MAX_NPORTS]; - struct toedev tdev; + struct t3cdev tdev; char fw_version[64]; uint32_t open_device_map; uint32_t registered_device_map; @@ -497,7 +499,7 @@ void t3_os_link_changed(adapter_t *adapter, int port_id, int link_status, int speed, int duplex, int fc); void t3_sge_err_intr_handler(adapter_t *adapter); -int t3_offload_tx(struct toedev *, struct mbuf *); +int t3_offload_tx(struct t3cdev *, struct mbuf *); void t3_os_ext_intr_handler(adapter_t *adapter); void t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[]); int t3_mgmt_tx(adapter_t *adap, struct mbuf *m); @@ -554,7 +556,7 @@ } static __inline struct adapter * -tdev2adap(struct toedev *d) +tdev2adap(struct t3cdev *d) { return container_of(d, struct adapter, tdev); } ==== //depot/projects/e500/sys/dev/cxgb/cxgb_include.h#3 (text+ko) ==== @@ -1,8 +1,9 @@ /* - * $FreeBSD: src/sys/dev/cxgb/cxgb_include.h,v 1.2 2007/09/10 00:59:51 kmacy Exp $ + * $FreeBSD: src/sys/dev/cxgb/cxgb_include.h,v 1.3 2007/12/15 21:54:58 kmacy Exp $ */ + #ifdef CONFIG_DEFINED #include <cxgb_osdep.h> #include <common/cxgb_common.h> @@ -14,11 +15,9 @@ #include <common/cxgb_sge_defs.h> #include <common/cxgb_firmware_exports.h> #include <sys/mvec.h> -#include <ulp/toecore/toedev.h> #include <sys/mbufq.h> #include <common/jhash.h> - - +#include <ulp/toecore/cxgb_toedev.h> #else #include <dev/cxgb/cxgb_osdep.h> #include <dev/cxgb/common/cxgb_common.h> @@ -31,7 +30,9 @@ #include <dev/cxgb/common/cxgb_firmware_exports.h> #include <dev/cxgb/sys/mvec.h> -#include <dev/cxgb/ulp/toecore/toedev.h> #include <dev/cxgb/sys/mbufq.h> #include <dev/cxgb/common/jhash.h> +#include <dev/cxgb/ulp/toecore/cxgb_toedev.h> #endif + + ==== //depot/projects/e500/sys/dev/cxgb/cxgb_l2t.c#3 (text+ko) ==== @@ -28,7 +28,7 @@ ***************************************************************************/ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/dev/cxgb/cxgb_l2t.c,v 1.3 2007/08/17 05:57:03 kmacy Exp $"); +__FBSDID("$FreeBSD: src/sys/dev/cxgb/cxgb_l2t.c,v 1.4 2007/12/15 21:54:58 kmacy Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -59,7 +59,7 @@ #define VLAN_NONE 0xfff #define SDL(s) ((struct sockaddr_dl *)s) -#define RT_ENADDR(rt) ((u_char *)LLADDR(SDL((rt)))) +#define RT_ENADDR(sa) ((u_char *)LLADDR(SDL((sa)))) #define rt_expire rt_rmx.rmx_expire struct llinfo_arp { @@ -103,11 +103,8 @@ RT_ADDREF(rt); RT_UNLOCK(rt); - if (e->neigh) { - RT_LOCK(e->neigh); - RT_REMREF(e->neigh); - RT_UNLOCK(e->neigh); - } + if (e->neigh) + RTFREE(e->neigh); e->neigh = rt; } @@ -117,7 +114,7 @@ * entry locked. */ static int -setup_l2e_send_pending(struct toedev *dev, struct mbuf *m, +setup_l2e_send_pending(struct t3cdev *dev, struct mbuf *m, struct l2t_entry *e) { struct cpl_l2t_write_req *req; @@ -130,13 +127,14 @@ * XXX MH_ALIGN */ req = mtod(m, struct cpl_l2t_write_req *); + m->m_pkthdr.len = m->m_len = sizeof(*req); + req->wr.wr_hi = htonl(V_WR_OP(FW_WROPCODE_FORWARD)); OPCODE_TID(req) = htonl(MK_OPCODE_TID(CPL_L2T_WRITE_REQ, e->idx)); req->params = htonl(V_L2T_W_IDX(e->idx) | V_L2T_W_IFF(e->smt_idx) | V_L2T_W_VLAN(e->vlan & EVL_VLID_MASK) | V_L2T_W_PRIO(vlan_prio(e))); - memcpy(e->dmac, RT_ENADDR(e->neigh), sizeof(e->dmac)); memcpy(req->dst_mac, e->dmac, sizeof(req->dst_mac)); m_set_priority(m, CPL_PRIORITY_CONTROL); cxgb_ofld_send(dev, m); @@ -168,21 +166,24 @@ } int -t3_l2t_send_slow(struct toedev *dev, struct mbuf *m, - struct l2t_entry *e) +t3_l2t_send_slow(struct t3cdev *dev, struct mbuf *m, struct l2t_entry *e) { - struct rtentry *rt; - struct mbuf *m0; + struct rtentry *rt = e->neigh; + struct sockaddr_in sin; + + bzero(&sin, sizeof(struct sockaddr_in)); + sin.sin_family = AF_INET; + sin.sin_len = sizeof(struct sockaddr_in); + sin.sin_addr.s_addr = e->addr; + + - if ((m0 = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) - return (ENOMEM); - - rt = e->neigh; + printf("send slow on rt=%p eaddr=0x%08x\n", rt, e->addr); again: switch (e->state) { case L2T_STATE_STALE: /* entry is stale, kick off revalidation */ - arpresolve(rt->rt_ifp, rt, m0, rt->rt_gateway, RT_ENADDR(rt)); + arpresolve(rt->rt_ifp, rt, NULL, (struct sockaddr *)&sin, e->dmac); mtx_lock(&e->lock); if (e->state == L2T_STATE_STALE) e->state = L2T_STATE_VALID; @@ -197,9 +198,8 @@ } arpq_enqueue(e, m); mtx_unlock(&e->lock); - - if ((m0 = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) - return (ENOMEM); + printf("enqueueing arp request\n"); + /* * Only the first packet added to the arpq should kick off * resolution. However, because the m_gethdr below can fail, @@ -208,7 +208,13 @@ * A better way would be to use a work request to retry L2T * entries when there's no memory. */ - if (arpresolve(rt->rt_ifp, rt, m0, rt->rt_gateway, RT_ENADDR(rt)) == 0) { + printf("doing arpresolve on 0x%x \n", e->addr); + if (arpresolve(rt->rt_ifp, rt, NULL, (struct sockaddr *)&sin, e->dmac) == 0) { + printf("mac=%x:%x:%x:%x:%x:%x\n", + e->dmac[0], e->dmac[1], e->dmac[2], e->dmac[3], e->dmac[4], e->dmac[5]); + + if ((m = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) + return (ENOMEM); mtx_lock(&e->lock); if (e->arpq_head) @@ -216,16 +222,21 @@ else m_freem(m); mtx_unlock(&e->lock); - } + } else + printf("arpresolve returned non-zero\n"); } return 0; } void -t3_l2t_send_event(struct toedev *dev, struct l2t_entry *e) +t3_l2t_send_event(struct t3cdev *dev, struct l2t_entry *e) { struct rtentry *rt; struct mbuf *m0; + struct sockaddr_in sin; + sin.sin_family = AF_INET; + sin.sin_len = sizeof(struct sockaddr_in); + sin.sin_addr.s_addr = e->addr; if ((m0 = m_gethdr(M_NOWAIT, MT_DATA)) == NULL) return; @@ -234,7 +245,7 @@ again: switch (e->state) { case L2T_STATE_STALE: /* entry is stale, kick off revalidation */ - arpresolve(rt->rt_ifp, rt, m0, rt->rt_gateway, RT_ENADDR(rt)); + arpresolve(rt->rt_ifp, rt, m0, (struct sockaddr *)&sin, e->dmac); mtx_lock(&e->lock); if (e->state == L2T_STATE_STALE) { e->state = L2T_STATE_VALID; @@ -261,7 +272,7 @@ * A better way would be to use a work request to retry L2T * entries when there's no memory. */ - arpresolve(rt->rt_ifp, rt, m0, rt->rt_gateway, RT_ENADDR(rt)); + arpresolve(rt->rt_ifp, rt, m0, (struct sockaddr *)&sin, e->dmac); } return; @@ -301,6 +312,7 @@ } e->state = L2T_STATE_UNUSED; } + return e; } @@ -318,19 +330,21 @@ void t3_l2e_free(struct l2t_data *d, struct l2t_entry *e) { + struct rtentry *rt = NULL; + mtx_lock(&e->lock); if (atomic_load_acq_int(&e->refcnt) == 0) { /* hasn't been recycled */ - if (e->neigh) { - RT_LOCK(e->neigh); - RT_REMREF(e->neigh); - RT_UNLOCK(e->neigh); - e->neigh = NULL; - } + rt = e->neigh; + e->neigh = NULL; } + mtx_unlock(&e->lock); atomic_add_int(&d->nfree, 1); + if (rt) + RTFREE(rt); } + /* * Update an L2T entry that was previously used for the same next hop as neigh. * Must be called with softirqs disabled. @@ -346,7 +360,7 @@ if (neigh != e->neigh) neigh_replace(e, neigh); - if (memcmp(e->dmac, RT_ENADDR(neigh), sizeof(e->dmac)) || + if (memcmp(e->dmac, RT_ENADDR(neigh->rt_gateway), sizeof(e->dmac)) || (neigh->rt_expire > time_uptime)) e->state = L2T_STATE_RESOLVING; else if (la->la_hold == NULL) @@ -357,14 +371,15 @@ } struct l2t_entry * -t3_l2t_get(struct toedev *dev, struct rtentry *neigh, - unsigned int smt_idx) +t3_l2t_get(struct t3cdev *dev, struct rtentry *neigh, struct ifnet *ifp, + struct sockaddr *sa) { struct l2t_entry *e; struct l2t_data *d = L2DATA(dev); - u32 addr = *(u32 *) rt_key(neigh); + u32 addr = ((struct sockaddr_in *)sa)->sin_addr.s_addr; int ifidx = neigh->rt_ifp->if_index; int hash = arp_hash(addr, ifidx, d); + unsigned int smt_idx = ((struct port_info *)ifp->if_softc)->port_id; rw_wlock(&d->lock); for (e = d->l2tab[hash].first; e; e = e->next) @@ -379,14 +394,21 @@ /* Need to allocate a new entry */ e = alloc_l2e(d); if (e) { + printf("initializing new entry\n"); + mtx_lock(&e->lock); /* avoid race with t3_l2t_free */ e->next = d->l2tab[hash].first; d->l2tab[hash].first = e; + rw_wunlock(&d->lock); + e->state = L2T_STATE_RESOLVING; e->addr = addr; e->ifindex = ifidx; e->smt_idx = smt_idx; atomic_store_rel_int(&e->refcnt, 1); + e->neigh = NULL; + + neigh_replace(e, neigh); #ifdef notyet /* @@ -398,7 +420,10 @@ #endif e->vlan = VLAN_NONE; mtx_unlock(&e->lock); + + return (e); } + done: rw_wunlock(&d->lock); return e; @@ -413,7 +438,7 @@ * handler. */ static void -handle_failed_resolution(struct toedev *dev, struct mbuf *arpq) +handle_failed_resolution(struct t3cdev *dev, struct mbuf *arpq) { while (arpq) { @@ -433,21 +458,20 @@ } -#if defined(NETEVENT) || !defined(CONFIG_CHELSIO_T3_MODULE) -/* - * Called when the host's ARP layer makes a change to some entry that is - * loaded into the HW L2 table. - */ void -t3_l2t_update(struct toedev *dev, struct rtentry *neigh) +t3_l2t_update(struct t3cdev *dev, struct rtentry *neigh, struct sockaddr *sa) { struct l2t_entry *e; struct mbuf *arpq = NULL; struct l2t_data *d = L2DATA(dev); - u32 addr = *(u32 *) rt_key(neigh); + u32 addr = *(u32 *) &((struct sockaddr_in *)sa)->sin_addr; int ifidx = neigh->rt_ifp->if_index; int hash = arp_hash(addr, ifidx, d); struct llinfo_arp *la; + u_char edst[ETHER_ADDR_LEN]; + + + printf("t3_l2t_update called with arp info\n"); rw_rlock(&d->lock); for (e = d->l2tab[hash].first; e; e = e->next) @@ -456,10 +480,16 @@ goto found; } rw_runlock(&d->lock); + printf("addr=0x%08x not found\n", addr); return; found: + printf("found 0x%08x\n", addr); + arpresolve(neigh->rt_ifp, neigh, NULL, sa, edst); + rw_runlock(&d->lock); + memcpy(e->dmac, edst, ETHER_ADDR_LEN); + if (atomic_load_acq_int(&e->refcnt)) { if (neigh != e->neigh) neigh_replace(e, neigh); @@ -470,85 +500,19 @@ if (la->la_asked >= 5 /* arp_maxtries */) { arpq = e->arpq_head; e->arpq_head = e->arpq_tail = NULL; - } else if (la->la_hold == NULL) + } else setup_l2e_send_pending(dev, NULL, e); } else { - e->state = (la->la_hold == NULL) ? - L2T_STATE_VALID : L2T_STATE_STALE; - if (memcmp(e->dmac, RT_ENADDR(neigh), 6)) - setup_l2e_send_pending(dev, NULL, e); - } - } - mtx_unlock(&e->lock); - - if (arpq) - handle_failed_resolution(dev, arpq); -} -#else -/* - * Called from a kprobe, interrupts are off. - */ -void -t3_l2t_update(struct toedev *dev, struct rtentry *neigh) -{ - struct l2t_entry *e; - struct l2t_data *d = L2DATA(dev); - u32 addr = *(u32 *) rt_key(neigh); - int ifidx = neigh->dev->ifindex; - int hash = arp_hash(addr, ifidx, d); - - rw_rlock(&d->lock); - for (e = d->l2tab[hash].first; e; e = e->next) - if (e->addr == addr && e->ifindex == ifidx) { - mtx_lock(&e->lock); - if (atomic_load_acq_int(&e->refcnt)) { - if (neigh != e->neigh) - neigh_replace(e, neigh); - e->tdev = dev; - mod_timer(&e->update_timer, jiffies + 1); - } - mtx_unlock(&e->lock); - break; - } - rw_runlock(&d->lock); -} - -static void -update_timer_cb(unsigned long data) -{ - struct mbuf *arpq = NULL; - struct l2t_entry *e = (struct l2t_entry *)data; - struct rtentry *neigh = e->neigh; - struct toedev *dev = e->tdev; - - barrier(); - if (!atomic_load_acq_int(&e->refcnt)) - return; - - rw_rlock(&neigh->lock); - mtx_lock(&e->lock); - - if (atomic_load_acq_int(&e->refcnt)) { - if (e->state == L2T_STATE_RESOLVING) { - if (neigh->nud_state & NUD_FAILED) { - arpq = e->arpq_head; - e->arpq_head = e->arpq_tail = NULL; - } else if (neigh_is_connected(neigh) && e->arpq_head) - setup_l2e_send_pending(dev, NULL, e); - } else { - e->state = neigh_is_connected(neigh) ? - L2T_STATE_VALID : L2T_STATE_STALE; - if (memcmp(e->dmac, RT_ENADDR(neigh), sizeof(e->dmac))) + e->state = L2T_STATE_VALID; + if (memcmp(e->dmac, RT_ENADDR(neigh->rt_gateway), 6)) setup_l2e_send_pending(dev, NULL, e); } } mtx_unlock(&e->lock); - rw_runlock(&neigh->lock); if (arpq) handle_failed_resolution(dev, arpq); } -#endif struct l2t_data * t3_init_l2t(unsigned int l2t_capacity) @@ -570,12 +534,6 @@ d->l2tab[i].state = L2T_STATE_UNUSED; mtx_init(&d->l2tab[i].lock, "L2TAB", NULL, MTX_DEF); atomic_store_rel_int(&d->l2tab[i].refcnt, 0); -#ifndef NETEVENT -#ifdef CONFIG_CHELSIO_T3_MODULE - setup_timer(&d->l2tab[i].update_timer, update_timer_cb, - (unsigned long)&d->l2tab[i]); -#endif -#endif } return d; } @@ -583,86 +541,6 @@ void t3_free_l2t(struct l2t_data *d) { -#ifndef NETEVENT -#ifdef CONFIG_CHELSIO_T3_MODULE - int i; - - /* Stop all L2T timers */ - for (i = 0; i < d->nentries; ++i) - del_timer_sync(&d->l2tab[i].update_timer); -#endif -#endif cxgb_free_mem(d); } -#ifdef CONFIG_PROC_FS -#include <linux/module.h> -#include <linux/proc_fs.h> -#include <linux/seq_file.h> - -static inline void * -l2t_get_idx(struct seq_file *seq, loff_t pos) -{ - struct l2t_data *d = seq->private; - - return pos >= d->nentries ? NULL : &d->l2tab[pos]; -} - -static void * -l2t_seq_start(struct seq_file *seq, loff_t *pos) -{ - return *pos ? l2t_get_idx(seq, *pos) : SEQ_START_TOKEN; -} - -static void * -l2t_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ - v = l2t_get_idx(seq, *pos + 1); - if (v) - ++*pos; - return v; -} - -static void -l2t_seq_stop(struct seq_file *seq, void *v) -{ -} - -static char -l2e_state(const struct l2t_entry *e) -{ - switch (e->state) { - case L2T_STATE_VALID: return 'V'; /* valid, fast-path entry */ - case L2T_STATE_STALE: return 'S'; /* needs revalidation, but usable */ - case L2T_STATE_RESOLVING: - return e->arpq_head ? 'A' : 'R'; - default: - return 'U'; - } -} - -static int -l2t_seq_show(struct seq_file *seq, void *v) -{ - if (v == SEQ_START_TOKEN) - seq_puts(seq, "Index IP address Ethernet address VLAN " - "Prio State Users SMTIDX Port\n"); - else { - char ip[20]; - struct l2t_entry *e = v; - - mtx_lock(&e->lock); - sprintf(ip, "%u.%u.%u.%u", NIPQUAD(e->addr)); - seq_printf(seq, "%-5u %-15s %02x:%02x:%02x:%02x:%02x:%02x %4d" - " %3u %c %7u %4u %s\n", - e->idx, ip, e->dmac[0], e->dmac[1], e->dmac[2], - e->dmac[3], e->dmac[4], e->dmac[5], - e->vlan & EVL_VLID_MASK, vlan_prio(e), - l2e_state(e), atomic_load_acq_int(&e->refcnt), e->smt_idx, - e->neigh ? e->neigh->dev->name : ""); - mtx_unlock(&e->lock); - } - return 0; -} - -#endif ==== //depot/projects/e500/sys/dev/cxgb/cxgb_l2t.h#3 (text+ko) ==== @@ -25,13 +25,13 @@ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200712160109.lBG19x2k088229>