Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Oct 2016 22:25:07 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r306832 - in user/alc/PQ_LAUNDRY: contrib/netbsd-tests/lib/libc/locale contrib/netbsd-tests/lib/libc/string etc/mtree include sbin/init sys/boot/common sys/cddl/contrib/opensolaris/uts/...
Message-ID:  <201610072225.u97MP7Zj046371@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Fri Oct  7 22:25:07 2016
New Revision: 306832
URL: https://svnweb.freebsd.org/changeset/base/306832

Log:
  MFH r306831

Added:
  user/alc/PQ_LAUNDRY/sys/mips/conf/AR5312_BASE.hints
     - copied unchanged from r306831, head/sys/mips/conf/AR5312_BASE.hints
  user/alc/PQ_LAUNDRY/sys/mips/conf/AR5315_BASE.hints
     - copied unchanged from r306831, head/sys/mips/conf/AR5315_BASE.hints
  user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR5312
     - copied unchanged from r306831, head/sys/mips/conf/std.AR5312
  user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR5315
     - copied unchanged from r306831, head/sys/mips/conf/std.AR5315
  user/alc/PQ_LAUNDRY/sys/sys/disk/
     - copied from r306831, head/sys/sys/disk/
Replaced:
  user/alc/PQ_LAUNDRY/sys/sys/apm.h
     - copied unchanged from r306831, head/sys/sys/apm.h
  user/alc/PQ_LAUNDRY/sys/sys/disklabel.h
     - copied unchanged from r306831, head/sys/sys/disklabel.h
  user/alc/PQ_LAUNDRY/sys/sys/diskmbr.h
     - copied unchanged from r306831, head/sys/sys/diskmbr.h
  user/alc/PQ_LAUNDRY/sys/sys/diskpc98.h
     - copied unchanged from r306831, head/sys/sys/diskpc98.h
  user/alc/PQ_LAUNDRY/sys/sys/gpt.h
     - copied unchanged from r306831, head/sys/sys/gpt.h
  user/alc/PQ_LAUNDRY/sys/sys/vtoc.h
     - copied unchanged from r306831, head/sys/sys/vtoc.h
Modified:
  user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c
  user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/string/t_memmem.c
  user/alc/PQ_LAUNDRY/etc/mtree/BSD.include.dist
  user/alc/PQ_LAUNDRY/include/Makefile
  user/alc/PQ_LAUNDRY/sbin/init/init.c
  user/alc/PQ_LAUNDRY/sys/boot/common/self_reloc.c
  user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
  user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
  user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
  user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
  user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_ioctl.h
  user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_main.c
  user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.c
  user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.h
  user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_os.c
  user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_ver.h
  user/alc/PQ_LAUNDRY/sys/kern/vfs_cache.c
  user/alc/PQ_LAUNDRY/sys/kern/vfs_mount.c
  user/alc/PQ_LAUNDRY/sys/kern/vfs_mountroot.c
  user/alc/PQ_LAUNDRY/sys/netinet/sctp_output.c
  user/alc/PQ_LAUNDRY/sys/netinet6/in6.c
  user/alc/PQ_LAUNDRY/sys/netinet6/in6_ifattach.c
  user/alc/PQ_LAUNDRY/sys/netinet6/nd6.c
  user/alc/PQ_LAUNDRY/sys/netinet6/nd6.h
  user/alc/PQ_LAUNDRY/sys/netinet6/nd6_rtr.c
  user/alc/PQ_LAUNDRY/sys/sys/vnode.h
  user/alc/PQ_LAUNDRY/tools/tools/cxgbetool/cxgbetool.8
  user/alc/PQ_LAUNDRY/tools/tools/cxgbetool/cxgbetool.c
  user/alc/PQ_LAUNDRY/usr.bin/cmp/cmp.c
  user/alc/PQ_LAUNDRY/usr.bin/col/col.c
  user/alc/PQ_LAUNDRY/usr.bin/dtc/checking.cc
  user/alc/PQ_LAUNDRY/usr.bin/dtc/checking.hh
  user/alc/PQ_LAUNDRY/usr.bin/dtc/dtb.cc
  user/alc/PQ_LAUNDRY/usr.bin/dtc/dtb.hh
  user/alc/PQ_LAUNDRY/usr.bin/dtc/dtc.1
  user/alc/PQ_LAUNDRY/usr.bin/dtc/dtc.cc
  user/alc/PQ_LAUNDRY/usr.bin/dtc/fdt.cc
  user/alc/PQ_LAUNDRY/usr.bin/dtc/fdt.hh
  user/alc/PQ_LAUNDRY/usr.bin/dtc/input_buffer.cc
  user/alc/PQ_LAUNDRY/usr.bin/dtc/input_buffer.hh
  user/alc/PQ_LAUNDRY/usr.bin/dtc/string.cc
  user/alc/PQ_LAUNDRY/usr.bin/dtc/util.hh
  user/alc/PQ_LAUNDRY/usr.bin/elfdump/elfdump.c
  user/alc/PQ_LAUNDRY/usr.bin/kdump/kdump.c
  user/alc/PQ_LAUNDRY/usr.bin/localedef/ctype.c
  user/alc/PQ_LAUNDRY/usr.bin/localedef/parser.y   (contents, props changed)
  user/alc/PQ_LAUNDRY/usr.bin/tee/tee.c
  user/alc/PQ_LAUNDRY/usr.bin/tr/tr.c
  user/alc/PQ_LAUNDRY/usr.sbin/arp/arp.4
  user/alc/PQ_LAUNDRY/usr.sbin/makefs/cd9660.c
  user/alc/PQ_LAUNDRY/usr.sbin/pmcstat/pmcstat.c
  user/alc/PQ_LAUNDRY/usr.sbin/portsnap/portsnap/portsnap.sh
Directory Properties:
  user/alc/PQ_LAUNDRY/   (props changed)
  user/alc/PQ_LAUNDRY/contrib/netbsd-tests/   (props changed)
  user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/   (props changed)

Modified: user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/locale/t_mbstowcs.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -88,7 +88,7 @@ static struct test {
 		0xFFFF, 0x5D, 0x5B, 0x10000, 0x10FFFF, 0x5D, 0x0A
 	},
 #ifdef __FreeBSD__
-	{	 1, -1, -1,  1,  1, -1, 1,  1,  1, 1, -1,  1,  1, -1, -1,
+	{	 1, -1, -1,  1,  1, -1, -1,  1,  1, 1, -1,  1,  1, -1, -1,
 #else
 	{	 1, -1, -1,  1,  1, -1, -1,  1,  1, -1, -1,  1,  1, -1, -1,
 #endif

Modified: user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/string/t_memmem.c
==============================================================================
--- user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/string/t_memmem.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/contrib/netbsd-tests/lib/libc/string/t_memmem.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -51,6 +51,8 @@ char p6[] = "9";
 int lp6 = 1;
 char p7[] = "654";
 int lp7 = 3;
+char p8[] = "89abc";
+int lp8 = 5;
 
 char b0[] = "";
 int lb0 = 0;
@@ -94,6 +96,7 @@ ATF_TC_BODY(memmem_basic, tc)
 
 	expect(memmem(b2, lb2, p4, lp4) == NULL);
 	expect(memmem(b2, lb2, p7, lp7) == NULL);
+	expect(memmem(b2, lb2, p8, lp8) == NULL);
 }
 
 ATF_TP_ADD_TCS(tp)

Modified: user/alc/PQ_LAUNDRY/etc/mtree/BSD.include.dist
==============================================================================
--- user/alc/PQ_LAUNDRY/etc/mtree/BSD.include.dist	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/etc/mtree/BSD.include.dist	Fri Oct  7 22:25:07 2016	(r306832)
@@ -336,6 +336,8 @@
     ssp
     ..
     sys
+        disk
+        ..
     ..
     teken
     ..

Modified: user/alc/PQ_LAUNDRY/include/Makefile
==============================================================================
--- user/alc/PQ_LAUNDRY/include/Makefile	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/include/Makefile	Fri Oct  7 22:25:07 2016	(r306832)
@@ -59,6 +59,7 @@ LSUBDIRS=	cam/ata cam/nvme cam/scsi \
 	security/audit \
 	security/mac_biba security/mac_bsdextended security/mac_lomac \
 	security/mac_mls security/mac_partition \
+	sys/disk \
 	ufs/ffs ufs/ufs
 
 LSUBSUBDIRS=	dev/mpt/mpilib

Modified: user/alc/PQ_LAUNDRY/sbin/init/init.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sbin/init/init.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sbin/init/init.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -870,6 +870,7 @@ single_user(void)
 	sigset_t mask;
 	const char *shell;
 	char *argv[2];
+	struct timeval tv, tn;
 #ifdef SECURE
 	struct ttyent *typ;
 	struct passwd *pp;
@@ -884,8 +885,13 @@ single_user(void)
 	if (Reboot) {
 		/* Instead of going single user, let's reboot the machine */
 		sync();
-		reboot(howto);
-		_exit(0);
+		if (reboot(howto) == -1) {
+			emergency("reboot(%#x) failed, %s", howto,
+			    strerror(errno));
+			_exit(1); /* panic and reboot */
+		}
+		warning("reboot(%#x) returned", howto);
+		_exit(0); /* panic as well */
 	}
 
 	shell = get_shell();
@@ -1002,7 +1008,14 @@ single_user(void)
 			 *  reboot(8) killed shell?
 			 */
 			warning("single user shell terminated.");
-			sleep(STALL_TIMEOUT);
+			gettimeofday(&tv, NULL);
+			tn = tv;
+			tv.tv_sec += STALL_TIMEOUT;
+			while (tv.tv_sec > tn.tv_sec || (tv.tv_sec ==
+			    tn.tv_sec && tv.tv_usec > tn.tv_usec)) {
+				sleep(1);
+				gettimeofday(&tn, NULL);
+			}
 			_exit(0);
 		} else {
 			warning("single user shell terminated, restarting");

Modified: user/alc/PQ_LAUNDRY/sys/boot/common/self_reloc.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/boot/common/self_reloc.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/boot/common/self_reloc.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -108,12 +108,18 @@ self_reloc(Elf_Addr baseaddr, ElfW_Dyn *
 			break;
 
 		case RELOC_TYPE_RELATIVE:
-			/* Address relative to the base address. */
 			newaddr = (Elf_Addr *)(rel->r_offset + baseaddr);
-			*newaddr += baseaddr;
-			/* Add the addend when the ABI uses them */ 
 #ifdef ELF_RELA
-			*newaddr += rel->r_addend;
+			/*
+			 * For R_AARCH64_RELATIVE we need to calculate the
+			 * delta between the address we are run from and the
+			 * address we are linked at. As the latter is 0 we
+			 * just use the address we are run from for this.
+			 */
+			*newaddr = baseaddr + rel->r_addend;
+#else
+			/* Address relative to the base address. */
+			*newaddr += baseaddr;
 #endif
 			break;
 		default:

Modified: user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_znode.h	Fri Oct  7 22:25:07 2016	(r306832)
@@ -355,6 +355,8 @@ extern zil_get_data_t zfs_get_data;
 extern zil_replay_func_t *zfs_replay_vector[TX_MAX_TYPE];
 extern int zfsfstype;
 
+extern int zfs_znode_parent_and_name(znode_t *zp, znode_t **dzpp, char *buf);
+
 #endif /* _KERNEL */
 
 extern int zfs_obj_to_path(objset_t *osp, uint64_t obj, char *buf, int len);

Modified: user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -1843,7 +1843,7 @@ zfsvfs_teardown(zfsvfs_t *zfsvfs, boolea
 		 */
 		(void) dnlc_purge_vfsp(zfsvfs->z_parent->z_vfs, 0);
 #ifdef FREEBSD_NAMECACHE
-		cache_purgevfs(zfsvfs->z_parent->z_vfs);
+		cache_purgevfs(zfsvfs->z_parent->z_vfs, true);
 #endif
 	}
 

Modified: user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -5934,8 +5934,19 @@ zfs_vptocnp(struct vop_vptocnp_args *ap)
 	}
 
 	if (zp->z_id != parent || zfsvfs->z_parent == zfsvfs) {
+		char name[MAXNAMLEN + 1];
+		znode_t *dzp;
+		size_t len;
+
+		error = zfs_znode_parent_and_name(zp, &dzp, name);
+		if (error == 0) {
+			len = strlen(name);
+			*ap->a_buflen -= len;
+			bcopy(name, ap->a_buf + *ap->a_buflen, len);
+			*ap->a_vpp = ZTOV(dzp);
+		}
 		ZFS_EXIT(zfsvfs);
-		return (vop_stdvptocnp(ap));
+		return (error);
 	}
 	ZFS_EXIT(zfsvfs);
 

Modified: user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -1936,7 +1936,6 @@ zfs_create_fs(objset_t *os, cred_t *cr, 
 		mutex_destroy(&zfsvfs->z_hold_mtx[i]);
 	kmem_free(zfsvfs, sizeof (zfsvfs_t));
 }
-
 #endif /* _KERNEL */
 
 static int
@@ -2192,3 +2191,35 @@ zfs_obj_to_stats(objset_t *osp, uint64_t
 	zfs_release_sa_handle(hdl, db, FTAG);
 	return (error);
 }
+
+#ifdef _KERNEL
+int
+zfs_znode_parent_and_name(znode_t *zp, znode_t **dzpp, char *buf)
+{
+	zfsvfs_t *zfsvfs = zp->z_zfsvfs;
+	uint64_t parent;
+	int is_xattrdir;
+	int err;
+
+	/* Extended attributes should not be visible as regular files. */
+	if ((zp->z_pflags & ZFS_XATTR) != 0)
+		return (SET_ERROR(EINVAL));
+
+	err = zfs_obj_to_pobj(zfsvfs->z_os, zp->z_sa_hdl, zfsvfs->z_attr_table,
+	    &parent, &is_xattrdir);
+	if (err != 0)
+		return (err);
+	ASSERT0(is_xattrdir);
+
+	/* No name as this is a root object. */
+	if (parent == zp->z_id)
+		return (SET_ERROR(EINVAL));
+
+	err = zap_value_search(zfsvfs->z_os, parent, zp->z_id,
+	    ZFS_DIRENT_OBJ(-1ULL), buf);
+	if (err != 0)
+		return (err);
+	err = zfs_zget(zfsvfs, parent, dzpp);
+	return (err);
+}
+#endif /* _KERNEL */

Modified: user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_ioctl.h
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_ioctl.h	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_ioctl.h	Fri Oct  7 22:25:07 2016	(r306832)
@@ -56,6 +56,7 @@ enum {
 	T4_SET_SCHED_QUEUE,             /* set queue class */
 	T4_GET_TRACER,			/* get information about a tracer */
 	T4_SET_TRACER,			/* program a tracer */
+	T4_LOAD_CFG,			/* copy a config file to card's flash */
 };
 
 struct t4_reg {
@@ -344,4 +345,5 @@ struct t4_tracer {
     struct t4_sched_queue)
 #define CHELSIO_T4_GET_TRACER	_IOWR('f', T4_GET_TRACER, struct t4_tracer)
 #define CHELSIO_T4_SET_TRACER	_IOW('f', T4_SET_TRACER, struct t4_tracer)
+#define CHELSIO_T4_LOAD_CFG	_IOW('f', T4_LOAD_CFG, struct t4_data)
 #endif

Modified: user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_main.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_main.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/dev/cxgbe/t4_main.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -549,6 +549,7 @@ static int set_tcb_rpl(struct sge_iq *, 
     struct mbuf *);
 static int get_sge_context(struct adapter *, struct t4_sge_context *);
 static int load_fw(struct adapter *, struct t4_data *);
+static int load_cfg(struct adapter *, struct t4_data *);
 static int read_card_mem(struct adapter *, int, struct t4_mem_range *);
 static int read_i2c(struct adapter *, struct t4_i2c_data *);
 #ifdef TCP_OFFLOAD
@@ -7099,7 +7100,7 @@ sysctl_pm_stats(SYSCTL_HANDLER_ARGS)
 	};
 	static const char *rx_stats[MAX_PM_NSTATS] = {
 		"Read:", "Write bypass:", "Write mem:", "Flush:",
-		" Rx FIFO wait", NULL, "Rx latency"
+		"Rx FIFO wait", NULL, "Rx latency"
 	};
 
 	rc = sysctl_wire_old_buffer(req, 0);
@@ -8620,6 +8621,38 @@ done:
 	return (rc);
 }
 
+static int
+load_cfg(struct adapter *sc, struct t4_data *cfg)
+{
+	int rc;
+	uint8_t *cfg_data = NULL;
+
+	rc = begin_synchronized_op(sc, NULL, SLEEP_OK | INTR_OK, "t4ldcf");
+	if (rc)
+		return (rc);
+
+	if (cfg->len == 0) {
+		/* clear */
+		rc = -t4_load_cfg(sc, NULL, 0);
+		goto done;
+	}
+
+	cfg_data = malloc(cfg->len, M_CXGBE, M_WAITOK);
+	if (cfg_data == NULL) {
+		rc = ENOMEM;
+		goto done;
+	}
+
+	rc = copyin(cfg->data, cfg_data, cfg->len);
+	if (rc == 0)
+		rc = -t4_load_cfg(sc, cfg_data, cfg->len);
+
+	free(cfg_data, M_CXGBE);
+done:
+	end_synchronized_op(sc, 0);
+	return (rc);
+}
+
 #define MAX_READ_BUF_SIZE (128 * 1024)
 static int
 read_card_mem(struct adapter *sc, int win, struct t4_mem_range *mr)
@@ -9177,6 +9210,9 @@ t4_ioctl(struct cdev *dev, unsigned long
 	case CHELSIO_T4_SET_TRACER:
 		rc = t4_set_tracer(sc, (struct t4_tracer *)data);
 		break;
+	case CHELSIO_T4_LOAD_CFG:
+		rc = load_cfg(sc, (struct t4_data *)data);
+		break;
 	default:
 		rc = ENOTTY;
 	}

Modified: user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -1128,12 +1128,21 @@ qla_config_intr_coalesce(qla_host_t *ha,
  *	Can be unicast, multicast or broadcast.
  */
 static int
-qla_config_mac_addr(qla_host_t *ha, uint8_t *mac_addr, uint32_t add_mac)
+qla_config_mac_addr(qla_host_t *ha, uint8_t *mac_addr, uint32_t add_mac,
+	uint32_t num_mac)
 {
 	q80_config_mac_addr_t		*cmac;
 	q80_config_mac_addr_rsp_t	*cmac_rsp;
 	uint32_t			err;
 	device_t			dev = ha->pci_dev;
+	int				i;
+	uint8_t				*mac_cpy = mac_addr;
+
+	if (num_mac > Q8_MAX_MAC_ADDRS) {
+		device_printf(dev, "%s: %s num_mac [0x%x] > Q8_MAX_MAC_ADDRS\n",
+			__func__, (add_mac ? "Add" : "Del"), num_mac);
+		return (-1);
+	}
 
 	cmac = (q80_config_mac_addr_t *)ha->hw.mbox;
 	bzero(cmac, (sizeof (q80_config_mac_addr_t)));
@@ -1149,9 +1158,13 @@ qla_config_mac_addr(qla_host_t *ha, uint
 		
 	cmac->cmd |= Q8_MBX_CMAC_CMD_CAM_INGRESS;
 
-	cmac->nmac_entries = 1;
+	cmac->nmac_entries = num_mac;
 	cmac->cntxt_id = ha->hw.rcv_cntxt_id;
-	bcopy(mac_addr, cmac->mac_addr[0].addr, 6); 
+
+	for (i = 0; i < num_mac; i++) {
+		bcopy(mac_addr, cmac->mac_addr[i].addr, Q8_ETHER_ADDR_LEN); 
+		mac_addr = mac_addr + ETHER_ADDR_LEN;
+	}
 
 	if (qla_mbx_cmd(ha, (uint32_t *)cmac,
 		(sizeof (q80_config_mac_addr_t) >> 2),
@@ -1165,11 +1178,14 @@ qla_config_mac_addr(qla_host_t *ha, uint
 	err = Q8_MBX_RSP_STATUS(cmac_rsp->regcnt_status);
 
 	if (err) {
-		device_printf(dev, "%s: %s "
-			"%02x:%02x:%02x:%02x:%02x:%02x failed1 [0x%08x]\n",
-			__func__, (add_mac ? "Add" : "Del"),
-			mac_addr[0], mac_addr[1], mac_addr[2],
-			mac_addr[3], mac_addr[4], mac_addr[5], err);
+		device_printf(dev, "%s: %s failed1 [0x%08x]\n", __func__,
+			(add_mac ? "Add" : "Del"), err);
+		for (i = 0; i < num_mac; i++) {
+			device_printf(dev, "%s: %02x:%02x:%02x:%02x:%02x:%02x\n",
+				__func__, mac_cpy[0], mac_cpy[1], mac_cpy[2],
+				mac_cpy[3], mac_cpy[4], mac_cpy[5]);
+			mac_cpy += ETHER_ADDR_LEN;
+		}
 		return (-1);
 	}
 	
@@ -2254,6 +2270,7 @@ ql_del_hw_if(qla_host_t *ha)
 	(void)qla_stop_nic_func(ha);
 
 	qla_del_rcv_cntxt(ha);
+
 	qla_del_xmt_cntxt(ha);
 
 	if (ha->hw.flags.init_intr_cnxt) {
@@ -2270,6 +2287,7 @@ ql_del_hw_if(qla_host_t *ha)
 
 		ha->hw.flags.init_intr_cnxt = 0;
 	}
+
 	return;
 }
 
@@ -2368,7 +2386,7 @@ ql_init_hw_if(qla_host_t *ha)
 	}
 	ha->hw.max_tx_segs = 0;
 
-	if (qla_config_mac_addr(ha, ha->hw.mac_addr, 1))
+	if (qla_config_mac_addr(ha, ha->hw.mac_addr, 1, 1))
 		return(-1);
 
 	ha->hw.flags.unicast_mac = 1;
@@ -2376,7 +2394,7 @@ ql_init_hw_if(qla_host_t *ha)
 	bcast_mac[0] = 0xFF; bcast_mac[1] = 0xFF; bcast_mac[2] = 0xFF;
 	bcast_mac[3] = 0xFF; bcast_mac[4] = 0xFF; bcast_mac[5] = 0xFF;
 
-	if (qla_config_mac_addr(ha, bcast_mac, 1))
+	if (qla_config_mac_addr(ha, bcast_mac, 1, 1))
 		return (-1);
 
 	ha->hw.flags.bcast_mac = 1;
@@ -2733,14 +2751,14 @@ qla_del_rcv_cntxt(qla_host_t *ha)
 		bcast_mac[0] = 0xFF; bcast_mac[1] = 0xFF; bcast_mac[2] = 0xFF;
 		bcast_mac[3] = 0xFF; bcast_mac[4] = 0xFF; bcast_mac[5] = 0xFF;
 
-		if (qla_config_mac_addr(ha, bcast_mac, 0))
+		if (qla_config_mac_addr(ha, bcast_mac, 0, 1))
 			return;
 		ha->hw.flags.bcast_mac = 0;
 
 	}
 
 	if (ha->hw.flags.unicast_mac) {
-		if (qla_config_mac_addr(ha, ha->hw.mac_addr, 0))
+		if (qla_config_mac_addr(ha, ha->hw.mac_addr, 0, 1))
 			return;
 		ha->hw.flags.unicast_mac = 0;
 	}
@@ -2926,12 +2944,20 @@ qla_init_xmt_cntxt(qla_host_t *ha)
 }
 
 static int
-qla_hw_add_all_mcast(qla_host_t *ha)
+qla_hw_all_mcast(qla_host_t *ha, uint32_t add_mcast)
 {
 	int i, nmcast;
+	uint32_t count = 0;
+	uint8_t *mcast;
 
 	nmcast = ha->hw.nmcast;
 
+	QL_DPRINT2(ha, (ha->pci_dev,
+		"%s:[0x%x] enter nmcast = %d \n", __func__, add_mcast, nmcast));
+
+	mcast = ha->hw.mac_addr_arr;
+	memset(mcast, 0, (Q8_MAX_MAC_ADDRS * ETHER_ADDR_LEN));
+
 	for (i = 0 ; ((i < Q8_MAX_NUM_MULTICAST_ADDRS) && nmcast); i++) {
 		if ((ha->hw.mcast[i].addr[0] != 0) || 
 			(ha->hw.mcast[i].addr[1] != 0) ||
@@ -2940,52 +2966,80 @@ qla_hw_add_all_mcast(qla_host_t *ha)
 			(ha->hw.mcast[i].addr[4] != 0) ||
 			(ha->hw.mcast[i].addr[5] != 0)) {
 
-			if (qla_config_mac_addr(ha, ha->hw.mcast[i].addr, 1)) {
-                		device_printf(ha->pci_dev, "%s: failed\n",
-					__func__);
-				return (-1);
+			bcopy(ha->hw.mcast[i].addr, mcast, ETHER_ADDR_LEN);
+			mcast = mcast + ETHER_ADDR_LEN;
+			count++;
+			
+			if (count == Q8_MAX_MAC_ADDRS) {
+				if (qla_config_mac_addr(ha, ha->hw.mac_addr_arr,
+					add_mcast, count)) {
+                			device_printf(ha->pci_dev,
+						"%s: failed\n", __func__);
+					return (-1);
+				}
+
+				count = 0;
+				mcast = ha->hw.mac_addr_arr;
+				memset(mcast, 0,
+					(Q8_MAX_MAC_ADDRS * ETHER_ADDR_LEN));
 			}
 
 			nmcast--;
 		}
 	}
+
+	if (count) {
+		if (qla_config_mac_addr(ha, ha->hw.mac_addr_arr, add_mcast,
+			count)) {
+                	device_printf(ha->pci_dev, "%s: failed\n", __func__);
+			return (-1);
+		}
+	}
+	QL_DPRINT2(ha, (ha->pci_dev,
+		"%s:[0x%x] exit nmcast = %d \n", __func__, add_mcast, nmcast));
+
 	return 0;
 }
 
 static int
-qla_hw_del_all_mcast(qla_host_t *ha)
+qla_hw_add_all_mcast(qla_host_t *ha)
 {
-	int i, nmcast;
+	int ret;
 
-	nmcast = ha->hw.nmcast;
+	ret = qla_hw_all_mcast(ha, 1);
 
-	for (i = 0 ; ((i < Q8_MAX_NUM_MULTICAST_ADDRS) && nmcast); i++) {
-		if ((ha->hw.mcast[i].addr[0] != 0) || 
-			(ha->hw.mcast[i].addr[1] != 0) ||
-			(ha->hw.mcast[i].addr[2] != 0) ||
-			(ha->hw.mcast[i].addr[3] != 0) ||
-			(ha->hw.mcast[i].addr[4] != 0) ||
-			(ha->hw.mcast[i].addr[5] != 0)) {
+	return (ret);
+}
 
-			if (qla_config_mac_addr(ha, ha->hw.mcast[i].addr, 0))
-				return (-1);
+static int
+qla_hw_del_all_mcast(qla_host_t *ha)
+{
+	int ret;
 
-			nmcast--;
-		}
-	}
-	return 0;
+	ret = qla_hw_all_mcast(ha, 0);
+
+	bzero(ha->hw.mcast, (sizeof (qla_mcast_t) * Q8_MAX_NUM_MULTICAST_ADDRS));
+	ha->hw.nmcast = 0;
+
+	return (ret);
 }
 
 static int
-qla_hw_add_mcast(qla_host_t *ha, uint8_t *mta)
+qla_hw_mac_addr_present(qla_host_t *ha, uint8_t *mta)
 {
 	int i;
 
 	for (i = 0; i < Q8_MAX_NUM_MULTICAST_ADDRS; i++) {
-
 		if (QL_MAC_CMP(ha->hw.mcast[i].addr, mta) == 0)
-			return 0; /* its been already added */
+			return (0); /* its been already added */
 	}
+	return (-1);
+}
+
+static int
+qla_hw_add_mcast(qla_host_t *ha, uint8_t *mta, uint32_t nmcast)
+{
+	int i;
 
 	for (i = 0; i < Q8_MAX_NUM_MULTICAST_ADDRS; i++) {
 
@@ -2996,29 +3050,28 @@ qla_hw_add_mcast(qla_host_t *ha, uint8_t
 			(ha->hw.mcast[i].addr[4] == 0) &&
 			(ha->hw.mcast[i].addr[5] == 0)) {
 
-			if (qla_config_mac_addr(ha, mta, 1))
-				return (-1);
-
 			bcopy(mta, ha->hw.mcast[i].addr, Q8_MAC_ADDR_LEN);
 			ha->hw.nmcast++;	
 
-			return 0;
+			mta = mta + ETHER_ADDR_LEN;
+			nmcast--;
+
+			if (nmcast == 0)
+				break;
 		}
+
 	}
 	return 0;
 }
 
 static int
-qla_hw_del_mcast(qla_host_t *ha, uint8_t *mta)
+qla_hw_del_mcast(qla_host_t *ha, uint8_t *mta, uint32_t nmcast)
 {
 	int i;
 
 	for (i = 0; i < Q8_MAX_NUM_MULTICAST_ADDRS; i++) {
 		if (QL_MAC_CMP(ha->hw.mcast[i].addr, mta) == 0) {
 
-			if (qla_config_mac_addr(ha, mta, 0))
-				return (-1);
-
 			ha->hw.mcast[i].addr[0] = 0;
 			ha->hw.mcast[i].addr[1] = 0;
 			ha->hw.mcast[i].addr[2] = 0;
@@ -3028,7 +3081,11 @@ qla_hw_del_mcast(qla_host_t *ha, uint8_t
 
 			ha->hw.nmcast--;	
 
-			return 0;
+			mta = mta + ETHER_ADDR_LEN;
+			nmcast--;
+
+			if (nmcast == 0)
+				break;
 		}
 	}
 	return 0;
@@ -3036,30 +3093,75 @@ qla_hw_del_mcast(qla_host_t *ha, uint8_t
 
 /*
  * Name: ql_hw_set_multi
- * Function: Sets the Multicast Addresses provided the host O.S into the
+ * Function: Sets the Multicast Addresses provided by the host O.S into the
  *	hardware (for the given interface)
  */
 int
-ql_hw_set_multi(qla_host_t *ha, uint8_t *mcast, uint32_t mcnt,
+ql_hw_set_multi(qla_host_t *ha, uint8_t *mcast_addr, uint32_t mcnt,
 	uint32_t add_mac)
 {
+	uint8_t *mta = mcast_addr;
 	int i;
-	uint8_t *mta = mcast;
 	int ret = 0;
+	uint32_t count = 0;
+	uint8_t *mcast;
+
+	mcast = ha->hw.mac_addr_arr;
+	memset(mcast, 0, (Q8_MAX_MAC_ADDRS * ETHER_ADDR_LEN));
 
 	for (i = 0; i < mcnt; i++) {
-		if (add_mac) {
-			ret = qla_hw_add_mcast(ha, mta);
-			if (ret)
-				break;
-		} else {
-			ret = qla_hw_del_mcast(ha, mta);
-			if (ret)
-				break;
+		if (mta[0] || mta[1] || mta[2] || mta[3] || mta[4] || mta[5]) {
+			if (add_mac) {
+				if (qla_hw_mac_addr_present(ha, mta) != 0) {
+					bcopy(mta, mcast, ETHER_ADDR_LEN);
+					mcast = mcast + ETHER_ADDR_LEN;
+					count++;
+				}
+			} else {
+				if (qla_hw_mac_addr_present(ha, mta) == 0) {
+					bcopy(mta, mcast, ETHER_ADDR_LEN);
+					mcast = mcast + ETHER_ADDR_LEN;
+					count++;
+				}
+			}
+		}
+		if (count == Q8_MAX_MAC_ADDRS) {
+			if (qla_config_mac_addr(ha, ha->hw.mac_addr_arr,
+				add_mac, count)) {
+                		device_printf(ha->pci_dev, "%s: failed\n",
+					__func__);
+				return (-1);
+			}
+
+			if (add_mac) {
+				qla_hw_add_mcast(ha, ha->hw.mac_addr_arr,
+					count);
+			} else {
+				qla_hw_del_mcast(ha, ha->hw.mac_addr_arr,
+					count);
+			}
+
+			count = 0;
+			mcast = ha->hw.mac_addr_arr;
+			memset(mcast, 0, (Q8_MAX_MAC_ADDRS * ETHER_ADDR_LEN));
 		}
 			
 		mta += Q8_MAC_ADDR_LEN;
 	}
+
+	if (count) {
+		if (qla_config_mac_addr(ha, ha->hw.mac_addr_arr, add_mac,
+			count)) {
+                	device_printf(ha->pci_dev, "%s: failed\n", __func__);
+			return (-1);
+		}
+		if (add_mac) {
+			qla_hw_add_mcast(ha, ha->hw.mac_addr_arr, count);
+		} else {
+			qla_hw_del_mcast(ha, ha->hw.mac_addr_arr, count);
+		}
+	}
+
 	return (ret);
 }
 

Modified: user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.h
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.h	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_hw.h	Fri Oct  7 22:25:07 2016	(r306832)
@@ -210,7 +210,7 @@
 
 #define Q8_NUM_MBOX	512
 
-#define Q8_MAX_NUM_MULTICAST_ADDRS	1023
+#define Q8_MAX_NUM_MULTICAST_ADDRS	1022
 #define Q8_MAC_ADDR_LEN			6
 
 /*
@@ -511,8 +511,9 @@ typedef struct _q80_config_intr_coalesc_
 /*
  * Configure MAC Address
  */
+#define Q8_ETHER_ADDR_LEN		6
 typedef struct _q80_mac_addr {
-	uint8_t		addr[6];
+	uint8_t		addr[Q8_ETHER_ADDR_LEN];
 	uint16_t	vlan_tci;
 } __packed q80_mac_addr_t;
 
@@ -1548,7 +1549,7 @@ typedef struct _qla_hw_tx_cntxt {
 
 typedef struct _qla_mcast {
 	uint16_t	rsrvd;
-	uint8_t		addr[6];
+	uint8_t		addr[ETHER_ADDR_LEN];
 } __packed qla_mcast_t; 
 
 typedef struct _qla_rdesc {
@@ -1660,6 +1661,7 @@ typedef struct _qla_hw {
 	/* multicast address list */
 	uint32_t	nmcast;
 	qla_mcast_t	mcast[Q8_MAX_NUM_MULTICAST_ADDRS];
+	uint8_t		mac_addr_arr[(Q8_MAX_MAC_ADDRS * ETHER_ADDR_LEN)];
 
 	/* reset sequence */
 #define Q8_MAX_RESET_SEQ_IDX	16

Modified: user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_os.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_os.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_os.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -243,6 +243,8 @@ qla_watchdog(void *arg)
 			ha->flags.qla_watchdog_pause = 1;
 			ha->qla_initiate_recovery = 0;
 			ha->err_inject = 0;
+			device_printf(ha->pci_dev,
+				"%s: taskqueue_enqueue(err_task) \n", __func__);
 			taskqueue_enqueue(ha->err_tq, &ha->err_task);
 		} else if (ha->flags.qla_interface_up) {
 
@@ -452,7 +454,7 @@ qla_pci_attach(device_t dev)
 
 
 	TASK_INIT(&ha->tx_task, 0, qla_tx_done, ha);
-	ha->tx_tq = taskqueue_create_fast("qla_txq", M_NOWAIT,
+	ha->tx_tq = taskqueue_create("qla_txq", M_NOWAIT,
 			taskqueue_thread_enqueue, &ha->tx_tq);
 	taskqueue_start_threads(&ha->tx_tq, 1, PI_NET, "%s txq",
 		device_get_nameunit(ha->pci_dev));
@@ -470,13 +472,13 @@ qla_pci_attach(device_t dev)
 		qla_watchdog, ha);
 
 	TASK_INIT(&ha->err_task, 0, qla_error_recovery, ha);
-	ha->err_tq = taskqueue_create_fast("qla_errq", M_NOWAIT,
+	ha->err_tq = taskqueue_create("qla_errq", M_NOWAIT,
 			taskqueue_thread_enqueue, &ha->err_tq);
 	taskqueue_start_threads(&ha->err_tq, 1, PI_NET, "%s errq",
 		device_get_nameunit(ha->pci_dev));
 
         TASK_INIT(&ha->async_event_task, 0, qla_async_event, ha);
-        ha->async_event_tq = taskqueue_create_fast("qla_asyncq", M_NOWAIT,
+        ha->async_event_tq = taskqueue_create("qla_asyncq", M_NOWAIT,
                         taskqueue_thread_enqueue, &ha->async_event_tq);
         taskqueue_start_threads(&ha->async_event_tq, 1, PI_NET, "%s asyncq",
                 device_get_nameunit(ha->pci_dev));

Modified: user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_ver.h
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_ver.h	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/dev/qlxgbe/ql_ver.h	Fri Oct  7 22:25:07 2016	(r306832)
@@ -36,6 +36,6 @@
 
 #define QLA_VERSION_MAJOR 	3
 #define QLA_VERSION_MINOR	10
-#define QLA_VERSION_BUILD       30
+#define QLA_VERSION_BUILD       31
 
 #endif /* #ifndef _QL_VER_H_ */

Modified: user/alc/PQ_LAUNDRY/sys/kern/vfs_cache.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/kern/vfs_cache.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/kern/vfs_cache.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -1756,7 +1756,7 @@ cache_purge_negative(struct vnode *vp)
  * Flush all entries referencing a particular filesystem.
  */
 void
-cache_purgevfs(struct mount *mp)
+cache_purgevfs(struct mount *mp, bool force)
 {
 	TAILQ_HEAD(, namecache) ncps;
 	struct mtx *vlp1, *vlp2;
@@ -1768,7 +1768,7 @@ cache_purgevfs(struct mount *mp)
 
 	/* Scan hash tables for applicable entries */
 	SDT_PROBE1(vfs, namecache, purgevfs, done, mp);
-	if (mp->mnt_nvnodelistsize <= ncpurgeminvnodes)
+	if (!force && mp->mnt_nvnodelistsize <= ncpurgeminvnodes)
 		return;
 	TAILQ_INIT(&ncps);
 	n_nchash = nchash + 1;

Modified: user/alc/PQ_LAUNDRY/sys/kern/vfs_mount.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/kern/vfs_mount.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/kern/vfs_mount.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -1352,7 +1352,7 @@ dounmount(struct mount *mp, int flags, s
 	mp->mnt_flag &= ~MNT_ASYNC;
 	mp->mnt_kern_flag &= ~MNTK_ASYNC;
 	MNT_IUNLOCK(mp);
-	cache_purgevfs(mp);	/* remove cache entries for this file sys */
+	cache_purgevfs(mp, false); /* remove cache entries for this file sys */
 	vfs_deallocate_syncvnode(mp);
 	/*
 	 * For forced unmounts, move process cdir/rdir refs on the fs root

Modified: user/alc/PQ_LAUNDRY/sys/kern/vfs_mountroot.c
==============================================================================
--- user/alc/PQ_LAUNDRY/sys/kern/vfs_mountroot.c	Fri Oct  7 22:17:43 2016	(r306831)
+++ user/alc/PQ_LAUNDRY/sys/kern/vfs_mountroot.c	Fri Oct  7 22:25:07 2016	(r306832)
@@ -298,9 +298,9 @@ vfs_mountroot_shuffle(struct thread *td,
 	TAILQ_INSERT_TAIL(&mountlist, mpdevfs, mnt_list);
 	mtx_unlock(&mountlist_mtx);
 
-	cache_purgevfs(mporoot);
+	cache_purgevfs(mporoot, true);
 	if (mporoot != mpdevfs)
-		cache_purgevfs(mpdevfs);
+		cache_purgevfs(mpdevfs, true);
 
 	VFS_ROOT(mporoot, LK_EXCLUSIVE, &vporoot);
 
@@ -315,7 +315,7 @@ vfs_mountroot_shuffle(struct thread *td,
 	/* Set up the new rootvnode, and purge the cache */
 	mpnroot->mnt_vnodecovered = NULL;
 	set_rootvnode();
-	cache_purgevfs(rootvnode->v_mount);
+	cache_purgevfs(rootvnode->v_mount, true);
 
 	if (mporoot != mpdevfs) {
 		/* Remount old root under /.mount or /mnt */

Copied: user/alc/PQ_LAUNDRY/sys/mips/conf/AR5312_BASE.hints (from r306831, head/sys/mips/conf/AR5312_BASE.hints)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/alc/PQ_LAUNDRY/sys/mips/conf/AR5312_BASE.hints	Fri Oct  7 22:25:07 2016	(r306832, copy of r306831, head/sys/mips/conf/AR5312_BASE.hints)
@@ -0,0 +1,29 @@
+# $FreeBSD$
+hint.apb.0.at="nexus0"
+hint.apb.0.irq=4
+
+# uart0
+hint.uart.0.at="apb0"
+# see atheros/uart_cpu_ar71xx.c why +3
+hint.uart.0.maddr=0x1C000003
+hint.uart.0.msize=0x20
+#hint.uart.0.irq=4
+#hint.uart.0.flags="0x30"
+
+# Watchdog
+hint.ar5315_wdog.0.at="apb0"
+hint.ar5315_wdog.0.irq=6
+
+# Ethernet
+hint.are.0.at="nexus0" 
+hint.are.0.maddr=0x18100000
+hint.are.0.msize=0x00100000  
+hint.are.0.irq=1
+
+hint.are.1.at="nexus0"     
+hint.are.1.maddr=0x18200000
+hint.are.1.msize=0x00100000
+hint.are.1.irq=2
+
+# GEOM redboot FIS directory offset
+#hint.redboot.0.fisoffset="0x007e0000"

Copied: user/alc/PQ_LAUNDRY/sys/mips/conf/AR5315_BASE.hints (from r306831, head/sys/mips/conf/AR5315_BASE.hints)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/alc/PQ_LAUNDRY/sys/mips/conf/AR5315_BASE.hints	Fri Oct  7 22:25:07 2016	(r306832, copy of r306831, head/sys/mips/conf/AR5315_BASE.hints)
@@ -0,0 +1,34 @@
+# $FreeBSD$
+hint.apb.0.at="nexus0"
+hint.apb.0.irq=0
+
+# uart0
+hint.uart.0.at="apb0"
+hint.uart.0.maddr=0x11100003
+hint.uart.0.msize=0x20
+#hint.uart.0.irq=0
+#hint.uart.0.flags="0x30"
+
+# Watchdog
+hint.ar5315_wdog.0.at="apb0"
+hint.ar5315_wdog.0.irq=7
+
+# SPI
+hint.spi.0.at="nexus0"
+hint.spi.0.maddr=0x11300000
+hint.spi.0.msize=0x0000000c
+#hint.spi.0.irq=2
+
+# Ethernet
+hint.are.0.at="nexus0"
+hint.are.0.maddr=0x10500000
+hint.are.0.msize=0x500000
+hint.are.0.irq=2
+
+# Flash
+hint.mx25l.0.at="spibus0"       
+hint.mx25l.0.cs=0
+
+# GEOM redboot FIS directory offset
+#hint.redboot.0.fisoffset="0x007e0000"
+

Copied: user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR5312 (from r306831, head/sys/mips/conf/std.AR5312)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR5312	Fri Oct  7 22:25:07 2016	(r306832, copy of r306831, head/sys/mips/conf/std.AR5312)
@@ -0,0 +1,80 @@
+#
+# AR5312 -- Kernel configuration file for FreeBSD/MIPS for Atheros 5312 systems
+#
+# This includes all the common drivers for the AR5312 boards
+#
+# $FreeBSD$
+#
+
+machine		mips mips
+#ident		AR5312_BASE
+cpu		CPU_MIPS4KC
+makeoptions	KERNLOADADDR=0x80050000
+options 	HZ=1000
+
+makeoptions	MODULES_OVERRIDE=""
+
+files		"../atheros/ar531x/files.ar5315"
+
+options 	INTRNG
+options 	AR531X_1ST_GENERATION
+
+# For now, hints are per-board.
+
+hints		"AR5312_BASE.hints"
+
+makeoptions	DEBUG=-g		#Build kernel with gdb(1) debug symbols
+
+# For small memory footprints
+options VM_KMEM_SIZE_SCALE=1
+
+options 	DDB
+options 	KDB
+
+options 	SCHED_4BSD		#4BSD scheduler
+options 	INET			#InterNETworking
+options 	INET6			# IPv6
+
+# options 	NFSCL		#Network Filesystem Client
+
+options 	PSEUDOFS		#Pseudo-filesystem framework
+options 	_KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions
+
+# options 	NFS_LEGACYRPC
+# Debugging for use in -current
+options 	INVARIANTS
+options 	INVARIANT_SUPPORT
+options 	WITNESS
+options 	WITNESS_SKIPSPIN
+options 	DEBUG_REDZONE
+options 	DEBUG_MEMGUARD
+
+options         FFS                     #Berkeley Fast Filesystem
+# options         SOFTUPDATES             #Enable FFS soft updates support
+# options         UFS_ACL                 #Support for access control lists
+# options         UFS_DIRHASH             #Improve performance on big directories
+# options 	MSDOSFS			# Read MSDOS filesystems; useful for USB/CF
+
+device		mii
+device		are
+
+device		cfi
+options		CFI_HARDWAREBYTESWAP
+device		geom_redboot
+
+device		ar5315_wdog
+
+device		uart
+device		uart_ar5315
+
+device		loop
+device		ether
+device		md
+device		bpf
+device		random
+
+options 	ARGE_DEBUG	# Enable if_arge debugging for now
+
+# Enable GPIO
+device		gpio
+device		gpioled

Copied: user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR5315 (from r306831, head/sys/mips/conf/std.AR5315)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/alc/PQ_LAUNDRY/sys/mips/conf/std.AR5315	Fri Oct  7 22:25:07 2016	(r306832, copy of r306831, head/sys/mips/conf/std.AR5315)
@@ -0,0 +1,80 @@
+#
+# AR5315 -- Kernel configuration file for FreeBSD/MIPS for Atheros 5315 systems
+#
+# This includes all the common drivers for the AR5315 boards
+#
+# $FreeBSD$
+#
+
+machine		mips mips
+#ident		AR5315_BASE
+cpu		CPU_MIPS4KC
+makeoptions	KERNLOADADDR=0x80050000
+options 	HZ=1000
+
+makeoptions	MODULES_OVERRIDE=""
+
+files		"../atheros/ar531x/files.ar5315"
+
+options 	INTRNG
+
+# For now, hints are per-board.
+
+hints		"AR5315_BASE.hints"
+
+makeoptions	DEBUG=-g		#Build kernel with gdb(1) debug symbols
+
+# For small memory footprints
+options VM_KMEM_SIZE_SCALE=1
+
+options 	DDB
+options 	KDB
+
+options 	SCHED_4BSD		#4BSD scheduler
+options 	INET			#InterNETworking
+options 	INET6			# IPv6
+
+# options 	NFSCL		#Network Filesystem Client
+

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



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