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...
Gleb Smirnoff
glebius at FreeBSD.org
Fri Feb 20 00:13:05 UTC 2015
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 at FreeBSD.org\n2003/12/22"]
allanjude [label="Allan Jude\nallanjude at FreeBSD.org\n2014/05/17"]
bcr [label="Benedict Reuschling\nbcr at FreeBSD.org\n2009/12/24"]
+bhd [label="Björn Heidotting\nbhd at FreeBSD.org\n2014/10/14"]
blackend [label="Marc Fonvieille\nblackend at FreeBSD.org\n2002/06/16"]
brd [label="Brad Davis\nbrd at FreeBSD.org\n2005/06/01"]
brueffer [label="Christian Brueffer\nbrueffer at 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 ***
More information about the svn-src-projects
mailing list