Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Jun 2004 05:38:17 GMT
From:      Robert Watson <rwatson@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 55979 for review
Message-ID:  <200406280538.i5S5cHjK036203@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=55979

Change 55979 by rwatson@rwatson_tislabs on 2004/06/28 05:37:27

	Integrate netperf_socket.  Includes ip_divert fix from phk.

Affected files ...

.. //depot/projects/netperf_socket/sys/conf/files#33 integrate
.. //depot/projects/netperf_socket/sys/conf/kern.post.mk#8 integrate
.. //depot/projects/netperf_socket/sys/conf/kern.pre.mk#12 integrate
.. //depot/projects/netperf_socket/sys/dev/acpica/acpi.c#29 integrate
.. //depot/projects/netperf_socket/sys/dev/usb/Makefile.usbdevs#2 delete
.. //depot/projects/netperf_socket/sys/dev/usb/devlist2h.awk#3 delete
.. //depot/projects/netperf_socket/sys/dev/usb/usbdevs#15 integrate
.. //depot/projects/netperf_socket/sys/dev/usb/usbdevs.h#15 delete
.. //depot/projects/netperf_socket/sys/dev/usb/usbdevs_data.h#15 delete
.. //depot/projects/netperf_socket/sys/geom/geom_disk.c#5 integrate
.. //depot/projects/netperf_socket/sys/i386/acpica/acpi_machdep.c#7 integrate
.. //depot/projects/netperf_socket/sys/i386/i386/mem.c#6 integrate
.. //depot/projects/netperf_socket/sys/i386/include/float.h#4 integrate
.. //depot/projects/netperf_socket/sys/i386/include/proc.h#3 integrate
.. //depot/projects/netperf_socket/sys/kern/subr_bus.c#9 integrate
.. //depot/projects/netperf_socket/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#8 integrate
.. //depot/projects/netperf_socket/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c#5 integrate
.. //depot/projects/netperf_socket/sys/netinet/ip_divert.c#10 integrate
.. //depot/projects/netperf_socket/sys/sparc64/include/bus.h#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/include/bus_private.h#2 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/bus_machdep.c#4 integrate
.. //depot/projects/netperf_socket/sys/sparc64/sparc64/iommu.c#5 integrate

Differences ...

==== //depot/projects/netperf_socket/sys/conf/files#33 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/files,v 1.912 2004/06/27 02:36:33 rwatson Exp $
+# $FreeBSD: src/sys/conf/files,v 1.913 2004/06/27 20:16:56 imp Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -40,17 +40,17 @@
 	compile-with	"CC=${CC} AWK=${AWK} sh $S/tools/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/emu10k1-alsa.h emu10k1-alsa%diked.h" \
 	no-obj no-implicit-rule before-depend				   \
 	clean		"emu10k1-alsa%diked.h"
-miidevs.h			standard				   \
+miidevs.h			optional mii				   \
 	dependency	"$S/tools/miidevs2h.awk $S/dev/mii/miidevs"	   \
 	compile-with	"${AWK} -f $S/tools/miidevs2h.awk $S/dev/mii/miidevs" \
 	no-obj no-implicit-rule before-depend				   \
 	clean		"miidevs.h"
-pccarddevs.h			standard				   \
+pccarddevs.h			optional pccard				   \
 	dependency	"$S/tools/pccarddevs2h.awk $S/dev/pccard/pccarddevs" \
 	compile-with	"${AWK} -f $S/tools/pccarddevs2h.awk $S/dev/pccard/pccarddevs" \
 	no-obj no-implicit-rule before-depend				   \
 	clean		"pccarddevs.h"
-usbdevs.h			standard				   \
+usbdevs.h			optional usb				   \
 	dependency	"$S/tools/usbdevs2h.awk $S/dev/usb/usbdevs" \
 	compile-with	"${AWK} -f $S/tools/usbdevs2h.awk $S/dev/usb/usbdevs" \
 	no-obj no-implicit-rule before-depend				   \

==== //depot/projects/netperf_socket/sys/conf/kern.post.mk#8 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/kern.post.mk,v 1.67 2004/06/26 06:02:06 imp Exp $
+# $FreeBSD: src/sys/conf/kern.post.mk,v 1.68 2004/06/27 23:03:43 imp Exp $
 
 # Part of a unified Makefile for building kernels.  This part includes all
 # the definitions that need to be after all the % directives except %RULES
@@ -130,17 +130,14 @@
 	if [ -f .depend ]; then mv .depend .olddep; fi
 	${MAKE} _kernel-depend
 
-# XXX this belongs elsewhere (inside GEN_CFILES if possible).
-GEN_M_CFILES=	${MFILES:T:S/.m$/.c/}
-
 # The argument list can be very long, so use make -V and xargs to
 # pass it to mkdep.
-_kernel-depend: assym.s vnode_if.h \
-	    ${BEFORE_DEPEND} ${CFILES} ${SYSTEM_CFILES} ${GEN_CFILES} \
-	    ${GEN_M_CFILES} ${SFILES} ${MFILES:T:S/.m$/.h/}
+_kernel-depend: assym.s vnode_if.h ${BEFORE_DEPEND} ${CFILES} \
+	    ${SYSTEM_CFILES} ${GEN_CFILES} ${SFILES} \
+	    ${MFILES:T:S/.m$/.h/}
 	if [ -f .olddep ]; then mv .olddep .depend; fi
 	rm -f .newdep
-	${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES -V GEN_M_CFILES | \
+	${MAKE} -V CFILES -V SYSTEM_CFILES -V GEN_CFILES | \
 	    MKDEP_CPP="${CC} -E" CC="${CC}" xargs mkdep -a -f .newdep ${CFLAGS}
 	${MAKE} -V SFILES | \
 	    MKDEP_CPP="${CC} -E" xargs mkdep -a -f .newdep ${ASM_CFLAGS}

==== //depot/projects/netperf_socket/sys/conf/kern.pre.mk#12 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.53 2004/06/13 17:29:06 mlaier Exp $
+# $FreeBSD: src/sys/conf/kern.pre.mk,v 1.54 2004/06/27 23:03:43 imp Exp $
 
 # Part of a unified Makefile for building kernels.  This part contains all
 # of the definitions that need to be before %BEFORE_DEPEND.
@@ -117,7 +117,7 @@
 
 NORMAL_LINT=	${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC}
 
-GEN_CFILES= $S/$M/$M/genassym.c
+GEN_CFILES= $S/$M/$M/genassym.c ${MFILES:T:S/.m$/.c/}
 SYSTEM_CFILES= config.c env.c hints.c majors.c vnode_if.c
 SYSTEM_DEP= Makefile ${SYSTEM_OBJS}
 SYSTEM_OBJS= locore.o ${MDOBJS} ${OBJS}

==== //depot/projects/netperf_socket/sys/dev/acpica/acpi.c#29 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *	$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.166 2004/06/27 13:04:19 imp Exp $
+ *	$FreeBSD: src/sys/dev/acpica/acpi.c,v 1.167 2004/06/28 03:36:37 imp Exp $
  */
 
 #include "opt_acpi.h"
@@ -893,7 +893,7 @@
 
 	/* Copy the bus tag and handle from the pre-allocated resource. */
 	rman_set_bustag(res, rman_get_bustag(rle->res));
-	rman_set_bushandle(res, rman_get_bushandle(res));
+	rman_set_bushandle(res, rman_get_start(res));
 
 	/* If requested, activate the resource using the parent's method. */
 	if (flags & RF_ACTIVE)

==== //depot/projects/netperf_socket/sys/dev/usb/usbdevs#15 (text+ko) ====

@@ -1,4 +1,4 @@
-$FreeBSD: src/sys/dev/usb/usbdevs,v 1.183 2004/06/24 05:05:56 jb Exp $
+$FreeBSD: src/sys/dev/usb/usbdevs,v 1.184 2004/06/27 17:27:04 alex Exp $
 
 /*
  * Copyright (c) 1998, 1999, 2000 The NetBSD Foundation, Inc.
@@ -600,7 +600,8 @@
 product DALLAS J6502		0x4201	J-6502 speakers
 
 /* Dell products */
-product DELL BC02		0x8000	Dell BC02 Bluetooth USB Adapter
+product DELL PORT		0x0058	Port Replicator
+product DELL BC02		0x8000	BC02 Bluetooth USB Adapter
 
 /* Delorme Paublishing products */
 product DELORME EARTHMATE	0x0100	Earthmate GPS

==== //depot/projects/netperf_socket/sys/geom/geom_disk.c#5 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/geom/geom_disk.c,v 1.87 2004/05/30 18:04:06 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/geom/geom_disk.c,v 1.88 2004/06/27 20:53:20 phk Exp $");
 
 #include "opt_geom.h"
 
@@ -404,7 +404,9 @@
 
 	g_cancel_event(dp);
 	dp->d_destroyed = 1;
-	g_post_event(g_disk_destroy, dp, M_WAITOK, NULL);
+	if (dp->d_devstat != NULL)
+		devstat_remove_entry(dp->d_devstat);
+	g_post_event(g_disk_destroy, dp, M_WAITOK, NULL, NULL);
 }
 
 static void

==== //depot/projects/netperf_socket/sys/i386/acpica/acpi_machdep.c#7 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/acpica/acpi_machdep.c,v 1.22 2004/06/16 09:47:06 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/acpica/acpi_machdep.c,v 1.23 2004/06/28 02:38:20 imp Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -80,7 +80,7 @@
 {
 	int	state;
 
-	state = 0xff;	/* XXX unknown */
+	state = APM_UNKNOWN;
 
 	if (battp->state & ACPI_BATT_STAT_DISCHARG) {
 		if (battp->cap >= 50)
@@ -94,7 +94,7 @@
 		state = 3;		/* charging */
 
 	/* If still unknown, determine it based on the battery capacity. */
-	if (state == 0xff) {
+	if (state == APM_UNKNOWN) {
 		if (battp->cap >= 50)
 			state = 0;	/* high */
 		else
@@ -137,18 +137,18 @@
 	aip->ai_major       = 1;
 	aip->ai_minor       = 2;
 	aip->ai_status      = apm_softc.active;
-	aip->ai_capabilities= 0xff00;	/* XXX unknown */
+	aip->ai_capabilities= 0xff00;	/* unknown */
 
 	if (acpi_acad_get_acline(&acline))
-		aip->ai_acline = 0xff;		/* unknown */
+		aip->ai_acline = APM_UNKNOWN;	/* unknown */
 	else
 		aip->ai_acline = acline;	/* on/off */
 
 	if (acpi_battery_get_battinfo(-1, &batt)) {
-		aip->ai_batt_stat = 0xff;	/* unknown */
-		aip->ai_batt_life = 0xff;	/* unknown */
-		aip->ai_batt_time = -1;		/* unknown */
-		aip->ai_batteries = 0;
+		aip->ai_batt_stat = APM_UNKNOWN;
+		aip->ai_batt_life = APM_UNKNOWN;
+		aip->ai_batt_time = -1;		 /* unknown */
+		aip->ai_batteries = ~0U;	 /* unknown */
 	} else {
 		aip->ai_batt_stat = acpi_capm_convert_battstate(&batt);
 		aip->ai_batt_life = batt.cap;
@@ -184,7 +184,7 @@
 	app->ap_batt_time = (batt.min == -1) ? -1 : batt.min * 60;
 
 	if (acpi_acad_get_acline(&acline))
-		app->ap_acline = 0xff;		/* unknown */
+		app->ap_acline = APM_UNKNOWN;
 	else
 		app->ap_acline = acline;	/* on/off */
 

==== //depot/projects/netperf_socket/sys/i386/i386/mem.c#6 (text+ko) ====

@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/i386/i386/mem.c,v 1.111 2004/06/16 09:47:07 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/i386/i386/mem.c,v 1.112 2004/06/28 03:16:32 imp Exp $");
 
 /*
  * Memory special file
@@ -98,6 +98,7 @@
 {
 	switch (minor(dev)) {
 	case 14:
+		td->td_proc->p_md.md_iopl = 0;
 		td->td_frame->tf_eflags &= ~PSL_IOPL;
 	}
 	return (0);
@@ -125,6 +126,7 @@
 		if (error != 0)
 			return (error);
 		td->td_frame->tf_eflags |= PSL_IOPL;
+		td->td_proc->p_md.md_iopl = PSL_IOPL;
 		break;
 	}
 	return (0);

==== //depot/projects/netperf_socket/sys/i386/include/float.h#4 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)float.h	7.1 (Berkeley) 5/8/90
- * $FreeBSD: src/sys/i386/include/float.h,v 1.12 2004/04/25 02:36:28 das Exp $
+ * $FreeBSD: src/sys/i386/include/float.h,v 1.13 2004/06/28 03:08:17 imp Exp $
  */
 
 #ifndef _MACHINE_FLOAT_H_
@@ -62,7 +62,6 @@
 #define DBL_MAX		1.7976931348623157E+308
 #define DBL_MAX_10_EXP	308
 
-
 #define LDBL_MANT_DIG	64
 #define LDBL_EPSILON	1.0842021724855044340E-19L
 #define LDBL_DIG	18

==== //depot/projects/netperf_socket/sys/i386/include/proc.h#3 (text+ko) ====

@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  *
  *	from: @(#)proc.h	7.1 (Berkeley) 5/15/91
- * $FreeBSD: src/sys/i386/include/proc.h,v 1.21 2004/04/07 20:46:05 imp Exp $
+ * $FreeBSD: src/sys/i386/include/proc.h,v 1.22 2004/06/28 03:16:32 imp Exp $
  */
 
 #ifndef _MACHINE_PROC_H_
@@ -52,6 +52,7 @@
 
 struct mdproc {
 	struct proc_ldt *md_ldt;	/* (j) per-process ldt */
+	uint32_t md_iopl;		/* process' iopl level */
 };
 
 #ifdef	_KERNEL

==== //depot/projects/netperf_socket/sys/kern/subr_bus.c#9 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/kern/subr_bus.c,v 1.150 2004/06/16 09:47:12 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/kern/subr_bus.c,v 1.152 2004/06/28 03:40:23 imp Exp $");
 
 #include "opt_bus.h"
 

==== //depot/projects/netperf_socket/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c#8 (text+ko) ====

@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $Id: ng_ubt.c,v 1.16 2003/10/10 19:15:06 max Exp $
- * $FreeBSD: src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c,v 1.18 2004/06/26 13:24:29 le Exp $
+ * $FreeBSD: src/sys/netgraph/bluetooth/drivers/ubt/ng_ubt.c,v 1.19 2004/06/27 16:51:01 imp Exp $
  */
 
 #include <sys/param.h>
@@ -48,7 +48,6 @@
 #include <dev/usb/usbdi.h>
 #include <dev/usb/usbdi_util.h>
 #include <dev/usb/usbdivar.h>
-#include <dev/usb/usbdevs.h>
 
 #include <netgraph/ng_message.h>
 #include <netgraph/netgraph.h>
@@ -58,6 +57,8 @@
 #include <netgraph/bluetooth/include/ng_ubt.h>
 #include <netgraph/bluetooth/drivers/ubt/ng_ubt_var.h>
 
+#include "usbdevs.h"
+
 /*
  * USB methods
  */

==== //depot/projects/netperf_socket/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c#5 (text+ko) ====

@@ -26,7 +26,7 @@
  * SUCH DAMAGE.
  *
  * $Id: ubtbcmfw.c,v 1.3 2003/10/10 19:15:08 max Exp $
- * $FreeBSD: src/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c,v 1.8 2004/06/17 17:16:51 phk Exp $
+ * $FreeBSD: src/sys/netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c,v 1.9 2004/06/27 16:51:01 imp Exp $
  */
 
 #include <sys/param.h>
@@ -45,7 +45,8 @@
 #include <dev/usb/usb.h>
 #include <dev/usb/usbdi.h>
 #include <dev/usb/usbdi_util.h>
-#include <dev/usb/usbdevs.h>
+
+#include "usbdevs.h"
 
 /*
  * Download firmware to BCM2033.

==== //depot/projects/netperf_socket/sys/netinet/ip_divert.c#10 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/netinet/ip_divert.c,v 1.93 2004/06/26 19:10:38 rwatson Exp $
+ * $FreeBSD: src/sys/netinet/ip_divert.c,v 1.94 2004/06/27 21:54:34 phk Exp $
  */
 
 #include "opt_inet.h"
@@ -232,8 +232,8 @@
 			if (sbappendaddr_locked(&sa->so_rcv,
 			    (struct sockaddr *)&divsrc, m,
 			    (struct mbuf *)0) == 0) {
+				SOCKBUF_UNLOCK(&sa->so_rcv);
 				sa = NULL;	/* force mbuf reclaim below */
-				SOCKBUF_UNLOCK(&sa->so_rcv);
 			} else
 				sorwakeup_locked(sa);
 			INP_UNLOCK(inp);

==== //depot/projects/netperf_socket/sys/sparc64/include/bus.h#2 (text+ko) ====

@@ -69,7 +69,7 @@
  *	and
  *	from: FreeBSD: src/sys/alpha/include/bus.h,v 1.9 2001/01/09
  *
- * $FreeBSD: src/sys/sparc64/include/bus.h,v 1.32 2003/09/23 08:22:34 nyan Exp $
+ * $FreeBSD: src/sys/sparc64/include/bus.h,v 1.33 2004/06/28 03:49:13 scottl Exp $
  */
 
 #ifndef	_MACHINE_BUS_H_
@@ -1020,6 +1020,7 @@
 	int		dt_map_count;
 	bus_dma_lock_t	*dt_lockfunc;
 	void *		*dt_lockfuncarg;
+	bus_dma_segment_t *dt_segments;
 
 	struct bus_dma_methods	*dt_mt;
 };

==== //depot/projects/netperf_socket/sys/sparc64/include/bus_private.h#2 (text+ko) ====

@@ -25,7 +25,7 @@
  *
  *	from: FreeBSD: src/sys/i386/i386/busdma_machdep.c,v 1.25 2002/01/05
  *
- * $FreeBSD: src/sys/sparc64/include/bus_private.h,v 1.6 2003/07/10 23:27:35 tmm Exp $
+ * $FreeBSD: src/sys/sparc64/include/bus_private.h,v 1.7 2004/06/28 04:04:43 scottl Exp $
  */
 
 #ifndef	_MACHINE_BUS_PRIVATE_H_
@@ -41,13 +41,6 @@
 int sparc64_bus_mem_unmap(void *, bus_size_t);
 bus_space_handle_t sparc64_fake_bustag(int, bus_addr_t, struct bus_space_tag *);
 
-/*
- * This is more or less arbitrary, except for the stack space consumed by
- * the segments array. Choose more than ((BUS_SPACE_MAXSIZE / PAGE_SIZE) + 1),
- * since in practice we could be map pages more than once.
- */
-#define	BUS_DMAMAP_NSEGS	64
-
 struct bus_dmamap_res {
 	struct resource		*dr_res;
 	bus_size_t		dr_used;

==== //depot/projects/netperf_socket/sys/sparc64/sparc64/bus_machdep.c#4 (text+ko) ====

@@ -97,7 +97,7 @@
  *	and
  * 	from: FreeBSD: src/sys/i386/i386/busdma_machdep.c,v 1.24 2001/08/15
  *
- * $FreeBSD: src/sys/sparc64/sparc64/bus_machdep.c,v 1.38 2004/04/07 05:00:01 imp Exp $
+ * $FreeBSD: src/sys/sparc64/sparc64/bus_machdep.c,v 1.39 2004/06/28 03:49:13 scottl Exp $
  */
 
 #include <sys/param.h>
@@ -246,7 +246,9 @@
 		newtag->dt_lockfunc = dflt_lock;
 		newtag->dt_lockfuncarg = NULL;
 	}
-       
+ 
+	newtag->dt_segments = NULL;
+
 	/* Take into account any restrictions imposed by our parent tag */
 	if (parent != NULL) {
 		newtag->dt_lowaddr = ulmin(parent->dt_lowaddr,
@@ -278,6 +280,8 @@
 			parent = dmat->dt_parent;
 			atomic_subtract_int(&dmat->dt_ref_count, 1);
 			if (dmat->dt_ref_count == 0) {
+				if (dmat->dt_segments != NULL)
+					free(dmat->dt_segments, M_DEVBUF);
 				free(dmat, M_DEVBUF);
 				/*
 				 * Last reference count, so
@@ -297,6 +301,13 @@
 sparc64_dma_alloc_map(bus_dma_tag_t dmat, bus_dmamap_t *mapp)
 {
 
+	if (dmat->dt_segments == NULL) {
+		dmat->dt_segments = (bus_dma_segment_t *)malloc(
+		    sizeof(bus_dma_segment_t) * dmat->dt_nsegments, M_DEVBUF,
+		    M_NOWAIT);
+		if (dmat->dt_segments == NULL)
+			return (ENOMEM);
+	}
 	*mapp = malloc(sizeof(**mapp), M_DEVBUF, M_NOWAIT | M_ZERO);
 	if (*mapp == NULL)
 		return (ENOMEM);
@@ -336,16 +347,18 @@
  * first indicates if this is the first invocation of this function.
  */
 static int
-_nexus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dma_segment_t segs[],
-    void *buf, bus_size_t buflen, struct thread *td, int flags,
-    bus_addr_t *lastaddrp, int *segp, int first)
+_nexus_dmamap_load_buffer(bus_dma_tag_t dmat, void *buf, bus_size_t buflen,
+     struct thread *td, int flags, bus_addr_t *lastaddrp, int *segp, int first)
 {
+	bus_dma_segment_t *segs;
 	bus_size_t sgsize;
 	bus_addr_t curaddr, lastaddr, baddr, bmask;
 	vm_offset_t vaddr = (vm_offset_t)buf;
 	int seg;
 	pmap_t pmap;
 
+	segs = dmat->dt_segments;
+
 	if (td != NULL)
 		pmap = vmspace_pmap(td->td_proc->p_vmspace);
 	else
@@ -430,19 +443,14 @@
     bus_size_t buflen, bus_dmamap_callback_t *callback, void *callback_arg,
     int flags)
 {
-#ifdef __GNUC__
-	bus_dma_segment_t dm_segments[dmat->dt_nsegments];
-#else
-	bus_dma_segment_t dm_segments[BUS_DMAMAP_NSEGS];
-#endif
 	bus_addr_t lastaddr;
 	int error, nsegs;
 
-	error = _nexus_dmamap_load_buffer(dmat, dm_segments, buf, buflen,
-	    NULL, flags, &lastaddr, &nsegs, 1);
+	error = _nexus_dmamap_load_buffer(dmat, buf, buflen, NULL, flags,
+	    &lastaddr, &nsegs, 1);
 
 	if (error == 0) {
-		(*callback)(callback_arg, dm_segments, nsegs + 1, 0);
+		(*callback)(callback_arg, dmat->dt_segments, nsegs + 1, 0);
 		map->dm_flags |= DMF_LOADED;
 	} else
 		(*callback)(callback_arg, NULL, 0, error);
@@ -457,11 +465,6 @@
 nexus_dmamap_load_mbuf(bus_dma_tag_t dmat, bus_dmamap_t map, struct mbuf *m0,
     bus_dmamap_callback2_t *callback, void *callback_arg, int flags)
 {
-#ifdef __GNUC__
-	bus_dma_segment_t dm_segments[dmat->dt_nsegments];
-#else
-	bus_dma_segment_t dm_segments[BUS_DMAMAP_NSEGS];
-#endif
 	int nsegs, error;
 
 	M_ASSERTPKTHDR(m0);
@@ -476,8 +479,8 @@
 		for (m = m0; m != NULL && error == 0; m = m->m_next) {
 			if (m->m_len > 0) {
 				error = _nexus_dmamap_load_buffer(dmat,
-				    dm_segments, m->m_data, m->m_len, NULL,
-				    flags, &lastaddr, &nsegs, first);
+				    m->m_data, m->m_len,NULL, flags, &lastaddr,
+				    &nsegs, first);
 				first = 0;
 			}
 		}
@@ -487,10 +490,10 @@
 
 	if (error) {
 		/* force "no valid mappings" in callback */
-		(*callback)(callback_arg, dm_segments, 0, 0, error);
+		(*callback)(callback_arg, dmat->dt_segments, 0, 0, error);
 	} else {
 		map->dm_flags |= DMF_LOADED;
-		(*callback)(callback_arg, dm_segments, nsegs + 1,
+		(*callback)(callback_arg, dmat->dt_segments, nsegs + 1,
 		    m0->m_pkthdr.len, error);
 	}
 	return (error);
@@ -504,11 +507,6 @@
     bus_dmamap_callback2_t *callback, void *callback_arg, int flags)
 {
 	bus_addr_t lastaddr;
-#ifdef __GNUC__
-	bus_dma_segment_t dm_segments[dmat->dt_nsegments];
-#else
-	bus_dma_segment_t dm_segments[BUS_DMAMAP_NSEGS];
-#endif
 	int nsegs, error, first, i;
 	bus_size_t resid;
 	struct iovec *iov;
@@ -536,8 +534,8 @@
 		caddr_t addr = (caddr_t) iov[i].iov_base;
 
 		if (minlen > 0) {
-			error = _nexus_dmamap_load_buffer(dmat, dm_segments,
-			    addr, minlen, td, flags, &lastaddr, &nsegs, first);
+			error = _nexus_dmamap_load_buffer(dmat, addr, minlen,
+			    td, flags, &lastaddr, &nsegs, first);
 			first = 0;
 
 			resid -= minlen;
@@ -546,10 +544,10 @@
 
 	if (error) {
 		/* force "no valid mappings" in callback */
-		(*callback)(callback_arg, dm_segments, 0, 0, error);
+		(*callback)(callback_arg, dmat->dt_segments, 0, 0, error);
 	} else {
 		map->dm_flags |= DMF_LOADED;
-		(*callback)(callback_arg, dm_segments, nsegs + 1,
+		(*callback)(callback_arg, dmat->dt_segments, nsegs + 1,
 		    uio->uio_resid, error);
 	}
 	return (error);
@@ -677,6 +675,7 @@
 	0,
 	NULL,
 	NULL,
+	NULL,
 	&nexus_dma_methods,
 };
 

==== //depot/projects/netperf_socket/sys/sparc64/sparc64/iommu.c#5 (text+ko) ====

@@ -97,7 +97,7 @@
  *	from: @(#)sbus.c	8.1 (Berkeley) 6/11/93
  *	from: NetBSD: iommu.c,v 1.42 2001/08/06 22:02:58 eeh Exp
  *
- * $FreeBSD: src/sys/sparc64/sparc64/iommu.c,v 1.36 2004/04/25 00:08:15 tmm Exp $
+ * $FreeBSD: src/sys/sparc64/sparc64/iommu.c,v 1.38 2004/06/28 04:04:43 scottl Exp $
  */
 
 /*
@@ -889,8 +889,8 @@
  */
 static int
 iommu_dvmamap_load_buffer(bus_dma_tag_t dt, struct iommu_state *is,
-    bus_dmamap_t map, bus_dma_segment_t sgs[], void *buf,
-    bus_size_t buflen, struct thread *td, int flags, int *segp, int align)
+    bus_dmamap_t map, void *buf, bus_size_t buflen, struct thread *td,
+    int flags, int *segp, int align)
 {
 	bus_addr_t amask, dvmaddr;
 	bus_size_t sgsize, esize;
@@ -947,15 +947,14 @@
 		 */
 		if (!firstpg) {
 			esize = ulmin(sgsize,
-			    dt->dt_maxsegsz - sgs[sgcnt].ds_len);
-			sgs[sgcnt].ds_len += esize;
+			    dt->dt_maxsegsz - dt->dt_segments[sgcnt].ds_len);
+			dt->dt_segments[sgcnt].ds_len += esize;
 			sgsize -= esize;
 			dvmaddr += esize;
 		}
 		while (sgsize > 0) {
 			sgcnt++;
-			if (sgcnt >= dt->dt_nsegments ||
-			    sgcnt >= BUS_DMAMAP_NSEGS)
+			if (sgcnt >= dt->dt_nsegments)
 				return (EFBIG);
 			/*
 			 * No extra alignment here - the common practice in the
@@ -965,8 +964,8 @@
 			 * that such tags have maxsegsize >= maxsize.
 			 */
 			esize = ulmin(sgsize, dt->dt_maxsegsz);
-			sgs[sgcnt].ds_addr = dvmaddr;
-			sgs[sgcnt].ds_len = esize;
+			dt->dt_segments[sgcnt].ds_addr = dvmaddr;
+			dt->dt_segments[sgcnt].ds_len = esize;
 			sgsize -= esize;
 			dvmaddr += esize;
 		}
@@ -983,11 +982,6 @@
     int flags)
 {
 	struct iommu_state *is = dt->dt_cookie;
-#ifdef __GNUC__
-	bus_dma_segment_t sgs[dt->dt_nsegments];
-#else
-	bus_dma_segment_t sgs[BUS_DMAMAP_NSEGS];
-#endif
 	int error, seg = -1;
 
 	if ((map->dm_flags & DMF_LOADED) != 0) {
@@ -1006,7 +1000,7 @@
 	iommu_map_remq(is, map);
 	IS_UNLOCK(is);
 
-	error = iommu_dvmamap_load_buffer(dt, is, map, sgs, buf, buflen, NULL,
+	error = iommu_dvmamap_load_buffer(dt, is, map, buf, buflen, NULL,
 	    flags, &seg, 1);
 
 	IS_LOCK(is);
@@ -1014,11 +1008,11 @@
 	if (error != 0) {
 		iommu_dvmamap_vunload(is, map);
 		IS_UNLOCK(is);
-		(*cb)(cba, sgs, 0, error);
+		(*cb)(cba, dt->dt_segments, 0, error);
 	} else {
 		IS_UNLOCK(is);
 		map->dm_flags |= DMF_LOADED;
-		(*cb)(cba, sgs, seg + 1, 0);
+		(*cb)(cba, dt->dt_segments, seg + 1, 0);
 	}
 
 	return (error);
@@ -1029,11 +1023,6 @@
     bus_dmamap_callback2_t *cb, void *cba, int flags)
 {
 	struct iommu_state *is = dt->dt_cookie;
-#ifdef __GNUC__
-	bus_dma_segment_t sgs[dt->dt_nsegments];
-#else
-	bus_dma_segment_t sgs[BUS_DMAMAP_NSEGS];
-#endif
 	struct mbuf *m;
 	int error = 0, first = 1, nsegs = -1;
 
@@ -1054,7 +1043,7 @@
 		for (m = m0; m != NULL && error == 0; m = m->m_next) {
 			if (m->m_len == 0)
 				continue;
-			error = iommu_dvmamap_load_buffer(dt, is, map, sgs,
+			error = iommu_dvmamap_load_buffer(dt, is, map,
 			    m->m_data, m->m_len, NULL, flags, &nsegs, first);
 			first = 0;
 		}
@@ -1067,11 +1056,11 @@
 		iommu_dvmamap_vunload(is, map);
 		IS_UNLOCK(is);
 		/* force "no valid mappings" in callback */
-		(*cb)(cba, sgs, 0, 0, error);
+		(*cb)(cba, dt->dt_segments, 0, 0, error);
 	} else {
 		IS_UNLOCK(is);
 		map->dm_flags |= DMF_LOADED;
-		(*cb)(cba, sgs, nsegs + 1, m0->m_pkthdr.len, 0);
+		(*cb)(cba, dt->dt_segments, nsegs + 1, m0->m_pkthdr.len, 0);
 	}
 	return (error);
 }
@@ -1081,11 +1070,6 @@
     bus_dmamap_callback2_t *cb,  void *cba, int flags)
 {
 	struct iommu_state *is = dt->dt_cookie;
-#ifdef __GNUC__
-	bus_dma_segment_t sgs[dt->dt_nsegments];
-#else
-	bus_dma_segment_t sgs[BUS_DMAMAP_NSEGS];
-#endif
 	struct iovec *iov;
 	struct thread *td = NULL;
 	bus_size_t minlen, resid;
@@ -1120,7 +1104,7 @@
 		if (minlen == 0)
 			continue;
 
-		error = iommu_dvmamap_load_buffer(dt, is, map, sgs,
+		error = iommu_dvmamap_load_buffer(dt, is, map,
 		    iov[i].iov_base, minlen, td, flags, &nsegs, first);
 		first = 0;
 
@@ -1133,11 +1117,11 @@
 		iommu_dvmamap_vunload(is, map);
 		IS_UNLOCK(is);
 		/* force "no valid mappings" in callback */
-		(*cb)(cba, sgs, 0, 0, error);
+		(*cb)(cba, dt->dt_segments, 0, 0, error);
 	} else {
 		IS_UNLOCK(is);
 		map->dm_flags |= DMF_LOADED;
-		(*cb)(cba, sgs, nsegs + 1, uio->uio_resid, 0);
+		(*cb)(cba, dt->dt_segments, nsegs + 1, uio->uio_resid, 0);
 	}
 	return (error);
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200406280538.i5S5cHjK036203>