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>