From owner-svn-src-projects@FreeBSD.ORG Sat Jan 31 14:31:19 2015 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 59D16B78; Sat, 31 Jan 2015 14:31:19 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 423A61E7; Sat, 31 Jan 2015 14:31:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t0VEVJGH095996; Sat, 31 Jan 2015 14:31:19 GMT (envelope-from dim@FreeBSD.org) Received: (from dim@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t0VEVDiF095961; Sat, 31 Jan 2015 14:31:13 GMT (envelope-from dim@FreeBSD.org) Message-Id: <201501311431.t0VEVDiF095961@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: dim set sender to dim@FreeBSD.org using -f From: Dimitry Andric Date: Sat, 31 Jan 2015 14:31:13 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r277975 - in projects/clang360-import: bin/sh lib/libproc sys/arm/allwinner sys/arm/altera/socfpga sys/arm/freescale/imx sys/arm/freescale/vybrid sys/arm/rockchip sys/arm/samsung/exynos... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 31 Jan 2015 14:31:19 -0000 Author: dim Date: Sat Jan 31 14:31:12 2015 New Revision: 277975 URL: https://svnweb.freebsd.org/changeset/base/277975 Log: Merge ^/head r277956 through r277974. Added: projects/clang360-import/sys/dev/iscsi/icl_conn_if.m - copied unchanged from r277974, head/sys/dev/iscsi/icl_conn_if.m projects/clang360-import/sys/dev/iscsi/icl_soft.c - copied unchanged from r277974, head/sys/dev/iscsi/icl_soft.c projects/clang360-import/sys/dev/iscsi/icl_wrappers.h - copied unchanged from r277974, head/sys/dev/iscsi/icl_wrappers.h Replaced: projects/clang360-import/sys/dev/iscsi/icl.c - copied unchanged from r277974, head/sys/dev/iscsi/icl.c Modified: projects/clang360-import/bin/sh/jobs.c projects/clang360-import/bin/sh/trap.c projects/clang360-import/lib/libproc/proc_sym.c projects/clang360-import/sys/arm/allwinner/a10_gpio.c projects/clang360-import/sys/arm/altera/socfpga/socfpga_gpio.c projects/clang360-import/sys/arm/freescale/imx/imx_gpio.c projects/clang360-import/sys/arm/freescale/vybrid/vf_gpio.c projects/clang360-import/sys/arm/rockchip/rk30xx_gpio.c projects/clang360-import/sys/arm/samsung/exynos/exynos5_pad.c projects/clang360-import/sys/arm/ti/ti_gpio.c projects/clang360-import/sys/arm/ti/ti_pruss.c projects/clang360-import/sys/boot/common/load_elf.c projects/clang360-import/sys/boot/i386/libi386/smbios.c projects/clang360-import/sys/cam/ctl/ctl_frontend_iscsi.c projects/clang360-import/sys/conf/files projects/clang360-import/sys/dev/drm2/i915/intel_display.c projects/clang360-import/sys/dev/iscsi/icl.h projects/clang360-import/sys/dev/iscsi/iscsi.c projects/clang360-import/sys/dev/usb/input/uhid.c projects/clang360-import/sys/fs/tmpfs/tmpfs_subr.c projects/clang360-import/sys/fs/tmpfs/tmpfs_vnops.c projects/clang360-import/sys/kern/kern_umtx.c projects/clang360-import/sys/mips/atheros/ar71xx_gpio.c projects/clang360-import/sys/mips/atheros/ar71xx_gpiovar.h projects/clang360-import/sys/mips/cavium/octeon_gpio.c projects/clang360-import/sys/mips/cavium/octeon_gpiovar.h projects/clang360-import/sys/mips/rt305x/rt305x_gpio.c projects/clang360-import/sys/mips/rt305x/rt305x_gpiovar.h projects/clang360-import/sys/modules/ctl/Makefile projects/clang360-import/sys/modules/iscsi/Makefile projects/clang360-import/sys/sys/proc.h Directory Properties: projects/clang360-import/ (props changed) projects/clang360-import/sys/ (props changed) projects/clang360-import/sys/boot/ (props changed) projects/clang360-import/sys/conf/ (props changed) Modified: projects/clang360-import/bin/sh/jobs.c ============================================================================== --- projects/clang360-import/bin/sh/jobs.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/bin/sh/jobs.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/bin/sh/trap.c ============================================================================== --- projects/clang360-import/bin/sh/trap.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/bin/sh/trap.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/lib/libproc/proc_sym.c ============================================================================== --- projects/clang360-import/lib/libproc/proc_sym.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/lib/libproc/proc_sym.c Sat Jan 31 14:31:12 2015 (r277975) @@ -153,9 +153,12 @@ proc_iter_objs(struct proc_handle *p, pr prmap_t map; char path[MAXPATHLEN]; char last[MAXPATHLEN]; + int error; if (p->nobjs == 0) return (-1); + + error = 0; memset(last, 0, sizeof(last)); for (i = 0; i < p->nobjs; i++) { rdl = &p->rdobjs[i]; @@ -169,11 +172,11 @@ proc_iter_objs(struct proc_handle *p, pr */ if (strcmp(path, last) == 0) continue; - (*func)(cd, &map, path); + if ((error = (*func)(cd, &map, path)) != 0) + break; strlcpy(last, path, sizeof(last)); } - - return (0); + return (error); } prmap_t * @@ -599,7 +602,8 @@ proc_iter_symbyaddr(struct proc_handle * s = elf_strptr(e, stridx, sym.st_name); if (ehdr.e_type != ET_EXEC) sym.st_value += map->pr_vaddr; - (*func)(cd, &sym, s); + if ((error = (*func)(cd, &sym, s)) != 0) + goto err2; } error = 0; err2: Modified: projects/clang360-import/sys/arm/allwinner/a10_gpio.c ============================================================================== --- projects/clang360-import/sys/arm/allwinner/a10_gpio.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/allwinner/a10_gpio.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/altera/socfpga/socfpga_gpio.c ============================================================================== --- projects/clang360-import/sys/arm/altera/socfpga/socfpga_gpio.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/altera/socfpga/socfpga_gpio.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/freescale/imx/imx_gpio.c ============================================================================== --- projects/clang360-import/sys/arm/freescale/imx/imx_gpio.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/freescale/imx/imx_gpio.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/freescale/vybrid/vf_gpio.c ============================================================================== --- projects/clang360-import/sys/arm/freescale/vybrid/vf_gpio.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/freescale/vybrid/vf_gpio.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/rockchip/rk30xx_gpio.c ============================================================================== --- projects/clang360-import/sys/arm/rockchip/rk30xx_gpio.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/rockchip/rk30xx_gpio.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/samsung/exynos/exynos5_pad.c ============================================================================== --- projects/clang360-import/sys/arm/samsung/exynos/exynos5_pad.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/samsung/exynos/exynos5_pad.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/ti/ti_gpio.c ============================================================================== --- projects/clang360-import/sys/arm/ti/ti_gpio.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/ti/ti_gpio.c Sat Jan 31 14:31:12 2015 (r277975) @@ -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: projects/clang360-import/sys/arm/ti/ti_pruss.c ============================================================================== --- projects/clang360-import/sys/arm/ti/ti_pruss.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/arm/ti/ti_pruss.c Sat Jan 31 14:31:12 2015 (r277975) @@ -258,6 +258,7 @@ ti_pruss_mmap(struct cdev *cdev, vm_ooff if (offset > rman_get_size(sc->sc_mem_res)) return (-1); *paddr = rman_get_start(sc->sc_mem_res) + offset; + *memattr = VM_MEMATTR_UNCACHEABLE; return (0); } Modified: projects/clang360-import/sys/boot/common/load_elf.c ============================================================================== --- projects/clang360-import/sys/boot/common/load_elf.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/boot/common/load_elf.c Sat Jan 31 14:31:12 2015 (r277975) @@ -175,7 +175,33 @@ __elfN(loadfile_raw)(char *filename, u_i * Check to see what sort of module we are. */ kfp = file_findfile(NULL, __elfN(kerneltype)); - if (ehdr->e_type == ET_DYN) { +#ifdef __powerpc__ + /* + * Kernels can be ET_DYN, so just assume the first loaded object is the + * kernel. This assumption will be checked later. + */ + if (kfp == NULL) + ef.kernel = 1; +#endif + if (ef.kernel || ehdr->e_type == ET_EXEC) { + /* Looks like a kernel */ + if (kfp != NULL) { + printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: kernel already loaded\n"); + err = EPERM; + goto oerr; + } + /* + * Calculate destination address based on kernel entrypoint + */ + dest = (ehdr->e_entry & ~PAGE_MASK); + if (dest == 0) { + printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: not a kernel (maybe static binary?)\n"); + err = EPERM; + goto oerr; + } + ef.kernel = 1; + + } else if (ehdr->e_type == ET_DYN) { /* Looks like a kld module */ if (multiboot != 0) { printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: can't load module as multiboot\n"); @@ -195,24 +221,6 @@ __elfN(loadfile_raw)(char *filename, u_i /* Looks OK, got ahead */ ef.kernel = 0; - } else if (ehdr->e_type == ET_EXEC) { - /* Looks like a kernel */ - if (kfp != NULL) { - printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: kernel already loaded\n"); - err = EPERM; - goto oerr; - } - /* - * Calculate destination address based on kernel entrypoint - */ - dest = (ehdr->e_entry & ~PAGE_MASK); - if (dest == 0) { - printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: not a kernel (maybe static binary?)\n"); - err = EPERM; - goto oerr; - } - ef.kernel = 1; - } else { err = EFTYPE; goto oerr; Modified: projects/clang360-import/sys/boot/i386/libi386/smbios.c ============================================================================== --- projects/clang360-import/sys/boot/i386/libi386/smbios.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/boot/i386/libi386/smbios.c Sat Jan 31 14:31:12 2015 (r277975) @@ -323,6 +323,29 @@ smbios_parse_table(const caddr_t addr) return (cp + 2); } +static caddr_t +smbios_find_struct(int type) +{ + caddr_t dmi; + int i; + + if (smbios.addr == NULL) + return (NULL); + + for (dmi = smbios.addr, i = 0; + dmi < smbios.addr + smbios.length && i < smbios.count; i++) { + if (SMBIOS_GET8(dmi, 0) == type) + return dmi; + /* Find structure terminator. */ + dmi = SMBIOS_GETSTR(dmi); + while (SMBIOS_GET16(dmi, 0) != 0) + dmi++; + dmi += 2; + } + + return (NULL); +} + static void smbios_probe(void) { @@ -368,29 +391,6 @@ smbios_probe(void) } } -static caddr_t -smbios_find_struct(int type) -{ - caddr_t dmi; - int i; - - if (smbios.addr == NULL) - return (NULL); - - for (dmi = smbios.addr, i = 0; - dmi < smbios.addr + smbios.length && i < smbios.count; i++) { - if (SMBIOS_GET8(dmi, 0) == type) - return dmi; - /* Find structure terminator. */ - dmi = SMBIOS_GETSTR(dmi); - while (SMBIOS_GET16(dmi, 0) != 0) - dmi++; - dmi += 2; - } - - return (NULL); -} - void smbios_detect(void) { Modified: projects/clang360-import/sys/cam/ctl/ctl_frontend_iscsi.c ============================================================================== --- projects/clang360-import/sys/cam/ctl/ctl_frontend_iscsi.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/cam/ctl/ctl_frontend_iscsi.c Sat Jan 31 14:31:12 2015 (r277975) @@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -1241,7 +1242,7 @@ cfiscsi_session_new(struct cfiscsi_softc cv_init(&cs->cs_login_cv, "cfiscsi_login"); #endif - cs->cs_conn = icl_conn_new("cfiscsi", &cs->cs_lock); + cs->cs_conn = icl_new_conn(NULL, "cfiscsi", &cs->cs_lock); cs->cs_conn->ic_receive = cfiscsi_receive_callback; cs->cs_conn->ic_error = cfiscsi_error_callback; cs->cs_conn->ic_prv0 = cs; @@ -2013,6 +2014,7 @@ cfiscsi_ioctl_port_create(struct ctl_req return; } port = &ct->ct_port; + // WAT if (ct->ct_state == CFISCSI_TARGET_STATE_DYING) goto done; Modified: projects/clang360-import/sys/conf/files ============================================================================== --- projects/clang360-import/sys/conf/files Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/conf/files Sat Jan 31 14:31:12 2015 (r277975) @@ -1521,6 +1521,7 @@ ipw_monitor.fw optional ipwmonitorfw | clean "ipw_monitor.fw" dev/iscsi/icl.c 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 dev/iscsi_initiator/iscsi.c optional iscsi_initiator scbus dev/iscsi_initiator/iscsi_subr.c optional iscsi_initiator scbus Modified: projects/clang360-import/sys/dev/drm2/i915/intel_display.c ============================================================================== --- projects/clang360-import/sys/dev/drm2/i915/intel_display.c Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/dev/drm2/i915/intel_display.c Sat Jan 31 14:31:12 2015 (r277975) @@ -6995,7 +6995,7 @@ static void ivb_pch_pwm_override(struct */ I915_WRITE(BLC_PWM_CPU_CTL2, PWM_ENABLE); I915_WRITE(BLC_PWM_CPU_CTL, 0); - I915_WRITE(BLC_PWM_PCH_CTL1, PWM_ENABLE | (1<<30)); + I915_WRITE(BLC_PWM_PCH_CTL1, PWM_ENABLE); } void intel_modeset_init_hw(struct drm_device *dev) Copied: projects/clang360-import/sys/dev/iscsi/icl.c (from r277974, head/sys/dev/iscsi/icl.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang360-import/sys/dev/iscsi/icl.c Sat Jan 31 14:31:12 2015 (r277975, copy of r277974, head/sys/dev/iscsi/icl.c) @@ -0,0 +1,247 @@ +/*- + * Copyright (c) 2012 The FreeBSD Foundation + * All rights reserved. + * + * This software was developed by Edward Tomasz Napierala under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/* + * iSCSI Common Layer. It's used by both the initiator and target to send + * and receive iSCSI PDUs. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +struct icl_module { + TAILQ_ENTRY(icl_module) im_next; + char *im_name; + int im_priority; + int (*im_limits)(size_t *limitp); + struct icl_conn *(*im_new_conn)(const char *name, + struct mtx *lock); +}; + +struct icl_softc { + struct sx sc_lock; + TAILQ_HEAD(, icl_module) sc_modules; +}; + +SYSCTL_NODE(_kern, OID_AUTO, icl, CTLFLAG_RD, 0, "iSCSI Common Layer"); +int icl_debug = 1; +SYSCTL_INT(_kern_icl, OID_AUTO, debug, CTLFLAG_RWTUN, + &icl_debug, 0, "Enable debug messages"); + +static MALLOC_DEFINE(M_ICL, "icl", "iSCSI Common Layer"); +static struct icl_softc *sc; + +static struct icl_module * +icl_find(const char *name) +{ + struct icl_module *im, *im_max; + + sx_assert(&sc->sc_lock, SA_LOCKED); + + /* + * If the name was not specified, pick a module with highest + * priority. + */ + if (name == NULL || name[0] == '\0') { + im_max = TAILQ_FIRST(&sc->sc_modules); + TAILQ_FOREACH(im, &sc->sc_modules, im_next) { + if (im->im_priority > im_max->im_priority) + im_max = im; + } + + return (im_max); + } + + TAILQ_FOREACH(im, &sc->sc_modules, im_next) { + if (strcmp(im->im_name, name) == 0) + return (im); + } + + return (NULL); +} + +struct icl_conn * +icl_new_conn(const char *offload, const char *name, struct mtx *lock) +{ + struct icl_module *im; + struct icl_conn *ic; + + sx_slock(&sc->sc_lock); + im = icl_find(offload); + + if (im == NULL) { + ICL_WARN("offload \"%s\" not found", offload); + sx_sunlock(&sc->sc_lock); + return (NULL); + } + + ic = im->im_new_conn(name, lock); + sx_sunlock(&sc->sc_lock); + + return (ic); +} + +int +icl_limits(const char *offload, size_t *limitp) +{ + struct icl_module *im; + int error; + + sx_slock(&sc->sc_lock); + im = icl_find(offload); + + if (im == NULL) { + ICL_WARN("offload \"%s\" not found", offload); + sx_sunlock(&sc->sc_lock); + return (ENXIO); + } + + error = im->im_limits(limitp); + sx_sunlock(&sc->sc_lock); + + return (error); +} + + +int +icl_register(const char *offload, int priority, int (*limits)(size_t *), + struct icl_conn *(*new_conn)(const char *, struct mtx *)) +{ + struct icl_module *im; + + sx_xlock(&sc->sc_lock); + im = icl_find(offload); + + if (im != NULL) { + ICL_WARN("offload \"%s\" already registered", offload); + sx_xunlock(&sc->sc_lock); + return (EBUSY); + } + + im = malloc(sizeof(*im), M_ICL, M_ZERO | M_WAITOK); + im->im_name = strdup(offload, M_ICL); + im->im_priority = priority; + im->im_limits = limits; + im->im_new_conn = new_conn; + + TAILQ_INSERT_HEAD(&sc->sc_modules, im, im_next); + sx_xunlock(&sc->sc_lock); + + ICL_DEBUG("offload \"%s\" registered", offload); + return (0); +} + +int +icl_unregister(const char *offload) +{ + struct icl_module *im; + + sx_xlock(&sc->sc_lock); + im = icl_find(offload); + + if (im == NULL) { + ICL_WARN("offload \"%s\" not registered", offload); + sx_xunlock(&sc->sc_lock); + return (ENXIO); + } + + TAILQ_REMOVE(&sc->sc_modules, im, im_next); + sx_xunlock(&sc->sc_lock); + + free(im->im_name, M_ICL); + free(im, M_ICL); + + ICL_DEBUG("offload \"%s\" unregistered", offload); + return (0); +} + +static int +icl_load(void) +{ + + sc = malloc(sizeof(*sc), M_ICL, M_ZERO | M_WAITOK); + sx_init(&sc->sc_lock, "icl"); + TAILQ_INIT(&sc->sc_modules); + + return (0); +} + +static int +icl_unload(void) +{ + + sx_slock(&sc->sc_lock); + KASSERT(TAILQ_EMPTY(&sc->sc_modules), ("still have modules")); + sx_sunlock(&sc->sc_lock); + + sx_destroy(&sc->sc_lock); + free(sc, M_ICL); + + return (0); +} + +static int +icl_modevent(module_t mod, int what, void *arg) +{ + + switch (what) { + case MOD_LOAD: + return (icl_load()); + case MOD_UNLOAD: + return (icl_unload()); + default: + return (EINVAL); + } +} + +moduledata_t icl_data = { + "icl", + icl_modevent, + 0 +}; + +DECLARE_MODULE(icl, icl_data, SI_SUB_DRIVERS, SI_ORDER_FIRST); +MODULE_VERSION(icl, 1); Modified: projects/clang360-import/sys/dev/iscsi/icl.h ============================================================================== --- projects/clang360-import/sys/dev/iscsi/icl.h Sat Jan 31 14:18:46 2015 (r277974) +++ projects/clang360-import/sys/dev/iscsi/icl.h Sat Jan 31 14:31:12 2015 (r277975) @@ -37,7 +37,32 @@ * and receive iSCSI PDUs. */ +#include +#include +#include +#include + +SYSCTL_DECL(_kern_icl); + +extern int icl_debug; + +#define ICL_DEBUG(X, ...) \ + do { \ + if (icl_debug > 1) \ + printf("%s: " X "\n", __func__, ## __VA_ARGS__);\ + } while (0) + +#define ICL_WARN(X, ...) \ + do { \ + if (icl_debug > 0) { \ + printf("WARNING: %s: " X "\n", \ + __func__, ## __VA_ARGS__); \ + } \ + } while (0) + struct icl_conn; +struct ccb_scsiio; +union ctl_io; struct icl_pdu { STAILQ_ENTRY(icl_pdu) ip_next; @@ -57,13 +82,6 @@ struct icl_pdu { uint32_t ip_prv2; }; -struct icl_pdu *icl_pdu_new(struct icl_conn *ic, int flags); -size_t icl_pdu_data_segment_length(const struct icl_pdu *ip); -int icl_pdu_append_data(struct icl_pdu *ip, const void *addr, size_t len, int flags); -void icl_pdu_get_data(struct icl_pdu *ip, size_t off, void *addr, size_t len); -void icl_pdu_queue(struct icl_pdu *ip); -void icl_pdu_free(struct icl_pdu *ip); - #define ICL_CONN_STATE_INVALID 0 #define ICL_CONN_STATE_BHS 1 #define ICL_CONN_STATE_AHS 2 @@ -74,6 +92,7 @@ void icl_pdu_free(struct icl_pdu *ip); #define ICL_MAX_DATA_SEGMENT_LENGTH (128 * 1024) struct icl_conn { + KOBJ_FIELDS; struct mtx *ic_lock; struct socket *ic_socket; #ifdef DIAGNOSTIC @@ -104,11 +123,14 @@ struct icl_conn { void *ic_prv0; }; -struct icl_conn *icl_conn_new(const char *name, struct mtx *lock); -void icl_conn_free(struct icl_conn *ic); -int icl_conn_handoff(struct icl_conn *ic, int fd); -void icl_conn_close(struct icl_conn *ic); -bool icl_conn_connected(struct icl_conn *ic); +struct icl_conn *icl_new_conn(const char *offload, const char *name, + struct mtx *lock); +int icl_limits(const char *offload, size_t *limitp); + +int icl_register(const char *offload, int priority, + int (*limits)(size_t *), + struct icl_conn *(*new_conn)(const char *, struct mtx *)); +int icl_unregister(const char *offload); #ifdef ICL_KERNEL_PROXY Copied: projects/clang360-import/sys/dev/iscsi/icl_conn_if.m (from r277974, head/sys/dev/iscsi/icl_conn_if.m) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang360-import/sys/dev/iscsi/icl_conn_if.m Sat Jan 31 14:31:12 2015 (r277975, copy of r277974, head/sys/dev/iscsi/icl_conn_if.m) @@ -0,0 +1,87 @@ +#- +# Copyright (c) 2014 The FreeBSD Foundation +# All rights reserved. +# +# This software was developed by Edward Tomasz Napierala under sponsorship +# from the FreeBSD Foundation. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +# SUCH DAMAGE. +# +# $FreeBSD$ +# + +#include + +INTERFACE icl_conn; + +METHOD size_t pdu_data_segment_length { + struct icl_conn *_ic; + const struct icl_pdu *_ip; +}; + +METHOD int pdu_append_data { + struct icl_conn *_ic; + struct icl_pdu *_ip; + const void *_addr; + size_t _len; + int _flags; +}; + +METHOD void pdu_get_data { + struct icl_conn *_ic; + struct icl_pdu *_ip; + size_t _off; + void *_addr; + size_t _len; +}; + +METHOD void pdu_queue { + struct icl_conn *_ic; + struct icl_pdu *_ip; +}; + +METHOD void pdu_free { + struct icl_conn *_ic; + struct icl_pdu *_ip; +}; + +METHOD struct icl_pdu * new_pdu { + struct icl_conn *_ic; + int _flags; +}; + +METHOD void free { + struct icl_conn *_ic; +}; + +METHOD int handoff { + struct icl_conn *_ic; + int _fd; +}; + +METHOD void close { + struct icl_conn *_ic; +}; + +METHOD bool connected { + struct icl_conn *_ic; +}; Copied: projects/clang360-import/sys/dev/iscsi/icl_soft.c (from r277974, head/sys/dev/iscsi/icl_soft.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/clang360-import/sys/dev/iscsi/icl_soft.c Sat Jan 31 14:31:12 2015 (r277975, copy of r277974, head/sys/dev/iscsi/icl_soft.c) @@ -0,0 +1,1537 @@ +/*- + * Copyright (c) 2012 The FreeBSD Foundation + * All rights reserved. + * + * This software was developed by Edward Tomasz Napierala under sponsorship + * from the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + */ + +/* + * iSCSI Common Layer. It's used by both the initiator and target to send + * and receive iSCSI PDUs. *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***