Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Feb 2015 00:13:00 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r279032 - in projects/ifnet: . contrib/ipfilter lib/libc/sys share/misc share/mk sys/arm/arm sys/arm/include sys/cddl/dev/dtrace/arm sys/conf sys/dev/ofw sys/kern sys/net sys/netinet sy...
Message-ID:  <201502200013.t1K0D0bE089808@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Fri Feb 20 00:12:59 2015
New Revision: 279032
URL: https://svnweb.freebsd.org/changeset/base/279032

Log:
  Merge head r257698 through r279031.

Added:
  projects/ifnet/sys/dev/ofw/ofw_cpu.h
     - copied unchanged from r279031, head/sys/dev/ofw/ofw_cpu.h
Modified:
  projects/ifnet/UPDATING
  projects/ifnet/contrib/ipfilter/ip_fil.c
  projects/ifnet/contrib/ipfilter/ipf.h
  projects/ifnet/lib/libc/sys/mmap.2
  projects/ifnet/share/misc/committers-doc.dot
  projects/ifnet/share/mk/bsd.sys.mk
  projects/ifnet/sys/arm/arm/db_trace.c
  projects/ifnet/sys/arm/arm/unwind.c
  projects/ifnet/sys/arm/include/stack.h
  projects/ifnet/sys/cddl/dev/dtrace/arm/dtrace_isa.c
  projects/ifnet/sys/conf/NOTES
  projects/ifnet/sys/conf/files.arm
  projects/ifnet/sys/conf/kmod.mk
  projects/ifnet/sys/dev/ofw/ofw_cpu.c
  projects/ifnet/sys/kern/kern_ctf.c
  projects/ifnet/sys/net/if_var.h
  projects/ifnet/sys/netinet/igmp.c
  projects/ifnet/sys/netinet/igmp_var.h
  projects/ifnet/sys/netinet/in_mcast.c
  projects/ifnet/sys/netinet/in_var.h
  projects/ifnet/sys/netinet6/in6_var.h
  projects/ifnet/sys/netinet6/mld6.c
  projects/ifnet/sys/netinet6/mld6_var.h
  projects/ifnet/sys/ofed/drivers/infiniband/core/cma.c
  projects/ifnet/sys/sys/cpu.h
  projects/ifnet/sys/sys/mbuf.h
  projects/ifnet/usr.bin/netstat/inet.c
  projects/ifnet/usr.sbin/ifmcstat/Makefile
  projects/ifnet/usr.sbin/ifmcstat/ifmcstat.c
  projects/ifnet/usr.sbin/syslogd/syslogd.c
Directory Properties:
  projects/ifnet/   (props changed)
  projects/ifnet/contrib/ipfilter/   (props changed)
  projects/ifnet/lib/libc/   (props changed)
  projects/ifnet/share/   (props changed)
  projects/ifnet/sys/   (props changed)
  projects/ifnet/sys/conf/   (props changed)

Modified: projects/ifnet/UPDATING
==============================================================================
--- projects/ifnet/UPDATING	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/UPDATING	Fri Feb 20 00:12:59 2015	(r279032)
@@ -37,7 +37,7 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11
 	upgrade the kernel to r278950 or later and regenerate any keys (e.g.
 	ssh keys or openssl keys) that were generated w/ a kernel from that
 	range.  This does not effect programs that directly used /dev/random
-	or /dev/urandom.  All userland uses of arc4random(3) are effected.
+	or /dev/urandom.  All userland uses of arc4random(3) are affected.
 
 20150210:
 	The autofs(4) ABI was changed in order to restore binary compatibility

Modified: projects/ifnet/contrib/ipfilter/ip_fil.c
==============================================================================
--- projects/ifnet/contrib/ipfilter/ip_fil.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/contrib/ipfilter/ip_fil.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -44,6 +44,9 @@ static int	write_output __P((struct ifne
 # endif
 #endif
 
+struct ifaddr {
+	struct sockaddr_storage ifa_addr;
+};
 
 int
 ipfattach(softc)

Modified: projects/ifnet/contrib/ipfilter/ipf.h
==============================================================================
--- projects/ifnet/contrib/ipfilter/ipf.h	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/contrib/ipfilter/ipf.h	Fri Feb 20 00:12:59 2015	(r279032)
@@ -43,9 +43,6 @@ struct file;
 #include <sys/socket.h>
 #include <net/if.h>
 
-#define	_WANT_IFADDR
-#include <net/if_var.h>
-
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/ip.h>

Modified: projects/ifnet/lib/libc/sys/mmap.2
==============================================================================
--- projects/ifnet/lib/libc/sys/mmap.2	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/lib/libc/sys/mmap.2	Fri Feb 20 00:12:59 2015	(r279032)
@@ -28,7 +28,7 @@
 .\"	@(#)mmap.2	8.4 (Berkeley) 5/11/95
 .\" $FreeBSD$
 .\"
-.Dd September 17, 2014
+.Dd February 18, 2015
 .Dt MMAP 2
 .Os
 .Sh NAME
@@ -160,7 +160,7 @@ is specified,
 must be a multiple of the pagesize.
 If
 .Dv MAP_EXCL
-is not specified, a successfull
+is not specified, a successful
 .Dv MAP_FIXED
 request replaces any previous mappings for the process'
 pages in the range from
@@ -225,7 +225,7 @@ it.
 You can test file fragmentation by observing the KB/t (kilobytes per
 transfer) results from an
 .Dq Li iostat 1
-while reading a large file sequentially, e.g.\& using
+while reading a large file sequentially, e.g.,\& using
 .Dq Li dd if=filename of=/dev/null bs=32k .
 .Pp
 The
@@ -448,17 +448,3 @@ was specified and insufficient memory wa
 .Xr munmap 2 ,
 .Xr getpagesize 3 ,
 .Xr getpagesizes 3
-.Sh BUGS
-The
-.Fa len
-argument
-is limited to the maximum file size or available userland address
-space.
-Files may not be able to be made more than 1TB large on 32 bit systems
-due to file systems restrictions and bugs, but address space is far more
-restrictive.
-Larger files may be possible on 64 bit systems.
-.Pp
-The previous documented limit of 2GB was a documentation bug.
-That limit has not existed since
-.Fx 2.2 .

Modified: projects/ifnet/share/misc/committers-doc.dot
==============================================================================
--- projects/ifnet/share/misc/committers-doc.dot	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/share/misc/committers-doc.dot	Fri Feb 20 00:12:59 2015	(r279032)
@@ -53,6 +53,7 @@ node [color=lightblue2, style=filled, bg
 ale [label="Alex Dupre\nale@FreeBSD.org\n2003/12/22"]
 allanjude [label="Allan Jude\nallanjude@FreeBSD.org\n2014/05/17"]
 bcr [label="Benedict Reuschling\nbcr@FreeBSD.org\n2009/12/24"]
+bhd [label="Björn Heidotting\nbhd@FreeBSD.org\n2014/10/14"]
 blackend [label="Marc Fonvieille\nblackend@FreeBSD.org\n2002/06/16"]
 brd [label="Brad Davis\nbrd@FreeBSD.org\n2005/06/01"]
 brueffer [label="Christian Brueffer\nbrueffer@FreeBSD.org\n2003/01/13"]
@@ -102,6 +103,7 @@ bcr -> dru
 bcr -> crees
 bcr -> jgh
 bcr -> allanjude
+bcr -> bhd
 
 blackend -> ale
 

Modified: projects/ifnet/share/mk/bsd.sys.mk
==============================================================================
--- projects/ifnet/share/mk/bsd.sys.mk	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/share/mk/bsd.sys.mk	Fri Feb 20 00:12:59 2015	(r279032)
@@ -118,7 +118,10 @@ CWARNFLAGS+=	-Wno-unknown-pragmas
 CLANG_NO_IAS=	 -no-integrated-as
 .endif
 CLANG_OPT_SMALL= -mstack-alignment=8 -mllvm -inline-threshold=3\
-		 -mllvm -simplifycfg-dup-ret -mllvm -enable-gvn=false
+		 -mllvm -simplifycfg-dup-ret -mllvm
+.if ${COMPILER_VERSION} > 30400
+CLANG_OPT_SMALL+= -enable-gvn=false
+.endif
 CFLAGS.clang+=	 -Qunused-arguments
 .if ${MACHINE_CPUARCH} == "sparc64"
 # Don't emit .cfi directives, since we must use GNU as on sparc64, for now.

Modified: projects/ifnet/sys/arm/arm/db_trace.c
==============================================================================
--- projects/ifnet/sys/arm/arm/db_trace.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/arm/arm/db_trace.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -66,7 +66,7 @@ db_stack_trace_cmd(struct unwind_state *
 
 	finished = false;
 	while (!finished) {
-		finished = unwind_stack_one(state);
+		finished = unwind_stack_one(state, 0);
 
 		/* Print the frame details */
 		sym = db_search_symbol(state->start_pc, DB_STGY_ANY, &offset);

Modified: projects/ifnet/sys/arm/arm/unwind.c
==============================================================================
--- projects/ifnet/sys/arm/arm/unwind.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/arm/arm/unwind.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -33,9 +33,12 @@ __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
 #include <sys/systm.h>
+#include <sys/linker.h>
 
 #include <machine/stack.h>
 
+#include "linker_if.h"
+
 /*
  * Definitions for the instruction interpreter.
  *
@@ -61,7 +64,7 @@ __FBSDID("$FreeBSD$");
  * These are set in the linker script. Their addresses will be
  * either the start or end of the exception table or index.
  */
-extern int extab_start, extab_end, exidx_start, exidx_end;
+extern int exidx_start, exidx_end;
 
 /*
  * Entry types.
@@ -104,13 +107,47 @@ expand_prel31(uint32_t prel31)
 	return ((int32_t)(prel31 & 0x7fffffffu) << 1) / 2;
 }
 
+struct search_context {
+	uint32_t addr;
+	caddr_t exidx_start;
+	caddr_t exidx_end;
+};
+
+static int
+module_search(linker_file_t lf, void *context)
+{
+	struct search_context *sc = context;
+	linker_symval_t symval;
+	c_linker_sym_t sym;
+
+	if (lf->address <= (caddr_t)sc->addr &&
+	    (lf->address + lf->size) >= (caddr_t)sc->addr) {
+		if ((LINKER_LOOKUP_SYMBOL(lf, "__exidx_start", &sym) == 0 ||
+		    LINKER_LOOKUP_SYMBOL(lf, "exidx_start", &sym) == 0) &&
+		    LINKER_SYMBOL_VALUES(lf, sym, &symval) == 0)
+			sc->exidx_start = symval.value;
+
+		if ((LINKER_LOOKUP_SYMBOL(lf, "__exidx_end", &sym) == 0 ||
+		    LINKER_LOOKUP_SYMBOL(lf, "exidx_end", &sym) == 0) &&
+		    LINKER_SYMBOL_VALUES(lf, sym, &symval) == 0)
+			sc->exidx_end = symval.value;
+
+		if (sc->exidx_start != NULL && sc->exidx_end != NULL)
+			return (1);
+		panic("Invalid module %s, no unwind tables\n", lf->filename);
+	}
+	return (0);
+}
+
 /*
  * Perform a binary search of the index table to find the function
  * with the largest address that doesn't exceed addr.
  */
 static struct unwind_idx *
-find_index(uint32_t addr)
+find_index(uint32_t addr, int search_modules)
 {
+	struct search_context sc;
+	caddr_t idx_start, idx_end;
 	unsigned int min, mid, max;
 	struct unwind_idx *start;
 	struct unwind_idx *item;
@@ -118,9 +155,23 @@ find_index(uint32_t addr)
 	uint32_t func_addr;
 
 	start = (struct unwind_idx *)&exidx_start;
+	idx_start = (caddr_t)&exidx_start;
+	idx_end = (caddr_t)&exidx_end;
+
+	/* This may acquire a lock */
+	if (search_modules) {
+		bzero(&sc, sizeof(sc));
+		sc.addr = addr;
+		if (linker_file_foreach(module_search, &sc) != 0 &&
+		   sc.exidx_start != NULL && sc.exidx_end != NULL) {
+			start = (struct unwind_idx *)sc.exidx_start;
+			idx_start = sc.exidx_start;
+			idx_end = sc.exidx_end;
+		}
+	}
 
 	min = 0;
-	max = (&exidx_end - &exidx_start) / 2;
+	max = (idx_end - idx_start) / sizeof(struct unwind_idx);
 
 	while (min != max) {
 		mid = min + (max - min + 1) / 2;
@@ -332,7 +383,7 @@ unwind_tab(struct unwind_state *state)
 }
 
 int
-unwind_stack_one(struct unwind_state *state)
+unwind_stack_one(struct unwind_state *state, int can_lock)
 {
 	struct unwind_idx *index;
 	int finished;
@@ -344,7 +395,7 @@ unwind_stack_one(struct unwind_state *st
 	state->start_pc = state->registers[PC];
 
 	/* Find the item to run */
-	index = find_index(state->start_pc);
+	index = find_index(state->start_pc, can_lock);
 
 	finished = 0;
 	if (index->insn != EXIDX_CANTUNWIND) {

Modified: projects/ifnet/sys/arm/include/stack.h
==============================================================================
--- projects/ifnet/sys/arm/include/stack.h	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/arm/include/stack.h	Fri Feb 20 00:12:59 2015	(r279032)
@@ -55,6 +55,6 @@ struct unwind_state {
 #define	LR	14
 #define	PC	15
 
-int unwind_stack_one(struct unwind_state *);
+int unwind_stack_one(struct unwind_state *, int);
 
 #endif /* !_MACHINE_STACK_H_ */

Modified: projects/ifnet/sys/cddl/dev/dtrace/arm/dtrace_isa.c
==============================================================================
--- projects/ifnet/sys/cddl/dev/dtrace/arm/dtrace_isa.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/cddl/dev/dtrace/arm/dtrace_isa.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -69,9 +69,10 @@ void
 dtrace_getpcstack(pc_t *pcstack, int pcstack_limit, int aframes,
     uint32_t *intrpc)
 {
-	u_int32_t	*frame, *lastframe;
-	int	scp_offset;
-	int	depth = 0;
+	struct unwind_state state;
+	register_t sp;
+	int scp_offset;
+	int depth = 0;
 	pc_t caller = (pc_t) solaris_cpu[curcpu].cpu_dtrace_caller;
 
 	if (intrpc != 0)
@@ -79,23 +80,17 @@ dtrace_getpcstack(pc_t *pcstack, int pcs
 
 	aframes++;
 
-	frame = (u_int32_t *)__builtin_frame_address(0);;
-	lastframe = NULL;
-	scp_offset = -(get_pc_str_offset() >> 2);
-
-	while ((frame != NULL) && (depth < pcstack_limit)) {
-		db_addr_t	scp;
-#if 0 
-		u_int32_t	savecode;
-		int		r;
-		u_int32_t	*rp;
-#endif
-
-		/*
-		 * In theory, the SCP isn't guaranteed to be in the function
-		 * that generated the stack frame.  We hope for the best.
-		 */
-		scp = frame[FR_SCP];
+	__asm __volatile("mov %0, sp" : "=&r" (sp));
+
+	state.registers[FP] = (uint32_t)__builtin_frame_address(0);
+	state.registers[SP] = sp;
+	state.registers[LR] = (uint32_t)__builtin_return_address(0);
+	state.registers[PC] = (uint32_t)dtrace_getpcstack;
+
+	while (depth < pcstack_limit) {
+		int done;
+
+		done = unwind_stack_one(&state, 1);
 
 		if (aframes > 0) {
 			aframes--;
@@ -104,39 +99,10 @@ dtrace_getpcstack(pc_t *pcstack, int pcs
 			}
 		}
 		else {
-			pcstack[depth++] = scp;
+			pcstack[depth++] = state.registers[PC];
 		}
 
-#if 0
-		savecode = ((u_int32_t *)scp)[scp_offset];
-		if ((savecode & 0x0e100000) == 0x08000000) {
-			/* Looks like an STM */
-			rp = frame - 4;
-			for (r = 10; r >= 0; r--) {
-				if (savecode & (1 << r)) {
-					/* register r == *rp-- */
-				}
-			}
-		}
-#endif
-
-		/*
-		 * Switch to next frame up
-		 */
-		if (frame[FR_RFP] == 0)
-			break; /* Top of stack */
-
-		lastframe = frame;
-		frame = (u_int32_t *)(frame[FR_RFP]);
-
-		if (INKERNEL((int)frame)) {
-			/* staying in kernel */
-			if (frame <= lastframe) {
-				/* bad frame pointer */
-				break;
-			}
-		}
-		else
+		if (done)
 			break;
 	}
 
@@ -176,55 +142,28 @@ dtrace_getarg(int arg, int aframes)
 int
 dtrace_getstackdepth(int aframes)
 {
-	u_int32_t	*frame, *lastframe;
-	int	scp_offset;
-	int	depth = 1;
-
-	frame = (u_int32_t *)__builtin_frame_address(0);;
-	lastframe = NULL;
-	scp_offset = -(get_pc_str_offset() >> 2);
-
-	while (frame != NULL) {
-		db_addr_t	scp;
-#if 0 
-		u_int32_t	savecode;
-		int		r;
-		u_int32_t	*rp;
-#endif
-
-		/*
-		 * In theory, the SCP isn't guaranteed to be in the function
-		 * that generated the stack frame.  We hope for the best.
-		 */
-		scp = frame[FR_SCP];
+	struct unwind_state state;
+	register_t sp;
+	int scp_offset;
+	int done = 0;
+	int depth = 1;
+
+	__asm __volatile("mov %0, sp" : "=&r" (sp));
+
+	state.registers[FP] = (uint32_t)__builtin_frame_address(0);
+	state.registers[SP] = sp;
+	state.registers[LR] = (uint32_t)__builtin_return_address(0);
+	state.registers[PC] = (uint32_t)dtrace_getstackdepth;
 
+	do {
+		done = unwind_stack_one(&state, 1);
 		depth++;
-
-		/*
-		 * Switch to next frame up
-		 */
-		if (frame[FR_RFP] == 0)
-			break; /* Top of stack */
-
-		lastframe = frame;
-		frame = (u_int32_t *)(frame[FR_RFP]);
-
-		if (INKERNEL((int)frame)) {
-			/* staying in kernel */
-			if (frame <= lastframe) {
-				/* bad frame pointer */
-				break;
-			}
-		}
-		else
-			break;
-	}
+	} while (!done);
 
 	if (depth < aframes)
 		return 0;
 	else
 		return depth - aframes;
-
 }
 
 ulong_t

Modified: projects/ifnet/sys/conf/NOTES
==============================================================================
--- projects/ifnet/sys/conf/NOTES	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/conf/NOTES	Fri Feb 20 00:12:59 2015	(r279032)
@@ -495,7 +495,7 @@ options 	KTRACE_REQUEST_POOL=101
 options 	KTR
 options 	KTR_BOOT_ENTRIES=1024
 options 	KTR_ENTRIES=(128*1024)
-options 	KTR_COMPILE=(KTR_INTR|KTR_PROC)
+options 	KTR_COMPILE=(KTR_ALL)
 options 	KTR_MASK=KTR_INTR
 options 	KTR_CPUMASK=0x3
 options 	KTR_VERBOSE

Modified: projects/ifnet/sys/conf/files.arm
==============================================================================
--- projects/ifnet/sys/conf/files.arm	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/conf/files.arm	Fri Feb 20 00:12:59 2015	(r279032)
@@ -57,7 +57,7 @@ arm/arm/trap.c			optional	!armv6
 arm/arm/trap-v6.c		optional	armv6
 arm/arm/uio_machdep.c		standard
 arm/arm/undefined.c		standard
-arm/arm/unwind.c		optional	ddb
+arm/arm/unwind.c		optional	ddb | kdtrace_hooks
 arm/arm/vm_machdep.c		standard
 arm/arm/vfp.c			standard
 board_id.h			standard				   \

Modified: projects/ifnet/sys/conf/kmod.mk
==============================================================================
--- projects/ifnet/sys/conf/kmod.mk	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/conf/kmod.mk	Fri Feb 20 00:12:59 2015	(r279032)
@@ -125,6 +125,7 @@ CFLAGS+=	-fno-omit-frame-pointer -mno-om
 .if ${MACHINE_CPUARCH} == arm
 CFLAGS.clang+=	-mllvm -arm-use-movt=0
 CFLAGS.clang+=	-mfpu=none
+CFLAGS+=	-funwind-tables
 .endif
 
 .if ${MACHINE_CPUARCH} == powerpc

Modified: projects/ifnet/sys/dev/ofw/ofw_cpu.c
==============================================================================
--- projects/ifnet/sys/dev/ofw/ofw_cpu.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/dev/ofw/ofw_cpu.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/ofw/openfirm.h>
 #include <dev/ofw/ofw_bus.h>
 #include <dev/ofw/ofw_bus_subr.h>
+#include <dev/ofw/ofw_cpu.h>
 
 static int	ofw_cpulist_probe(device_t);
 static int	ofw_cpulist_attach(device_t);
@@ -244,6 +245,7 @@ ofw_cpu_attach(device_t dev)
 static int
 ofw_cpu_read_ivar(device_t dev, device_t child, int index, uintptr_t *result)
 {
+	struct ofw_cpulist_softc *psc;
 	struct ofw_cpu_softc *sc;
 
 	sc = device_get_softc(dev);
@@ -258,8 +260,65 @@ ofw_cpu_read_ivar(device_t dev, device_t
 			return (0);
 		}
 		break;
+	case CPU_IVAR_CPUID_SIZE:
+		psc = device_get_softc(device_get_parent(dev));
+		*result = psc->sc_addr_cells;
+		return (0);
+	case CPU_IVAR_CPUID:
+		if (sc->sc_reg_valid) {
+			*result = (uintptr_t)sc->sc_reg;
+			return (0);
+		}
+		break;
 	}
 
 	return (ENOENT);
 }
 
+int
+ofw_cpu_early_foreach(ofw_cpu_foreach_cb callback, boolean_t only_runnable)
+{
+	phandle_t node, child;
+	pcell_t addr_cells, reg[2];
+	char status[16];
+	u_int id;
+	int count, rv;
+
+	count = 0;
+	id = 0;
+
+	node = OF_finddevice("/cpus");
+	if (node == -1)
+		return (-1);
+
+	/* Find the number of cells in the cpu register */
+	if (OF_getencprop(node, "#address-cells", &addr_cells,
+	    sizeof(addr_cells)) < 0)
+		return (-1);
+
+	for (child = OF_child(node); child != 0; child = OF_peer(child), id++) {
+		/*
+		 * If we are filtering by runnable then limit to only
+		 * those that have been enabled.
+		 */
+		if (only_runnable) {
+			status[0] = '\0';
+			OF_getprop(child, "status", status, sizeof(status));
+			if (status[0] != '\0' && strcmp(status, "okay") != 0)
+				continue;
+		}
+
+		/*
+		 * Check we have a register to identify the cpu
+		 */
+		rv = OF_getencprop(child, "reg", reg,
+		    addr_cells * sizeof(cell_t));
+		if (rv != addr_cells * sizeof(cell_t))
+			continue;
+
+		if (callback == NULL || callback(id, child, addr_cells, reg))
+			count++;
+	}
+
+	return (only_runnable ? count : id);
+}

Copied: projects/ifnet/sys/dev/ofw/ofw_cpu.h (from r279031, head/sys/dev/ofw/ofw_cpu.h)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ projects/ifnet/sys/dev/ofw/ofw_cpu.h	Fri Feb 20 00:12:59 2015	(r279032, copy of r279031, head/sys/dev/ofw/ofw_cpu.h)
@@ -0,0 +1,38 @@
+/*-
+ * Copyright (c) 2015 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Andrew Turner under
+ * sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _DEV_OFW_OFW_CPU_H_
+#define _DEV_OFW_OFW_CPU_H_
+
+typedef boolean_t (*ofw_cpu_foreach_cb)(u_int, phandle_t, u_int, pcell_t *);
+int ofw_cpu_early_foreach(ofw_cpu_foreach_cb, boolean_t);
+
+#endif /* _DEV_OFW_OFW_CPU_H_ */

Modified: projects/ifnet/sys/kern/kern_ctf.c
==============================================================================
--- projects/ifnet/sys/kern/kern_ctf.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/kern/kern_ctf.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -121,10 +121,7 @@ link_elf_ctf_get(linker_file_t lf, linke
 	NDFREE(&nd, NDF_ONLY_PNBUF);
 
 	/* Allocate memory for the FLF header. */
-	if ((hdr = malloc(sizeof(*hdr), M_LINKER, M_WAITOK)) == NULL) {
-		error = ENOMEM;
-		goto out;
-	}
+	hdr = malloc(sizeof(*hdr), M_LINKER, M_WAITOK);
 
 	/* Read the ELF header. */
 	if ((error = vn_rdwr(UIO_READ, nd.ni_vp, hdr, sizeof(*hdr),
@@ -146,10 +143,7 @@ link_elf_ctf_get(linker_file_t lf, linke
 	}
 
 	/* Allocate memory for all the section headers */
-	if ((shdr = malloc(nbytes, M_LINKER, M_WAITOK)) == NULL) {
-		error = ENOMEM;
-		goto out;
-	}
+	shdr = malloc(nbytes, M_LINKER, M_WAITOK);
 
 	/* Read all the section headers */
 	if ((error = vn_rdwr(UIO_READ, nd.ni_vp, (caddr_t)shdr, nbytes,
@@ -171,11 +165,7 @@ link_elf_ctf_get(linker_file_t lf, linke
 	}
 
 	/* Allocate memory to buffer the section header strings. */
-	if ((shstrtab = malloc(shdr[hdr->e_shstrndx].sh_size, M_LINKER,
-	    M_WAITOK)) == NULL) {
-		error = ENOMEM;
-		goto out;
-	}
+	shstrtab = malloc(shdr[hdr->e_shstrndx].sh_size, M_LINKER, M_WAITOK);
 
 	/* Read the section header strings. */
 	if ((error = vn_rdwr(UIO_READ, nd.ni_vp, shstrtab,
@@ -238,10 +228,7 @@ link_elf_ctf_get(linker_file_t lf, linke
 		 * Allocate memory for the compressed CTF data, including
 		 * the header (which isn't compressed).
 		 */
-		if ((raw = malloc(shdr[i].sh_size, M_LINKER, M_WAITOK)) == NULL) {
-			error = ENOMEM;
-			goto out;
-		}
+		raw = malloc(shdr[i].sh_size, M_LINKER, M_WAITOK);
 	} else {
 		/*
 		 * The CTF data is not compressed, so the ELF section
@@ -254,10 +241,7 @@ link_elf_ctf_get(linker_file_t lf, linke
 	 * Allocate memory to buffer the CTF data in it's decompressed
 	 * form.
 	 */
-	if ((ctftab = malloc(sz, M_LINKER, M_WAITOK)) == NULL) {
-		error = ENOMEM;
-		goto out;
-	}
+	ctftab = malloc(sz, M_LINKER, M_WAITOK);
 
 	/*
 	 * Read the CTF data into the raw buffer if compressed, or
@@ -293,7 +277,9 @@ link_elf_ctf_get(linker_file_t lf, linke
 		zs.next_in = ((uint8_t *) raw) + sizeof(ctf_hdr);
 		zs.avail_out = sz - sizeof(ctf_hdr);
 		zs.next_out = ((uint8_t *) ctftab) + sizeof(ctf_hdr);
-		if ((ret = inflate(&zs, Z_FINISH)) != Z_STREAM_END) {
+		ret = inflate(&zs, Z_FINISH);
+		inflateEnd(&zs);
+		if (ret != Z_STREAM_END) {
 			printf("%s(%d): zlib inflate returned %d\n", __func__, __LINE__, ret);
 			error = EIO;
 			goto out;

Modified: projects/ifnet/sys/net/if_var.h
==============================================================================
--- projects/ifnet/sys/net/if_var.h	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/net/if_var.h	Fri Feb 20 00:12:59 2015	(r279032)
@@ -257,8 +257,6 @@ EVENTHANDLER_DECLARE(group_change_event,
 
 #define	TOEDEV(ifp)	((ifp)->if_llsoftc)
 
-#endif /* _KERNEL */
-
 /*
  * The ifaddr structure contains information about one address
  * of an interface.  They are maintained by the different address families,
@@ -269,7 +267,6 @@ EVENTHANDLER_DECLARE(group_change_event,
  * chunk of malloc'ed memory, where we store the three addresses
  * (ifa_addr, ifa_dstaddr and ifa_netmask) referenced here.
  */
-#if defined(_KERNEL) || defined(_WANT_IFADDR)
 struct ifaddr {
 	struct	sockaddr *ifa_addr;	/* address of interface */
 	struct	sockaddr *ifa_dstaddr;	/* other end of p-to-p link */
@@ -281,6 +278,8 @@ struct ifaddr {
 	void	(*ifa_rtrequest)	/* check or clean routes (+ or -)'d */
 		(int, struct rtentry *, struct rt_addrinfo *);
 	u_short	ifa_flags;		/* mostly rt_flags for cloning */
+#define	IFA_ROUTE	RTF_UP		/* route installed */
+#define	IFA_RTSELF	RTF_HOST	/* loopback route to self installed */
 	u_int	ifa_refcnt;		/* references to this structure */
 
 	counter_u64_t	ifa_ipackets;
@@ -288,11 +287,6 @@ struct ifaddr {
 	counter_u64_t	ifa_ibytes;
 	counter_u64_t	ifa_obytes;
 };
-#endif
-
-#ifdef _KERNEL
-#define	IFA_ROUTE	RTF_UP		/* route installed */
-#define	IFA_RTSELF	RTF_HOST	/* loopback route to self installed */
 
 /* For compatibility with other BSDs. SCTP uses it. */
 #define	ifa_list	ifa_link

Modified: projects/ifnet/sys/netinet/igmp.c
==============================================================================
--- projects/ifnet/sys/netinet/igmp.c	Thu Feb 19 23:59:27 2015	(r279031)
+++ projects/ifnet/sys/netinet/igmp.c	Fri Feb 20 00:12:59 2015	(r279032)
@@ -84,15 +84,15 @@ __FBSDID("$FreeBSD$");
 #define KTR_IGMPV3 KTR_INET
 #endif
 
-static struct igmp_ifinfo *
+static struct igmp_ifsoftc *
 		igi_alloc_locked(struct ifnet *);
 static void	igi_delete_locked(const struct ifnet *);
 static void	igmp_dispatch_queue(struct mbufq *, int, const int);
 static void	igmp_fasttimo_vnet(void);
-static void	igmp_final_leave(struct in_multi *, struct igmp_ifinfo *);
+static void	igmp_final_leave(struct in_multi *, struct igmp_ifsoftc *);
 static int	igmp_handle_state_change(struct in_multi *,
-		    struct igmp_ifinfo *);
-static int	igmp_initial_join(struct in_multi *, struct igmp_ifinfo *);
+		    struct igmp_ifsoftc *);
+static int	igmp_initial_join(struct in_multi *, struct igmp_ifsoftc *);
 static int	igmp_input_v1_query(struct ifnet *, const struct ip *,
 		    const struct igmp *);
 static int	igmp_input_v2_query(struct ifnet *, const struct ip *,
@@ -100,7 +100,7 @@ static int	igmp_input_v2_query(struct if
 static int	igmp_input_v3_query(struct ifnet *, const struct ip *,
 		    /*const*/ struct igmpv3 *);
 static int	igmp_input_v3_group_query(struct in_multi *,
-		    struct igmp_ifinfo *, int, /*const*/ struct igmpv3 *);
+		    struct igmp_ifsoftc *, int, /*const*/ struct igmpv3 *);
 static int	igmp_input_v1_report(struct ifnet *, /*const*/ struct ip *,
 		    /*const*/ struct igmp *);
 static int	igmp_input_v2_report(struct ifnet *, /*const*/ struct ip *,
@@ -112,21 +112,21 @@ static struct mbuf *
 #ifdef KTR
 static char *	igmp_rec_type_to_str(const int);
 #endif
-static void	igmp_set_version(struct igmp_ifinfo *, const int);
+static void	igmp_set_version(struct igmp_ifsoftc *, const int);
 static void	igmp_slowtimo_vnet(void);
 static int	igmp_v1v2_queue_report(struct in_multi *, const int);
 static void	igmp_v1v2_process_group_timer(struct in_multi *, const int);
-static void	igmp_v1v2_process_querier_timers(struct igmp_ifinfo *);
+static void	igmp_v1v2_process_querier_timers(struct igmp_ifsoftc *);
 static void	igmp_v2_update_group(struct in_multi *, const int);
-static void	igmp_v3_cancel_link_timers(struct igmp_ifinfo *);
-static void	igmp_v3_dispatch_general_query(struct igmp_ifinfo *);
+static void	igmp_v3_cancel_link_timers(struct igmp_ifsoftc *);
+static void	igmp_v3_dispatch_general_query(struct igmp_ifsoftc *);
 static struct mbuf *
 		igmp_v3_encap_report(struct ifnet *, struct mbuf *);
 static int	igmp_v3_enqueue_group_record(struct mbufq *,
 		    struct in_multi *, const int, const int, const int);
 static int	igmp_v3_enqueue_filter_change(struct mbufq *,
 		    struct in_multi *);
-static void	igmp_v3_process_group_timers(struct igmp_ifinfo *,
+static void	igmp_v3_process_group_timers(struct igmp_ifsoftc *,
 		    struct mbufq *, struct mbufq *, struct in_multi *,
 		    const int);
 static int	igmp_v3_merge_state_changes(struct in_multi *,
@@ -158,13 +158,13 @@ static const struct netisr_handler igmp_
  *  * All output is delegated to the netisr.
  *    Now that Giant has been eliminated, the netisr may be inlined.
  *  * IN_MULTI_LOCK covers in_multi.
- *  * IGMP_LOCK covers igmp_ifinfo and any global variables in this file,
+ *  * IGMP_LOCK covers igmp_ifsoftc and any global variables in this file,
  *    including the output queue.
  *  * IF_ADDR_LOCK covers if_multiaddrs, which is used for a variety of
  *    per-link state iterators.
- *  * igmp_ifinfo is valid as long as PF_INET is attached to the interface,
+ *  * igmp_ifsoftc is valid as long as PF_INET is attached to the interface,
  *    therefore it is not refcounted.
- *    We allow unlocked reads of igmp_ifinfo when accessed via in_multi.
+ *    We allow unlocked reads of igmp_ifsoftc when accessed via in_multi.
  *
  * Reference counting
  *  * IGMP acquires its own reference every time an in_multi is passed to
@@ -219,7 +219,7 @@ static VNET_DEFINE(int, current_state_ti
 #define	V_state_change_timers_running	VNET(state_change_timers_running)
 #define	V_current_state_timers_running	VNET(current_state_timers_running)
 
-static VNET_DEFINE(LIST_HEAD(, igmp_ifinfo), igi_head);
+static VNET_DEFINE(LIST_HEAD(, igmp_ifsoftc), igi_head);
 static VNET_DEFINE(struct igmpstat, igmpstat) = {
 	.igps_version = IGPS_VERSION_3,
 	.igps_len = sizeof(struct igmpstat),
@@ -412,7 +412,7 @@ out_locked:
 }
 
 /*
- * Expose struct igmp_ifinfo to userland, keyed by ifindex.
+ * Expose struct igmp_ifsoftc to userland, keyed by ifindex.
  * For use by ifmcstat(8).
  *
  * SMPng: NOTE: Does an unlocked ifindex space read.
@@ -426,7 +426,7 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS)
 	int			 error;
 	u_int			 namelen;
 	struct ifnet		*ifp;
-	struct igmp_ifinfo	*igi;
+	struct igmp_ifsoftc	*igi;
 
 	name = (int *)arg1;
 	namelen = arg2;
@@ -457,8 +457,18 @@ sysctl_igmp_ifinfo(SYSCTL_HANDLER_ARGS)
 
 	LIST_FOREACH(igi, &V_igi_head, igi_link) {
 		if (ifp == igi->igi_ifp) {
-			error = SYSCTL_OUT(req, igi,
-			    sizeof(struct igmp_ifinfo));
+			struct igmp_ifinfo info;
+
+			info.igi_version = igi->igi_version;
+			info.igi_v1_timer = igi->igi_v1_timer;
+			info.igi_v2_timer = igi->igi_v2_timer;
+			info.igi_v3_timer = igi->igi_v3_timer;
+			info.igi_flags = igi->igi_flags;
+			info.igi_rv = igi->igi_rv;
+			info.igi_qi = igi->igi_qi;
+			info.igi_qri = igi->igi_qri;
+			info.igi_uri = igi->igi_uri;
+			error = SYSCTL_OUT(req, &info, sizeof(info));
 			break;
 		}
 	}
@@ -536,10 +546,10 @@ igmp_ra_alloc(void)
 /*
  * Attach IGMP when PF_INET is attached to an interface.
  */
-struct igmp_ifinfo *
+struct igmp_ifsoftc *
 igmp_domifattach(struct ifnet *ifp)
 {
-	struct igmp_ifinfo *igi;
+	struct igmp_ifsoftc *igi;
 
 	CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)",
 	    __func__, ifp, ifp->if_xname);
@@ -558,14 +568,14 @@ igmp_domifattach(struct ifnet *ifp)
 /*
  * VIMAGE: assume curvnet set by caller.
  */
-static struct igmp_ifinfo *
+static struct igmp_ifsoftc *
 igi_alloc_locked(/*const*/ struct ifnet *ifp)
 {
-	struct igmp_ifinfo *igi;
+	struct igmp_ifsoftc *igi;
 
 	IGMP_LOCK_ASSERT();
 
-	igi = malloc(sizeof(struct igmp_ifinfo), M_IGMP, M_NOWAIT|M_ZERO);
+	igi = malloc(sizeof(struct igmp_ifsoftc), M_IGMP, M_NOWAIT|M_ZERO);
 	if (igi == NULL)
 		goto out;
 
@@ -581,7 +591,7 @@ igi_alloc_locked(/*const*/ struct ifnet 
 
 	LIST_INSERT_HEAD(&V_igi_head, igi, igi_link);
 
-	CTR2(KTR_IGMPV3, "allocate igmp_ifinfo for ifp %p(%s)",
+	CTR2(KTR_IGMPV3, "allocate igmp_ifsoftc for ifp %p(%s)",
 	     ifp, ifp->if_xname);
 
 out:
@@ -600,7 +610,7 @@ out:
 void
 igmp_ifdetach(struct ifnet *ifp)
 {
-	struct igmp_ifinfo	*igi;
+	struct igmp_ifsoftc	*igi;
 	struct ifmultiaddr	*ifma;
 	struct in_multi		*inm, *tinm;
 
@@ -647,7 +657,7 @@ igmp_ifdetach(struct ifnet *ifp)
 void
 igmp_domifdetach(struct ifnet *ifp)
 {
-	struct igmp_ifinfo *igi;
+	struct igmp_ifsoftc *igi;
 
 	CTR3(KTR_IGMPV3, "%s: called for ifp %p(%s)",
 	    __func__, ifp, ifp->if_xname);
@@ -663,9 +673,9 @@ igmp_domifdetach(struct ifnet *ifp)
 static void
 igi_delete_locked(const struct ifnet *ifp)
 {
-	struct igmp_ifinfo *igi, *tigi;
+	struct igmp_ifsoftc *igi, *tigi;
 
-	CTR3(KTR_IGMPV3, "%s: freeing igmp_ifinfo for ifp %p(%s)",
+	CTR3(KTR_IGMPV3, "%s: freeing igmp_ifsoftc for ifp %p(%s)",
 	    __func__, ifp, ifp->if_xname);
 
 	IGMP_LOCK_ASSERT();
@@ -689,7 +699,7 @@ igi_delete_locked(const struct ifnet *if
 	}
 
 #ifdef INVARIANTS
-	panic("%s: igmp_ifinfo not found for ifp %p\n", __func__,  ifp);
+	panic("%s: igmp_ifsoftc not found for ifp %p\n", __func__,  ifp);
 #endif
 }
 
@@ -704,7 +714,7 @@ igmp_input_v1_query(struct ifnet *ifp, c
     const struct igmp *igmp)
 {
 	struct ifmultiaddr	*ifma;
-	struct igmp_ifinfo	*igi;
+	struct igmp_ifsoftc	*igi;
 	struct in_multi		*inm;
 
 	/*
@@ -724,7 +734,7 @@ igmp_input_v1_query(struct ifnet *ifp, c
 	IGMP_LOCK();
 
 	igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
-	KASSERT(igi != NULL, ("%s: no igmp_ifinfo for ifp %p", __func__, ifp));
+	KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
 
 	if (igi->igi_flags & IGIF_LOOPBACK) {
 		CTR2(KTR_IGMPV3, "ignore v1 query on IGIF_LOOPBACK ifp %p(%s)",
@@ -789,7 +799,7 @@ igmp_input_v2_query(struct ifnet *ifp, c
     const struct igmp *igmp)
 {
 	struct ifmultiaddr	*ifma;
-	struct igmp_ifinfo	*igi;
+	struct igmp_ifsoftc	*igi;
 	struct in_multi		*inm;
 	int			 is_general_query;
 	uint16_t		 timer;
@@ -818,7 +828,7 @@ igmp_input_v2_query(struct ifnet *ifp, c
 	IGMP_LOCK();
 
 	igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
-	KASSERT(igi != NULL, ("%s: no igmp_ifinfo for ifp %p", __func__, ifp));
+	KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
 
 	if (igi->igi_flags & IGIF_LOOPBACK) {
 		CTR2(KTR_IGMPV3, "ignore v2 query on IGIF_LOOPBACK ifp %p(%s)",
@@ -939,7 +949,7 @@ static int
 igmp_input_v3_query(struct ifnet *ifp, const struct ip *ip,
     /*const*/ struct igmpv3 *igmpv3)
 {
-	struct igmp_ifinfo	*igi;
+	struct igmp_ifsoftc	*igi;
 	struct in_multi		*inm;
 	int			 is_general_query;
 	uint32_t		 maxresp, nsrc, qqi;
@@ -1012,7 +1022,7 @@ igmp_input_v3_query(struct ifnet *ifp, c
 	IGMP_LOCK();
 
 	igi = ((struct in_ifinfo *)ifp->if_afdata[AF_INET])->ii_igmp;
-	KASSERT(igi != NULL, ("%s: no igmp_ifinfo for ifp %p", __func__, ifp));
+	KASSERT(igi != NULL, ("%s: no igmp_ifsoftc for ifp %p", __func__, ifp));
 
 	if (igi->igi_flags & IGIF_LOOPBACK) {
 		CTR2(KTR_IGMPV3, "ignore v3 query on IGIF_LOOPBACK ifp %p(%s)",
@@ -1100,7 +1110,7 @@ out_locked:
  * Return <0 if any error occured. Currently this is ignored.
  */
 static int
-igmp_input_v3_group_query(struct in_multi *inm, struct igmp_ifinfo *igi,
+igmp_input_v3_group_query(struct in_multi *inm, struct igmp_ifsoftc *igi,
     int timer, /*const*/ struct igmpv3 *igmpv3)
 {
 	int			 retval;
@@ -1245,7 +1255,7 @@ igmp_input_v1_report(struct ifnet *ifp, 
 	IN_MULTI_LOCK();
 	inm = inm_lookup(ifp, igmp->igmp_group);
 	if (inm != NULL) {
-		struct igmp_ifinfo *igi;
+		struct igmp_ifsoftc *igi;
 
 		igi = inm->inm_igi;
 		if (igi == NULL) {
@@ -1369,7 +1379,7 @@ igmp_input_v2_report(struct ifnet *ifp, 
 	IN_MULTI_LOCK();
 	inm = inm_lookup(ifp, igmp->igmp_group);
 	if (inm != NULL) {
-		struct igmp_ifinfo *igi;
+		struct igmp_ifsoftc *igi;
 
 		igi = inm->inm_igi;
 		KASSERT(igi != NULL, ("%s: no igi for ifp %p", __func__, ifp));
@@ -1638,7 +1648,7 @@ igmp_fasttimo_vnet(void)
 	struct mbufq		 scq;	/* State-change packets */
 	struct mbufq		 qrq;	/* Query response packets */
 	struct ifnet		*ifp;
-	struct igmp_ifinfo	*igi;
+	struct igmp_ifsoftc	*igi;
 	struct ifmultiaddr	*ifma;
 	struct in_multi		*inm;
 	int			 loop, uri_fasthz;
@@ -1796,7 +1806,7 @@ igmp_v1v2_process_group_timer(struct in_
  * Note: Unlocked read from igi.
  */
 static void
-igmp_v3_process_group_timers(struct igmp_ifinfo *igi,
+igmp_v3_process_group_timers(struct igmp_ifsoftc *igi,
     struct mbufq *qrq, struct mbufq *scq,
     struct in_multi *inm, const int uri_fasthz)
 {
@@ -1943,7 +1953,7 @@ igmp_v3_suppress_group_record(struct in_
  * as per Section 7.2.1.
  */
 static void
-igmp_set_version(struct igmp_ifinfo *igi, const int version)
+igmp_set_version(struct igmp_ifsoftc *igi, const int version)
 {
 	int old_version_timer;
 
@@ -1992,7 +2002,7 @@ igmp_set_version(struct igmp_ifinfo *igi
  * query processing.
  */
 static void

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



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