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...
Dmitry Chagin
dchagin at FreeBSD.org
Sat Jan 31 17:08:10 UTC 2015
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;
More information about the svn-src-user
mailing list