Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 31 Jan 2015 17:08:03 +0000 (UTC)
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r277984 - in user/dchagin/lemul: bin/ps bin/sh contrib/tcpdump include sys/arm/allwinner sys/arm/altera/socfpga sys/arm/freescale/imx sys/arm/freescale/vybrid sys/arm/rockchip sys/arm/s...
Message-ID:  <201501311708.t0VH833C082412@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dchagin
Date: Sat Jan 31 17:08:02 2015
New Revision: 277984
URL: https://svnweb.freebsd.org/changeset/base/277984

Log:
  Merge from head.

Modified:
  user/dchagin/lemul/bin/ps/ps.c
  user/dchagin/lemul/bin/sh/jobs.c
  user/dchagin/lemul/bin/sh/trap.c
  user/dchagin/lemul/contrib/tcpdump/print-atm.c
  user/dchagin/lemul/contrib/tcpdump/print-llc.c
  user/dchagin/lemul/include/semaphore.h
  user/dchagin/lemul/sys/arm/allwinner/a10_gpio.c
  user/dchagin/lemul/sys/arm/altera/socfpga/socfpga_gpio.c
  user/dchagin/lemul/sys/arm/freescale/imx/imx_gpio.c
  user/dchagin/lemul/sys/arm/freescale/vybrid/vf_gpio.c
  user/dchagin/lemul/sys/arm/rockchip/rk30xx_gpio.c
  user/dchagin/lemul/sys/arm/samsung/exynos/exynos5_pad.c
  user/dchagin/lemul/sys/arm/ti/ti_gpio.c
  user/dchagin/lemul/sys/conf/files
  user/dchagin/lemul/sys/dev/gpio/gpio_if.m
  user/dchagin/lemul/sys/dev/iscsi/icl_soft.c
  user/dchagin/lemul/sys/dev/iscsi/icl_wrappers.h
  user/dchagin/lemul/sys/dev/usb/input/uhid.c
  user/dchagin/lemul/sys/fs/tmpfs/tmpfs_subr.c
  user/dchagin/lemul/sys/fs/tmpfs/tmpfs_vnops.c
  user/dchagin/lemul/sys/kern/kern_umtx.c
  user/dchagin/lemul/sys/mips/atheros/ar71xx_gpio.c
  user/dchagin/lemul/sys/mips/atheros/ar71xx_gpiovar.h
  user/dchagin/lemul/sys/mips/cavium/octeon_gpio.c
  user/dchagin/lemul/sys/mips/cavium/octeon_gpiovar.h
  user/dchagin/lemul/sys/mips/rt305x/rt305x_gpio.c
  user/dchagin/lemul/sys/mips/rt305x/rt305x_gpiovar.h
Directory Properties:
  user/dchagin/lemul/   (props changed)
  user/dchagin/lemul/contrib/tcpdump/   (props changed)
  user/dchagin/lemul/include/   (props changed)
  user/dchagin/lemul/sys/   (props changed)
  user/dchagin/lemul/sys/conf/   (props changed)

Modified: user/dchagin/lemul/bin/ps/ps.c
==============================================================================
--- user/dchagin/lemul/bin/ps/ps.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/bin/ps/ps.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -178,7 +178,7 @@ main(int argc, char *argv[])
 	KINFO *kinfo = NULL, *next_KINFO;
 	KINFO_STR *ks;
 	struct varent *vent;
-	struct winsize ws;
+	struct winsize ws = { .ws_row = 0 };
 	const char *nlistf, *memf, *fmtstr, *str;
 	char *cols;
 	int all, ch, elem, flag, _fmt, i, lineno, linelen, left;

Modified: user/dchagin/lemul/bin/sh/jobs.c
==============================================================================
--- user/dchagin/lemul/bin/sh/jobs.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/bin/sh/jobs.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -87,8 +87,8 @@ static int ttyfd = -1;
 
 /* mode flags for dowait */
 #define DOWAIT_BLOCK	0x1 /* wait until a child exits */
-#define DOWAIT_SIG	0x2 /* if DOWAIT_BLOCK, abort on SIGINT/SIGQUIT */
-#define DOWAIT_SIG_ANY	0x4 /* if DOWAIT_SIG, abort on any signal */
+#define DOWAIT_SIG	0x2 /* if DOWAIT_BLOCK, abort on signal */
+#define DOWAIT_SIG_TRAP	0x4 /* if DOWAIT_SIG, abort on trapped signal only */
 
 #if JOBS
 static void restartjob(struct job *);
@@ -1028,7 +1028,7 @@ waitforjob(struct job *jp, int *origstat
 	TRACE(("waitforjob(%%%td) called\n", jp - jobtab + 1));
 	while (jp->state == 0)
 		if (dowait(DOWAIT_BLOCK | (Tflag ? DOWAIT_SIG |
-		    DOWAIT_SIG_ANY : 0), jp) == -1)
+		    DOWAIT_SIG_TRAP : 0), jp) == -1)
 			dotrap();
 #if JOBS
 	if (jp->jobctl) {
@@ -1120,7 +1120,7 @@ dowait(int mode, struct job *job)
 		TRACE(("wait returns %d, status=%d\n", (int)pid, status));
 		if (pid == 0 && (mode & DOWAIT_SIG) != 0) {
 			pid = -1;
-			if (((mode & DOWAIT_SIG_ANY) != 0 ?
+			if (((mode & DOWAIT_SIG_TRAP) != 0 ?
 			    pendingsig : pendingsig_waitcmd) != 0) {
 				errno = EINTR;
 				break;

Modified: user/dchagin/lemul/bin/sh/trap.c
==============================================================================
--- user/dchagin/lemul/bin/sh/trap.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/bin/sh/trap.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -74,7 +74,7 @@ __FBSDID("$FreeBSD$");
 
 static char sigmode[NSIG];	/* current value of signal */
 volatile sig_atomic_t pendingsig;	/* indicates some signal received */
-volatile sig_atomic_t pendingsig_waitcmd;	/* indicates SIGINT/SIGQUIT received */
+volatile sig_atomic_t pendingsig_waitcmd;	/* indicates wait builtin should be interrupted */
 static int in_dotrap;			/* do we execute in a trap handler? */
 static char *volatile trap[NSIG];	/* trap handler commands */
 static volatile sig_atomic_t gotsig[NSIG];
@@ -400,6 +400,7 @@ onsig(int signo)
 	    (signo != SIGCHLD || !ignore_sigchld)) {
 		gotsig[signo] = 1;
 		pendingsig = signo;
+		pendingsig_waitcmd = signo;
 	}
 }
 

Modified: user/dchagin/lemul/contrib/tcpdump/print-atm.c
==============================================================================
--- user/dchagin/lemul/contrib/tcpdump/print-atm.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/contrib/tcpdump/print-atm.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -167,7 +167,7 @@ atm_if_print(netdissect_options *ndo,
 	uint32_t llchdr;
 	u_int hdrlen = 0;
 
-	if (caplen < 8) {
+	if (caplen < 1 || length < 1) {
 		ND_PRINT((ndo, "%s", tstr));
 		return (caplen);
 	}
@@ -181,6 +181,15 @@ atm_if_print(netdissect_options *ndo,
         }
 
 	/*
+	 * Must have at least a DSAP, an SSAP, and the first byte of the
+	 * control field.
+	 */
+	if (caplen < 3 || length < 3) {
+		ND_PRINT((ndo, "%s", tstr));
+		return (caplen);
+	}
+
+	/*
 	 * Extract the presumed LLC header into a variable, for quick
 	 * testing.
 	 * Then check for a header that's neither a header for a SNAP
@@ -207,6 +216,10 @@ atm_if_print(netdissect_options *ndo,
 		 * packets?  If so, could it be changed to use a
 		 * new DLT_IEEE802_6 value if we added it?
 		 */
+		if (caplen < 20 || length < 20) {
+			ND_PRINT((ndo, "%s", tstr));
+			return (caplen);
+		}
 		if (ndo->ndo_eflag)
 			ND_PRINT((ndo, "%08x%08x %08x%08x ",
 			       EXTRACT_32BITS(p),

Modified: user/dchagin/lemul/contrib/tcpdump/print-llc.c
==============================================================================
--- user/dchagin/lemul/contrib/tcpdump/print-llc.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/contrib/tcpdump/print-llc.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -153,10 +153,10 @@ llc_print(netdissect_options *ndo, const
 
 	*extracted_ethertype = 0;
 
-	if (caplen < 3) {
+	if (caplen < 3 || length < 3) {
 		ND_PRINT((ndo, "[|llc]"));
 		ND_DEFAULTPRINT((u_char *)p, caplen);
-		return(0);
+		return (1);
 	}
 
 	dsap_field = *p;
@@ -179,10 +179,10 @@ llc_print(netdissect_options *ndo, const
 		 * The control field in I and S frames is
 		 * 2 bytes...
 		 */
-		if (caplen < 4) {
+		if (caplen < 4 || length < 4) {
 			ND_PRINT((ndo, "[|llc]"));
 			ND_DEFAULTPRINT((u_char *)p, caplen);
-			return(0);
+			return (1);
 		}
 
 		/*
@@ -242,6 +242,11 @@ llc_print(netdissect_options *ndo, const
 
 	if (ssap == LLCSAP_IP && dsap == LLCSAP_IP &&
 	    control == LLC_UI) {
+		if (caplen < 4 || length < 4) {
+			ND_PRINT((ndo, "[|llc]"));
+			ND_DEFAULTPRINT((u_char *)p, caplen);
+			return (1);
+		}
 		ip_print(ndo, p+4, length-4);
 		return (1);
 	}
@@ -370,6 +375,8 @@ snap_print(netdissect_options *ndo, cons
 	register int ret;
 
 	ND_TCHECK2(*p, 5);
+	if (caplen < 5 || length < 5)
+		goto trunc;
 	orgcode = EXTRACT_24BITS(p);
 	et = EXTRACT_16BITS(p + 3);
 

Modified: user/dchagin/lemul/include/semaphore.h
==============================================================================
--- user/dchagin/lemul/include/semaphore.h	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/include/semaphore.h	Sat Jan 31 17:08:02 2015	(r277984)
@@ -36,6 +36,8 @@
 #include <sys/_types.h>
 #include <sys/_umtx.h>
 
+#include <machine/_limits.h>
+
 struct _sem {
 	__uint32_t	_magic;
 	struct _usem2	_kern;

Modified: user/dchagin/lemul/sys/arm/allwinner/a10_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/arm/allwinner/a10_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/allwinner/a10_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -427,7 +427,7 @@ a10_gpio_attach(device_t dev)
 	    RF_ACTIVE);
 	if (!sc->sc_mem_res) {
 		device_printf(dev, "cannot allocate memory window\n");
-		return (ENXIO);
+		goto fail;
 	}
 
 	sc->sc_bst = rman_get_bustag(sc->sc_mem_res);
@@ -437,9 +437,8 @@ a10_gpio_attach(device_t dev)
 	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
 	    RF_ACTIVE);
 	if (!sc->sc_irq_res) {
-		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
 		device_printf(dev, "cannot allocate interrupt\n");
-		return (ENXIO);
+		goto fail;
 	}
 
 	/* Find our node. */
@@ -472,6 +471,8 @@ fail:
 		bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_irq_res);
 	if (sc->sc_mem_res)
 		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
+	mtx_destroy(&sc->sc_mtx);
+
 	return (ENXIO);
 }
 

Modified: user/dchagin/lemul/sys/arm/altera/socfpga/socfpga_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/arm/altera/socfpga/socfpga_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/altera/socfpga/socfpga_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -163,6 +163,7 @@ socfpga_gpio_attach(device_t dev)
 
 	if (bus_alloc_resources(dev, socfpga_gpio_spec, sc->res)) {
 		device_printf(dev, "could not allocate resources\n");
+		mtx_destroy(&sc->sc_mtx);
 		return (ENXIO);
 	}
 

Modified: user/dchagin/lemul/sys/arm/freescale/imx/imx_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/arm/freescale/imx/imx_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/freescale/imx/imx_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -389,6 +389,8 @@ imx51_gpio_attach(device_t dev)
 
 	if (bus_alloc_resources(dev, imx_gpio_spec, sc->sc_res)) {
 		device_printf(dev, "could not allocate resources\n");
+		bus_release_resources(dev, imx_gpio_spec, sc->sc_res);
+		mtx_destroy(&sc->sc_mtx);
 		return (ENXIO);
 	}
 
@@ -411,6 +413,7 @@ imx51_gpio_attach(device_t dev)
 		    imx51_gpio_intr, NULL, sc, &sc->gpio_ih[irq]))) {
 			device_printf(dev,
 			    "WARNING: unable to register interrupt handler\n");
+			imx51_gpio_detach(dev);
 			return (ENXIO);
 		}
 	}
@@ -434,6 +437,7 @@ imx51_gpio_attach(device_t dev)
 static int
 imx51_gpio_detach(device_t dev)
 {
+	int irq;
 	struct imx51_gpio_softc *sc;
 
 	sc = device_get_softc(dev);
@@ -441,13 +445,12 @@ imx51_gpio_detach(device_t dev)
 	KASSERT(mtx_initialized(&sc->sc_mtx), ("gpio mutex not initialized"));
 
 	bus_generic_detach(dev);
-
-	if (sc->sc_res[3])
-		bus_release_resources(dev, imx_gpio0irq_spec, &sc->sc_res[3]);
-
-	if (sc->sc_res[0])
-		bus_release_resources(dev, imx_gpio_spec, sc->sc_res);
-
+	for (irq = 1; irq <= sc->sc_l_irq; irq ++) {
+		if (sc->gpio_ih[irq])
+			bus_teardown_intr(dev, sc->sc_res[irq], sc->gpio_ih[irq]);
+	}
+	bus_release_resources(dev, imx_gpio0irq_spec, &sc->sc_res[3]);
+	bus_release_resources(dev, imx_gpio_spec, sc->sc_res);
 	mtx_destroy(&sc->sc_mtx);
 
 	return(0);

Modified: user/dchagin/lemul/sys/arm/freescale/vybrid/vf_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/arm/freescale/vybrid/vf_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/freescale/vybrid/vf_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -125,6 +125,7 @@ vf_gpio_attach(device_t dev)
 
 	if (bus_alloc_resources(dev, vf_gpio_spec, sc->res)) {
 		device_printf(dev, "could not allocate resources\n");
+		mtx_destroy(&sc->sc_mtx);
 		return (ENXIO);
 	}
 

Modified: user/dchagin/lemul/sys/arm/rockchip/rk30xx_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/arm/rockchip/rk30xx_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/rockchip/rk30xx_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -399,13 +399,14 @@ rk30_gpio_attach(device_t dev)
 	if (rk30_gpio_sc)
 		return (ENXIO);
 	sc->sc_dev = dev;
+	mtx_init(&sc->sc_mtx, "rk30 gpio", "gpio", MTX_DEF);
 
 	rid = 0;
 	sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
 	    RF_ACTIVE);
 	if (!sc->sc_mem_res) {
 		device_printf(dev, "cannot allocate memory window\n");
-		return (ENXIO);
+		goto fail;
 	}
 	sc->sc_bst = rman_get_bustag(sc->sc_mem_res);
 	sc->sc_bsh = rman_get_bushandle(sc->sc_mem_res);
@@ -421,17 +422,15 @@ rk30_gpio_attach(device_t dev)
 	if (sc->sc_bank == -1) {
 		device_printf(dev,
 		    "unsupported device unit (only GPIO0..3 are supported)\n");
-		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
-		return (ENXIO);
+		goto fail;
 	}
 
 	rid = 0;
 	sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
 	    RF_ACTIVE);
 	if (!sc->sc_irq_res) {
-		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
 		device_printf(dev, "cannot allocate interrupt\n");
-		return (ENXIO);
+		goto fail;
 	}
 
 	/* Find our node. */
@@ -441,8 +440,6 @@ rk30_gpio_attach(device_t dev)
 		/* Node is not a GPIO controller. */
 		goto fail;
 
-	mtx_init(&sc->sc_mtx, "rk30 gpio", "gpio", MTX_DEF);
-
 	/* Initialize the software controlled pins. */
 	for (i = 0; i < RK30_GPIO_PINS; i++) {
 		snprintf(sc->sc_gpio_pins[i].gp_name, GPIOMAXNAME,
@@ -467,6 +464,8 @@ fail:
 		bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_irq_res);
 	if (sc->sc_mem_res)
 		bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
+	mtx_destroy(&sc->sc_mtx);
+
 	return (ENXIO);
 }
 

Modified: user/dchagin/lemul/sys/arm/samsung/exynos/exynos5_pad.c
==============================================================================
--- user/dchagin/lemul/sys/arm/samsung/exynos/exynos5_pad.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/samsung/exynos/exynos5_pad.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -509,12 +509,12 @@ pad_attach(device_t dev)
 		sc->nports = 5;
 		break;
 	default:
-		return (-1);
+		goto fail;
 	};
 
 	if (bus_alloc_resources(dev, sc->pad_spec, sc->res)) {
 		device_printf(dev, "could not allocate resources\n");
-		return (ENXIO);
+		goto fail;
 	}
 
 	/* Memory interface */
@@ -534,9 +534,9 @@ pad_attach(device_t dev)
 			    NULL, sc, &sc->gpio_ih[i]))) {
 			device_printf(dev,
 			    "ERROR: Unable to register interrupt handler\n");
-			return (ENXIO);
+			goto fail;
 		}
-	};
+	}
 
 	for (i = 0; i < sc->gpio_npins; i++) {
 		sc->gpio_pins[i].gp_pin = i;
@@ -563,6 +563,17 @@ pad_attach(device_t dev)
 	device_add_child(dev, "gpiobus", -1);
 
 	return (bus_generic_attach(dev));
+
+fail:
+	for (i = 0; i < sc->nports; i++) {
+		if (sc->gpio_ih[i])
+			bus_teardown_intr(dev, sc->res[sc->nports + i],
+			    sc->gpio_ih[i]);
+	}
+	bus_release_resources(dev, sc->pad_spec, sc->res);
+	mtx_destroy(&sc->sc_mtx);
+
+	return (ENXIO);
 }
 
 static int

Modified: user/dchagin/lemul/sys/arm/ti/ti_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/arm/ti/ti_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/arm/ti/ti_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -113,6 +113,7 @@ __FBSDID("$FreeBSD$");
 #define	TI_GPIO_MASK(p)			(1U << ((p) % PINS_PER_BANK))
 
 static struct ti_gpio_softc *ti_gpio_sc = NULL;
+static int ti_gpio_detach(device_t);
 
 static u_int
 ti_max_gpio_banks(void)
@@ -763,21 +764,21 @@ ti_gpio_attach(device_t dev)
 	 */
 	if (bus_alloc_resources(dev, ti_gpio_mem_spec, sc->sc_mem_res) != 0) {
 		device_printf(dev, "Error: could not allocate mem resources\n");
+		ti_gpio_detach(dev);
 		return (ENXIO);
 	}
 
 	/* Request the IRQ resources */
 	if (bus_alloc_resources(dev, ti_gpio_irq_spec, sc->sc_irq_res) != 0) {
-		bus_release_resources(dev, ti_gpio_mem_spec, sc->sc_mem_res);
 		device_printf(dev, "Error: could not allocate irq resources\n");
+		ti_gpio_detach(dev);
 		return (ENXIO);
 	}
 
 	/* Setup the IRQ resources */
 	if (ti_gpio_attach_intr(dev) != 0) {
-		ti_gpio_detach_intr(dev);
-		bus_release_resources(dev, ti_gpio_irq_spec, sc->sc_irq_res);
-		bus_release_resources(dev, ti_gpio_mem_spec, sc->sc_mem_res);
+		device_printf(dev, "Error: could not setup irq handlers\n");
+		ti_gpio_detach(dev);
 		return (ENXIO);
 	}
 
@@ -809,11 +810,7 @@ ti_gpio_attach(device_t dev)
 			/* Initialize the GPIO module. */
 			err = ti_gpio_bank_init(dev, i);
 			if (err != 0) {
-				ti_gpio_detach_intr(dev);
-				bus_release_resources(dev, ti_gpio_irq_spec,
-				    sc->sc_irq_res);
-				bus_release_resources(dev, ti_gpio_mem_spec,
-				    sc->sc_mem_res);
+				ti_gpio_detach(dev);
 				return (err);
 			}
 		}
@@ -852,18 +849,17 @@ ti_gpio_detach(device_t dev)
 		if (sc->sc_mem_res[i] != NULL)
 			ti_gpio_intr_clr(sc, i, 0xffffffff);
 	}
-
 	bus_generic_detach(dev);
-
-	free(sc->sc_events, M_DEVBUF);
-	free(sc->sc_irq_polarity, M_DEVBUF);
-	free(sc->sc_irq_trigger, M_DEVBUF);
-
+	if (sc->sc_events)
+		free(sc->sc_events, M_DEVBUF);
+	if (sc->sc_irq_polarity)
+		free(sc->sc_irq_polarity, M_DEVBUF);
+	if (sc->sc_irq_trigger)
+		free(sc->sc_irq_trigger, M_DEVBUF);
 	/* Release the memory and IRQ resources. */
 	ti_gpio_detach_intr(dev);
 	bus_release_resources(dev, ti_gpio_irq_spec, sc->sc_irq_res);
 	bus_release_resources(dev, ti_gpio_mem_spec, sc->sc_mem_res);
-
 	TI_GPIO_LOCK_DESTROY(sc);
 
 	return (0);

Modified: user/dchagin/lemul/sys/conf/files
==============================================================================
--- user/dchagin/lemul/sys/conf/files	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/conf/files	Sat Jan 31 17:08:02 2015	(r277984)
@@ -1520,6 +1520,7 @@ ipw_monitor.fw			optional ipwmonitorfw |
 	no-obj no-implicit-rule						\
 	clean		"ipw_monitor.fw"
 dev/iscsi/icl.c			optional iscsi | ctl 
+dev/iscsi/icl_conn_if.m		optional iscsi | ctl 
 dev/iscsi/icl_proxy.c		optional iscsi | ctl
 dev/iscsi/icl_soft.c		optional iscsi | ctl 
 dev/iscsi/iscsi.c		optional iscsi scbus

Modified: user/dchagin/lemul/sys/dev/gpio/gpio_if.m
==============================================================================
--- user/dchagin/lemul/sys/dev/gpio/gpio_if.m	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/dev/gpio/gpio_if.m	Sat Jan 31 17:08:02 2015	(r277984)
@@ -32,6 +32,13 @@
 INTERFACE gpio;
 
 CODE {
+	static device_t
+	gpio_default_get_bus(void)
+	{
+
+		return (NULL);
+	}
+
 	static int
 	gpio_default_map_gpios(device_t bus, phandle_t dev,
 	    phandle_t gparent, int gcells, pcell_t *gpios, uint32_t *pin,
@@ -56,6 +63,13 @@ HEADER {
 };
 
 #
+# Return the gpiobus device reference
+#
+METHOD device_t get_bus {
+	device_t dev;
+} DEFAULT gpio_default_get_bus;
+
+#
 # Get maximum pin number
 #
 METHOD int pin_max {

Modified: user/dchagin/lemul/sys/dev/iscsi/icl_soft.c
==============================================================================
--- user/dchagin/lemul/sys/dev/iscsi/icl_soft.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/dev/iscsi/icl_soft.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -1534,4 +1534,4 @@ moduledata_t icl_soft_data = {
 
 DECLARE_MODULE(icl_soft, icl_soft_data, SI_SUB_DRIVERS, SI_ORDER_MIDDLE);
 MODULE_DEPEND(icl_soft, icl, 1, 1, 1);
-MODULE_VERSION(icl, 1);
+MODULE_VERSION(icl_soft, 1);

Modified: user/dchagin/lemul/sys/dev/iscsi/icl_wrappers.h
==============================================================================
--- user/dchagin/lemul/sys/dev/iscsi/icl_wrappers.h	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/dev/iscsi/icl_wrappers.h	Sat Jan 31 17:08:02 2015	(r277984)
@@ -38,7 +38,6 @@
 #define	ICL_WRAPPERS_H
 
 #include <sys/kobj.h>
-#include <sys/condvar.h>
 
 #include <dev/iscsi/icl.h>
 #include <icl_conn_if.h>

Modified: user/dchagin/lemul/sys/dev/usb/input/uhid.c
==============================================================================
--- user/dchagin/lemul/sys/dev/usb/input/uhid.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/dev/usb/input/uhid.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -734,7 +734,7 @@ uhid_attach(device_t dev)
 		if (uaa->info.idProduct == USB_PRODUCT_WACOM_GRAPHIRE) {
 
 			sc->sc_repdesc_size = sizeof(uhid_graphire_report_descr);
-			sc->sc_repdesc_ptr = (void *)&uhid_graphire_report_descr;
+			sc->sc_repdesc_ptr = __DECONST(void *, &uhid_graphire_report_descr);
 			sc->sc_flags |= UHID_FLAG_STATIC_DESC;
 
 		} else if (uaa->info.idProduct == USB_PRODUCT_WACOM_GRAPHIRE3_4X5) {
@@ -755,7 +755,7 @@ uhid_attach(device_t dev)
 				    usbd_errstr(error));
 			}
 			sc->sc_repdesc_size = sizeof(uhid_graphire3_4x5_report_descr);
-			sc->sc_repdesc_ptr = (void *)&uhid_graphire3_4x5_report_descr;
+			sc->sc_repdesc_ptr = __DECONST(void *, &uhid_graphire3_4x5_report_descr);
 			sc->sc_flags |= UHID_FLAG_STATIC_DESC;
 		}
 	} else if ((uaa->info.bInterfaceClass == UICLASS_VENDOR) &&
@@ -775,7 +775,7 @@ uhid_attach(device_t dev)
 		}
 		/* the Xbox 360 gamepad has no report descriptor */
 		sc->sc_repdesc_size = sizeof(uhid_xb360gp_report_descr);
-		sc->sc_repdesc_ptr = (void *)&uhid_xb360gp_report_descr;
+		sc->sc_repdesc_ptr = __DECONST(void *, &uhid_xb360gp_report_descr);
 		sc->sc_flags |= UHID_FLAG_STATIC_DESC;
 	}
 	if (sc->sc_repdesc_ptr == NULL) {

Modified: user/dchagin/lemul/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- user/dchagin/lemul/sys/fs/tmpfs/tmpfs_subr.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/fs/tmpfs/tmpfs_subr.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -1434,7 +1434,8 @@ tmpfs_check_mtime(struct vnode *vp)
 		if ((obj->flags & OBJ_TMPFS_DIRTY) != 0) {
 			obj->flags &= ~OBJ_TMPFS_DIRTY;
 			node = VP_TO_TMPFS_NODE(vp);
-			node->tn_status |= TMPFS_NODE_MODIFIED;
+			node->tn_status |= TMPFS_NODE_MODIFIED |
+			    TMPFS_NODE_CHANGED;
 		}
 		VM_OBJECT_WUNLOCK(obj);
 	}

Modified: user/dchagin/lemul/sys/fs/tmpfs/tmpfs_vnops.c
==============================================================================
--- user/dchagin/lemul/sys/fs/tmpfs/tmpfs_vnops.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/fs/tmpfs/tmpfs_vnops.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -453,7 +453,6 @@ tmpfs_write(struct vop_write_args *v)
 	struct tmpfs_node *node;
 	off_t oldsize;
 	int error, ioflag;
-	boolean_t extended;
 
 	vp = v->a_vp;
 	uio = v->a_uio;
@@ -473,8 +472,7 @@ tmpfs_write(struct vop_write_args *v)
 		return (EFBIG);
 	if (vn_rlimit_fsize(vp, uio, uio->uio_td))
 		return (EFBIG);
-	extended = uio->uio_offset + uio->uio_resid > node->tn_size;
-	if (extended) {
+	if (uio->uio_offset + uio->uio_resid > node->tn_size) {
 		error = tmpfs_reg_resize(vp, uio->uio_offset + uio->uio_resid,
 		    FALSE);
 		if (error != 0)
@@ -483,7 +481,7 @@ tmpfs_write(struct vop_write_args *v)
 
 	error = uiomove_object(node->tn_reg.tn_aobj, node->tn_size, uio);
 	node->tn_status |= TMPFS_NODE_ACCESSED | TMPFS_NODE_MODIFIED |
-	    (extended ? TMPFS_NODE_CHANGED : 0);
+	    TMPFS_NODE_CHANGED;
 	if (node->tn_mode & (S_ISUID | S_ISGID)) {
 		if (priv_check_cred(v->a_cred, PRIV_VFS_RETAINSUGID, 0))
 			node->tn_mode &= ~(S_ISUID | S_ISGID);

Modified: user/dchagin/lemul/sys/kern/kern_umtx.c
==============================================================================
--- user/dchagin/lemul/sys/kern/kern_umtx.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/kern/kern_umtx.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -1302,6 +1302,47 @@ umtx_pi_adjust_thread(struct umtx_pi *pi
 	return (1);
 }
 
+static struct umtx_pi *
+umtx_pi_next(struct umtx_pi *pi)
+{
+	struct umtx_q *uq_owner;
+
+	if (pi->pi_owner == NULL)
+		return (NULL);
+	uq_owner = pi->pi_owner->td_umtxq;
+	if (uq_owner == NULL)
+		return (NULL);
+	return (uq_owner->uq_pi_blocked);
+}
+
+/*
+ * Floyd's Cycle-Finding Algorithm.
+ */
+static bool
+umtx_pi_check_loop(struct umtx_pi *pi)
+{
+	struct umtx_pi *pi1;	/* fast iterator */
+
+	mtx_assert(&umtx_lock, MA_OWNED);
+	if (pi == NULL)
+		return (false);
+	pi1 = pi;
+	for (;;) {
+		pi = umtx_pi_next(pi);
+		if (pi == NULL)
+			break;
+		pi1 = umtx_pi_next(pi1);
+		if (pi1 == NULL)
+			break;
+		pi1 = umtx_pi_next(pi1);
+		if (pi1 == NULL)
+			break;
+		if (pi == pi1)
+			return (true);
+	}
+	return (false);
+}
+
 /*
  * Propagate priority when a thread is blocked on POSIX
  * PI mutex.
@@ -1319,6 +1360,8 @@ umtx_propagate_priority(struct thread *t
 	pi = uq->uq_pi_blocked;
 	if (pi == NULL)
 		return;
+	if (umtx_pi_check_loop(pi))
+		return;
 
 	for (;;) {
 		td = pi->pi_owner;
@@ -1362,6 +1405,8 @@ umtx_repropagate_priority(struct umtx_pi
 
 	mtx_assert(&umtx_lock, MA_OWNED);
 
+	if (umtx_pi_check_loop(pi))
+		return;
 	while (pi != NULL && pi->pi_owner != NULL) {
 		pri = PRI_MAX;
 		uq_owner = pi->pi_owner->td_umtxq;
@@ -1694,6 +1739,11 @@ do_lock_pi(struct thread *td, struct umu
 			continue;
 		}
 
+		if ((owner & ~UMUTEX_CONTESTED) == id) {
+			error = EDEADLK;
+			break;
+		}
+
 		if (try != 0) {
 			error = EBUSY;
 			break;

Modified: user/dchagin/lemul/sys/mips/atheros/ar71xx_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/mips/atheros/ar71xx_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/mips/atheros/ar71xx_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -341,7 +341,6 @@ static int
 ar71xx_gpio_attach(device_t dev)
 {
 	struct ar71xx_gpio_softc *sc = device_get_softc(dev);
-	int error = 0;
 	int i, j, maxpin;
 	int mask, pinon;
 	uint32_t oe;
@@ -358,14 +357,14 @@ ar71xx_gpio_attach(device_t dev)
 
 	if (sc->gpio_mem_res == NULL) {
 		device_printf(dev, "couldn't map memory\n");
-		error = ENXIO;
 		ar71xx_gpio_detach(dev);
-		return(error);
+		return (ENXIO);
 	}
 
 	if ((sc->gpio_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, 
 	    &sc->gpio_irq_rid, RF_SHAREABLE | RF_ACTIVE)) == NULL) {
 		device_printf(dev, "unable to allocate IRQ resource\n");
+		ar71xx_gpio_detach(dev);
 		return (ENXIO);
 	}
 
@@ -373,6 +372,7 @@ ar71xx_gpio_attach(device_t dev)
 	    ar71xx_gpio_filter, ar71xx_gpio_intr, sc, &sc->gpio_ih))) {
 		device_printf(dev,
 		    "WARNING: unable to register interrupt handler\n");
+		ar71xx_gpio_detach(dev);
 		return (ENXIO);
 	}
 
@@ -447,12 +447,16 @@ ar71xx_gpio_detach(device_t dev)
 	KASSERT(mtx_initialized(&sc->gpio_mtx), ("gpio mutex not initialized"));
 
 	bus_generic_detach(dev);
-
+	if (sc->gpio_ih)
+		bus_teardown_intr(dev, sc->gpio_irq_res, sc->gpio_ih);
+	if (sc->gpio_irq_res)
+		bus_release_resource(dev, SYS_RES_IRQ, sc->gpio_irq_rid,
+		    sc->gpio_irq_res);
 	if (sc->gpio_mem_res)
 		bus_release_resource(dev, SYS_RES_MEMORY, sc->gpio_mem_rid,
 		    sc->gpio_mem_res);
-
-	free(sc->gpio_pins, M_DEVBUF);
+	if (sc->gpio_pins)
+		free(sc->gpio_pins, M_DEVBUF);
 	mtx_destroy(&sc->gpio_mtx);
 
 	return(0);

Modified: user/dchagin/lemul/sys/mips/atheros/ar71xx_gpiovar.h
==============================================================================
--- user/dchagin/lemul/sys/mips/atheros/ar71xx_gpiovar.h	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/mips/atheros/ar71xx_gpiovar.h	Sat Jan 31 17:08:02 2015	(r277984)
@@ -57,12 +57,12 @@
 
 struct ar71xx_gpio_softc {
 	device_t		dev;
-        struct mtx		gpio_mtx;
-        struct resource		*gpio_mem_res;
-        int			gpio_mem_rid;
-        struct resource		*gpio_irq_res;
-        int			gpio_irq_rid;
-        void			*gpio_ih;
+	struct mtx		gpio_mtx;
+	struct resource		*gpio_mem_res;
+	int			gpio_mem_rid;
+	struct resource		*gpio_irq_res;
+	int			gpio_irq_rid;
+	void			*gpio_ih;
 	int			gpio_npins;
 	struct gpio_pin		*gpio_pins;
 };

Modified: user/dchagin/lemul/sys/mips/cavium/octeon_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/mips/cavium/octeon_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/mips/cavium/octeon_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -383,6 +383,7 @@ octeon_gpio_attach(device_t dev)
 		    OCTEON_IRQ_GPIO0 + i, OCTEON_IRQ_GPIO0 + i, 1, 
 		    RF_SHAREABLE | RF_ACTIVE)) == NULL) {
 			device_printf(dev, "unable to allocate IRQ resource\n");
+			octeon_gpio_detach(dev);
 			return (ENXIO);
 		}
 
@@ -392,6 +393,7 @@ octeon_gpio_attach(device_t dev)
 		    &(sc->gpio_intr_cookies[i]), &sc->gpio_ih[i]))) {
 			device_printf(dev,
 		    	"WARNING: unable to register interrupt handler\n");
+			octeon_gpio_detach(dev);
 			return (ENXIO);
 		}
 	}
@@ -448,11 +450,14 @@ octeon_gpio_detach(device_t dev)
 	KASSERT(mtx_initialized(&sc->gpio_mtx), ("gpio mutex not initialized"));
 
 	for ( i = 0; i < OCTEON_GPIO_IRQS; i++) {
-		bus_release_resource(dev, SYS_RES_IRQ,
-		    sc->gpio_irq_rid[i], sc->gpio_irq_res[i]);
+		if (sc->gpio_ih[i])
+			bus_teardown_intr(dev, sc->gpio_irq_res[i],
+			    sc->gpio_ih[i]);
+		if (sc->gpio_irq_res[i])
+			bus_release_resource(dev, SYS_RES_IRQ,
+			    sc->gpio_irq_rid[i], sc->gpio_irq_res[i]);
 	}
 	bus_generic_detach(dev);
-
 	mtx_destroy(&sc->gpio_mtx);
 
 	return(0);

Modified: user/dchagin/lemul/sys/mips/cavium/octeon_gpiovar.h
==============================================================================
--- user/dchagin/lemul/sys/mips/cavium/octeon_gpiovar.h	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/mips/cavium/octeon_gpiovar.h	Sat Jan 31 17:08:02 2015	(r277984)
@@ -43,11 +43,11 @@
 
 struct octeon_gpio_softc {
 	device_t		dev;
-        struct mtx		gpio_mtx;
-        struct resource		*gpio_irq_res[OCTEON_GPIO_IRQS];
-        int			gpio_irq_rid[OCTEON_GPIO_IRQS];
-        void			*gpio_ih[OCTEON_GPIO_IRQS];
-        void			*gpio_intr_cookies[OCTEON_GPIO_IRQS];
+	struct mtx		gpio_mtx;
+	struct resource		*gpio_irq_res[OCTEON_GPIO_IRQS];
+	int			gpio_irq_rid[OCTEON_GPIO_IRQS];
+	void			*gpio_ih[OCTEON_GPIO_IRQS];
+	void			*gpio_intr_cookies[OCTEON_GPIO_IRQS];
 	int			gpio_npins;
 	struct gpio_pin		gpio_pins[OCTEON_GPIO_PINS];
 };

Modified: user/dchagin/lemul/sys/mips/rt305x/rt305x_gpio.c
==============================================================================
--- user/dchagin/lemul/sys/mips/rt305x/rt305x_gpio.c	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/mips/rt305x/rt305x_gpio.c	Sat Jan 31 17:08:02 2015	(r277984)
@@ -430,7 +430,7 @@ static int
 rt305x_gpio_attach(device_t dev)
 {
 	struct rt305x_gpio_softc *sc = device_get_softc(dev);
-	int error = 0, i;
+	int i;
 	uint64_t avlpins = 0;
 	sc->reset_gpio = DAP1350_RESET_GPIO;
 
@@ -446,14 +446,14 @@ rt305x_gpio_attach(device_t dev)
 
 	if (sc->gpio_mem_res == NULL) {
 		device_printf(dev, "couldn't map memory\n");
-		error = ENXIO;
 		rt305x_gpio_detach(dev);
-		return(error);
+		return (ENXIO);
 	}
 
 	if ((sc->gpio_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, 
 	    &sc->gpio_irq_rid, RF_SHAREABLE | RF_ACTIVE)) == NULL) {
 		device_printf(dev, "unable to allocate IRQ resource\n");
+		rt305x_gpio_detach(dev);
 		return (ENXIO);
 	}
 
@@ -462,6 +462,7 @@ rt305x_gpio_attach(device_t dev)
 	    rt305x_gpio_intr, NULL, sc, &sc->gpio_ih))) {
 		device_printf(dev,
 		    "WARNING: unable to register interrupt handler\n");
+		rt305x_gpio_detach(dev);
 		return (ENXIO);
 	}
 
@@ -515,11 +516,14 @@ rt305x_gpio_detach(device_t dev)
 	KASSERT(mtx_initialized(&sc->gpio_mtx), ("gpio mutex not initialized"));
 
 	bus_generic_detach(dev);
-
+	if (sc->gpio_ih)
+		bus_teardown_intr(dev, sc->gpio_irq_res, sc->gpio_ih);
+	if (sc->gpio_irq_res)
+		bus_release_resource(dev, SYS_RES_IRQ, sc->gpio_irq_rid,
+		    sc->gpio_irq_res);
 	if (sc->gpio_mem_res)
 		bus_release_resource(dev, SYS_RES_MEMORY, sc->gpio_mem_rid,
 		    sc->gpio_mem_res);
-
 	mtx_destroy(&sc->gpio_mtx);
 
 	return(0);

Modified: user/dchagin/lemul/sys/mips/rt305x/rt305x_gpiovar.h
==============================================================================
--- user/dchagin/lemul/sys/mips/rt305x/rt305x_gpiovar.h	Sat Jan 31 16:39:26 2015	(r277983)
+++ user/dchagin/lemul/sys/mips/rt305x/rt305x_gpiovar.h	Sat Jan 31 17:08:02 2015	(r277984)
@@ -30,12 +30,12 @@
 
 struct rt305x_gpio_softc {
 	device_t		dev;
-        struct mtx		gpio_mtx;
-        struct resource		*gpio_mem_res;
-        int			gpio_mem_rid;
-        struct resource		*gpio_irq_res;
-        int			gpio_irq_rid;
-        void			*gpio_ih;
+	struct mtx		gpio_mtx;
+	struct resource		*gpio_mem_res;
+	int			gpio_mem_rid;
+	struct resource		*gpio_irq_res;
+	int			gpio_irq_rid;
+	void			*gpio_ih;
 	int			gpio_npins;
 	struct gpio_pin		gpio_pins[NGPIO];
 	int			reset_gpio;



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