From owner-svn-src-projects@FreeBSD.ORG Sun Mar 27 19:27:57 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9AE7910656D1; Sun, 27 Mar 2011 19:27:57 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 888008FC24; Sun, 27 Mar 2011 19:27:57 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2RJRv3q066808; Sun, 27 Mar 2011 19:27:57 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2RJRvo7066806; Sun, 27 Mar 2011 19:27:57 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201103271927.p2RJRvo7066806@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 27 Mar 2011 19:27:57 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220060 - projects/altix/sys/ia64/sgisn X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Sun, 27 Mar 2011 19:27:57 -0000 Author: marcel Date: Sun Mar 27 19:27:57 2011 New Revision: 220060 URL: http://svn.freebsd.org/changeset/base/220060 Log: Add the beginnings of a driver for the SHub ASIC. There's a SHub for each node in the system. The SHub serves as a crossbar between the FSB, supporting 1 or 2 CPUs, the memory, the 2 NUMAlink network interfaces and the Xtalk I/O interface. Since the PCI/PCI-X host controllers connect to the SHub via the Xtalk interfaces, the shub driver will become the parent of the pci host controller driver. Added: projects/altix/sys/ia64/sgisn/sgisn_shub.c Added: projects/altix/sys/ia64/sgisn/sgisn_shub.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/altix/sys/ia64/sgisn/sgisn_shub.c Sun Mar 27 19:27:57 2011 (r220060) @@ -0,0 +1,328 @@ +/*- + * Copyright (c) 2011 Marcel Moolenaar + * All rights reserved. + * + * 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. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +// XXX static struct sgisn_hub sgisn_hub; + +struct sgisn_shub_softc { + struct sgisn_hub sc_prom_hub; + device_t sc_dev; + void *sc_promaddr; + u_int sc_domain; + u_int sc_busnr; +}; + +static int sgisn_shub_attach(device_t); +static void sgisn_shub_identify(driver_t *, device_t); +static int sgisn_shub_probe(device_t); + +static int sgisn_shub_activate_resource(device_t, device_t, int, int, + struct resource *); +static int sgisn_shub_read_ivar(device_t, device_t, int, uintptr_t *); +static int sgisn_shub_write_ivar(device_t, device_t, int, uintptr_t); + +/* + * Bus interface definitions. + */ +static device_method_t sgisn_shub_methods[] = { + /* Device interface */ + DEVMETHOD(device_identify, sgisn_shub_identify), + DEVMETHOD(device_probe, sgisn_shub_probe), + DEVMETHOD(device_attach, sgisn_shub_attach), + + /* Bus interface */ + DEVMETHOD(bus_read_ivar, sgisn_shub_read_ivar), + DEVMETHOD(bus_write_ivar, sgisn_shub_write_ivar), + DEVMETHOD(bus_print_child, bus_generic_print_child), + DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource), + DEVMETHOD(bus_release_resource, bus_generic_release_resource), + DEVMETHOD(bus_activate_resource, sgisn_shub_activate_resource), + DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), + DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), + DEVMETHOD(bus_teardown_intr, bus_generic_teardown_intr), + + { 0, 0 } +}; + +static devclass_t sgisn_shub_devclass; +static char sgisn_shub_name[] = "shub"; + +static driver_t sgisn_shub_driver = { + sgisn_shub_name, + sgisn_shub_methods, + sizeof(struct sgisn_shub_softc), +}; + + +DRIVER_MODULE(shub, nexus, sgisn_shub_driver, sgisn_shub_devclass, 0, 0); + +static int +sgisn_shub_activate_resource(device_t dev, device_t child, int type, int rid, + struct resource *res) +{ +#if 0 + struct ia64_sal_result r; + struct sgisn_shub_softc *sc; + device_t parent; + void *vaddr; + uintptr_t func, slot; + vm_paddr_t paddr; + u_long base; + int bar, error; + + parent = device_get_parent(child); + + error = BUS_READ_IVAR(parent, child, PCI_IVAR_SLOT, &slot); + if (!error) + error = BUS_READ_IVAR(parent, child, PCI_IVAR_FUNCTION, &func); + if (error) + return (error); + + sc = device_get_softc(dev); + + r = ia64_sal_entry(SAL_SGISN_IODEV_INFO, sc->sc_domain, sc->sc_busnr, + (slot << 3) | func, ia64_tpa((uintptr_t)&sgisn_dev), + ia64_tpa((uintptr_t)&sgisn_irq), 0, 0); + if (r.sal_status != 0) + return (ENXIO); + + paddr = rman_get_start(res); + + if (type == SYS_RES_IRQ) { + /* For now, only warn when there's a mismatch. */ + if (paddr != sgisn_irq.irq_nr) + device_printf(dev, "interrupt mismatch: (actual=%u)\n", + sgisn_irq.irq_nr); + + printf("XXX: %s: %u, %u, %u, %u, %u, %#lx\n", __func__, + sgisn_irq.irq_tgt_nasid, sgisn_irq.irq_tgt_slice, + sgisn_irq.irq_cpuid, sgisn_irq.irq_nr, sgisn_irq.irq_pin, + sgisn_irq.irq_tgt_xtaddr); + printf("\t%u, %p, %p, %u, %#x, %#x, %u\n", sgisn_irq.irq_br_type, + sgisn_irq.irq_bridge, sgisn_irq.irq_io_info, sgisn_irq.irq_last, + sgisn_irq.irq_cookie, sgisn_irq.irq_flags, sgisn_irq.irq_refcnt); + + r = ia64_sal_entry(SAL_SGISN_INTERRUPT, 1 /*alloc*/, + sgisn_irq.irq_tgt_nasid, + (sgisn_irq.irq_bridge >> 24) & 15 + ia64_tpa((uintptr_t)&sgisn_irq), + paddr, + sgisn_irq.irq_tgt_nasid, + sgisn_irq.irq_tgt_slice); + if (r.status != 0) + return (ENXIO); + + goto out; + } + + bar = PCI_RID2BAR(rid); + if (bar < 0 || bar > PCIR_MAX_BAR_0) + return (EINVAL); + base = sgisn_dev.dev_bar[bar]; + if (base != paddr) + device_printf(dev, "PCI bus address %#lx mapped to CPU " + "address %#lx\n", paddr, base); + + /* I/O port space is presented as memory mapped I/O. */ + rman_set_bustag(res, IA64_BUS_SPACE_MEM); + vaddr = pmap_mapdev(base, rman_get_size(res)); + rman_set_bushandle(res, (bus_space_handle_t) vaddr); + if (type == SYS_RES_MEMORY) + rman_set_virtual(res, vaddr); + + out: + return (rman_activate_resource(res)); +#endif + + return (EDOOFUS); +} + +static void +sgisn_shub_dump_sn_info(struct ia64_sal_result *r) +{ + + printf("XXX: SHub type: %lu (0=SHub1, 1=SHub2)\n", + r->sal_result[0] & 0xff); + printf("XXX: Max nodes in system: %u\n", + 1 << ((r->sal_result[0] >> 8) & 0xff)); + printf("XXX: Max nodes in sharing domain: %u\n", + 1 << ((r->sal_result[0] >> 16) & 0xff)); + printf("XXX: Partition ID: %lu\n", (r->sal_result[0] >> 24) & 0xff); + printf("XXX: Coherency ID: %lu\n", (r->sal_result[0] >> 32) & 0xff); + printf("XXX: Region size: %lu\n", (r->sal_result[0] >> 40) & 0xff); + + printf("XXX: NasID mask: %#lx\n", r->sal_result[1] & 0xffff); + printf("XXX: NasID bit position: %lu\n", + (r->sal_result[1] >> 16) & 0xff); + +} + +static void +sgisn_shub_srat_parse(ACPI_SUBTABLE_HEADER *entry, void *arg) +{ + ACPI_SRAT_CPU_AFFINITY *cpu; + ACPI_SRAT_MEM_AFFINITY *mem; + device_t bus, dev; + uint32_t domain; + + bus = arg; + + /* + * Use all possible entry types for learning about domains. + * This probably is highly redundant and could possible be + * wrong, but it seems more harmful to miss a domain than + * anything else. + */ + domain = 0; + switch (entry->Type) { + case ACPI_SRAT_TYPE_CPU_AFFINITY: + cpu = (ACPI_SRAT_CPU_AFFINITY *)(void *)entry; + domain = cpu->ProximityDomainLo | + cpu->ProximityDomainHi[0] << 8 | + cpu->ProximityDomainHi[1] << 16 | + cpu->ProximityDomainHi[2] << 24; + break; + case ACPI_SRAT_TYPE_MEMORY_AFFINITY: + mem = (ACPI_SRAT_MEM_AFFINITY *)(void *)entry; + domain = mem->ProximityDomain; + break; + default: + return; + } + + /* + * We're done if we've already seen the domain. + */ + dev = devclass_get_device(sgisn_shub_devclass, domain); + if (dev != NULL) + return; + + if (bootverbose) + printf("%s: found now domain %u\n", sgisn_shub_name, domain); + + /* + * First encounter of this domain. Add a SHub device with a unit + * number equal to the domain number. Order the SHub devices by + * unit (and thus domain) number. + */ + dev = BUS_ADD_CHILD(bus, domain, sgisn_shub_name, domain); +} + +static void +sgisn_shub_identify(driver_t *drv, device_t bus) +{ + struct ia64_sal_result r; + ACPI_TABLE_HEADER *tbl; + void *ptr; + + KASSERT(drv == &sgisn_shub_driver, ("%s: driver mismatch", __func__)); + + /* + * The presence of SHub ASICs is conditional upon the platform + * (SGI Altix SN). Check that first... + */ + r = ia64_sal_entry(SAL_SGISN_SN_INFO, 0, 0, 0, 0, 0, 0, 0); + if (r.sal_status != 0) + return; + + if (bootverbose) + sgisn_shub_dump_sn_info(&r); + + /* + * The number of SHub ASICs is determined by the number of nodes + * in the SRAT table. + */ + tbl = ptr = acpi_find_table(ACPI_SIG_SRAT); + if (tbl == NULL) { + printf("WARNING: no SRAT table found...\n"); + return; + } + + acpi_walk_subtables((uint8_t *)ptr + sizeof(ACPI_TABLE_SRAT), + (uint8_t *)ptr + tbl->Length, sgisn_shub_srat_parse, bus); +} + +static int +sgisn_shub_probe(device_t dev) +{ + struct sgisn_shub_softc *sc; + + sc = device_get_softc(dev); + + device_set_desc(dev, "SGI SHub ASIC "); + return (BUS_PROBE_DEFAULT); +} + +static int +sgisn_shub_attach(device_t dev) +{ + struct sgisn_shub_softc *sc; + + sc = device_get_softc(dev); + sc->sc_dev = dev; + + device_add_child(dev, "pci", -1); + return (bus_generic_attach(dev)); +} + +static int +sgisn_shub_read_ivar(device_t dev, device_t child, int which, uintptr_t *res) +{ +// XXX struct sgisn_shub_softc *sc = device_get_softc(dev); + + return (ENOENT); +} + +static int +sgisn_shub_write_ivar(device_t dev, device_t child, int which, uintptr_t value) +{ +// XXX struct sgisn_shub_softc *sc = device_get_softc(dev); + + return (ENOENT); +} From owner-svn-src-projects@FreeBSD.ORG Sun Mar 27 19:29:18 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9E1541065691; Sun, 27 Mar 2011 19:29:18 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8C5EA8FC13; Sun, 27 Mar 2011 19:29:18 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2RJTIm5066874; Sun, 27 Mar 2011 19:29:18 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2RJTIKU066872; Sun, 27 Mar 2011 19:29:18 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201103271929.p2RJTIKU066872@svn.freebsd.org> From: Marcel Moolenaar Date: Sun, 27 Mar 2011 19:29:18 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220061 - projects/altix/sys/conf X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Sun, 27 Mar 2011 19:29:18 -0000 Author: marcel Date: Sun Mar 27 19:29:18 2011 New Revision: 220061 URL: http://svn.freebsd.org/changeset/base/220061 Log: Compile the SGI SHub ASIC driver by default. Modified: projects/altix/sys/conf/files.ia64 Modified: projects/altix/sys/conf/files.ia64 ============================================================================== --- projects/altix/sys/conf/files.ia64 Sun Mar 27 19:27:57 2011 (r220060) +++ projects/altix/sys/conf/files.ia64 Sun Mar 27 19:29:18 2011 (r220061) @@ -118,6 +118,7 @@ ia64/isa/isa.c optional isa ia64/isa/isa_dma.c optional isa ia64/pci/pci_cfgreg.c optional pci ia64/sgisn/sgisn_pcib.c standard +ia64/sgisn/sgisn_shub.c standard isa/syscons_isa.c optional sc isa/vga_isa.c optional vga kern/imgact_elf32.c optional compat_freebsd32 From owner-svn-src-projects@FreeBSD.ORG Mon Mar 28 19:25:16 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 01F611065670; Mon, 28 Mar 2011 19:25:16 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CC0CD8FC12; Mon, 28 Mar 2011 19:25:15 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2SJPFuv004238; Mon, 28 Mar 2011 19:25:15 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2SJPFbY004236; Mon, 28 Mar 2011 19:25:15 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103281925.p2SJPFbY004236@svn.freebsd.org> From: Attilio Rao Date: Mon, 28 Mar 2011 19:25:15 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220108 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Mon, 28 Mar 2011 19:25:16 -0000 Author: attilio Date: Mon Mar 28 19:25:15 2011 New Revision: 220108 URL: http://svn.freebsd.org/changeset/base/220108 Log: Use a SYSCTL_PROC() for netdump name device setting in order to do an early catch on problems (avoiding typos, etc). Reported by: emaste, rstone Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Mon Mar 28 19:22:55 2011 (r220107) +++ projects/sv/sys/netinet/netdump_client.c Mon Mar 28 19:25:15 2011 (r220108) @@ -116,6 +116,7 @@ static int netdump_udp_output(struct mb #ifdef NETDUMP_CLIENT_DEBUG static int sysctl_force_crash(SYSCTL_HANDLER_ARGS); #endif +static int sysctl_handle_ifxname(SYSCTL_HANDLER_ARGS); static int sysctl_handle_inaddr(SYSCTL_HANDLER_ARGS); /* Must be at least as big as the chunks dumpsys() gives us. */ @@ -173,6 +174,47 @@ netdump_supported_nic(struct ifnet *ifp) */ /* + * [sysctl_handle_ifxname] + * + * sysctl handler to deal with converting a string sysctl to/from an ifaddr + * name. + * + * Parameters: + * SYSCTL_HANDLER_ARGS + * - arg1 is a pointer to the if structure name + * - arg2 is unused + * + * Returns: + * int see errno.h, 0 for success + */ +static int +sysctl_handle_ifxname(SYSCTL_HANDLER_ARGS) +{ + char buf[IFNAMSIZ]; + struct ifnet *ifp; + int error, found; + + strlcpy(buf, arg1, sizeof(buf)); + error = sysctl_handle_string(oidp, buf, sizeof(buf), req); + if (error != 0 || req->newptr == NULL) + return (error); + found = 0; + IFNET_RLOCK_NOSLEEP(); + TAILQ_FOREACH(ifp, &V_ifnet, if_link) { + if (!strncmp(ifp->if_xname, buf, strlen(ifp->if_xname)) && + netdump_supported_nic(ifp)) { + found = 1; + break; + } + } + IFNET_RUNLOCK_NOSLEEP(); + if (found == 0) + return (EINVAL); + strlcpy(arg1, buf, strlen(buf)); + return (error); +} + +/* * [sysctl_handle_inaddr] * * sysctl handler to deal with converting a string sysctl to/from an in_addr @@ -245,8 +287,8 @@ SYSCTL_PROC(_net_dump, OID_AUTO, client, 0, sysctl_handle_inaddr, "A", "dump client"); SYSCTL_PROC(_net_dump, OID_AUTO, gateway, CTLTYPE_STRING|CTLFLAG_RW, &nd_gw, 0, sysctl_handle_inaddr, "A", "dump default gateway"); -SYSCTL_STRING(_net_dump, OID_AUTO, nic, CTLFLAG_RW, nd_ifp_str, - sizeof(nd_ifp_str), "dumping interface string"); +SYSCTL_PROC(_net_dump, OID_AUTO, nic, CTLTYPE_STRING|CTLFLAG_RW, &nd_ifp_str, + 0, sysctl_handle_ifxname, "A", "dumping interface name"); SYSCTL_INT(_net_dump, OID_AUTO, polls, CTLTYPE_INT|CTLFLAG_RW, &nd_polls, 0, "times to poll NIC per retry"); SYSCTL_INT(_net_dump, OID_AUTO, retries, CTLTYPE_INT|CTLFLAG_RW, &nd_retries, 0, From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 00:06:02 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CDF7E106566B; Tue, 29 Mar 2011 00:06:02 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id BC5528FC0C; Tue, 29 Mar 2011 00:06:02 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2T0623A010797; Tue, 29 Mar 2011 00:06:02 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2T062Ea010795; Tue, 29 Mar 2011 00:06:02 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201103290006.p2T062Ea010795@svn.freebsd.org> From: Marcel Moolenaar Date: Tue, 29 Mar 2011 00:06:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220117 - projects/altix/sys/ia64/ia64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 00:06:02 -0000 Author: marcel Date: Tue Mar 29 00:06:02 2011 New Revision: 220117 URL: http://svn.freebsd.org/changeset/base/220117 Log: Slightly rework the interrupt setup code to eliminate the hard dependency on I/O SAPICs. Modified: projects/altix/sys/ia64/ia64/interrupt.c Modified: projects/altix/sys/ia64/ia64/interrupt.c ============================================================================== --- projects/altix/sys/ia64/ia64/interrupt.c Mon Mar 28 23:08:18 2011 (r220116) +++ projects/altix/sys/ia64/ia64/interrupt.c Tue Mar 29 00:06:02 2011 (r220117) @@ -190,13 +190,35 @@ ia64_intr_unmask(void *arg) sapic_unmask(i->sapic, i->irq); } +static int +ia64_create_event(struct ia64_intr *i, u_int xiv, const char *name) +{ + char *intrname; + int error; + + error = intr_event_create(&i->event, (void *)(uintptr_t)xiv, 0, + i->irq, ia64_intr_mask, ia64_intr_unmask, ia64_intr_eoi, NULL, + "irq%u:", i->irq); + if (error) + return (error); + + i->cntp = intrcnt + xiv; + if (name != NULL && *name != '\0') { + /* XXX needs abstraction. Too error prone. */ + intrname = intrnames + xiv * INTRNAME_LEN; + memset(intrname, ' ', INTRNAME_LEN - 1); + bcopy(name, intrname, strlen(name)); + } + + return (0); +} + int ia64_setup_intr(const char *name, int irq, driver_filter_t filter, driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep) { struct ia64_intr *i; struct sapic *sa; - char *intrname; u_int prio, xiv; int error; @@ -209,65 +231,94 @@ ia64_setup_intr(const char *name, int ir /* Get the I/O SAPIC and XIV that corresponds to the IRQ. */ sa = sapic_lookup(irq, &xiv); if (sa == NULL) { - /* XXX unlock */ - printf("XXX %s: no I/O SAPIC -- can't setup IRQ %u\n", - __func__, irq); - return (0); - } - - if (xiv == 0) { - /* XXX unlock */ - i = malloc(sizeof(struct ia64_intr), M_DEVBUF, - M_ZERO | M_WAITOK); - /* XXX lock */ - sa = sapic_lookup(irq, &xiv); - KASSERT(sa != NULL, ("sapic_lookup")); - if (xiv != 0) - free(i, M_DEVBUF); - } - - /* - * If the IRQ has no XIV assigned to it yet, assign one based - * on the priority. - */ - if (xiv == 0) { - xiv = ia64_xiv_alloc(prio, IA64_XIV_IRQ, ia64_ih_irq); - if (xiv == 0) { + /* XXX assume SGI Altix... */ + xiv = irq; + i = ia64_intrs[xiv]; + if (i == NULL) { /* XXX unlock */ - free(i, M_DEVBUF); - return (ENOSPC); - } - error = intr_event_create(&i->event, (void *)(uintptr_t)xiv, - 0, irq, ia64_intr_mask, ia64_intr_unmask, ia64_intr_eoi, - NULL, "irq%u:", irq); - if (error) { - ia64_xiv_free(xiv, IA64_XIV_IRQ); - /* XXX unlock */ - free(i, M_DEVBUF); - return (error); - } + i = malloc(sizeof(struct ia64_intr), M_DEVBUF, + M_ZERO | M_WAITOK); - i->sapic = sa; - i->irq = irq; - i->cntp = intrcnt + xiv; - ia64_intrs[xiv] = i; - - /* XXX unlock */ - - sapic_enable(sa, irq, xiv); - - if (name != NULL && *name != '\0') { - /* XXX needs abstraction. Too error prone. */ - intrname = intrnames + xiv * INTRNAME_LEN; - memset(intrname, ' ', INTRNAME_LEN - 1); - bcopy(name, intrname, strlen(name)); + /* XXX lock */ + + if (ia64_intrs[xiv] == NULL) { + error = ia64_xiv_reserve(xiv, IA64_XIV_IRQ, + ia64_ih_irq); + if (error) { + /* XXX unlock */ + + free(i, M_DEVBUF); + return (error); + } + + i->irq = irq; + error = ia64_create_event(i, xiv, name); + if (error != 0) { + ia64_xiv_free(xiv, IA64_XIV_IRQ); + + /* XXX unlock */ + + free(i, M_DEVBUF); + return (error); + } + + // sgisn_register_intr(); + ia64_intrs[xiv] = i; + } else { + free(i, M_DEVBUF); + i = ia64_intrs[xiv]; + } } } else { - i = ia64_intrs[xiv]; - /* XXX unlock */ + if (xiv == 0) { + /* XXX unlock */ + + i = malloc(sizeof(struct ia64_intr), M_DEVBUF, + M_ZERO | M_WAITOK); + + /* XXX lock */ + + /* + * Make sure some other thread hasn't registered an + * event for the same IRQ while the window was open. + */ + sa = sapic_lookup(irq, &xiv); + KASSERT(sa != NULL, ("sapic_lookup")); + if (xiv != 0) { + free(i, M_DEVBUF); + i = ia64_intrs[xiv]; + } else { + xiv = ia64_xiv_alloc(prio, IA64_XIV_IRQ, + ia64_ih_irq); + if (xiv == 0) { + /* XXX unlock */ + + free(i, M_DEVBUF); + return (ENOSPC); + } + + i->irq = irq; + error = ia64_create_event(i, xiv, name); + if (error != 0) { + ia64_xiv_free(xiv, IA64_XIV_IRQ); + + /* XXX unlock */ + + free(i, M_DEVBUF); + return (error); + } + + i->sapic = sa; + sapic_enable(sa, irq, xiv); + ia64_intrs[xiv] = i; + } + } else + i = ia64_intrs[xiv]; } + /* XXX unlock */ + KASSERT(i != NULL, ("XIV mapping bug")); error = intr_event_add_handler(i->event, name, filter, handler, arg, From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 00:33:04 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8DC7F1065676; Tue, 29 Mar 2011 00:33:04 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 2A7408FC15; Tue, 29 Mar 2011 00:33:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2T0X3NE011344; Tue, 29 Mar 2011 00:33:03 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2T0X3iu011342; Tue, 29 Mar 2011 00:33:03 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201103290033.p2T0X3iu011342@svn.freebsd.org> From: Marcel Moolenaar Date: Tue, 29 Mar 2011 00:33:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220118 - projects/altix/sys/ia64/ia64 X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 00:33:04 -0000 Author: marcel Date: Tue Mar 29 00:33:02 2011 New Revision: 220118 URL: http://svn.freebsd.org/changeset/base/220118 Log: Remove Altix cruft now that we have the SHub driver. Modified: projects/altix/sys/ia64/ia64/machdep.c Modified: projects/altix/sys/ia64/ia64/machdep.c ============================================================================== --- projects/altix/sys/ia64/ia64/machdep.c Tue Mar 29 00:06:02 2011 (r220117) +++ projects/altix/sys/ia64/ia64/machdep.c Tue Mar 29 00:33:02 2011 (r220118) @@ -174,70 +174,6 @@ struct kva_md_info kmi; #define Mhz 1000000L #define Ghz (1000L*Mhz) -#define SN_SAL_SET_OS_FEATURE_SET 0x02000066 - -#define OSF_ACPI_ENABLE 2 -#define OSF_PCISEGMENT_ENABLE 3 - -#include -#include -#include - -static void -srat_dump_entry(ACPI_SUBTABLE_HEADER *entry, void *arg) -{ - ACPI_SRAT_CPU_AFFINITY *cpu; - ACPI_SRAT_MEM_AFFINITY *mem; - uint32_t domain; - uint16_t sapicid; - - switch (entry->Type) { - case ACPI_SRAT_TYPE_CPU_AFFINITY: - cpu = (ACPI_SRAT_CPU_AFFINITY *)entry; - domain = cpu->ProximityDomainLo | - cpu->ProximityDomainHi[0] << 8 | - cpu->ProximityDomainHi[1] << 16 | - cpu->ProximityDomainHi[2] << 24; - sapicid = (cpu->ApicId << 8) | cpu->LocalSapicEid; - printf("SRAT: Sapic ID %u domain %d: %s\n", sapicid, domain, - (cpu->Flags & ACPI_SRAT_CPU_ENABLED) ? "enabled" : - "disabled"); - break; - case ACPI_SRAT_TYPE_MEMORY_AFFINITY: - mem = (ACPI_SRAT_MEM_AFFINITY *)entry; - printf("SRAT: memory domain %d addr %lx len %lx: %s\n", - mem->ProximityDomain, mem->BaseAddress, mem->Length, - (mem->Flags & ACPI_SRAT_MEM_ENABLED) ? "enabled" : - "disabled"); - break; - default: - printf("SRAT: unknown type (%u)\n", entry->Type); - break; - } -} - -static void -check_sn_sal(void) -{ - struct ia64_sal_result r; - ACPI_TABLE_HEADER *tbl; - void *ptr; - - r = ia64_sal_entry(SAL_SGISN_SN_INFO, 0, 0, 0, 0, 0, 0, 0); - printf("XXX: %s: stat=%ld, res0=%#lx, res1=%#lx, res2=%#lx\n", - __func__, r.sal_status, r.sal_result[0], r.sal_result[1], - r.sal_result[2]); - if (r.sal_status != 0) - return; - - tbl = ptr = acpi_find_table(ACPI_SIG_SRAT); - printf("XXX: %s: SRAT table at %p\n", __func__, ptr); - acpi_walk_subtables((char *)ptr + sizeof(ACPI_TABLE_SRAT), - (char *)ptr + tbl->Length, srat_dump_entry, ptr); - tbl = acpi_find_table(ACPI_SIG_SLIT); - printf("XXX: %s: SLIT table at %p\n", __func__, tbl); -} - static void identifycpu(void) { @@ -867,8 +803,6 @@ ia64_init(struct bootinfo *bi) if (metadata_missing) printf("WARNING: loader(8) metadata is missing!\n"); - check_sn_sal(); - /* Get FPSWA interface */ fpswa_iface = (bootinfo->bi_fpswa == 0) ? NULL : (struct fpswa_iface *)IA64_PHYS_TO_RR7(bootinfo->bi_fpswa); From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 00:36:37 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 019B3106567D; Tue, 29 Mar 2011 00:36:37 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E3EF38FC19; Tue, 29 Mar 2011 00:36:36 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2T0aa24011448; Tue, 29 Mar 2011 00:36:36 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2T0aaGq011444; Tue, 29 Mar 2011 00:36:36 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201103290036.p2T0aaGq011444@svn.freebsd.org> From: Marcel Moolenaar Date: Tue, 29 Mar 2011 00:36:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220119 - in projects/altix/sys/ia64: include sgisn X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 00:36:37 -0000 Author: marcel Date: Tue Mar 29 00:36:36 2011 New Revision: 220119 URL: http://svn.freebsd.org/changeset/base/220119 Log: o Fleshed-out shub driver that creates pcib children. o Modified pcib driver that attaches to shub. o Slightly tweaked PROM-defined structures. Modified: projects/altix/sys/ia64/include/sgisn.h projects/altix/sys/ia64/sgisn/sgisn_pcib.c projects/altix/sys/ia64/sgisn/sgisn_shub.c Modified: projects/altix/sys/ia64/include/sgisn.h ============================================================================== --- projects/altix/sys/ia64/include/sgisn.h Tue Mar 29 00:33:02 2011 (r220118) +++ projects/altix/sys/ia64/include/sgisn.h Tue Mar 29 00:36:36 2011 (r220119) @@ -29,6 +29,7 @@ #define _MACHINE_SGISN_H_ /* SAL functions */ +#define SAL_SGISN_KLCONFIG_ADDR 0x02000005 #define SAL_SGISN_SAPIC_INFO 0x0200001d #define SAL_SGISN_SN_INFO 0x0200001e #define SAL_SGISN_PUTC 0x02000021 @@ -38,6 +39,8 @@ #define SAL_SGISN_IOHUB_INFO 0x02000055 #define SAL_SGISN_IOBUS_INFO 0x02000056 #define SAL_SGISN_IODEV_INFO 0x02000057 +#define SAL_SGISN_FEATURE_GET_PROM 0x02000065 +#define SAL_SGISN_FEATURE_SET_OS 0x02000066 #define SGISN_GEOID_MODULE(id) (((id) >> 0) & 0xffffffffu) #define SGISN_GEOID_TYPE(id) (((id) >> 32) & 0xff) @@ -61,23 +64,39 @@ #define SGISN_HUB_NITTES 8 #define SGISN_HUB_NWIDGETS 16 +#define SHUB_IVAR_PCIBUS 1 +#define SHUB_IVAR_PCISEG 2 + +struct sgisn_fwhub; + struct sgisn_widget { uint32_t wgt_hwmfg; uint32_t wgt_hwrev; uint32_t wgt_hwpn; uint8_t wgt_port; - char _pad[3]; - uint64_t wgt_private; - uint64_t wgt_provider; + uint8_t _pad[3]; + struct sgisn_fwhub *wgt_hub; + uint64_t wgt_funcs; uint64_t wgt_vertex; }; -struct sgisn_hub { +struct sgisn_fwbus { + uint32_t bus_asic; + uint32_t bus_xid; + uint32_t bus_busnr; + uint32_t bus_segment; + uint64_t bus_ioport_addr; + uint64_t bus_memio_addr; + uint64_t bus_base; + struct sgisn_widget *bus_wgt_info; +}; + +struct sgisn_fwhub { uint64_t hub_geoid; uint16_t hub_nasid; uint16_t hub_peer_nasid; - char _pad[4]; - uint64_t hub_pointer; + uint32_t _pad; + void *hub_widgets; uint64_t hub_dma_itte[SGISN_HUB_NITTES]; struct sgisn_widget hub_widget[SGISN_HUB_NWIDGETS]; @@ -88,29 +107,33 @@ struct sgisn_hub { uint32_t hub_pci_maxbus; }; -struct sgisn_irq { - uint64_t irq_unused; - uint16_t irq_nasid; - char _pad1[2]; - u_int irq_slice; - u_int irq_cpuid; - u_int irq_no; - u_int irq_pin; - uint64_t irq_xtaddr; - u_int irq_br_type; - char _pad2[4]; - uint64_t irq_bridge; - uint64_t irq_io_info; - u_int irq_last; - u_int irq_cookie; - u_int irq_flags; - u_int irq_refcnt; +struct sgisn_fwirq { + uint64_t _obsolete; + uint16_t irq_tgt_nasid; + uint16_t _pad1; + uint32_t irq_tgt_slice; + uint32_t irq_cpuid; + uint32_t irq_nr; + uint32_t irq_pin; + uint64_t irq_tgt_xtaddr; + uint32_t irq_br_type; + uint32_t _pad2; + void *irq_bridge; /* Originating */ + void *irq_io_info; + uint32_t irq_last; + uint32_t irq_cookie; + uint32_t irq_flags; + uint32_t irq_refcnt; }; -struct sgisn_dev { +struct sgisn_fwdev { uint64_t dev_bar[6]; - uint64_t dev_rom; + uint64_t dev_romaddr; uint64_t dev_handle; + struct sgisn_fwbus *dev_bus_softc; + struct sgisn_fwdev *dev_parent; + void *dev_os_devptr; + struct sgisn_fwirq *dev_irq; }; #endif /* !_MACHINE_SGISN_H_ */ Modified: projects/altix/sys/ia64/sgisn/sgisn_pcib.c ============================================================================== --- projects/altix/sys/ia64/sgisn/sgisn_pcib.c Tue Mar 29 00:33:02 2011 (r220118) +++ projects/altix/sys/ia64/sgisn/sgisn_pcib.c Tue Mar 29 00:36:36 2011 (r220119) @@ -50,9 +50,8 @@ __FBSDID("$FreeBSD$"); #include #include -static struct sgisn_hub sgisn_hub; -static struct sgisn_dev sgisn_dev; -static struct sgisn_irq sgisn_irq; +static struct sgisn_fwdev sgisn_dev; +static struct sgisn_fwirq sgisn_irq; struct sgisn_pcib_softc { device_t sc_dev; @@ -62,7 +61,6 @@ struct sgisn_pcib_softc { }; static int sgisn_pcib_attach(device_t); -static void sgisn_pcib_identify(driver_t *, device_t); static int sgisn_pcib_probe(device_t); static int sgisn_pcib_activate_resource(device_t, device_t, int, int, @@ -84,7 +82,6 @@ static int sgisn_pcib_scan(struct sgisn_ */ static device_method_t sgisn_pcib_methods[] = { /* Device interface */ - DEVMETHOD(device_identify, sgisn_pcib_identify), DEVMETHOD(device_probe, sgisn_pcib_probe), DEVMETHOD(device_attach, sgisn_pcib_attach), @@ -116,7 +113,7 @@ static driver_t sgisn_pcib_driver = { devclass_t pcib_devclass; -DRIVER_MODULE(pcib, nexus, sgisn_pcib_driver, pcib_devclass, 0, 0); +DRIVER_MODULE(pcib, shub, sgisn_pcib_driver, pcib_devclass, 0, 0); static int sgisn_pcib_maxslots(device_t dev) @@ -184,9 +181,30 @@ sgisn_pcib_activate_resource(device_t de if (type == SYS_RES_IRQ) { /* For now, only warn when there's a mismatch. */ - if (paddr != sgisn_irq.irq_no) + if (paddr != sgisn_irq.irq_nr) device_printf(dev, "interrupt mismatch: (actual=%u)\n", - sgisn_irq.irq_no); + sgisn_irq.irq_nr); + + printf("XXX: %s: %u, %u, %u, %u, %u, %#lx\n", __func__, + sgisn_irq.irq_tgt_nasid, sgisn_irq.irq_tgt_slice, + sgisn_irq.irq_cpuid, sgisn_irq.irq_nr, sgisn_irq.irq_pin, + sgisn_irq.irq_tgt_xtaddr); + printf("\t%u, %p, %p, %u, %#x, %#x, %u\n", sgisn_irq.irq_br_type, + sgisn_irq.irq_bridge, sgisn_irq.irq_io_info, sgisn_irq.irq_last, + sgisn_irq.irq_cookie, sgisn_irq.irq_flags, sgisn_irq.irq_refcnt); + +#if 0 + r = ia64_sal_entry(SAL_SGISN_INTERRUPT, 1 /*alloc*/, + sgisn_irq.irq_tgt_nasid, + (sgisn_irq.irq_bridge >> 24) & 15 + ia64_tpa((uintptr_t)&sgisn_irq), + paddr, + sgisn_irq.irq_tgt_nasid, + sgisn_irq.irq_tgt_slice); + if (r.status != 0) + return (ENXIO); +#endif + goto out; } @@ -209,44 +227,19 @@ sgisn_pcib_activate_resource(device_t de return (rman_activate_resource(res)); } -static void -sgisn_pcib_identify(driver_t *drv, device_t bus) -{ - struct ia64_sal_result r; - device_t dev; - struct sgisn_pcib_softc *sc; - void *addr; - u_int busno, segno; - - sgisn_hub.hub_pci_maxseg = 0xffffffff; - sgisn_hub.hub_pci_maxbus = 0xff; - r = ia64_sal_entry(SAL_SGISN_IOHUB_INFO, PCPU_GET(md.sgisn_nasid), - ia64_tpa((uintptr_t)&sgisn_hub), 0, 0, 0, 0, 0); - if (r.sal_status != 0) - return; - - for (segno = 0; segno <= sgisn_hub.hub_pci_maxseg; segno++) { - for (busno = 0; busno <= sgisn_hub.hub_pci_maxbus; busno++) { - r = ia64_sal_entry(SAL_SGISN_IOBUS_INFO, segno, busno, - ia64_tpa((uintptr_t)&addr), 0, 0, 0, 0); - - if (r.sal_status == 0 && addr != NULL) { - dev = BUS_ADD_CHILD(bus, 0, drv->name, -1); - if (dev == NULL) - continue; - device_set_driver(dev, drv); - sc = device_get_softc(dev); - sc->sc_promaddr = addr; - sc->sc_domain = segno; - sc->sc_busnr = busno; - } - } - } -} - static int sgisn_pcib_probe(device_t dev) { + device_t parent; + uintptr_t bus, seg; + + parent = device_get_parent(dev); + if (parent == NULL) + return (ENXIO); + + if (BUS_READ_IVAR(parent, dev, SHUB_IVAR_PCISEG, &seg) || + BUS_READ_IVAR(parent, dev, SHUB_IVAR_PCIBUS, &bus)) + return (ENXIO); device_set_desc(dev, "SGI PCI-X host controller"); return (BUS_PROBE_DEFAULT); @@ -256,10 +249,18 @@ static int sgisn_pcib_attach(device_t dev) { struct sgisn_pcib_softc *sc; + device_t parent; + uintptr_t bus, seg; sc = device_get_softc(dev); sc->sc_dev = dev; + parent = device_get_parent(dev); + BUS_READ_IVAR(parent, dev, SHUB_IVAR_PCIBUS, &bus); + sc->sc_busnr = bus; + BUS_READ_IVAR(parent, dev, SHUB_IVAR_PCISEG, &seg); + sc->sc_domain = seg; + #if 0 sgisn_pcib_scan(sc, sc->sc_busnr, sgisn_pcib_maxslots(dev)); #endif @@ -301,8 +302,8 @@ sgisn_pcib_write_ivar(device_t dev, devi static int sgisn_pcib_scan(struct sgisn_pcib_softc *sc, u_int bus, u_int maxslot) { - static struct sgisn_dev dev; - static struct sgisn_irq irq; + static struct sgisn_fwdev dev; + static struct sgisn_fwirq irq; struct ia64_sal_result r; u_int devfn, func, maxfunc, slot; uint8_t hdrtype; Modified: projects/altix/sys/ia64/sgisn/sgisn_shub.c ============================================================================== --- projects/altix/sys/ia64/sgisn/sgisn_shub.c Tue Mar 29 00:33:02 2011 (r220118) +++ projects/altix/sys/ia64/sgisn/sgisn_shub.c Tue Mar 29 00:36:36 2011 (r220119) @@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -48,14 +49,16 @@ __FBSDID("$FreeBSD$"); #include #include -// XXX static struct sgisn_hub sgisn_hub; - struct sgisn_shub_softc { - struct sgisn_hub sc_prom_hub; + struct sgisn_fwhub *sc_fwhub; device_t sc_dev; - void *sc_promaddr; + vm_paddr_t sc_membase; + vm_size_t sc_memsize; u_int sc_domain; - u_int sc_busnr; + u_int sc_hubtype; /* SHub type (0=SHub1, 1=SHub2) */ + u_int sc_nasid_mask; + u_int sc_nasid_shft; + u_int sc_nasid; }; static int sgisn_shub_attach(device_t); @@ -204,7 +207,7 @@ sgisn_shub_dump_sn_info(struct ia64_sal_ } static void -sgisn_shub_srat_parse(ACPI_SUBTABLE_HEADER *entry, void *arg) +sgisn_shub_identify_srat_cb(ACPI_SUBTABLE_HEADER *entry, void *arg) { ACPI_SRAT_CPU_AFFINITY *cpu; ACPI_SRAT_MEM_AFFINITY *mem; @@ -215,7 +218,7 @@ sgisn_shub_srat_parse(ACPI_SUBTABLE_HEAD /* * Use all possible entry types for learning about domains. - * This probably is highly redundant and could possible be + * This probably is highly redundant and could possibly be * wrong, but it seems more harmful to miss a domain than * anything else. */ @@ -244,7 +247,7 @@ sgisn_shub_srat_parse(ACPI_SUBTABLE_HEAD return; if (bootverbose) - printf("%s: found now domain %u\n", sgisn_shub_name, domain); + printf("%s: new domain %u\n", sgisn_shub_name, domain); /* * First encounter of this domain. Add a SHub device with a unit @@ -285,37 +288,175 @@ sgisn_shub_identify(driver_t *drv, devic } acpi_walk_subtables((uint8_t *)ptr + sizeof(ACPI_TABLE_SRAT), - (uint8_t *)ptr + tbl->Length, sgisn_shub_srat_parse, bus); + (uint8_t *)ptr + tbl->Length, sgisn_shub_identify_srat_cb, bus); } static int sgisn_shub_probe(device_t dev) { + struct ia64_sal_result r; + char desc[80]; + u_int v; + + /* + * NOTICE: This can only be done on a CPU that's connected to the + * FSB of the SHub ASIC. As such, the BSP can only validly probe + * the SHub it's connected to. + * + * In order to probe and attach SHubs in other domains, we need to + * defer to some CPU connected to that SHub. + * + * XXX For now, we assume that SHub types are the same across the + * system, so we simply query the SHub in our domain and pretend + * we queried the one corresponding to the domain this instance + * refers to. + */ + r = ia64_sal_entry(SAL_SGISN_SN_INFO, 0, 0, 0, 0, 0, 0, 0); + if (r.sal_status != 0) + return (ENXIO); + + v = (r.sal_result[0] & 0xff) + 1;; + snprintf(desc, sizeof(desc), "SGI SHub%u ASIC", v); + device_set_desc_copy(dev, desc); + return (BUS_PROBE_DEFAULT); +} + +static void +sgisn_shub_attach_srat_cb(ACPI_SUBTABLE_HEADER *entry, void *arg) +{ + device_t dev = arg; + ACPI_SRAT_MEM_AFFINITY *mem; struct sgisn_shub_softc *sc; + + if (entry->Type != ACPI_SRAT_TYPE_MEMORY_AFFINITY) + return; sc = device_get_softc(dev); - device_set_desc(dev, "SGI SHub ASIC "); - return (BUS_PROBE_DEFAULT); + mem = (ACPI_SRAT_MEM_AFFINITY *)(void *)entry; + if (mem->ProximityDomain != sc->sc_domain) + return; + if ((mem->Flags & ACPI_SRAT_MEM_ENABLED) == 0) + return; + + sc->sc_membase = mem->BaseAddress; + sc->sc_memsize = mem->Length; } static int sgisn_shub_attach(device_t dev) { + struct ia64_sal_result r; struct sgisn_shub_softc *sc; + ACPI_TABLE_HEADER *tbl; + device_t child; + void *ptr; + u_long addr; + u_int bus, seg, wdgt; sc = device_get_softc(dev); sc->sc_dev = dev; + sc->sc_domain = device_get_unit(dev); + + /* + * Get the physical memory region that is connected to the MD I/F + * of this SHub. It allows us to allocate memory that's close to + * this SHub. Fail the attach if we don't have local memory, as + * we really depend on it. + */ + tbl = ptr = acpi_find_table(ACPI_SIG_SRAT); + acpi_walk_subtables((uint8_t *)ptr + sizeof(ACPI_TABLE_SRAT), + (uint8_t *)ptr + tbl->Length, sgisn_shub_attach_srat_cb, dev); + if (sc->sc_memsize == 0) + return (ENXIO); + + if (bootverbose) + device_printf(dev, "%#lx bytes of attached memory at %#lx\n", + sc->sc_memsize, sc->sc_membase); + + /* + * Obtain our NASID. + */ + r = ia64_sal_entry(SAL_SGISN_SN_INFO, 0, 0, 0, 0, 0, 0, 0); + if (r.sal_status != 0) + return (ENXIO); + + sc->sc_hubtype = r.sal_result[0] & 0xff; + sc->sc_nasid_mask = r.sal_result[1] & 0xffff; + sc->sc_nasid_shft = (r.sal_result[1] >> 16) & 0xff; + sc->sc_nasid = (sc->sc_membase >> sc->sc_nasid_shft) & + sc->sc_nasid_mask; + + if (bootverbose) + device_printf(dev, "NASID=%#x\n", sc->sc_nasid); + + /* + * Allocate contiguous memory, local to the SHub, for collecting + * SHub information from the PROM and for discovering the PCI + * host controllers connected to the SHub. + */ + sc->sc_fwhub = contigmalloc(sizeof(struct sgisn_fwhub), M_DEVBUF, + M_ZERO, sc->sc_membase, sc->sc_membase + sc->sc_memsize, 16, 0); + + sc->sc_fwhub->hub_pci_maxseg = 0xffffffff; + sc->sc_fwhub->hub_pci_maxbus = 0xff; + r = ia64_sal_entry(SAL_SGISN_IOHUB_INFO, sc->sc_nasid, + ia64_tpa((uintptr_t)sc->sc_fwhub), 0, 0, 0, 0, 0); + if (r.sal_status != 0) { + contigfree(sc->sc_fwhub, sizeof(struct sgisn_fwhub), M_DEVBUF); + return (ENXIO); + } + + for (wdgt = 0; wdgt < SGISN_HUB_NWIDGETS; wdgt++) + sc->sc_fwhub->hub_widget[wdgt].wgt_hub = sc->sc_fwhub; + + r = ia64_sal_entry(SAL_SGISN_KLCONFIG_ADDR, sc->sc_nasid, + 0, 0, 0, 0, 0, 0); + device_printf(dev, "KLCONFIG: status=%#lx, addr=%#lx\n", + r.sal_status, r.sal_result[0]); + + /* + * XXX Hack to avoid having the same PCI busses as children of any + * SHub we have. The problem is that we can't pass the nasid to the + * the SAL function. So either we get all the busses, irrespective + * of the node in which they live or we always get the busses local + * to the CPU. I can't tell the difference, because I don't have + * busses on the other brick right now. + * In any case: we don't have a good way yet to figure out if the + * bus connects to the SHub in question. + */ + if (sc->sc_nasid != 0) + return (0); + + for (seg = 0; seg <= sc->sc_fwhub->hub_pci_maxseg; seg++) { + for (bus = 0; bus <= sc->sc_fwhub->hub_pci_maxbus; bus++) { + r = ia64_sal_entry(SAL_SGISN_IOBUS_INFO, seg, bus, + ia64_tpa((uintptr_t)&addr), 0, 0, 0, 0); + if (r.sal_status == 0 && addr != 0) { + child = device_add_child(dev, "pcib", -1); + device_set_ivars(child, (void *)(uintptr_t) + ((seg << 8) | (bus & 0xff))); + } + } + } - device_add_child(dev, "pci", -1); return (bus_generic_attach(dev)); } static int sgisn_shub_read_ivar(device_t dev, device_t child, int which, uintptr_t *res) { -// XXX struct sgisn_shub_softc *sc = device_get_softc(dev); + uintptr_t ivars; + ivars = (uintptr_t)device_get_ivars(child); + switch (which) { + case SHUB_IVAR_PCIBUS: + *res = ivars & 0xff; + return (0); + case SHUB_IVAR_PCISEG: + *res = ivars >> 8; + return (0); + } return (ENOENT); } From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 00:47:01 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81453106566B; Tue, 29 Mar 2011 00:47:01 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6CBC28FC12; Tue, 29 Mar 2011 00:47:01 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2T0l11k011743; Tue, 29 Mar 2011 00:47:01 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2T0l1Mx011714; Tue, 29 Mar 2011 00:47:01 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201103290047.p2T0l1Mx011714@svn.freebsd.org> From: Marcel Moolenaar Date: Tue, 29 Mar 2011 00:47:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220120 - in projects/altix/sys: amd64/amd64 amd64/include amd64/linux32 boot/pc98/boot2 cddl/contrib/opensolaris/uts/common/fs/zfs compat/freebsd32 compat/linprocfs compat/linux conf d... X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 00:47:01 -0000 Author: marcel Date: Tue Mar 29 00:47:00 2011 New Revision: 220120 URL: http://svn.freebsd.org/changeset/base/220120 Log: Merge svn+ssh://svn.freebsd.org/base/head@220114 Added: projects/altix/sys/geom/raid/ - copied from r220114, head/sys/geom/raid/ projects/altix/sys/modules/geom/geom_raid/ - copied from r220114, head/sys/modules/geom/geom_raid/ Modified: projects/altix/sys/amd64/amd64/identcpu.c projects/altix/sys/amd64/amd64/initcpu.c projects/altix/sys/amd64/amd64/machdep.c projects/altix/sys/amd64/amd64/minidump_machdep.c projects/altix/sys/amd64/amd64/mp_machdep.c projects/altix/sys/amd64/include/pmap.h projects/altix/sys/amd64/include/smp.h projects/altix/sys/amd64/linux32/linux.h projects/altix/sys/amd64/linux32/linux32_dummy.c projects/altix/sys/amd64/linux32/linux32_proto.h projects/altix/sys/amd64/linux32/linux32_syscall.h projects/altix/sys/amd64/linux32/linux32_syscalls.c projects/altix/sys/amd64/linux32/linux32_sysent.c projects/altix/sys/amd64/linux32/linux32_systrace_args.c projects/altix/sys/amd64/linux32/linux32_sysvec.c projects/altix/sys/amd64/linux32/syscalls.master projects/altix/sys/boot/pc98/boot2/boot2.c projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c projects/altix/sys/compat/freebsd32/freebsd32_ioctl.c projects/altix/sys/compat/freebsd32/freebsd32_ioctl.h projects/altix/sys/compat/linprocfs/linprocfs.c projects/altix/sys/compat/linux/linux_misc.c projects/altix/sys/compat/linux/linux_misc.h projects/altix/sys/compat/linux/linux_socket.c projects/altix/sys/compat/linux/linux_socket.h projects/altix/sys/conf/NOTES projects/altix/sys/conf/files projects/altix/sys/conf/files.sparc64 projects/altix/sys/conf/files.sun4v projects/altix/sys/conf/ldscript.amd64 projects/altix/sys/conf/options projects/altix/sys/dev/ae/if_ae.c projects/altix/sys/dev/age/if_age.c projects/altix/sys/dev/agp/agp.c projects/altix/sys/dev/aic7xxx/aic79xx_pci.c projects/altix/sys/dev/alc/if_alc.c projects/altix/sys/dev/ale/if_ale.c projects/altix/sys/dev/ath/ah_osdep.c projects/altix/sys/dev/ath/ath_hal/ah.c projects/altix/sys/dev/ath/ath_hal/ah.h projects/altix/sys/dev/ath/ath_hal/ah_eeprom_v14.h projects/altix/sys/dev/ath/ath_hal/ah_internal.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar2133.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_ani.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_attach.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_cal.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_xmit.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416reg.h projects/altix/sys/dev/ath/ath_hal/ar9001/ar9160_attach.c projects/altix/sys/dev/ath/ath_hal/ar9002/ar9280_attach.c projects/altix/sys/dev/ath/ath_hal/ar9002/ar9285_attach.c projects/altix/sys/dev/ath/ath_rate/sample/sample.c projects/altix/sys/dev/ath/if_ath.c projects/altix/sys/dev/ath/if_ath_tx.c projects/altix/sys/dev/ath/if_ath_tx_ht.c projects/altix/sys/dev/ath/if_athvar.h projects/altix/sys/dev/bce/if_bce.c projects/altix/sys/dev/bge/if_bge.c projects/altix/sys/dev/bwn/if_bwn.c projects/altix/sys/dev/bxe/if_bxe.c projects/altix/sys/dev/cxgb/common/cxgb_common.h projects/altix/sys/dev/cxgb/common/cxgb_t3_hw.c projects/altix/sys/dev/cxgb/cxgb_adapter.h projects/altix/sys/dev/cxgb/cxgb_main.c projects/altix/sys/dev/cxgb/cxgb_sge.c projects/altix/sys/dev/cxgb/cxgb_t3fw.h projects/altix/sys/dev/cxgbe/adapter.h projects/altix/sys/dev/cxgbe/t4_main.c projects/altix/sys/dev/cxgbe/t4_sge.c projects/altix/sys/dev/dc/if_dc.c projects/altix/sys/dev/drm/drm_agpsupport.c projects/altix/sys/dev/e1000/e1000_osdep.c projects/altix/sys/dev/e1000/if_em.c projects/altix/sys/dev/e1000/if_lem.c projects/altix/sys/dev/et/if_et.c projects/altix/sys/dev/fxp/if_fxp.c projects/altix/sys/dev/iwn/if_iwn.c projects/altix/sys/dev/ixgbe/ixv.c projects/altix/sys/dev/jme/if_jme.c projects/altix/sys/dev/ksyms/ksyms.c projects/altix/sys/dev/led/led.c projects/altix/sys/dev/led/led.h projects/altix/sys/dev/malo/if_malo_pci.c projects/altix/sys/dev/msk/if_msk.c projects/altix/sys/dev/mvs/mvs_soc.c projects/altix/sys/dev/mxge/if_mxge.c projects/altix/sys/dev/nfe/if_nfe.c projects/altix/sys/dev/nge/if_nge.c projects/altix/sys/dev/pci/hostb_pci.c projects/altix/sys/dev/pci/pci.c projects/altix/sys/dev/pci/pcivar.h projects/altix/sys/dev/re/if_re.c projects/altix/sys/dev/siba/siba_core.c projects/altix/sys/dev/sis/if_sis.c projects/altix/sys/dev/ste/if_ste.c projects/altix/sys/dev/txp/if_txp.c projects/altix/sys/dev/usb/controller/ehci.c projects/altix/sys/dev/usb/input/ums.c projects/altix/sys/dev/usb/wlan/if_zyd.c projects/altix/sys/dev/vge/if_vge.c projects/altix/sys/dev/vr/if_vr.c projects/altix/sys/dev/vte/if_vtevar.h projects/altix/sys/dev/xl/if_xl.c projects/altix/sys/fs/msdosfs/msdosfs_lookup.c projects/altix/sys/fs/nfsclient/nfs_clport.c projects/altix/sys/geom/gate/g_gate.c projects/altix/sys/geom/gate/g_gate.h projects/altix/sys/geom/geom.h projects/altix/sys/geom/geom_dev.c projects/altix/sys/geom/geom_disk.c projects/altix/sys/i386/i386/identcpu.c projects/altix/sys/i386/i386/initcpu.c projects/altix/sys/i386/include/vmparam.h projects/altix/sys/i386/linux/linux.h projects/altix/sys/i386/linux/linux_dummy.c projects/altix/sys/i386/linux/linux_proto.h projects/altix/sys/i386/linux/linux_syscall.h projects/altix/sys/i386/linux/linux_syscalls.c projects/altix/sys/i386/linux/linux_sysent.c projects/altix/sys/i386/linux/linux_systrace_args.c projects/altix/sys/i386/linux/linux_sysvec.c projects/altix/sys/i386/linux/syscalls.master projects/altix/sys/ia64/include/pmap.h projects/altix/sys/kern/kern_descrip.c projects/altix/sys/kern/kern_fork.c projects/altix/sys/kern/kern_malloc.c projects/altix/sys/kern/kern_proc.c projects/altix/sys/kern/kern_resource.c projects/altix/sys/kern/kern_sig.c projects/altix/sys/kern/kern_thread.c projects/altix/sys/kern/subr_acl_nfs4.c projects/altix/sys/kern/subr_param.c projects/altix/sys/kern/subr_uio.c projects/altix/sys/kern/vfs_mount.c projects/altix/sys/kern/vfs_syscalls.c projects/altix/sys/mips/atheros/ar71xx_ehci.c projects/altix/sys/mips/atheros/ar71xx_machdep.c projects/altix/sys/modules/Makefile projects/altix/sys/modules/geom/Makefile projects/altix/sys/net80211/ieee80211_proto.c projects/altix/sys/netinet/tcp_sack.c projects/altix/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c projects/altix/sys/ofed/drivers/net/mlx4/en_cq.c projects/altix/sys/ofed/drivers/net/mlx4/en_ethtool.c projects/altix/sys/ofed/drivers/net/mlx4/en_main.c projects/altix/sys/ofed/drivers/net/mlx4/en_netdev.c projects/altix/sys/ofed/drivers/net/mlx4/en_port.c projects/altix/sys/ofed/drivers/net/mlx4/en_rx.c projects/altix/sys/ofed/drivers/net/mlx4/fw.c projects/altix/sys/ofed/drivers/net/mlx4/fw.h projects/altix/sys/ofed/drivers/net/mlx4/main.c projects/altix/sys/ofed/drivers/net/mlx4/mlx4_en.h projects/altix/sys/ofed/include/linux/gfp.h projects/altix/sys/ofed/include/linux/mlx4/device.h projects/altix/sys/ofed/include/linux/pci.h projects/altix/sys/ofed/include/linux/scatterlist.h projects/altix/sys/ofed/include/rdma/ib_addr.h projects/altix/sys/pci/if_rl.c projects/altix/sys/sparc64/pci/ofw_pci.h projects/altix/sys/sparc64/pci/ofw_pci_if.m projects/altix/sys/sparc64/pci/ofw_pcibus.c projects/altix/sys/sparc64/pci/psycho.c projects/altix/sys/sparc64/pci/psychovar.h projects/altix/sys/sparc64/pci/schizo.c projects/altix/sys/sparc64/pci/schizoreg.h projects/altix/sys/sparc64/pci/schizovar.h projects/altix/sys/sys/acl.h projects/altix/sys/sys/fcntl.h projects/altix/sys/sys/filedesc.h projects/altix/sys/sys/proc.h projects/altix/sys/sys/systm.h projects/altix/sys/sys/uio.h projects/altix/sys/ufs/ffs/ffs_alloc.c projects/altix/sys/ufs/ffs/ffs_extern.h projects/altix/sys/ufs/ffs/ffs_softdep.c projects/altix/sys/vm/vm_fault.c projects/altix/sys/vm/vm_meter.c projects/altix/sys/vm/vm_pageout.c Directory Properties: projects/altix/lib/libstand/ (props changed) projects/altix/sys/ (props changed) projects/altix/sys/amd64/include/xen/ (props changed) projects/altix/sys/boot/i386/efi/ (props changed) projects/altix/sys/boot/ia64/efi/ (props changed) projects/altix/sys/boot/ia64/ski/ (props changed) projects/altix/sys/boot/powerpc/boot1.chrp/ (props changed) projects/altix/sys/boot/powerpc/ofw/ (props changed) projects/altix/sys/cddl/contrib/opensolaris/ (props changed) projects/altix/sys/conf/ (props changed) projects/altix/sys/contrib/dev/acpica/ (props changed) projects/altix/sys/contrib/octeon-sdk/ (props changed) projects/altix/sys/contrib/pf/ (props changed) projects/altix/sys/contrib/x86emu/ (props changed) projects/altix/sys/kern/subr_busdma.c (props changed) Modified: projects/altix/sys/amd64/amd64/identcpu.c ============================================================================== --- projects/altix/sys/amd64/amd64/identcpu.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/amd64/identcpu.c Tue Mar 29 00:47:00 2011 (r220120) @@ -385,7 +385,7 @@ printcpuinfo(void) ); } - if (cpu_vendor_id == CPU_VENDOR_CENTAUR) + if (via_feature_rng != 0 || via_feature_xcrypt != 0) print_via_padlock_info(); if ((cpu_feature & CPUID_HTT) && @@ -643,25 +643,7 @@ print_via_padlock_info(void) { u_int regs[4]; - /* Check for supported models. */ - switch (cpu_id & 0xff0) { - case 0x690: - if ((cpu_id & 0xf) < 3) - return; - case 0x6a0: - case 0x6d0: - case 0x6f0: - break; - default: - return; - } - - do_cpuid(0xc0000000, regs); - if (regs[0] >= 0xc0000001) - do_cpuid(0xc0000001, regs); - else - return; - + do_cpuid(0xc0000001, regs); printf("\n VIA Padlock Features=0x%b", regs[3], "\020" "\003RNG" /* RNG */ Modified: projects/altix/sys/amd64/amd64/initcpu.c ============================================================================== --- projects/altix/sys/amd64/amd64/initcpu.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/amd64/initcpu.c Tue Mar 29 00:47:00 2011 (r220120) @@ -74,72 +74,47 @@ u_int cpu_mxcsr_mask; /* Valid bits in u_int cpu_clflush_line_size = 32; SYSCTL_UINT(_hw, OID_AUTO, via_feature_rng, CTLFLAG_RD, - &via_feature_rng, 0, "VIA C3/C7 RNG feature available in CPU"); + &via_feature_rng, 0, "VIA RNG feature available in CPU"); SYSCTL_UINT(_hw, OID_AUTO, via_feature_xcrypt, CTLFLAG_RD, - &via_feature_xcrypt, 0, "VIA C3/C7 xcrypt feature available in CPU"); + &via_feature_xcrypt, 0, "VIA xcrypt feature available in CPU"); /* - * Initialize special VIA C3/C7 features + * Initialize special VIA features */ static void init_via(void) { u_int regs[4], val; - u_int64_t msreg; + /* + * Check extended CPUID for PadLock features. + * + * http://www.via.com.tw/en/downloads/whitepapers/initiatives/padlock/programming_guide.pdf + */ do_cpuid(0xc0000000, regs); - val = regs[0]; - if (val >= 0xc0000001) { + if (regs[0] >= 0xc0000001) { do_cpuid(0xc0000001, regs); val = regs[3]; } else - val = 0; + return; - /* Enable RNG if present and disabled */ - if (val & VIA_CPUID_HAS_RNG) { - if (!(val & VIA_CPUID_DO_RNG)) { - msreg = rdmsr(0x110B); - msreg |= 0x40; - wrmsr(0x110B, msreg); - } + /* Enable RNG if present. */ + if ((val & VIA_CPUID_HAS_RNG) != 0) { via_feature_rng = VIA_HAS_RNG; + wrmsr(0x110B, rdmsr(0x110B) | VIA_CPUID_DO_RNG); } - /* Enable AES engine if present and disabled */ - if (val & VIA_CPUID_HAS_ACE) { - if (!(val & VIA_CPUID_DO_ACE)) { - msreg = rdmsr(0x1107); - msreg |= (0x01 << 28); - wrmsr(0x1107, msreg); - } + + /* Enable PadLock if present. */ + if ((val & VIA_CPUID_HAS_ACE) != 0) via_feature_xcrypt |= VIA_HAS_AES; - } - /* Enable ACE2 engine if present and disabled */ - if (val & VIA_CPUID_HAS_ACE2) { - if (!(val & VIA_CPUID_DO_ACE2)) { - msreg = rdmsr(0x1107); - msreg |= (0x01 << 28); - wrmsr(0x1107, msreg); - } + if ((val & VIA_CPUID_HAS_ACE2) != 0) via_feature_xcrypt |= VIA_HAS_AESCTR; - } - /* Enable SHA engine if present and disabled */ - if (val & VIA_CPUID_HAS_PHE) { - if (!(val & VIA_CPUID_DO_PHE)) { - msreg = rdmsr(0x1107); - msreg |= (0x01 << 28/**/); - wrmsr(0x1107, msreg); - } + if ((val & VIA_CPUID_HAS_PHE) != 0) via_feature_xcrypt |= VIA_HAS_SHA; - } - /* Enable MM engine if present and disabled */ - if (val & VIA_CPUID_HAS_PMM) { - if (!(val & VIA_CPUID_DO_PMM)) { - msreg = rdmsr(0x1107); - msreg |= (0x01 << 28/**/); - wrmsr(0x1107, msreg); - } + if ((val & VIA_CPUID_HAS_PMM) != 0) via_feature_xcrypt |= VIA_HAS_MM; - } + if (via_feature_xcrypt != 0) + wrmsr(0x1107, rdmsr(0x1107) | (1 << 28)); } /* @@ -159,9 +134,7 @@ initializecpu(void) wrmsr(MSR_EFER, msr); pg_nx = PG_NX; } - if (cpu_vendor_id == CPU_VENDOR_CENTAUR && - CPUID_TO_FAMILY(cpu_id) == 0x6 && - CPUID_TO_MODEL(cpu_id) >= 0xf) + if (cpu_vendor_id == CPU_VENDOR_CENTAUR) init_via(); } Modified: projects/altix/sys/amd64/amd64/machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/machdep.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/amd64/machdep.c Tue Mar 29 00:47:00 2011 (r220120) @@ -156,6 +156,11 @@ static void get_fpcontext(struct thread static int set_fpcontext(struct thread *td, const mcontext_t *mcp); SYSINIT(cpu, SI_SUB_CPU, SI_ORDER_FIRST, cpu_startup, NULL); +/* + * The file "conf/ldscript.amd64" defines the symbol "kernphys". Its value is + * the physical address at which the kernel is loaded. + */ +extern char kernphys[]; #ifdef DDB extern vm_offset_t ksym_start, ksym_end; #endif @@ -1417,7 +1422,7 @@ getmemsize(caddr_t kmdp, u_int64_t first /* * block out kernel memory as not available. */ - if (pa >= 0x100000 && pa < first) + if (pa >= (vm_paddr_t)kernphys && pa < first) goto do_dump_avail; /* Modified: projects/altix/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/minidump_machdep.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/amd64/minidump_machdep.c Tue Mar 29 00:47:00 2011 (r220120) @@ -53,8 +53,6 @@ CTASSERT(sizeof(struct kerneldumpheader) #define MD_ALIGN(x) (((off_t)(x) + PAGE_MASK) & ~PAGE_MASK) #define DEV_ALIGN(x) (((off_t)(x) + (DEV_BSIZE-1)) & ~(DEV_BSIZE-1)) -extern uint64_t KPDPphys; - uint64_t *vm_page_dump; int vm_page_dump_size; Modified: projects/altix/sys/amd64/amd64/mp_machdep.c ============================================================================== --- projects/altix/sys/amd64/amd64/mp_machdep.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/amd64/mp_machdep.c Tue Mar 29 00:47:00 2011 (r220120) @@ -116,7 +116,6 @@ u_long *ipi_invlrng_counts[MAXCPU]; u_long *ipi_invlpg_counts[MAXCPU]; u_long *ipi_invlcache_counts[MAXCPU]; u_long *ipi_rendezvous_counts[MAXCPU]; -u_long *ipi_lazypmap_counts[MAXCPU]; static u_long *ipi_hardclock_counts[MAXCPU]; #endif @@ -1620,8 +1619,6 @@ mp_ipi_intrcnt(void *dummy) intrcnt_add(buf, &ipi_ast_counts[i]); snprintf(buf, sizeof(buf), "cpu%d:rendezvous", i); intrcnt_add(buf, &ipi_rendezvous_counts[i]); - snprintf(buf, sizeof(buf), "cpu%d:lazypmap", i); - intrcnt_add(buf, &ipi_lazypmap_counts[i]); snprintf(buf, sizeof(buf), "cpu%d:hardclock", i); intrcnt_add(buf, &ipi_hardclock_counts[i]); } Modified: projects/altix/sys/amd64/include/pmap.h ============================================================================== --- projects/altix/sys/amd64/include/pmap.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/include/pmap.h Tue Mar 29 00:47:00 2011 (r220120) @@ -180,6 +180,7 @@ typedef u_int64_t pml4_entry_t; #define PML4map ((pd_entry_t *)(addr_PML4map)) #define PML4pml4e ((pd_entry_t *)(addr_PML4pml4e)) +extern u_int64_t KPDPphys; /* physical address of kernel level 3 */ extern u_int64_t KPML4phys; /* physical address of kernel level 4 */ /* Modified: projects/altix/sys/amd64/include/smp.h ============================================================================== --- projects/altix/sys/amd64/include/smp.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/include/smp.h Tue Mar 29 00:47:00 2011 (r220120) @@ -41,7 +41,6 @@ extern u_long *ipi_invlrng_counts[MAXCPU extern u_long *ipi_invlpg_counts[MAXCPU]; extern u_long *ipi_invlcache_counts[MAXCPU]; extern u_long *ipi_rendezvous_counts[MAXCPU]; -extern u_long *ipi_lazypmap_counts[MAXCPU]; #endif /* IPI handlers */ Modified: projects/altix/sys/amd64/linux32/linux.h ============================================================================== --- projects/altix/sys/amd64/linux32/linux.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux.h Tue Mar 29 00:47:00 2011 (r220120) @@ -695,6 +695,7 @@ union l_semun { #define LINUX_SO_NO_CHECK 11 #define LINUX_SO_PRIORITY 12 #define LINUX_SO_LINGER 13 +#define LINUX_SO_PASSCRED 16 #define LINUX_SO_PEERCRED 17 #define LINUX_SO_RCVLOWAT 18 #define LINUX_SO_SNDLOWAT 19 Modified: projects/altix/sys/amd64/linux32/linux32_dummy.c ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_dummy.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_dummy.c Tue Mar 29 00:47:00 2011 (r220120) @@ -54,8 +54,6 @@ DUMMY(sysfs); DUMMY(query_module); DUMMY(nfsservctl); DUMMY(rt_sigqueueinfo); -DUMMY(capget); -DUMMY(capset); DUMMY(sendfile); DUMMY(setfsuid); DUMMY(setfsgid); Modified: projects/altix/sys/amd64/linux32/linux32_proto.h ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_proto.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_proto.h Tue Mar 29 00:47:00 2011 (r220120) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 220028 2011-03-26 10:51:56Z avg */ #ifndef _LINUX_SYSPROTO_H_ @@ -589,10 +589,12 @@ struct linux_getcwd_args { char bufsize_l_[PADL_(l_ulong)]; l_ulong bufsize; char bufsize_r_[PADR_(l_ulong)]; }; struct linux_capget_args { - register_t dummy; + char hdrp_l_[PADL_(struct l_user_cap_header *)]; struct l_user_cap_header * hdrp; char hdrp_r_[PADR_(struct l_user_cap_header *)]; + char datap_l_[PADL_(struct l_user_cap_data *)]; struct l_user_cap_data * datap; char datap_r_[PADR_(struct l_user_cap_data *)]; }; struct linux_capset_args { - register_t dummy; + char hdrp_l_[PADL_(struct l_user_cap_header *)]; struct l_user_cap_header * hdrp; char hdrp_r_[PADR_(struct l_user_cap_header *)]; + char datap_l_[PADL_(struct l_user_cap_data *)]; struct l_user_cap_data * datap; char datap_r_[PADR_(struct l_user_cap_data *)]; }; struct linux_sigaltstack_args { char uss_l_[PADL_(l_stack_t *)]; l_stack_t * uss; char uss_r_[PADR_(l_stack_t *)]; Modified: projects/altix/sys/amd64/linux32/linux32_syscall.h ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_syscall.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_syscall.h Tue Mar 29 00:47:00 2011 (r220120) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 220028 2011-03-26 10:51:56Z avg */ #define LINUX_SYS_exit 1 Modified: projects/altix/sys/amd64/linux32/linux32_syscalls.c ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_syscalls.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_syscalls.c Tue Mar 29 00:47:00 2011 (r220120) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 220028 2011-03-26 10:51:56Z avg */ const char *linux_syscallnames[] = { Modified: projects/altix/sys/amd64/linux32/linux32_sysent.c ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_sysent.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_sysent.c Tue Mar 29 00:47:00 2011 (r220120) @@ -3,7 +3,7 @@ * * DO NOT EDIT-- this file is automatically generated. * $FreeBSD$ - * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 219559 2011-03-12 08:51:43Z avg + * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 220028 2011-03-26 10:51:56Z avg */ #include "opt_compat.h" @@ -203,8 +203,8 @@ struct sysent linux_sysent[] = { { AS(linux_pwrite_args), (sy_call_t *)linux_pwrite, AUE_PWRITE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 181 = linux_pwrite */ { AS(linux_chown16_args), (sy_call_t *)linux_chown16, AUE_CHOWN, NULL, 0, 0, 0, SY_THR_STATIC }, /* 182 = linux_chown16 */ { AS(linux_getcwd_args), (sy_call_t *)linux_getcwd, AUE_GETCWD, NULL, 0, 0, 0, SY_THR_STATIC }, /* 183 = linux_getcwd */ - { 0, (sy_call_t *)linux_capget, AUE_CAPGET, NULL, 0, 0, 0, SY_THR_STATIC }, /* 184 = linux_capget */ - { 0, (sy_call_t *)linux_capset, AUE_CAPSET, NULL, 0, 0, 0, SY_THR_STATIC }, /* 185 = linux_capset */ + { AS(linux_capget_args), (sy_call_t *)linux_capget, AUE_CAPGET, NULL, 0, 0, 0, SY_THR_STATIC }, /* 184 = linux_capget */ + { AS(linux_capset_args), (sy_call_t *)linux_capset, AUE_CAPSET, NULL, 0, 0, 0, SY_THR_STATIC }, /* 185 = linux_capset */ { AS(linux_sigaltstack_args), (sy_call_t *)linux_sigaltstack, AUE_NULL, NULL, 0, 0, 0, SY_THR_STATIC }, /* 186 = linux_sigaltstack */ { 0, (sy_call_t *)linux_sendfile, AUE_SENDFILE, NULL, 0, 0, 0, SY_THR_STATIC }, /* 187 = linux_sendfile */ { 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 188 = getpmsg */ Modified: projects/altix/sys/amd64/linux32/linux32_systrace_args.c ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_systrace_args.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_systrace_args.c Tue Mar 29 00:47:00 2011 (r220120) @@ -1284,12 +1284,18 @@ systrace_args(int sysnum, void *params, } /* linux_capget */ case 184: { - *n_args = 0; + struct linux_capget_args *p = params; + uarg[0] = (intptr_t) p->hdrp; /* struct l_user_cap_header * */ + uarg[1] = (intptr_t) p->datap; /* struct l_user_cap_data * */ + *n_args = 2; break; } /* linux_capset */ case 185: { - *n_args = 0; + struct linux_capset_args *p = params; + uarg[0] = (intptr_t) p->hdrp; /* struct l_user_cap_header * */ + uarg[1] = (intptr_t) p->datap; /* struct l_user_cap_data * */ + *n_args = 2; break; } /* linux_sigaltstack */ @@ -4051,9 +4057,29 @@ systrace_setargdesc(int sysnum, int ndx, break; /* linux_capget */ case 184: + switch(ndx) { + case 0: + p = "struct l_user_cap_header *"; + break; + case 1: + p = "struct l_user_cap_data *"; + break; + default: + break; + }; break; /* linux_capset */ case 185: + switch(ndx) { + case 0: + p = "struct l_user_cap_header *"; + break; + case 1: + p = "struct l_user_cap_data *"; + break; + default: + break; + }; break; /* linux_sigaltstack */ case 186: Modified: projects/altix/sys/amd64/linux32/linux32_sysvec.c ============================================================================== --- projects/altix/sys/amd64/linux32/linux32_sysvec.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/linux32_sysvec.c Tue Mar 29 00:47:00 2011 (r220120) @@ -249,8 +249,7 @@ elf_linux_fixup(register_t **stack_base, struct linux32_ps_strings *arginfo; arginfo = (struct linux32_ps_strings *)LINUX32_PS_STRINGS; - uplatform = (Elf32_Addr *)((caddr_t)arginfo - linux_szsigcode - - linux_szplatform); + uplatform = (Elf32_Addr *)((caddr_t)arginfo - linux_szplatform); KASSERT(curthread->td_proc == imgp->proc, ("unsafe elf_linux_fixup(), should be curproc")); Modified: projects/altix/sys/amd64/linux32/syscalls.master ============================================================================== --- projects/altix/sys/amd64/linux32/syscalls.master Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/amd64/linux32/syscalls.master Tue Mar 29 00:47:00 2011 (r220120) @@ -326,8 +326,10 @@ l_uid16_t uid, l_gid16_t gid); } 183 AUE_GETCWD STD { int linux_getcwd(char *buf, \ l_ulong bufsize); } -184 AUE_CAPGET STD { int linux_capget(void); } -185 AUE_CAPSET STD { int linux_capset(void); } +184 AUE_CAPGET STD { int linux_capget(struct l_user_cap_header *hdrp, \ + struct l_user_cap_data *datap); } +185 AUE_CAPSET STD { int linux_capset(struct l_user_cap_header *hdrp, \ + struct l_user_cap_data *datap); } 186 AUE_NULL STD { int linux_sigaltstack(l_stack_t *uss, \ l_stack_t *uoss); } 187 AUE_SENDFILE STD { int linux_sendfile(void); } Modified: projects/altix/sys/boot/pc98/boot2/boot2.c ============================================================================== --- projects/altix/sys/boot/pc98/boot2/boot2.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/boot/pc98/boot2/boot2.c Tue Mar 29 00:47:00 2011 (r220120) @@ -137,7 +137,7 @@ static const char *kname = NULL; static uint32_t opts; static int comspeed = SIOSPD; static struct bootinfo bootinfo; -static unsigned ioctrl = IO_KEYBOARD; +static uint8_t ioctrl = IO_KEYBOARD; void exit(int); static void load(void); @@ -445,9 +445,8 @@ load(void) static Elf32_Shdr es[2]; caddr_t p; ino_t ino; - uint32_t addr, x; + uint32_t addr; int i, j; - uint8_t fmt; if (!(ino = lookup(kname))) { if (!ls) @@ -456,15 +455,8 @@ load(void) } if (xfsread(ino, &hdr, sizeof(hdr))) return; - if (N_GETMAGIC(hdr.ex) == ZMAGIC) - fmt = 0; - else if (IS_ELF(hdr.eh)) - fmt = 1; - else { - printf("Invalid %s\n", "format"); - return; - } - if (fmt == 0) { + + if (N_GETMAGIC(hdr.ex) == ZMAGIC) { addr = hdr.ex.a_entry & 0xffffff; p = PTOV(addr); fs_off = PAGE_SIZE; @@ -473,7 +465,7 @@ load(void) p += roundup2(hdr.ex.a_text, PAGE_SIZE); if (xfsread(ino, p, hdr.ex.a_data)) return; - } else { + } else if (IS_ELF(hdr.eh)) { fs_off = hdr.eh.e_phoff; for (j = i = 0; i < hdr.eh.e_phnum && j < 2; i++) { if (xfsread(ino, ep + j, sizeof(ep[0]))) @@ -505,7 +497,11 @@ load(void) } addr = hdr.eh.e_entry & 0xffffff; bootinfo.bi_esymtab = VTOP(p); + } else { + printf("Invalid %s\n", "format"); + return; } + bootinfo.bi_kernelname = VTOP(kname); bootinfo.bi_bios_dev = dsk.daua; __exec((caddr_t)addr, RB_BOOTINFO | (opts & RBX_MASK), @@ -672,7 +668,7 @@ static void printf(const char *fmt,...) { va_list ap; - char buf[10]; + static char buf[10]; char *s; unsigned u; int c; Modified: projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c ============================================================================== --- projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Tue Mar 29 00:47:00 2011 (r220120) @@ -2962,11 +2962,6 @@ top: */ if (mask & AT_SIZE) { - err = zfs_zaccess(zp, ACE_WRITE_DATA, 0, skipaclchk, cr); - if (err) { - ZFS_EXIT(zfsvfs); - return (err); - } /* * XXX - Note, we are not providing any open * mode flags here (like FNDELAY), so we may Modified: projects/altix/sys/compat/freebsd32/freebsd32_ioctl.c ============================================================================== --- projects/altix/sys/compat/freebsd32/freebsd32_ioctl.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/compat/freebsd32/freebsd32_ioctl.c Tue Mar 29 00:47:00 2011 (r220120) @@ -38,7 +38,9 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include +#include #include #include #include @@ -55,6 +57,7 @@ __FBSDID("$FreeBSD$"); CTASSERT((sizeof(struct md_ioctl32)+4) == 436); CTASSERT(sizeof(struct ioc_read_toc_entry32) == 8); CTASSERT(sizeof(struct ioc_toc_header32) == 4); +CTASSERT(sizeof(struct mem_range_op32) == 12); static int @@ -64,13 +67,10 @@ freebsd32_ioctl_md(struct thread *td, st struct md_ioctl mdv; struct md_ioctl32 md32; u_long com = 0; - int error; + int i, error; - if (uap->data == NULL) - panic("%s: where is my ioctl data??", __func__); if (uap->com & IOC_IN) { if ((error = copyin(uap->data, &md32, sizeof(md32)))) { - fdrop(fp, td); return (error); } CP(md32, mdv, md_version); @@ -119,9 +119,16 @@ freebsd32_ioctl_md(struct thread *td, st CP(mdv, md32, md_base); CP(mdv, md32, md_fwheads); CP(mdv, md32, md_fwsectors); + if (com == MDIOCLIST) { + /* + * Use MDNPAD, and not MDNPAD32. Padding is + * allocated and used by compat32 ABI. + */ + for (i = 0; i < MDNPAD; i++) + CP(mdv, md32, md_pad[i]); + } error = copyout(&md32, uap->data, sizeof(md32)); } - fdrop(fp, td); return error; } @@ -134,9 +141,6 @@ freebsd32_ioctl_ioc_toc_header(struct th struct ioc_toc_header32 toch32; int error; - if (uap->data == NULL) - panic("%s: where is my ioctl data??", __func__); - if ((error = copyin(uap->data, &toch32, sizeof(toch32)))) return (error); CP(toch32, toch, len); @@ -144,7 +148,6 @@ freebsd32_ioctl_ioc_toc_header(struct th CP(toch32, toch, ending_track); error = fo_ioctl(fp, CDIOREADTOCHEADER, (caddr_t)&toch, td->td_ucred, td); - fdrop(fp, td); return (error); } @@ -157,9 +160,6 @@ freebsd32_ioctl_ioc_read_toc(struct thre struct ioc_read_toc_entry32 toce32; int error; - if (uap->data == NULL) - panic("%s: where is my ioctl data??", __func__); - if ((error = copyin(uap->data, &toce32, sizeof(toce32)))) return (error); CP(toce32, toce, address_format); @@ -175,7 +175,6 @@ freebsd32_ioctl_ioc_read_toc(struct thre PTROUT_CP(toce, toce32, data); error = copyout(&toce32, uap->data, sizeof(toce32)); } - fdrop(fp, td); return error; } @@ -192,7 +191,49 @@ freebsd32_ioctl_fiodgname(struct thread CP(fgn32, fgn, len); PTRIN_CP(fgn32, fgn, buf); error = fo_ioctl(fp, FIODGNAME, (caddr_t)&fgn, td->td_ucred, td); - fdrop(fp, td); + return (error); +} + +static int +freebsd32_ioctl_memrange(struct thread *td, + struct freebsd32_ioctl_args *uap, struct file *fp) +{ + struct mem_range_op mro; + struct mem_range_op32 mro32; + int error; + u_long com; + + if ((error = copyin(uap->data, &mro32, sizeof(mro32))) != 0) + return (error); + + PTRIN_CP(mro32, mro, mo_desc); + CP(mro32, mro, mo_arg[0]); + CP(mro32, mro, mo_arg[1]); + + com = 0; + switch (uap->com) { + case MEMRANGE_GET32: + com = MEMRANGE_GET; + break; + + case MEMRANGE_SET32: + com = MEMRANGE_SET; + break; + + default: + panic("%s: unknown MEMRANGE %#x", __func__, uap->com); + } + + if ((error = fo_ioctl(fp, com, (caddr_t)&mro, td->td_ucred, td)) != 0) + return (error); + + if ( (com & IOC_OUT) ) { + CP(mro, mro32, mo_arg[0]); + CP(mro, mro32, mo_arg[1]); + + error = copyout(&mro32, uap->data, sizeof(mro32)); + } + return (error); } @@ -219,16 +260,25 @@ freebsd32_ioctl(struct thread *td, struc case MDIOCDETACH_32: /* FALLTHROUGH */ case MDIOCQUERY_32: /* FALLTHROUGH */ case MDIOCLIST_32: - return freebsd32_ioctl_md(td, uap, fp); + error = freebsd32_ioctl_md(td, uap, fp); + break; case CDIOREADTOCENTRYS_32: - return freebsd32_ioctl_ioc_read_toc(td, uap, fp); + error = freebsd32_ioctl_ioc_read_toc(td, uap, fp); + break; case CDIOREADTOCHEADER_32: - return freebsd32_ioctl_ioc_toc_header(td, uap, fp); + error = freebsd32_ioctl_ioc_toc_header(td, uap, fp); + break; case FIODGNAME_32: - return freebsd32_ioctl_fiodgname(td, uap, fp); + error = freebsd32_ioctl_fiodgname(td, uap, fp); + break; + + case MEMRANGE_GET32: /* FALLTHROUGH */ + case MEMRANGE_SET32: + error = freebsd32_ioctl_memrange(td, uap, fp); + break; default: fdrop(fp, td); @@ -237,4 +287,7 @@ freebsd32_ioctl(struct thread *td, struc PTRIN_CP(*uap, ap, data); return ioctl(td, &ap); } + + fdrop(fp, td); + return error; } Modified: projects/altix/sys/compat/freebsd32/freebsd32_ioctl.h ============================================================================== --- projects/altix/sys/compat/freebsd32/freebsd32_ioctl.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/compat/freebsd32/freebsd32_ioctl.h Tue Mar 29 00:47:00 2011 (r220120) @@ -67,6 +67,12 @@ struct fiodgname_arg32 { caddr_t32 buf; }; +struct mem_range_op32 +{ + caddr_t32 mo_desc; + int mo_arg[2]; +}; + #define CDIOREADTOCENTRYS_32 _IOWR('c', 5, struct ioc_read_toc_entry32) #define CDIOREADTOCHEADER_32 _IOR('c', 4, struct ioc_toc_header32) #define MDIOCATTACH_32 _IOC(IOC_INOUT, 'm', 0, sizeof(struct md_ioctl32) + 4) @@ -74,5 +80,7 @@ struct fiodgname_arg32 { #define MDIOCQUERY_32 _IOC(IOC_INOUT, 'm', 2, sizeof(struct md_ioctl32) + 4) #define MDIOCLIST_32 _IOC(IOC_INOUT, 'm', 3, sizeof(struct md_ioctl32) + 4) #define FIODGNAME_32 _IOW('f', 120, struct fiodgname_arg32) +#define MEMRANGE_GET32 _IOWR('m', 50, struct mem_range_op32) +#define MEMRANGE_SET32 _IOW('m', 51, struct mem_range_op32) #endif /* _COMPAT_FREEBSD32_IOCTL_H_ */ Modified: projects/altix/sys/compat/linprocfs/linprocfs.c ============================================================================== --- projects/altix/sys/compat/linprocfs/linprocfs.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/compat/linprocfs/linprocfs.c Tue Mar 29 00:47:00 2011 (r220120) @@ -740,7 +740,6 @@ linprocfs_doprocstatus(PFS_FILL_ARGS) if (P_SHOULDSTOP(p)) { state = "T (stopped)"; } else { - PROC_SLOCK(p); switch(p->p_state) { case PRS_NEW: state = "I (idle)"; @@ -770,7 +769,6 @@ linprocfs_doprocstatus(PFS_FILL_ARGS) state = "? (unknown)"; break; } - PROC_SUNLOCK(p); } fill_kinfo_proc(p, &kp); Modified: projects/altix/sys/compat/linux/linux_misc.c ============================================================================== --- projects/altix/sys/compat/linux/linux_misc.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/compat/linux/linux_misc.c Tue Mar 29 00:47:00 2011 (r220120) @@ -1679,6 +1679,100 @@ linux_exit_group(struct thread *td, stru return (0); } +#define _LINUX_CAPABILITY_VERSION 0x19980330 + +struct l_user_cap_header { + l_int version; + l_int pid; +}; + +struct l_user_cap_data { + l_int effective; + l_int permitted; + l_int inheritable; +}; + +int +linux_capget(struct thread *td, struct linux_capget_args *args) +{ + struct l_user_cap_header luch; + struct l_user_cap_data lucd; + int error; + + if (args->hdrp == NULL) + return (EFAULT); + + error = copyin(args->hdrp, &luch, sizeof(luch)); + if (error != 0) + return (error); + + if (luch.version != _LINUX_CAPABILITY_VERSION) { + luch.version = _LINUX_CAPABILITY_VERSION; + error = copyout(&luch, args->hdrp, sizeof(luch)); + if (error) + return (error); + return (EINVAL); + } + + if (luch.pid) + return (EPERM); + + if (args->datap) { + /* + * The current implementation doesn't support setting + * a capability (it's essentially a stub) so indicate + * that no capabilities are currently set or available + * to request. + */ + bzero (&lucd, sizeof(lucd)); + error = copyout(&lucd, args->datap, sizeof(lucd)); + } + + return (error); +} + +int +linux_capset(struct thread *td, struct linux_capset_args *args) +{ + struct l_user_cap_header luch; + struct l_user_cap_data lucd; + int error; + + if (args->hdrp == NULL || args->datap == NULL) + return (EFAULT); + + error = copyin(args->hdrp, &luch, sizeof(luch)); + if (error != 0) + return (error); + + if (luch.version != _LINUX_CAPABILITY_VERSION) { + luch.version = _LINUX_CAPABILITY_VERSION; + error = copyout(&luch, args->hdrp, sizeof(luch)); + if (error) + return (error); + return (EINVAL); + } + + if (luch.pid) + return (EPERM); + + error = copyin(args->datap, &lucd, sizeof(lucd)); + if (error != 0) + return (error); + + /* We currently don't support setting any capabilities. */ + if (lucd.effective || lucd.permitted || lucd.inheritable) { + linux_msg(td, + "capset effective=0x%x, permitted=0x%x, " + "inheritable=0x%x is not implemented", + (int)lucd.effective, (int)lucd.permitted, + (int)lucd.inheritable); + return (EPERM); + } + + return (0); +} + int linux_prctl(struct thread *td, struct linux_prctl_args *args) { @@ -1712,6 +1806,21 @@ linux_prctl(struct thread *td, struct li (void *)(register_t)args->arg2, sizeof(pdeath_signal)); break; + case LINUX_PR_GET_KEEPCAPS: + /* + * Indicate that we always clear the effective and + * permitted capability sets when the user id becomes + * non-zero (actually the capability sets are simply + * always zero in the current implementation). + */ + td->td_retval[0] = 0; + break; + case LINUX_PR_SET_KEEPCAPS: + /* + * Ignore requests to keep the effective and permitted + * capability sets when the user id becomes non-zero. + */ + break; case LINUX_PR_SET_NAME: /* * To be on the safe side we need to make sure to not Modified: projects/altix/sys/compat/linux/linux_misc.h ============================================================================== --- projects/altix/sys/compat/linux/linux_misc.h Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/compat/linux/linux_misc.h Tue Mar 29 00:47:00 2011 (r220120) @@ -37,6 +37,8 @@ * Second arg is a ptr to return the * signal. */ +#define LINUX_PR_GET_KEEPCAPS 7 /* Get drop capabilities on setuid */ +#define LINUX_PR_SET_KEEPCAPS 8 /* Set drop capabilities on setuid */ #define LINUX_PR_SET_NAME 15 /* Set process name. */ #define LINUX_PR_GET_NAME 16 /* Get process name. */ Modified: projects/altix/sys/compat/linux/linux_socket.c ============================================================================== --- projects/altix/sys/compat/linux/linux_socket.c Tue Mar 29 00:36:36 2011 (r220119) +++ projects/altix/sys/compat/linux/linux_socket.c Tue Mar 29 00:47:00 2011 (r220120) @@ -300,6 +300,8 @@ linux_to_bsd_so_sockopt(int opt) return (SO_OOBINLINE); case LINUX_SO_LINGER: return (SO_LINGER); + case LINUX_SO_PASSCRED: + return (LOCAL_CREDS); case LINUX_SO_PEERCRED: return (LOCAL_PEERCRED); case LINUX_SO_RCVLOWAT: @@ -433,6 +435,8 @@ linux_to_bsd_cmsg_type(int cmsg_type) switch (cmsg_type) { case LINUX_SCM_RIGHTS: return (SCM_RIGHTS); + case LINUX_SCM_CREDENTIALS: + return (SCM_CREDS); } return (-1); } @@ -444,6 +448,8 @@ bsd_to_linux_cmsg_type(int cmsg_type) switch (cmsg_type) { case SCM_RIGHTS: return (LINUX_SCM_RIGHTS); + case SCM_CREDS: + return (LINUX_SCM_CREDENTIALS); } return (-1); } @@ -459,7 +465,16 @@ linux_to_bsd_msghdr(struct msghdr *bhdr, bhdr->msg_iov = PTRIN(lhdr->msg_iov); bhdr->msg_iovlen = lhdr->msg_iovlen; bhdr->msg_control = PTRIN(lhdr->msg_control); - bhdr->msg_controllen = lhdr->msg_controllen; + + /* + * msg_controllen is skipped since BSD and LINUX control messages + * are potentially different sizes (e.g. the cred structure used + * by SCM_CREDS is different between the two operating system). + * + * The caller can set it (if necessary) after converting all the + * control messages. + */ + bhdr->msg_flags = linux_to_bsd_msg_flags(lhdr->msg_flags); return (0); } @@ -472,7 +487,16 @@ bsd_to_linux_msghdr(const struct msghdr lhdr->msg_iov = PTROUT(bhdr->msg_iov); lhdr->msg_iovlen = bhdr->msg_iovlen; lhdr->msg_control = PTROUT(bhdr->msg_control); - lhdr->msg_controllen = bhdr->msg_controllen; + + /* + * msg_controllen is skipped since BSD and LINUX control messages + * are potentially different sizes (e.g. the cred structure used + * by SCM_CREDS is different between the two operating system). + * + * The caller can set it (if necessary) after converting all the + * control messages. + */ + /* msg_flags skipped */ return (0); } @@ -1092,6 +1116,7 @@ static int linux_sendmsg(struct thread *td, struct linux_sendmsg_args *args) { struct cmsghdr *cmsg; + struct cmsgcred cmcred; struct mbuf *control; struct msghdr msg; struct l_cmsghdr linux_cmsg; @@ -1099,15 +1124,14 @@ linux_sendmsg(struct thread *td, struct struct l_msghdr linux_msg; struct iovec *iov; socklen_t datalen; + struct sockaddr *sa; + sa_family_t sa_family; void *data; int error; error = copyin(PTRIN(args->msg), &linux_msg, sizeof(linux_msg)); if (error) return (error); - error = linux_to_bsd_msghdr(&msg, &linux_msg); - if (error) - return (error); /* * Some Linux applications (ping) define a non-NULL control data @@ -1116,8 +1140,12 @@ linux_sendmsg(struct thread *td, struct * order to handle this case. This should be checked, but allows the * Linux ping to work. */ - if (msg.msg_control != NULL && msg.msg_controllen == 0) - msg.msg_control = NULL; + if (PTRIN(linux_msg.msg_control) != NULL && linux_msg.msg_controllen == 0) + linux_msg.msg_control = PTROUT(NULL); + + error = linux_to_bsd_msghdr(&msg, &linux_msg); + if (error) + return (error); #ifdef COMPAT_LINUX32 error = linux32_copyiniov(PTRIN(msg.msg_iov), msg.msg_iovlen, @@ -1128,13 +1156,21 @@ linux_sendmsg(struct thread *td, struct if (error) return (error); - if (msg.msg_control != NULL) { + control = NULL; + cmsg = NULL; + + if ((ptr_cmsg = LINUX_CMSG_FIRSTHDR(&linux_msg)) != NULL) { + error = kern_getsockname(td, args->s, &sa, &datalen); + if (error) + goto bad; + sa_family = sa->sa_family; + free(sa, M_SONAME); + error = ENOBUFS; cmsg = malloc(CMSG_HDRSZ, M_TEMP, M_WAITOK | M_ZERO); control = m_get(M_WAIT, MT_CONTROL); if (control == NULL) goto bad; - ptr_cmsg = LINUX_CMSG_FIRSTHDR(&msg); do { error = copyin(ptr_cmsg, &linux_cmsg, @@ -1147,28 +1183,58 @@ linux_sendmsg(struct thread *td, struct goto bad; /* - * Now we support only SCM_RIGHTS, so return EINVAL - * in any other cmsg_type + * Now we support only SCM_RIGHTS and SCM_CRED, + * so return EINVAL in any other cmsg_type */ - if ((cmsg->cmsg_type = - linux_to_bsd_cmsg_type(linux_cmsg.cmsg_type)) == -1) - goto bad; + cmsg->cmsg_type = + linux_to_bsd_cmsg_type(linux_cmsg.cmsg_type); cmsg->cmsg_level = linux_to_bsd_sockopt_level(linux_cmsg.cmsg_level); + if (cmsg->cmsg_type == -1 + || cmsg->cmsg_level != SOL_SOCKET) + goto bad; + + /* + * Some applications (e.g. pulseaudio) attempt to + * send ancillary data even if the underlying protocol + * doesn't support it which is not allowed in the + * FreeBSD system call interface. + */ + if (sa_family != AF_UNIX) + continue; + data = LINUX_CMSG_DATA(ptr_cmsg); datalen = linux_cmsg.cmsg_len - L_CMSG_HDRSZ; + + switch (cmsg->cmsg_type) + { + case SCM_RIGHTS: + break; + + case SCM_CREDS: + data = &cmcred; + datalen = sizeof(cmcred); + + /* *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 15:06:36 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DDFF81065670; Tue, 29 Mar 2011 15:06:36 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id B31CF8FC18; Tue, 29 Mar 2011 15:06:36 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TF6aHD031936; Tue, 29 Mar 2011 15:06:36 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TF6aD4031934; Tue, 29 Mar 2011 15:06:36 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291506.p2TF6aD4031934@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 15:06:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220127 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 15:06:36 -0000 Author: attilio Date: Tue Mar 29 15:06:36 2011 New Revision: 220127 URL: http://svn.freebsd.org/changeset/base/220127 Log: Remove bogus debugging knobs. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 12:38:13 2011 (r220126) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:06:36 2011 (r220127) @@ -113,9 +113,6 @@ static int netdump_send_arp(void); static void netdump_trigger(void *arg, int howto); static int netdump_udp_output(struct mbuf *m); -#ifdef NETDUMP_CLIENT_DEBUG -static int sysctl_force_crash(SYSCTL_HANDLER_ARGS); -#endif static int sysctl_handle_ifxname(SYSCTL_HANDLER_ARGS); static int sysctl_handle_inaddr(SYSCTL_HANDLER_ARGS); @@ -245,41 +242,6 @@ sysctl_handle_inaddr(SYSCTL_HANDLER_ARGS return (error); } -#ifdef NETDUMP_CLIENT_DEBUG -static int -sysctl_force_crash(SYSCTL_HANDLER_ARGS) -{ - int error, force_crash; - - force_crash = 0; - error = sysctl_handle_int(oidp, &force_crash, force_crash, req); - if (error || req->newptr == NULL) - return error; - - switch (force_crash) { - case 1: - printf("\nLivelocking system...\n"); - for (;;); - break; - case 2: - printf("\nPanic'ing system...\n"); - panic("netdump forced crash"); - break; - case 3: - critical_enter(); - panic("Forcing spourious critical section"); - break; - case 4: - critical_enter(); - printf("\nLivelocking in a critical section\n"); - for (;;); - default: - return EINVAL; - } - return 0; -} -#endif - SYSCTL_NODE(_net, OID_AUTO, dump, CTLFLAG_RW, 0, "netdump"); SYSCTL_PROC(_net_dump, OID_AUTO, server, CTLTYPE_STRING|CTLFLAG_RW, &nd_server, 0, sysctl_handle_inaddr, "A", "dump server"); @@ -295,11 +257,7 @@ SYSCTL_INT(_net_dump, OID_AUTO, retries, "times to retransmit lost packets"); SYSCTL_INT(_net_dump, OID_AUTO, enable, CTLTYPE_INT|CTLFLAG_RW, &nd_enable, 0, "enable network dump"); -#ifdef NETDUMP_CLIENT_DEBUG -SYSCTL_NODE(_debug, OID_AUTO, netdump, CTLFLAG_RW, NULL, "Netdump debugging"); -SYSCTL_PROC(_debug_netdump, OID_AUTO, crash, CTLTYPE_INT|CTLFLAG_RW, 0, - sizeof(int), sysctl_force_crash, "I", "force crashing"); -#endif + TUNABLE_STR("net.dump.server", nd_server_tun, sizeof(nd_server_tun)); TUNABLE_STR("net.dump.client", nd_client_tun, sizeof(nd_client_tun)); TUNABLE_STR("net.dump.gateway", nd_gw_tun, sizeof(nd_gw_tun)); From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 15:08:50 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A9B43106566B; Tue, 29 Mar 2011 15:08:50 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9982C8FC12; Tue, 29 Mar 2011 15:08:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TF8oYS032024; Tue, 29 Mar 2011 15:08:50 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TF8oM1032022; Tue, 29 Mar 2011 15:08:50 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291508.p2TF8oM1032022@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 15:08:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220128 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 15:08:50 -0000 Author: attilio Date: Tue Mar 29 15:08:50 2011 New Revision: 220128 URL: http://svn.freebsd.org/changeset/base/220128 Log: Fix style for helper functions and sysctl handlers. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:06:36 2011 (r220127) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:08:50 2011 (r220128) @@ -150,8 +150,6 @@ static char nd_gw_tun[INET_ADDRSTRLEN]; static char nd_nic_tun[IFNAMSIZ]; /* - * [netdump_supported_nic] - * * Checks for netdump support on a network interface * * Parameters: @@ -163,7 +161,8 @@ static char nd_nic_tun[IFNAMSIZ]; static __inline int netdump_supported_nic(struct ifnet *ifp) { - return ifp->if_ndumpfuncs != NULL; + + return (ifp->if_ndumpfuncs != NULL); } /*- @@ -171,10 +170,7 @@ netdump_supported_nic(struct ifnet *ifp) */ /* - * [sysctl_handle_ifxname] - * - * sysctl handler to deal with converting a string sysctl to/from an ifaddr - * name. + * Sysctl handler converting a string sysctl to/from an ifaddr name. * * Parameters: * SYSCTL_HANDLER_ARGS @@ -212,9 +208,7 @@ sysctl_handle_ifxname(SYSCTL_HANDLER_ARG } /* - * [sysctl_handle_inaddr] - * - * sysctl handler to deal with converting a string sysctl to/from an in_addr + * Sysctl handler to deal with converting a string sysctl to/from an in_addr. * * Parameters: * SYSCTL_HANDLER_ARGS From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 15:14:32 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 105981065673; Tue, 29 Mar 2011 15:14:32 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F3B4B8FC08; Tue, 29 Mar 2011 15:14:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TFEVuv032210; Tue, 29 Mar 2011 15:14:31 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TFEVYA032208; Tue, 29 Mar 2011 15:14:31 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291514.p2TFEVYA032208@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 15:14:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220129 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 15:14:32 -0000 Author: attilio Date: Tue Mar 29 15:14:31 2011 New Revision: 220129 URL: http://svn.freebsd.org/changeset/base/220129 Log: Fix style for frontline sending functions. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:08:50 2011 (r220128) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:14:31 2011 (r220129) @@ -208,7 +208,7 @@ sysctl_handle_ifxname(SYSCTL_HANDLER_ARG } /* - * Sysctl handler to deal with converting a string sysctl to/from an in_addr. + * Sysctl handler converting a string sysctl to/from an in_addr. * * Parameters: * SYSCTL_HANDLER_ARGS @@ -267,12 +267,10 @@ TUNABLE_INT("net.dump.enable", &nd_enabl */ /* - * [netdump_mbuf_nop] - * - * netdump wraps external mbufs around address ranges. unlike most sane + * Netdump wraps external mbufs around address ranges. unlike most sane * counterparts, netdump uses a stop-and-wait approach to flow control and * retransmission, so the ack obviates the need for mbuf reference - * counting. we still need to tell other mbuf handlers not to do anything + * counting. We still need to tell other mbuf handlers not to do anything * special with our mbufs, so specify this nop handler. * * Parameters: @@ -285,12 +283,9 @@ TUNABLE_INT("net.dump.enable", &nd_enabl static void netdump_mbuf_nop(void *ptr, void *opt_args) { - ; } /* - * [netdump_ether_output] - * * Handles creation of the ethernet header, then places outgoing packets into * the tx buffer for the NIC * @@ -307,15 +302,15 @@ netdump_mbuf_nop(void *ptr, void *opt_ar */ static int netdump_ether_output(struct mbuf *m, struct ifnet *ifp, struct ether_addr dst, - u_short etype) + u_short etype) { struct ether_header *eh; - /* fill in the ethernet header */ + /* Fill in the ethernet header. */ M_PREPEND(m, ETHER_HDR_LEN, M_DONTWAIT); - if (m == 0) { + if (m == NULL) { printf("netdump_ether_output: Out of mbufs\n"); - return ENOBUFS; + return (ENOBUFS); } eh = mtod(m, struct ether_header *); memcpy(eh->ether_shost, IF_LLADDR(ifp), ETHER_ADDR_LEN); @@ -326,23 +321,21 @@ netdump_ether_output(struct mbuf *m, str (ifp->if_drv_flags & IFF_DRV_RUNNING) != IFF_DRV_RUNNING) { if_printf(ifp, "netdump_ether_output: Interface isn't up\n"); m_freem(m); - return ENETDOWN; + return (ENETDOWN); } if (_IF_QFULL(&ifp->if_snd)) { if_printf(ifp, "netdump_ether_output: TX queue full\n"); m_freem(m); - return ENOBUFS; + return (ENOBUFS); } _IF_ENQUEUE(&ifp->if_snd, m); - return 0; + return (0); } /* - * [netdump_udp_output] - * - * unreliable transmission of an mbuf chain to the netdump server + * Unreliable transmission of an mbuf chain to the netdump server * Note: can't handle fragmentation; fails if the packet is larger than * nd_ifp->if_mtu after adding the UDP/IP headers * @@ -361,9 +354,9 @@ netdump_udp_output(struct mbuf *m) MPASS(nd_ifp != NULL); M_PREPEND(m, sizeof(struct udpiphdr), M_DONTWAIT); - if (m == 0) { + if (m == NULL) { printf("netdump_udp_output: Out of mbufs\n"); - return ENOBUFS; + return (ENOBUFS); } ui = mtod(m, struct udpiphdr *); bzero(ui->ui_x1, sizeof(ui->ui_x1)); @@ -391,14 +384,12 @@ netdump_udp_output(struct mbuf *m) ip->ip_sum = in_cksum(m, sizeof(struct ip)); if (m->m_pkthdr.len > nd_ifp->if_mtu) { - /* Whoops. The packet is too big. */ - printf("netdump_udp_output: Packet is too big: " - "%u > MTU %lu\n", m->m_pkthdr.len, nd_ifp->if_mtu); + printf("netdump_udp_output: Packet is too big: %u > MTU %lu\n", + m->m_pkthdr.len, nd_ifp->if_mtu); m_freem(m); - return ENOBUFS; + return (ENOBUFS); } - - return netdump_ether_output(m, nd_ifp, nd_gw_mac, ETHERTYPE_IP); + return (netdump_ether_output(m, nd_ifp, nd_gw_mac, ETHERTYPE_IP)); } /* From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 15:35:53 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9F35D106566B; Tue, 29 Mar 2011 15:35:53 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8DED38FC26; Tue, 29 Mar 2011 15:35:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TFZrae032707; Tue, 29 Mar 2011 15:35:53 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TFZrA5032705; Tue, 29 Mar 2011 15:35:53 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291535.p2TFZrA5032705@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 15:35:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220130 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 15:35:53 -0000 Author: attilio Date: Tue Mar 29 15:35:53 2011 New Revision: 220130 URL: http://svn.freebsd.org/changeset/base/220130 Log: Fix style for other sending functions (ARP and IP packet constructing). Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:14:31 2011 (r220129) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:35:53 2011 (r220130) @@ -393,8 +393,6 @@ netdump_udp_output(struct mbuf *m) } /* - * [netdump_send_arp] - * * Builds and sends a single ARP request to locate the server * * Parameters: @@ -407,10 +405,10 @@ netdump_udp_output(struct mbuf *m) static int netdump_send_arp() { + struct ether_addr bcast; struct mbuf *m; - int pktlen = arphdr_len2(ETHER_ADDR_LEN, sizeof(struct in_addr)); struct arphdr *ah; - struct ether_addr bcast; + int pktlen; MPASS(nd_ifp != NULL); @@ -419,10 +417,12 @@ netdump_send_arp() MGETHDR(m, M_DONTWAIT, MT_DATA); if (m == NULL) { printf("netdump_send_arp: Out of mbufs"); - return ENOBUFS; + return (ENOBUFS); } - m->m_pkthdr.len = m->m_len = pktlen; - MH_ALIGN(m, pktlen); /* Make room for ethernet header */ + pktlen = arphdr_len2(ETHER_ADDR_LEN, sizeof(struct in_addr)); + m->m_len = pktlen; + m->m_pkthdr.len = pktlen; + MH_ALIGN(m, pktlen); ah = mtod(m, struct arphdr *); ah->ar_hrd = htons(ARPHRD_ETHER); ah->ar_pro = htons(ETHERTYPE_IP); @@ -434,12 +434,10 @@ netdump_send_arp() bzero(ar_tha(ah), ETHER_ADDR_LEN); ((struct in_addr *)ar_tpa(ah))->s_addr = nd_gw.s_addr; - return netdump_ether_output(m, nd_ifp, bcast, ETHERTYPE_ARP); + return (netdump_ether_output(m, nd_ifp, bcast, ETHERTYPE_ARP)); } /* - * [netdump_arp_server] - * * Sends ARP requests to locate the server and waits for a response * * Parameters: @@ -454,34 +452,30 @@ netdump_arp_server() { int err, polls, retries; - for (retries=0; retries < nd_retries && !have_server_mac; retries++) { + for (retries = 0; retries < nd_retries && have_server_mac == 0; + retries++) { err = netdump_send_arp(); - - if (err) - return err; - - for (polls=0; polls < nd_polls && !have_server_mac; polls++) { + if (err != 0) + return (err); + for (polls = 0; polls < nd_polls && have_server_mac == 0; + polls++) { netdump_network_poll(); - DELAY(500); /* 0.5 ms */ + DELAY(500); } - - if (!have_server_mac) printf("(ARP retry)"); + if (have_server_mac == 0) + printf("(ARP retry)"); } - - if (have_server_mac) - return 0; + if (have_server_mac != 0) + return (0); printf("\nARP timed out.\n"); - - return ETIMEDOUT; + return (ETIMEDOUT); } /* - * [netdump_send] - * - * construct and reliably send a netdump packet. may fail from a resource - * shortage or extreme number of unacknowledged retransmissions. wait for - * an acknowledgement before returning. splits packets into chunks small + * Construct and reliably send a netdump packet. May fail from a resource + * shortage or extreme number of unacknowledged retransmissions. Wait for + * an acknowledgement before returning. Splits packets into chunks small * enough to be sent without fragmentation (looks up the interface MTU) * * Parameters: @@ -494,49 +488,54 @@ netdump_arp_server() * int see errno.h, 0 for success */ static int -netdump_send(uint32_t type, off_t offset, - unsigned char *data, uint32_t datalen) +netdump_send(uint32_t type, off_t offset, unsigned char *data, uint32_t datalen) { + uint64_t want_acks; struct netdump_msg_hdr *nd_msg_hdr; struct mbuf *m, *m2; - int retries = 0, polls, error; - uint32_t i, sent_so_far; - uint64_t want_acks=0; + uint32_t i, pktlen, sent_so_far; + int retries, polls, error; + want_acks = 0; rcvd_acks = 0; + retries = 0; MPASS(nd_ifp != NULL); retransmit: - /* We might get chunks too big to fit in packets. Yuck. */ - for (i=sent_so_far=0; sent_so_far < datalen || (i==0 && datalen==0); - i++) { - uint32_t pktlen = datalen-sent_so_far; - /* First bound: the packet structure */ + + /* Chunks can be too big to fit in packets. */ + for (i = sent_so_far = 0; sent_so_far < + datalen || (i == 0 && datalen == 0); i++) { + pktlen = datalen - sent_so_far; + + /* First bound: the packet structure. */ pktlen = min(pktlen, NETDUMP_DATASIZE); - /* Second bound: the interface MTU (assume no IP options) */ - pktlen = min(pktlen, nd_ifp->if_mtu - - sizeof(struct udpiphdr) - - sizeof(struct netdump_msg_hdr)); - /* Check if we're retransmitting and this has been ACKed - * already */ + /* Second bound: the interface MTU (assume no IP options). */ + pktlen = min(pktlen, nd_ifp->if_mtu - sizeof(struct udpiphdr) - + sizeof(struct netdump_msg_hdr)); + + /* + * Check if it is retransmitting and this has been ACKed + * already. + * */ if ((rcvd_acks & (1 << i)) != 0) { sent_so_far += pktlen; continue; } /* - * get and fill a header mbuf, then chain data as an extended + * Get and fill a header mbuf, then chain data as an extended * mbuf. */ MGETHDR(m, M_DONTWAIT, MT_DATA); if (m == NULL) { printf("netdump_send: Out of mbufs!\n"); - return ENOBUFS; + return (ENOBUFS); } - m->m_pkthdr.len = m->m_len = sizeof(struct netdump_msg_hdr); - /* leave room for udpip */ + m->m_len = sizeof(struct netdump_msg_hdr); + m->m_pkthdr.len = sizeof(struct netdump_msg_hdr); MH_ALIGN(m, sizeof(struct netdump_msg_hdr)); nd_msg_hdr = mtod(m, struct netdump_msg_hdr *); nd_msg_hdr->mh_seqno = htonl(nd_seqno+i); @@ -545,53 +544,49 @@ retransmit: nd_msg_hdr->mh_len = htonl(pktlen); nd_msg_hdr->mh__pad = 0; - if (pktlen) { - if ((m2 = m_get(M_DONTWAIT, MT_DATA)) == NULL) { + if (pktlen != 0) { + m2 = m_get(M_DONTWAIT, MT_DATA); + if (m2 == NULL) { m_freem(m); printf("netdump_send: Out of mbufs!\n"); - return ENOBUFS; + return (ENOBUFS); } MEXTADD(m2, data+sent_so_far, pktlen, netdump_mbuf_nop, - NULL, NULL, M_RDONLY, EXT_MOD_TYPE); + NULL, NULL, M_RDONLY, EXT_MOD_TYPE); m2->m_len = pktlen; m->m_next = m2; m->m_pkthdr.len += m2->m_len; } + error = netdump_udp_output(m); + if (error != 0) + return (error); - if ((error = netdump_udp_output(m)) != 0) { - return error; - } - - /* Note that we're waiting for this packet in the bitfield */ + /* Note that we're waiting for this packet in the bitfield. */ want_acks |= 1 << i; - sent_so_far += pktlen; } - - if (i >= sizeof(want_acks)*8) { + if (i >= sizeof(want_acks) * 8) printf("Warning: Sent more than %zd packets (%d). " - "Acknowledgements will fail unless the size of " - "rcvd_acks/want_acks is increased.\n", - sizeof(want_acks)*8, i); - } + "Acknowledgements will fail unless the size of " + "rcvd_acks/want_acks is increased.\n", + sizeof(want_acks) * 8, i); /* - * wait for acks. a *real* window would speed things up considerably. + * Wait for acks. A *real* window would speed things up considerably. */ polls = 0; while (rcvd_acks != want_acks) { if (polls++ > nd_polls) { - if (retries++ > nd_retries) { - return ETIMEDOUT; /* 10 s, no ack */ - } + if (retries++ > nd_retries) + return (ETIMEDOUT); printf(". "); - goto retransmit; /* 1 s, no ack */ + goto retransmit; } netdump_network_poll(); DELAY(500); } nd_seqno += i; - return 0; + return (0); } /* From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 15:36:43 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D3EF6106566B; Tue, 29 Mar 2011 15:36:43 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C37E18FC1D; Tue, 29 Mar 2011 15:36:43 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TFahlN032760; Tue, 29 Mar 2011 15:36:43 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TFahG3032758; Tue, 29 Mar 2011 15:36:43 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291536.p2TFahG3032758@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 15:36:43 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220131 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 15:36:43 -0000 Author: attilio Date: Tue Mar 29 15:36:43 2011 New Revision: 220131 URL: http://svn.freebsd.org/changeset/base/220131 Log: Remove double declaration. Submitted by: pluknet Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:35:53 2011 (r220130) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:36:43 2011 (r220131) @@ -118,7 +118,6 @@ static int sysctl_handle_inaddr(SYSCTL_ /* Must be at least as big as the chunks dumpsys() gives us. */ static unsigned char buf[MAXDUMPPGS * PAGE_SIZE]; -static struct ether_addr nd_gw_mac; static eventhandler_tag nd_tag; static uint64_t rcvd_acks; static uint32_t nd_seqno = 1; From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 16:08:51 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 91DF3106566B; Tue, 29 Mar 2011 16:08:51 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 7FF338FC17; Tue, 29 Mar 2011 16:08:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TG8p17033545; Tue, 29 Mar 2011 16:08:51 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TG8peZ033543; Tue, 29 Mar 2011 16:08:51 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291608.p2TG8peZ033543@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 16:08:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220133 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 16:08:51 -0000 Author: attilio Date: Tue Mar 29 16:08:51 2011 New Revision: 220133 URL: http://svn.freebsd.org/changeset/base/220133 Log: Style cleanup of further functions. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 15:59:07 2011 (r220132) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:08:51 2011 (r220133) @@ -589,8 +589,6 @@ retransmit: } /* - * [nd_handle_ip] - * * Handler for IP packets: checks their sanity and then processes any netdump * ACK packets it finds. * @@ -608,42 +606,46 @@ retransmit: static void nd_handle_ip(struct mbuf **mb) { - unsigned short hlen; struct ip *ip; struct udpiphdr *udp; struct netdump_ack *nd_ack; struct mbuf *m; int rcv_ackno; + unsigned short hlen; - /* IP processing */ + /* IP processing. */ m = *mb; if (m->m_pkthdr.len < sizeof(struct ip)) { NETDDEBUG("nd_handle_ip: dropping packet too small for IP " "header\n"); return; } - if (m->m_len < sizeof(struct ip) && - (*mb = m = m_pullup(m, sizeof(struct ip))) == NULL) { - NETDDEBUG("nd_handle_ip: m_pullup failed\n"); - return; + if (m->m_len < sizeof(struct ip)) { + m = m_pullup(m, sizeof(struct ip)); + *mb = m; + if (m == NULL) { + NETDDEBUG("nd_handle_ip: m_pullup failed\n"); + return; + } } - ip = mtod(m, struct ip *); - /* IP version */ + /* IP version. */ if (ip->ip_v != IPVERSION) { NETDDEBUG("nd_handle_ip: Bad IP version %d\n", ip->ip_v); return; } - /* Header length */ + /* Header length. */ hlen = ip->ip_hl << 2; if (hlen < sizeof(struct ip)) { NETDDEBUG("nd_handle_ip: Bad IP header length (%hu)\n", hlen); return; } if (hlen > m->m_len) { - if ((*mb = m = m_pullup(m, hlen)) == NULL) { + m = m_pullup(m, hlen); + *mb = m; + if (m == NULL) { NETDDEBUG("nd_handle_ip: m_pullup failed\n"); return; } @@ -659,31 +661,32 @@ nd_handle_ip(struct mbuf **mb) } #endif - /* Checksum */ - if (m->m_pkthdr.csum_flags & CSUM_IP_CHECKED) { - if (!(m->m_pkthdr.csum_flags & CSUM_IP_VALID)) { + /* Checksum. */ + if ((m->m_pkthdr.csum_flags & CSUM_IP_CHECKED) != 0) { + if ((m->m_pkthdr.csum_flags & CSUM_IP_VALID) == 0) { NETDDEBUG("nd_handle_ip: Bad IP checksum\n"); return; } } else NETDDEBUG("nd_handle_ip: HW didn't check IP cksum\n"); - /* Convert fields to host byte order */ + /* Convert fields to host byte order. */ ip->ip_len = ntohs(ip->ip_len); if (ip->ip_len < hlen) { - NETDDEBUG("nd_handle_ip: IP packet smaller (%hu) than " - "header (%hu)\n", ip->ip_len, hlen); + NETDDEBUG("nd_handle_ip: IP packet smaller (%hu) than header (%hu)\n", + ip->ip_len, hlen); return; } ip->ip_off = ntohs(ip->ip_off); if (m->m_pkthdr.len < ip->ip_len) { - NETDDEBUG("nd_handle_ip: IP packet bigger (%hu) than " - "ethernet packet (%hu)\n", ip->ip_len, m->m_pkthdr.len); +NETDDEBUG("nd_handle_ip: IP packet bigger (%hu) than ethernet packet (%hu)\n", + ip->ip_len, m->m_pkthdr.len); return; } if (m->m_pkthdr.len > ip->ip_len) { - /* Truncate the packet to the IP length */ + + /* Truncate the packet to the IP length. */ if (m->m_len == m->m_pkthdr.len) { m->m_len = ip->ip_len; m->m_pkthdr.len = ip->ip_len; @@ -697,13 +700,13 @@ nd_handle_ip(struct mbuf **mb) return; } - /* Check that the source is the server's IP */ + /* Check that the source is the server's IP. */ if (ip->ip_src.s_addr != nd_server.s_addr) { NETDDEBUG("nd_handle_ip: Drop packet not from server\n"); return; } - /* Check if the destination IP is ours */ + /* Check if the destination IP is ours. */ if (ip->ip_dst.s_addr != nd_client.s_addr) { NETDDEBUGV("nd_handle_ip: Drop packet not to our IP\n"); return; @@ -714,28 +717,31 @@ nd_handle_ip(struct mbuf **mb) return; } - /* Let's not deal with fragments */ - if (ip->ip_off & (IP_MF | IP_OFFMASK)) { + /* Do not deal with fragments. */ + if ((ip->ip_off & (IP_MF | IP_OFFMASK)) != 0) { NETDDEBUG("nd_handle_ip: Drop fragmented packet\n"); return; } - /* UDP custom is to have packet length not include IP header */ + + /* UDP custom is to have packet length not include IP header. */ ip->ip_len -= hlen; - /* IP done */ - /* UDP processing */ + /* UDP processing. */ - /* Get IP and UDP headers together, along with the netdump packet */ + /* Get IP and UDP headers together, along with the netdump packet. */ if (m->m_pkthdr.len < sizeof(struct udpiphdr) + sizeof(struct netdump_ack)) { NETDDEBUG("nd_handle_ip: Ignoring small packet\n"); return; } - if (m->m_len < sizeof(struct udpiphdr) + sizeof(struct netdump_ack) && - (*mb = m = m_pullup(m, sizeof(struct udpiphdr) + - sizeof(struct netdump_ack))) == NULL) { - NETDDEBUG("nd_handle_ip: m_pullup failed\n"); - return; + if (m->m_len < sizeof(struct udpiphdr) + sizeof(struct netdump_ack)) { + m = m_pullup(m, sizeof(struct udpiphdr) + + sizeof(struct netdump_ack)); + *mb = m; + if (m == NULL) { + NETDDEBUG("nd_handle_ip: m_pullup failed\n"); + return; + } } udp = mtod(m, struct udpiphdr *); @@ -744,34 +750,27 @@ nd_handle_ip(struct mbuf **mb) return; } - /* UDP done */ - /* Netdump processing */ + /* Netdump processing. */ /* - * packet is meant for us. extract the ack sequence number. - * if it's the first ack, extract the port number as well + * Packet is meant for us. Extract the ack sequence number and the + * port number if necessary. */ - nd_ack = (struct netdump_ack *) - (mtod(m, caddr_t) + sizeof(struct udpiphdr)); + nd_ack = (struct netdump_ack *)(mtod(m, caddr_t) + + sizeof(struct udpiphdr)); rcv_ackno = ntohl(nd_ack->na_seqno); - - if (nd_server_port == NETDUMP_PORT) { + if (nd_server_port == NETDUMP_PORT) nd_server_port = ntohs(udp->ui_u.uh_sport); - } - - if (rcv_ackno >= nd_seqno+64) { + if (rcv_ackno >= nd_seqno + 64) printf("nd_handle_ip: ACK %d too far in future!\n", rcv_ackno); - } else if (rcv_ackno < nd_seqno) { - /* Do nothing: A duplicated past ACK */ - } else { + else if (rcv_ackno >= nd_seqno) { + /* We're interested in this ack. Record it. */ rcvd_acks |= 1 << (rcv_ackno-nd_seqno); } } /* - * [nd_handle_arp] - * * Handler for ARP packets: checks their sanity and then * 1. If the ARP is a request for our IP, respond with our MAC address * 2. If the ARP is a response from our server, record its MAC address @@ -790,39 +789,45 @@ nd_handle_ip(struct mbuf **mb) static void nd_handle_arp(struct mbuf **mb) { + char buf[INET_ADDRSTRLEN]; + struct in_addr isaddr, itaddr, myaddr; + struct ether_addr dst; struct mbuf *m; struct arphdr *ah; struct ifnet *ifp; - int req_len, op; - struct in_addr isaddr, itaddr, myaddr; uint8_t *enaddr; - struct ether_addr dst; + int req_len, op; m = *mb; ifp = m->m_pkthdr.rcvif; - if (m->m_len < sizeof(struct arphdr) && ((*mb = m = m_pullup(m, - sizeof(struct arphdr))) == NULL)) { + if (m->m_len < sizeof(struct arphdr)) { + m = m_pullup(m, sizeof(struct arphdr)); + *mb = m; + if (m == NULL) { NETDDEBUG("nd_handle_arp: runt packet: m_pullup failed\n"); - return; + return; + } } ah = mtod(m, struct arphdr *); if (ntohs(ah->ar_hrd) != ARPHRD_ETHER) { - NETDDEBUG("nd_handle_arp: unknown hardware address fmt " - "0x%2D)\n", (unsigned char *)&ah->ar_hrd, ""); + NETDDEBUG("nd_handle_arp: unknown hardware address 0x%2D)\n", + (unsigned char *)&ah->ar_hrd, ""); return; } - if (ntohs(ah->ar_pro) != ETHERTYPE_IP) { - NETDDEBUG("nd_handle_arp: Drop ARP for unknown " - "protocol %d\n", ntohs(ah->ar_pro)); + NETDDEBUG("nd_handle_arp: Drop ARP for unknown protocol %d\n", + ntohs(ah->ar_pro)); return; } - req_len = arphdr_len2(ifp->if_addrlen, sizeof(struct in_addr)); - if (m->m_len < req_len && (*mb = m = m_pullup(m, req_len)) == NULL) { + if (m->m_len < req_len) { + m = m_pullup(m, req_len); + *mb = m; + if (m == NULL) { NETDDEBUG("nd_handle_arp: runt packet: m_pullup failed\n"); - return; + return; + } } ah = mtod(m, struct arphdr *); @@ -839,27 +844,25 @@ nd_handle_arp(struct mbuf **mb) if (isaddr.s_addr == nd_client.s_addr) { printf("nd_handle_arp: %*D is using my IP address %s!\n", - ifp->if_addrlen, (u_char *)ar_sha(ah), ":", - inet_ntoa(isaddr)); + ifp->if_addrlen, (u_char *)ar_sha(ah), ":", + inet_ntoa(isaddr)); return; } if (!bcmp(ar_sha(ah), ifp->if_broadcastaddr, ifp->if_addrlen)) { - NETDDEBUG("nd_handle_arp: ignoring ARP from broadcast " - "address\n"); + NETDDEBUG("nd_handle_arp: ignoring ARP from broadcast address\n"); return; } if (op == ARPOP_REPLY) { if (isaddr.s_addr != nd_gw.s_addr) { - char buf[INET_ADDRSTRLEN]; inet_ntoa_r(isaddr, buf); - NETDDEBUG("nd_handle_arp: ignoring ARP reply from " - "%s (not netdump server)\n", buf); +NETDDEBUG("nd_handle_arp: ignoring ARP reply from %s (not netdump server)\n", + buf); return; } memcpy(nd_gw_mac.octet, ar_sha(ah), - min(ah->ar_hln, ETHER_ADDR_LEN)); + min(ah->ar_hln, ETHER_ADDR_LEN)); have_server_mac = 1; NETDDEBUG("\nnd_handle_arp: Got server MAC address %6D\n", nd_gw_mac.octet, ":"); @@ -867,8 +870,7 @@ nd_handle_arp(struct mbuf **mb) } if (op != ARPOP_REQUEST) { - NETDDEBUG("nd_handle_arp: Ignoring non-request/non-reply " - "ARP\n"); + NETDDEBUG("nd_handle_arp: Ignoring ARP non-request/reply\n"); return; } @@ -882,14 +884,14 @@ nd_handle_arp(struct mbuf **mb) memcpy(ar_tpa(ah), ar_spa(ah), ah->ar_pln); memcpy(ar_spa(ah), &itaddr, ah->ar_pln); ah->ar_op = htons(ARPOP_REPLY); - ah->ar_pro = htons(ETHERTYPE_IP); /* let's be sure! */ - m->m_flags &= ~(M_BCAST|M_MCAST); /* never reply by broadcast */ + ah->ar_pro = htons(ETHERTYPE_IP); + m->m_flags &= ~(M_BCAST|M_MCAST); m->m_len = sizeof(*ah) + (2 * ah->ar_pln) + (2 * ah->ar_hln); m->m_pkthdr.len = m->m_len; memcpy(dst.octet, ar_tha(ah), ETHER_ADDR_LEN); netdump_ether_output(m, ifp, dst, ETHERTYPE_ARP); - *mb = NULL; /* Don't m_free upon return */ + *mb = NULL; } /* From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 16:21:02 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1C3FF106564A; Tue, 29 Mar 2011 16:21:02 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E4E1B8FC18; Tue, 29 Mar 2011 16:21:01 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TGL1HE033864; Tue, 29 Mar 2011 16:21:01 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TGL1S1033862; Tue, 29 Mar 2011 16:21:01 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291621.p2TGL1S1033862@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 16:21:01 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220134 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 16:21:02 -0000 Author: attilio Date: Tue Mar 29 16:21:01 2011 New Revision: 220134 URL: http://svn.freebsd.org/changeset/base/220134 Log: More functions converted to style. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:08:51 2011 (r220133) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:21:01 2011 (r220134) @@ -895,8 +895,6 @@ NETDDEBUG("nd_handle_arp: ignoring ARP r } /* - * [netdump_pkt_in] - * * Handler for incoming packets directly from the network adapter * Identifies the packet type (IP or ARP) and passes it along to one of the * helper functions nd_handle_ip or nd_handle_arp. @@ -917,17 +915,19 @@ netdump_pkt_in(struct ifnet *ifp, struct struct ether_header *eh; u_short etype; - /* Ethernet processing */ + /* Ethernet processing. */ if ((m->m_flags & M_PKTHDR) == 0) { - NETDDEBUG_IF(ifp, "discard frame w/o packet header\n"); + NETDDEBUG_IF(ifp, + "netdump_pkt_in: Discard frame without packet header\n"); goto done; } if (m->m_len < ETHER_HDR_LEN) { - NETDDEBUG_IF(ifp, "discard frame w/o leading ethernet " - "header (len %u pkt len %u)\n", m->m_len, m->m_pkthdr.len); + NETDDEBUG_IF(ifp, +"netdump_pkt_in: Discard frame without leading eth header (len %u pktlen %u)\n", + m->m_len, m->m_pkthdr.len); goto done; } - if (m->m_flags & M_HASFCS) { + if ((m->m_flags & M_HASFCS) != 0) { m_adj(m, -ETHER_CRC_LEN); m->m_flags &= ~M_HASFCS; } @@ -935,13 +935,14 @@ netdump_pkt_in(struct ifnet *ifp, struct m->m_pkthdr.header = eh; etype = ntohs(eh->ether_type); if ((m->m_flags & M_VLANTAG) != 0 || etype == ETHERTYPE_VLAN) { - NETDDEBUG_IF(ifp, "ignoring vlan packets\n"); + NETDDEBUG_IF(ifp, "netdump_pkt_in: Ignoring vlan packets\n"); goto done; } - /* XXX: Probably should check if we're the recipient MAC address */ - /* Done ethernet processing. Strip off the ethernet header */ - m_adj(m, ETHER_HDR_LEN); + /* XXX: Probably must also check if we're the recipient MAC address. */ + + /* Done ethernet processing. Strip off the ethernet header. */ + m_adj(m, ETHER_HDR_LEN); switch (etype) { case ETHERTYPE_ARP: nd_handle_arp(&m); @@ -950,20 +951,19 @@ netdump_pkt_in(struct ifnet *ifp, struct nd_handle_ip(&m); break; default: - NETDDEBUG_IF(ifp, "dropping unknown ethertype %hu\n", + NETDDEBUG_IF(ifp, + "netdump_pkt_in: Dropping unknown ethertype %hu\n", etype); break; } - done: - if (m) m_freem(m); + if (m != NULL) + m_freem(m); } /* - * [netdump_network_poll] - * - * after trapping, instead of assuming that most of the network stack is sane - * just poll the driver directly for packets + * After trapping, instead of assuming that most of the network stack is sane + * just poll the driver directly for packets. * * Parameters: * void From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 16:45:48 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 00A55106566C; Tue, 29 Mar 2011 16:45:48 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E2E888FC16; Tue, 29 Mar 2011 16:45:47 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TGjlw4034473; Tue, 29 Mar 2011 16:45:47 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TGjlGC034471; Tue, 29 Mar 2011 16:45:47 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291645.p2TGjlGC034471@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 16:45:47 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220135 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 16:45:48 -0000 Author: attilio Date: Tue Mar 29 16:45:47 2011 New Revision: 220135 URL: http://svn.freebsd.org/changeset/base/220135 Log: - Fix style for dumping specific functions. - Add __unused tag for arguments where needed. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:21:01 2011 (r220134) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:45:47 2011 (r220135) @@ -99,11 +99,11 @@ static void nd_handle_arp(struct mbuf * static void nd_handle_ip(struct mbuf **mb); static int netdump_arp_server(void); static void netdump_config_defaults(void); -static int netdump_dumper(void *priv, void *virtual, - vm_offset_t physical, off_t offset, size_t length); +static int netdump_dumper(void *priv __unused, void *virtual, + vm_offset_t physical __unused, off_t offset, size_t length); static int netdump_ether_output(struct mbuf *m, struct ifnet *ifp, struct ether_addr dst, u_short etype); -static void netdump_mbuf_nop(void *ptr, void *opt_args); +static void netdump_mbuf_nop(void *ptr __unused, void *opt_args __unused); static int netdump_modevent(module_t mod, int type, void *unused); static void netdump_network_poll(void); static void netdump_pkt_in(struct ifnet *ifp, struct mbuf *m); @@ -280,7 +280,7 @@ TUNABLE_INT("net.dump.enable", &nd_enabl * void */ static void -netdump_mbuf_nop(void *ptr, void *opt_args) +netdump_mbuf_nop(void *ptr __unused, void *opt_args __unused) { } @@ -992,11 +992,9 @@ netdump_network_poll() */ /* - * [netdump_dumper] - * - * Callback from dumpsys() to dump a chunk of memory - * Copies it out to our static buffer then sends it across the network - * Detects the initial KDH and makes sure it's given a special packet type + * Callback from dumpsys() to dump a chunk of memory. + * Copies it out to our static buffer then sends it across the network. + * Detects the initial KDH and makes sure it is given a special packet type. * * Parameters: * priv Unused. Optional private pointer. @@ -1010,44 +1008,40 @@ netdump_network_poll() * errno on error */ static int -netdump_dumper(void *priv, void *virtual, vm_offset_t physical, off_t offset, - size_t length) +netdump_dumper(void *priv __unused, void *virtual, + vm_offset_t physical __unused, off_t offset, size_t length) { - int err; - int msgtype = NETDUMP_VMCORE; - - (void)priv; + int err, msgtype; - NETDDEBUGV("netdump_dumper(%p, %p, 0x%jx, %ju, %zu)\n", - priv, virtual, (uintmax_t)physical, (uintmax_t)offset, length); + NETDDEBUGV("netdump_dumper(NULL, %p, NULL, %ju, %zu)\n", + virtual, (uintmax_t)offset, length); if (length > sizeof(buf)) - return ENOSPC; + return (ENOSPC); + /* * The first write (at offset 0) is the kernel dump header. Flag it - * for the server to treat specially. XXX: This doesn't strip out the - * footer KDH, although it shouldn't hurt anything. + * for the server to treat specially. + * XXX: This doesn't strip out the footer KDH, although it + * should not hurt anything. */ + msgtype = NETDUMP_VMCORE; if (offset == 0 && length > 0) msgtype = NETDUMP_KDH; else if (offset > 0) offset -= sizeof(struct kerneldumpheader); - memcpy(buf, virtual, length); - err=netdump_send(msgtype, offset, buf, length); - if (err) { - dump_failed=1; - return err; + err = netdump_send(msgtype, offset, buf, length); + if (err != 0) { + dump_failed = 1; + return (err); } - - return 0; + return (0); } /* - * [netdump_trigger] - * - * called from kern_shutdown during "boot" (invoked on panic). perform a - * network dump, and if successful cancel the normal disk dump. + * Handler going into shutdown_pre_sync hook. + * Overrides a standard disk dumping activity. * * Parameters: * arg unused @@ -1060,13 +1054,10 @@ static void netdump_trigger(void *arg, int howto) { struct dumperinfo dumper; - void (*old_if_input)(struct ifnet *, struct mbuf *)=NULL; + void (*old_if_input)(struct ifnet *, struct mbuf *); int found, must_lock, nd_gw_unset; - if ((howto&(RB_HALT|RB_DUMP))!=RB_DUMP || !nd_enable || cold || - dumping) - return; - + old_if_input = NULL; found = 0; nd_gw_unset = 0; must_lock = 1; @@ -1074,6 +1065,13 @@ netdump_trigger(void *arg, int howto) if (panicstr != NULL) must_lock = 0; #endif + + /* Check if the dumping is allowed to continue. */ + if ((howto & (RB_HALT | RB_DUMP)) != RB_DUMP || nd_enable == 0 || + cold != 0 || dumping != 0) + return; + + /* Lookup the right if device to be used in the dump. */ if (must_lock != 0) IFNET_RLOCK_NOSLEEP(); TAILQ_FOREACH(nd_ifp, &V_ifnet, if_link) { @@ -1086,11 +1084,11 @@ netdump_trigger(void *arg, int howto) } if (must_lock != 0) IFNET_RUNLOCK_NOSLEEP(); - if (found == 0) { printf("netdump_trigger: Can't netdump: no valid NIC given\n"); return; } + MPASS(nd_ifp != NULL); if (nd_server.s_addr == INADDR_ANY) { @@ -1123,7 +1121,7 @@ netdump_trigger(void *arg, int howto) if ((nd_ifp->if_capenable & IFCAP_POLLING) == 0 && must_lock != 0) nd_ifp->if_ndumpfuncs->ne_disable_intr(nd_ifp); - /* Make the card use *our* receive callback */ + /* Make the card use *our* receive callback. */ old_if_input = nd_ifp->if_input; nd_ifp->if_input = netdump_pkt_in; @@ -1141,27 +1139,21 @@ netdump_trigger(void *arg, int howto) printf("Failed to contact netdump server\n"); goto trig_abort; } - printf("dumping to %s (%6D)\n", inet_ntoa(nd_server), - nd_gw_mac.octet, ":"); + printf("dumping to %s (%6D)\n", inet_ntoa(nd_server), nd_gw_mac.octet, + ":"); printf("-----------------------------------\n"); - /* - * dump memory. - */ + /* Call the dumping routine. */ dumper.dumper = netdump_dumper; dumper.priv = NULL; dumper.blocksize = NETDUMP_DATASIZE; dumper.mediasize = 0; dumper.mediaoffset = 0; - - /* in dump_machdep.c */ dumpsys(&dumper); - - if (dump_failed) { + if (dump_failed != 0) { printf("Failed to dump the actual raw datas\n"); goto trig_abort; } - if (netdump_send(NETDUMP_FINISHED, 0, NULL, 0) != 0) { printf("Failed to close the transaction\n"); goto trig_abort; From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 16:49:51 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1EB87106564A; Tue, 29 Mar 2011 16:49:51 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E78268FC0C; Tue, 29 Mar 2011 16:49:50 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TGnoBA034601; Tue, 29 Mar 2011 16:49:50 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TGnobN034599; Tue, 29 Mar 2011 16:49:50 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291649.p2TGnobN034599@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 16:49:50 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220136 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 16:49:51 -0000 Author: attilio Date: Tue Mar 29 16:49:50 2011 New Revision: 220136 URL: http://svn.freebsd.org/changeset/base/220136 Log: Fix style for KLD specific functions. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:45:47 2011 (r220135) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 16:49:50 2011 (r220136) @@ -1176,11 +1176,9 @@ trig_abort: */ /* - * [netdump_config_defaults] - * * Called upon module load. Initializes the sysctl variables to sane defaults * (locates the first available NIC and uses the first IPv4 IP on that card as - * the client IP). Leaves the server IP unconfigured. + * the client IP). Leaves the server IP unconfigured. * * Parameters: * void @@ -1224,31 +1222,30 @@ netdump_config_defaults() static int netdump_modevent(module_t mod, int type, void *unused) { +#ifdef NETDUMP_CLIENT_DEBUG + char buf[INET_ADDRSTRLEN]; +#endif + switch (type) { case MOD_LOAD: netdump_config_defaults(); - - /* PRI_FIRST happens before the networks are disabled */ nd_tag = EVENTHANDLER_REGISTER(shutdown_pre_sync, - netdump_trigger, NULL, - SHUTDOWN_PRI_FIRST); + netdump_trigger, NULL, SHUTDOWN_PRI_FIRST); #ifdef NETDUMP_CLIENT_DEBUG - if (!nd_ifp) - printf("netdump: Warning: No default interface " - "found. Manual configuration required.\n"); - else { - char buf[INET_ADDRSTRLEN]; + if (nd_ifp == NULL) { + printf("netdump: Warning: No default interface found. + printf("Manual configuration required.\n"); + } else { inet_ntoa_r(nd_client, buf); - printf("netdump: Using interface %s; client IP " - "%s\n", nd_ifp->if_xname, buf); + printf("netdump: Using interface %s; client IP %s\n", + nd_ifp->if_xname, buf); } #endif - printf("netdump initialized\n"); break; case MOD_UNLOAD: - if (nd_tag) { + if (nd_tag != NULL) { EVENTHANDLER_DEREGISTER(shutdown_pre_sync, nd_tag); nd_tag = NULL; } @@ -1257,7 +1254,7 @@ netdump_modevent(module_t mod, int type, default: break; } - return 0; + return (0); } static moduledata_t netdump_mod = {"netdump", netdump_modevent, 0}; DECLARE_MODULE(netdump, netdump_mod, SI_SUB_PROTO_END, SI_ORDER_ANY); @@ -1269,4 +1266,3 @@ DB_COMMAND(netdump, ddb_force_netdump) netdump_trigger(NULL, RB_DUMP); } #endif - From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 18:07:19 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 61A6A1065678; Tue, 29 Mar 2011 18:07:19 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 5096D8FC16; Tue, 29 Mar 2011 18:07:19 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TI7JfE036508; Tue, 29 Mar 2011 18:07:19 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TI7JO4036506; Tue, 29 Mar 2011 18:07:19 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291807.p2TI7JO4036506@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 18:07:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220142 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 18:07:19 -0000 Author: attilio Date: Tue Mar 29 18:07:19 2011 New Revision: 220142 URL: http://svn.freebsd.org/changeset/base/220142 Log: Fix a bug where the passed lenght is lesser than the required one for strlcpy. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 17:59:30 2011 (r220141) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 18:07:19 2011 (r220142) @@ -202,7 +202,7 @@ sysctl_handle_ifxname(SYSCTL_HANDLER_ARG IFNET_RUNLOCK_NOSLEEP(); if (found == 0) return (EINVAL); - strlcpy(arg1, buf, strlen(buf)); + strlcpy(arg1, buf, strlen(buf) + 1); return (error); } From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 18:21:04 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AA600106566C; Tue, 29 Mar 2011 18:21:04 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 994758FC16; Tue, 29 Mar 2011 18:21:04 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TIL4lg037043; Tue, 29 Mar 2011 18:21:04 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TIL4Jq037041; Tue, 29 Mar 2011 18:21:04 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103291821.p2TIL4Jq037041@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 18:21:04 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220144 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 18:21:04 -0000 Author: attilio Date: Tue Mar 29 18:21:04 2011 New Revision: 220144 URL: http://svn.freebsd.org/changeset/base/220144 Log: Fix compilation. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Tue Mar 29 18:16:49 2011 (r220143) +++ projects/sv/sys/netinet/netdump_client.c Tue Mar 29 18:21:04 2011 (r220144) @@ -1234,7 +1234,7 @@ netdump_modevent(module_t mod, int type, #ifdef NETDUMP_CLIENT_DEBUG if (nd_ifp == NULL) { - printf("netdump: Warning: No default interface found. + printf("netdump: Warning: No default interface found."); printf("Manual configuration required.\n"); } else { inet_ntoa_r(nd_client, buf); From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 20:08:42 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A6FC3106564A; Tue, 29 Mar 2011 20:08:42 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 78BFC8FC21; Tue, 29 Mar 2011 20:08:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TK8gcd039577; Tue, 29 Mar 2011 20:08:42 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TK8gd6039575; Tue, 29 Mar 2011 20:08:42 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103292008.p2TK8gd6039575@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 20:08:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220148 - projects/sv/sys/dev/ixgbe X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 20:08:42 -0000 Author: attilio Date: Tue Mar 29 20:08:42 2011 New Revision: 220148 URL: http://svn.freebsd.org/changeset/base/220148 Log: Avoid acquiring RX_LOCK when netdump is in critical condition. Reported by: rstone Modified: projects/sv/sys/dev/ixgbe/ixgbe.c Modified: projects/sv/sys/dev/ixgbe/ixgbe.c ============================================================================== --- projects/sv/sys/dev/ixgbe/ixgbe.c Tue Mar 29 19:48:03 2011 (r220147) +++ projects/sv/sys/dev/ixgbe/ixgbe.c Tue Mar 29 20:08:42 2011 (r220148) @@ -41,6 +41,14 @@ #if defined(DEVICE_POLLING) || defined(NETDUMP_CLIENT) +#define IXGBE_RX_LOCK_COND(rxr, locking) do { \ + if ((locking) != 0) \ + IXGBE_RX_LOCK(rxr); \ +} while (0) +#define IXGBE_RX_UNLOCK_COND(rxr, locking) do { \ + if ((locking) != 0) \ + IXGBE_RX_UNLOCK(rtxr); \ +} while (0) #define IXGBE_TX_LOCK_COND(txr, locking) do { \ if ((locking) != 0) \ IXGBE_TX_LOCK(txr); \ @@ -157,7 +165,8 @@ static void ixgbe_enable_intr(struct static void ixgbe_disable_intr(struct adapter *); static void ixgbe_update_stats_counters(struct adapter *); static bool ixgbe_txeof(struct tx_ring *); -static bool ixgbe_rxeof(struct ix_queue *, int, int *); +static bool _ixgbe_rxeof_generic(struct ix_queue *, int, int *, int); +#define ixgbe_rxeof(a, c, d) _ixgbe_rxeof_generic(a, c, d, 1) static void ixgbe_rx_checksum(u32, struct mbuf *, u32); static void ixgbe_set_promisc(struct adapter *); static void ixgbe_set_multi(struct adapter *); @@ -3351,7 +3360,7 @@ _ixgbe_poll_generic(struct ifnet *ifp, e if ((reg_eicr & IXGBE_EICR_LSC) != 0) taskqueue_enqueue(adapter->tq, &adapter->link_task); } - ixgbe_rxeof(que, count, &rx_npkts); + _ixgbe_rxeof_generic(que, count, &rx_npkts, 0); IXGBE_TX_LOCK_COND(txr, locking); do { more_tx = ixgbe_txeof(txr); @@ -4241,7 +4250,8 @@ ixgbe_rx_discard(struct rx_ring *rxr, in * Return TRUE for more work, FALSE for all clean. *********************************************************************/ static bool -ixgbe_rxeof(struct ix_queue *que, int count, int *rx_npktsp) +_ixgbe_rxeof_generic(struct ix_queue *que, int count, int *rx_npktsp, + int locking) { struct adapter *adapter = que->adapter; struct rx_ring *rxr = que->rxr; @@ -4253,7 +4263,7 @@ ixgbe_rxeof(struct ix_queue *que, int co union ixgbe_adv_rx_desc *cur; struct ixgbe_rx_buf *rbuf, *nbuf; - IXGBE_RX_LOCK(rxr); + IXGBE_RX_LOCK_COND(rxr, locking); for (i = rxr->next_to_check; count != 0;) { struct mbuf *sendmp, *mh, *mp; @@ -4483,7 +4493,7 @@ next_desc: tcp_lro_flush(lro, queued); } - IXGBE_RX_UNLOCK(rxr); + IXGBE_RX_UNLOCK_COND(rxr, locking); /* ** We still have cleaning to do? From owner-svn-src-projects@FreeBSD.ORG Tue Mar 29 20:23:56 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D91C3106564A; Tue, 29 Mar 2011 20:23:56 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C5BE58FC12; Tue, 29 Mar 2011 20:23:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2TKNutc039968; Tue, 29 Mar 2011 20:23:56 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2TKNuhm039966; Tue, 29 Mar 2011 20:23:56 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103292023.p2TKNuhm039966@svn.freebsd.org> From: Attilio Rao Date: Tue, 29 Mar 2011 20:23:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220149 - projects/sv/sys/dev/ixgbe X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Tue, 29 Mar 2011 20:23:56 -0000 Author: attilio Date: Tue Mar 29 20:23:56 2011 New Revision: 220149 URL: http://svn.freebsd.org/changeset/base/220149 Log: Fix a bug as locking or not should be conditional. Modified: projects/sv/sys/dev/ixgbe/ixgbe.c Modified: projects/sv/sys/dev/ixgbe/ixgbe.c ============================================================================== --- projects/sv/sys/dev/ixgbe/ixgbe.c Tue Mar 29 20:08:42 2011 (r220148) +++ projects/sv/sys/dev/ixgbe/ixgbe.c Tue Mar 29 20:23:56 2011 (r220149) @@ -3360,7 +3360,7 @@ _ixgbe_poll_generic(struct ifnet *ifp, e if ((reg_eicr & IXGBE_EICR_LSC) != 0) taskqueue_enqueue(adapter->tq, &adapter->link_task); } - _ixgbe_rxeof_generic(que, count, &rx_npkts, 0); + _ixgbe_rxeof_generic(que, count, &rx_npkts, locking); IXGBE_TX_LOCK_COND(txr, locking); do { more_tx = ixgbe_txeof(txr); From owner-svn-src-projects@FreeBSD.ORG Wed Mar 30 14:48:49 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DF0D71065672; Wed, 30 Mar 2011 14:48:49 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CF40A8FC18; Wed, 30 Mar 2011 14:48:49 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2UEmnD9066640; Wed, 30 Mar 2011 14:48:49 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2UEmnfD066638; Wed, 30 Mar 2011 14:48:49 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103301448.p2UEmnfD066638@svn.freebsd.org> From: Attilio Rao Date: Wed, 30 Mar 2011 14:48:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220160 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 30 Mar 2011 14:48:50 -0000 Author: attilio Date: Wed Mar 30 14:48:49 2011 New Revision: 220160 URL: http://svn.freebsd.org/changeset/base/220160 Log: Style fix. Submitted by: rstone Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Wed Mar 30 14:46:55 2011 (r220159) +++ projects/sv/sys/netinet/netdump_client.c Wed Mar 30 14:48:49 2011 (r220160) @@ -518,7 +518,7 @@ retransmit: /* * Check if it is retransmitting and this has been ACKed * already. - * */ + */ if ((rcvd_acks & (1 << i)) != 0) { sent_so_far += pktlen; continue; From owner-svn-src-projects@FreeBSD.ORG Wed Mar 30 21:21:26 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A9C9A1065670; Wed, 30 Mar 2011 21:21:26 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 97A258FC1C; Wed, 30 Mar 2011 21:21:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2ULLQ1J081240; Wed, 30 Mar 2011 21:21:26 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2ULLQmo081238; Wed, 30 Mar 2011 21:21:26 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103302121.p2ULLQmo081238@svn.freebsd.org> From: Attilio Rao Date: Wed, 30 Mar 2011 21:21:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220170 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 30 Mar 2011 21:21:26 -0000 Author: attilio Date: Wed Mar 30 21:21:26 2011 New Revision: 220170 URL: http://svn.freebsd.org/changeset/base/220170 Log: - Fix a style bug - Use the if_transmit() method directly. That enables the multiqueue support where available avoiding to bypass the overridden functions. In critical conditions (panic, or however when the CPUs are stopped) a different function needs to be used in order to avoid acquiring the locks and allocating the mbufs. It needs to be a shortcut for a direct handover of the mbuf. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Wed Mar 30 20:13:55 2011 (r220169) +++ projects/sv/sys/netinet/netdump_client.c Wed Mar 30 21:21:26 2011 (r220170) @@ -316,21 +316,13 @@ netdump_ether_output(struct mbuf *m, str memcpy(eh->ether_dhost, dst.octet, ETHER_ADDR_LEN); eh->ether_type = htons(etype); - if (((ifp->if_flags & (IFF_MONITOR|IFF_UP)) != IFF_UP) || + if (((ifp->if_flags & (IFF_MONITOR | IFF_UP)) != IFF_UP) || (ifp->if_drv_flags & IFF_DRV_RUNNING) != IFF_DRV_RUNNING) { if_printf(ifp, "netdump_ether_output: Interface isn't up\n"); m_freem(m); return (ENETDOWN); } - - if (_IF_QFULL(&ifp->if_snd)) { - if_printf(ifp, "netdump_ether_output: TX queue full\n"); - m_freem(m); - return (ENOBUFS); - } - - _IF_ENQUEUE(&ifp->if_snd, m); - return (0); + return ((ifp->if_transmit(ifp, m)); } /* From owner-svn-src-projects@FreeBSD.ORG Wed Mar 30 21:22:26 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4A4D7106564A; Wed, 30 Mar 2011 21:22:26 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 385E18FC14; Wed, 30 Mar 2011 21:22:26 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2ULMQrA081311; Wed, 30 Mar 2011 21:22:26 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2ULMQGB081309; Wed, 30 Mar 2011 21:22:26 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103302122.p2ULMQGB081309@svn.freebsd.org> From: Attilio Rao Date: Wed, 30 Mar 2011 21:22:26 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220171 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 30 Mar 2011 21:22:26 -0000 Author: attilio Date: Wed Mar 30 21:22:25 2011 New Revision: 220171 URL: http://svn.freebsd.org/changeset/base/220171 Log: Fix compilation Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Wed Mar 30 21:21:26 2011 (r220170) +++ projects/sv/sys/netinet/netdump_client.c Wed Mar 30 21:22:25 2011 (r220171) @@ -322,7 +322,7 @@ netdump_ether_output(struct mbuf *m, str m_freem(m); return (ENETDOWN); } - return ((ifp->if_transmit(ifp, m)); + return ((ifp->if_transmit)(ifp, m)); } /* From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 12:17:37 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A6796106564A; Thu, 31 Mar 2011 12:17:37 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 96D228FC15; Thu, 31 Mar 2011 12:17:37 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VCHbRk005910; Thu, 31 Mar 2011 12:17:37 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VCHbQ3005908; Thu, 31 Mar 2011 12:17:37 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311217.p2VCHbQ3005908@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 12:17:37 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220191 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 12:17:37 -0000 Author: mav Date: Thu Mar 31 12:17:37 2011 New Revision: 220191 URL: http://svn.freebsd.org/changeset/base/220191 Log: Fix unreachable code. It could cause not replacing more then one failed disk at a time on volumes with Promise metadata. Found with: Coverity Prevent(tm) CID: 9656 Modified: projects/graid/head/sys/geom/raid/md_promise.c Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 12:03:30 2011 (r220190) +++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 12:17:37 2011 (r220191) @@ -818,10 +818,10 @@ restart: } else update = 0; if (update) { + updated = 1; g_raid_md_write_promise(md, vol, NULL, disk); break; } - updated += update; } } if (updated) From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 12:43:39 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC8491065678; Thu, 31 Mar 2011 12:43:39 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id DCCE08FC08; Thu, 31 Mar 2011 12:43:39 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VChdEG006532; Thu, 31 Mar 2011 12:43:39 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VChdFh006530; Thu, 31 Mar 2011 12:43:39 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311243.p2VChdFh006530@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 12:43:39 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220192 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 12:43:40 -0000 Author: mav Date: Thu Mar 31 12:43:39 2011 New Revision: 220192 URL: http://svn.freebsd.org/changeset/base/220192 Log: Only disk with metadata could be part of the array. Accidental ID match for newly inserted disk should not cause NULL dereference. Such disk should be always handled as new. Found with: Coverity Prevent(tm) CID: 9658 Modified: projects/graid/head/sys/geom/raid/md_jmicron.c Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 12:17:37 2011 (r220191) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 12:43:39 2011 (r220192) @@ -431,7 +431,10 @@ g_raid_md_jmicron_start_disk(struct g_ra olddisk = NULL; /* Find disk position in metadata by it's serial. */ - disk_pos = jmicron_meta_find_disk(meta, pd->pd_disk_id); + if (pd->pd_meta != NULL) + disk_pos = jmicron_meta_find_disk(meta, pd->pd_disk_id); + else + disk_pos = -1; if (disk_pos < 0) { G_RAID_DEBUG1(1, sc, "Unknown, probably new or stale disk"); /* If we are in the start process, that's all for now. */ @@ -522,7 +525,7 @@ nofit: * Different disks may have different sizes/offsets, * especially in concat mode. Update. */ - if (pd->pd_meta != NULL && !resurrection) { + if (!resurrection) { sd->sd_offset = (off_t)pd->pd_meta->offset * 16 * 512; //ZZZ sd->sd_size = From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 13:06:51 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 74BE21065673; Thu, 31 Mar 2011 13:06:51 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 652E88FC15; Thu, 31 Mar 2011 13:06:51 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VD6pK7007088; Thu, 31 Mar 2011 13:06:51 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VD6p74007086; Thu, 31 Mar 2011 13:06:51 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311306.p2VD6p74007086@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 13:06:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220193 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 13:06:51 -0000 Author: mav Date: Thu Mar 31 13:06:51 2011 New Revision: 220193 URL: http://svn.freebsd.org/changeset/base/220193 Log: Remove useless assignment. Found with: Coverity Privent(tm) CID: 9693 Modified: projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Thu Mar 31 12:43:39 2011 (r220192) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Thu Mar 31 13:06:51 2011 (r220193) @@ -720,8 +720,6 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ bp->bio_error); bp->bio_cmd = BIO_WRITE; bp->bio_cflags = G_RAID_BIO_FLAG_SYNC; - bp->bio_offset = bp->bio_offset; - bp->bio_length = bp->bio_length; G_RAID_LOGREQ(4, bp, "Queueing rebuild write."); g_raid_subdisk_iostart(trs->trso_failed_sd, bp); } else { From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 13:28:34 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 58C5F106566C; Thu, 31 Mar 2011 13:28:34 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 488138FC0C; Thu, 31 Mar 2011 13:28:34 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VDSYvo007699; Thu, 31 Mar 2011 13:28:34 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VDSYMG007695; Thu, 31 Mar 2011 13:28:34 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311328.p2VDSYMG007695@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 13:28:34 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220196 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 13:28:34 -0000 Author: mav Date: Thu Mar 31 13:28:33 2011 New Revision: 220196 URL: http://svn.freebsd.org/changeset/base/220196 Log: Some string constants in metadata are not zero-terminated. Correct sizes when using sizeof() on string constants. Found with: Coverity Prevent(tm) CID: 9705, 9706, 9707, 9808, 9809, 9810 Modified: projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/md_nvidia.c projects/graid/head/sys/geom/raid/md_promise.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 13:22:12 2011 (r220195) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 13:28:33 2011 (r220196) @@ -541,9 +541,9 @@ intel_meta_write_spare(struct g_consumer /* Fill anchor and single disk. */ meta = malloc(INTEL_MAX_MD_SIZE(1), M_MD_INTEL, M_WAITOK | M_ZERO); - memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC)); + memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC) - 1); memcpy(&meta->version[0], INTEL_VERSION_1000, - sizeof(INTEL_VERSION_1000)); + sizeof(INTEL_VERSION_1000) - 1); meta->config_size = INTEL_MAX_MD_SIZE(1); meta->config_id = arc4random(); meta->generation = 1; @@ -2049,7 +2049,7 @@ g_raid_md_write_intel(struct g_raid_md_o /* Fill anchor and disks. */ meta = malloc(INTEL_MAX_MD_SIZE(numdisks), M_MD_INTEL, M_WAITOK | M_ZERO); - memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC)); + memcpy(&meta->intel_id[0], INTEL_MAGIC, sizeof(INTEL_MAGIC) - 1); meta->config_size = INTEL_MAX_MD_SIZE(numdisks); meta->config_id = mdi->mdio_config_id; meta->generation = mdi->mdio_generation; @@ -2214,7 +2214,7 @@ g_raid_md_write_intel(struct g_raid_md_o meta->total_volumes = vi; if (strcmp(version, INTEL_VERSION_1300) != 0) meta->attributes &= INTEL_ATTR_CHECKSUM; - memcpy(&meta->version[0], version, sizeof(INTEL_VERSION_1000)); + memcpy(&meta->version[0], version, sizeof(INTEL_VERSION_1000) - 1); /* We are done. Print meta data and store them to disks. */ g_raid_md_intel_print(meta); Modified: projects/graid/head/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 13:22:12 2011 (r220195) +++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 13:28:33 2011 (r220196) @@ -1435,7 +1435,7 @@ g_raid_md_write_nvidia(struct g_raid_md_ meta = malloc(sizeof(*meta), M_MD_NVIDIA, M_WAITOK | M_ZERO); if (mdi->mdio_meta) memcpy(meta, mdi->mdio_meta, sizeof(*meta)); - memcpy(meta->nvidia_id, NVIDIA_MAGIC, sizeof(NVIDIA_MAGIC)); + memcpy(meta->nvidia_id, NVIDIA_MAGIC, sizeof(NVIDIA_MAGIC) - 1); meta->config_size = 30; meta->version = 0x0064; meta->total_sectors = vol->v_mediasize / vol->v_sectorsize; Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 13:22:12 2011 (r220195) +++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 13:28:33 2011 (r220196) @@ -398,7 +398,8 @@ next: &off, &size)) { /* Optionally add record for unused space. */ meta = (struct promise_raid_conf *)buf; - memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC)); + memcpy(&meta->promise_id[0], PROMISE_MAGIC, + sizeof(PROMISE_MAGIC) - 1); meta->dummy_0 = 0x00020000; meta->integrity = PROMISE_I_VALID; meta->disk.flags = PROMISE_F_ONLINE | PROMISE_F_VALID; @@ -462,7 +463,7 @@ promise_meta_write_spare(struct g_consum int error; meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO); - memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC)); + memcpy(&meta->promise_id[0], PROMISE_MAGIC, sizeof(PROMISE_MAGIC) - 1); meta->dummy_0 = 0x00020000; meta->integrity = PROMISE_I_VALID; meta->disk.flags = PROMISE_F_SPARE | PROMISE_F_ONLINE | PROMISE_F_VALID; @@ -1684,7 +1685,8 @@ g_raid_md_write_promise(struct g_raid_md meta = malloc(sizeof(*meta), M_MD_PROMISE, M_WAITOK | M_ZERO); if (pv->pv_meta != NULL) memcpy(meta, pv->pv_meta, sizeof(*meta)); - memcpy(meta->promise_id, PROMISE_MAGIC, sizeof(PROMISE_MAGIC)); + memcpy(meta->promise_id, PROMISE_MAGIC, + sizeof(PROMISE_MAGIC) - 1); meta->dummy_0 = 0x00020000; meta->integrity = PROMISE_I_VALID; From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 13:36:31 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id AF10E1065670; Thu, 31 Mar 2011 13:36:31 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 9F0AF8FC13; Thu, 31 Mar 2011 13:36:31 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VDaV0I007922; Thu, 31 Mar 2011 13:36:31 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VDaVSo007917; Thu, 31 Mar 2011 13:36:31 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311336.p2VDaVSo007917@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 13:36:31 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220197 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 13:36:31 -0000 Author: mav Date: Thu Mar 31 13:36:31 2011 New Revision: 220197 URL: http://svn.freebsd.org/changeset/base/220197 Log: Remove some unneeded checks. Found with: Coverity Prevent(tm) CID: 9711, 9712, 9713, 9714 Modified: projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/head/sys/geom/raid/md_nvidia.c projects/graid/head/sys/geom/raid/md_sii.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 13:28:33 2011 (r220196) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 13:36:31 2011 (r220197) @@ -1881,10 +1881,8 @@ g_raid_md_ctl_intel(struct g_raid_md_obj /* If disk was assigned, just update statuses. */ if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); - if (disk->d_consumer) { - g_raid_kill_consumer(sc, disk->d_consumer); - disk->d_consumer = NULL; - } + g_raid_kill_consumer(sc, disk->d_consumer); + disk->d_consumer = NULL; TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 13:28:33 2011 (r220196) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 13:36:31 2011 (r220197) @@ -1303,10 +1303,8 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o /* If disk was assigned, just update statuses. */ if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); - if (disk->d_consumer) { - g_raid_kill_consumer(sc, disk->d_consumer); - disk->d_consumer = NULL; - } + g_raid_kill_consumer(sc, disk->d_consumer); + disk->d_consumer = NULL; TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); Modified: projects/graid/head/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 13:28:33 2011 (r220196) +++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 13:36:31 2011 (r220197) @@ -1311,10 +1311,8 @@ g_raid_md_ctl_nvidia(struct g_raid_md_ob /* If disk was assigned, just update statuses. */ if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); - if (disk->d_consumer) { - g_raid_kill_consumer(sc, disk->d_consumer); - disk->d_consumer = NULL; - } + g_raid_kill_consumer(sc, disk->d_consumer); + disk->d_consumer = NULL; TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); Modified: projects/graid/head/sys/geom/raid/md_sii.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 13:28:33 2011 (r220196) +++ projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 13:36:31 2011 (r220197) @@ -1389,10 +1389,8 @@ g_raid_md_ctl_sii(struct g_raid_md_objec /* If disk was assigned, just update statuses. */ if (pd->pd_disk_pos >= 0) { g_raid_change_disk_state(disk, G_RAID_DISK_S_OFFLINE); - if (disk->d_consumer) { - g_raid_kill_consumer(sc, disk->d_consumer); - disk->d_consumer = NULL; - } + g_raid_kill_consumer(sc, disk->d_consumer); + disk->d_consumer = NULL; TAILQ_FOREACH(sd, &disk->d_subdisks, sd_next) { g_raid_change_subdisk_state(sd, G_RAID_SUBDISK_S_NONE); From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 14:16:57 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0A6B51065674; Thu, 31 Mar 2011 14:16:57 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E36818FC19; Thu, 31 Mar 2011 14:16:56 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VEGup0008884; Thu, 31 Mar 2011 14:16:56 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VEGuO8008878; Thu, 31 Mar 2011 14:16:56 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311416.p2VEGuO8008878@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 14:16:56 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220199 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 14:16:57 -0000 Author: mav Date: Thu Mar 31 14:16:56 2011 New Revision: 220199 URL: http://svn.freebsd.org/changeset/base/220199 Log: Remove duplicate assignments. Found with: Clang Static Analyzer Modified: projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/head/sys/geom/raid/md_nvidia.c projects/graid/head/sys/geom/raid/md_promise.c projects/graid/head/sys/geom/raid/md_sii.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 13:59:47 2011 (r220198) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 14:16:56 2011 (r220199) @@ -1953,7 +1953,6 @@ g_raid_md_ctl_intel(struct g_raid_md_obj disk = g_raid_create_disk(sc); disk->d_consumer = cp; - disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 13:59:47 2011 (r220198) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 14:16:56 2011 (r220199) @@ -1364,7 +1364,6 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o disk = g_raid_create_disk(sc); disk->d_consumer = cp; - disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; g_topology_unlock(); Modified: projects/graid/head/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 13:59:47 2011 (r220198) +++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 14:16:56 2011 (r220199) @@ -1371,7 +1371,6 @@ g_raid_md_ctl_nvidia(struct g_raid_md_ob disk = g_raid_create_disk(sc); disk->d_consumer = cp; - disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; g_topology_unlock(); Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 13:59:47 2011 (r220198) +++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 14:16:56 2011 (r220199) @@ -1617,7 +1617,6 @@ g_raid_md_ctl_promise(struct g_raid_md_o disk = g_raid_create_disk(sc); disk->d_consumer = cp; - disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; Modified: projects/graid/head/sys/geom/raid/md_sii.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 13:59:47 2011 (r220198) +++ projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 14:16:56 2011 (r220199) @@ -1449,7 +1449,6 @@ g_raid_md_ctl_sii(struct g_raid_md_objec disk = g_raid_create_disk(sc); disk->d_consumer = cp; - disk->d_consumer->private = disk; disk->d_md_data = (void *)pd; cp->private = disk; g_topology_unlock(); From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 14:44:00 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 9472E1065675; Thu, 31 Mar 2011 14:44:00 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6FEB58FC0A; Thu, 31 Mar 2011 14:44:00 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VEi0lZ009573; Thu, 31 Mar 2011 14:44:00 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VEi0Ae009566; Thu, 31 Mar 2011 14:44:00 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311444.p2VEi0Ae009566@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 14:44:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220202 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 14:44:00 -0000 Author: mav Date: Thu Mar 31 14:44:00 2011 New Revision: 220202 URL: http://svn.freebsd.org/changeset/base/220202 Log: Remove unused assignments and variables. Found with: Clang Static Analyzer Modified: projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/head/sys/geom/raid/md_nvidia.c projects/graid/head/sys/geom/raid/md_promise.c projects/graid/head/sys/geom/raid/md_sii.c projects/graid/head/sys/geom/raid/tr_raid1.c projects/graid/head/sys/geom/raid/tr_raid1e.c Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 14:35:33 2011 (r220201) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 14:44:00 2011 (r220202) @@ -579,14 +579,12 @@ g_raid_md_jmicron_refill(struct g_raid_s { struct g_raid_md_object *md; struct g_raid_md_jmicron_object *mdi; - struct jmicron_raid_conf *meta; struct g_raid_disk *disk; struct task *task; int update, na; md = sc->sc_md; mdi = (struct g_raid_md_jmicron_object *)md; - meta = mdi->mdio_meta; update = 0; do { /* Make sure we miss anything. */ @@ -620,10 +618,8 @@ g_raid_md_jmicron_refill(struct g_raid_s } while (disk != NULL); /* Write new metadata if we changed something. */ - if (update) { + if (update) g_raid_md_write_jmicron(md, NULL, NULL, NULL); - meta = mdi->mdio_meta; - } /* Update status of our need for spare. */ mdi->mdio_incomplete = (g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) < @@ -1469,7 +1465,6 @@ g_raid_md_write_jmicron(struct g_raid_md if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_JMICRON); mdi->mdio_meta = meta; - i = 0; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_jmicron_perdisk *)disk->d_md_data; if (disk->d_state != G_RAID_DISK_S_ACTIVE && @@ -1506,12 +1501,10 @@ g_raid_md_fail_disk_jmicron(struct g_rai struct g_raid_subdisk *tsd, struct g_raid_disk *tdisk) { struct g_raid_softc *sc; - struct g_raid_md_jmicron_object *mdi; struct g_raid_md_jmicron_perdisk *pd; struct g_raid_subdisk *sd; sc = md->mdo_softc; - mdi = (struct g_raid_md_jmicron_object *)md; pd = (struct g_raid_md_jmicron_perdisk *)tdisk->d_md_data; /* We can't fail disk that is not a part of array now. */ Modified: projects/graid/head/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 14:35:33 2011 (r220201) +++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 14:44:00 2011 (r220202) @@ -584,14 +584,12 @@ g_raid_md_nvidia_refill(struct g_raid_so { struct g_raid_md_object *md; struct g_raid_md_nvidia_object *mdi; - struct nvidia_raid_conf *meta; struct g_raid_disk *disk; struct task *task; int update, na; md = sc->sc_md; mdi = (struct g_raid_md_nvidia_object *)md; - meta = mdi->mdio_meta; update = 0; do { /* Make sure we miss anything. */ @@ -625,10 +623,8 @@ g_raid_md_nvidia_refill(struct g_raid_so } while (disk != NULL); /* Write new metadata if we changed something. */ - if (update) { + if (update) g_raid_md_write_nvidia(md, NULL, NULL, NULL); - meta = mdi->mdio_meta; - } /* Update status of our need for spare. */ mdi->mdio_incomplete = (g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) < @@ -1527,12 +1523,10 @@ g_raid_md_fail_disk_nvidia(struct g_raid struct g_raid_subdisk *tsd, struct g_raid_disk *tdisk) { struct g_raid_softc *sc; - struct g_raid_md_nvidia_object *mdi; struct g_raid_md_nvidia_perdisk *pd; struct g_raid_subdisk *sd; sc = md->mdo_softc; - mdi = (struct g_raid_md_nvidia_object *)md; pd = (struct g_raid_md_nvidia_perdisk *)tdisk->d_md_data; /* We can't fail disk that is not a part of array now. */ Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 14:35:33 2011 (r220201) +++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 14:44:00 2011 (r220202) @@ -1184,10 +1184,8 @@ static int g_raid_md_volume_event_promise(struct g_raid_md_object *md, struct g_raid_volume *vol, u_int event) { - struct g_raid_softc *sc; struct g_raid_md_promise_pervolume *pv; - sc = md->mdo_softc; pv = (struct g_raid_md_promise_pervolume *)vol->v_md_data; switch (event) { case G_RAID_VOLUME_E_STARTMD: @@ -1567,8 +1565,6 @@ g_raid_md_ctl_promise(struct g_raid_md_o continue; } - pd = (struct g_raid_md_promise_perdisk *)disk->d_md_data; - /* Erase metadata on deleting disk and destroy it. */ promise_meta_erase(disk->d_consumer); g_raid_destroy_disk(disk); @@ -1610,7 +1606,6 @@ g_raid_md_ctl_promise(struct g_raid_md_o error = -4; break; } - pp = cp->provider; g_topology_unlock(); pd = malloc(sizeof(*pd), M_MD_PROMISE, M_WAITOK | M_ZERO); Modified: projects/graid/head/sys/geom/raid/md_sii.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 14:35:33 2011 (r220201) +++ projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 14:44:00 2011 (r220202) @@ -641,14 +641,12 @@ g_raid_md_sii_refill(struct g_raid_softc { struct g_raid_md_object *md; struct g_raid_md_sii_object *mdi; - struct sii_raid_conf *meta; struct g_raid_disk *disk; struct task *task; int update, na; md = sc->sc_md; mdi = (struct g_raid_md_sii_object *)md; - meta = mdi->mdio_meta; update = 0; do { /* Make sure we miss anything. */ @@ -682,10 +680,8 @@ g_raid_md_sii_refill(struct g_raid_softc } while (disk != NULL); /* Write new metadata if we changed something. */ - if (update) { + if (update) g_raid_md_write_sii(md, NULL, NULL, NULL); - meta = mdi->mdio_meta; - } /* Update status of our need for spare. */ mdi->mdio_incomplete = (g_raid_ndisks(sc, G_RAID_DISK_S_ACTIVE) < @@ -1558,7 +1554,6 @@ g_raid_md_write_sii(struct g_raid_md_obj if (mdi->mdio_meta != NULL) free(mdi->mdio_meta, M_MD_SII); mdi->mdio_meta = meta; - i = 0; TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { pd = (struct g_raid_md_sii_perdisk *)disk->d_md_data; if (disk->d_state != G_RAID_DISK_S_ACTIVE) @@ -1604,12 +1599,10 @@ g_raid_md_fail_disk_sii(struct g_raid_md struct g_raid_subdisk *tsd, struct g_raid_disk *tdisk) { struct g_raid_softc *sc; - struct g_raid_md_sii_object *mdi; struct g_raid_md_sii_perdisk *pd; struct g_raid_subdisk *sd; sc = md->mdo_softc; - mdi = (struct g_raid_md_sii_object *)md; pd = (struct g_raid_md_sii_perdisk *)tdisk->d_md_data; /* We can't fail disk that is not a part of array now. */ Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Thu Mar 31 14:35:33 2011 (r220201) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Thu Mar 31 14:44:00 2011 (r220202) @@ -549,7 +549,6 @@ g_raid_tr_iostart_raid1_read(struct g_ra static void g_raid_tr_iostart_raid1_write(struct g_raid_tr_object *tr, struct bio *bp) { - struct g_raid_softc *sc; struct g_raid_volume *vol; struct g_raid_subdisk *sd; struct bio_queue_head queue; @@ -557,7 +556,6 @@ g_raid_tr_iostart_raid1_write(struct g_r int i; vol = tr->tro_volume; - sc = vol->v_softc; /* * Allocate all bios before sending any request, so we can return Modified: projects/graid/head/sys/geom/raid/tr_raid1e.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1e.c Thu Mar 31 14:35:33 2011 (r220201) +++ projects/graid/head/sys/geom/raid/tr_raid1e.c Thu Mar 31 14:44:00 2011 (r220202) @@ -196,13 +196,11 @@ g_raid_tr_taste_raid1e(struct g_raid_tr_ static int g_raid_tr_update_state_raid1e_even(struct g_raid_volume *vol) { - struct g_raid_tr_raid1e_object *trs; struct g_raid_softc *sc; struct g_raid_subdisk *sd, *bestsd, *worstsd; int i, j, state, sstate; sc = vol->v_softc; - trs = (struct g_raid_tr_raid1e_object *)vol->v_tr; state = G_RAID_VOLUME_S_OPTIMAL; for (i = 0; i < vol->v_disks_count / N; i++) { bestsd = &vol->v_subdisks[i * N]; @@ -251,13 +249,11 @@ g_raid_tr_update_state_raid1e_even(struc static int g_raid_tr_update_state_raid1e_odd(struct g_raid_volume *vol) { - struct g_raid_tr_raid1e_object *trs; struct g_raid_softc *sc; struct g_raid_subdisk *sd, *bestsd, *worstsd; int i, j, state, sstate; sc = vol->v_softc; - trs = (struct g_raid_tr_raid1e_object *)vol->v_tr; if (g_raid_nsubdisks(vol, G_RAID_SUBDISK_S_ACTIVE) == vol->v_disks_count) return (G_RAID_VOLUME_S_OPTIMAL); From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 15:27:03 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 87829106567D; Thu, 31 Mar 2011 15:27:03 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 784958FC30; Thu, 31 Mar 2011 15:27:03 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VFR3ip010674; Thu, 31 Mar 2011 15:27:03 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VFR3AU010668; Thu, 31 Mar 2011 15:27:03 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311527.p2VFR3AU010668@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 15:27:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220207 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 15:27:03 -0000 Author: mav Date: Thu Mar 31 15:27:03 2011 New Revision: 220207 URL: http://svn.freebsd.org/changeset/base/220207 Log: Add check to prevent division by zero if user specified all disks as NONE in `graid label`. Found with: Clang Static Analyzer Modified: projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/head/sys/geom/raid/md_nvidia.c projects/graid/head/sys/geom/raid/md_promise.c projects/graid/head/sys/geom/raid/md_sii.c Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 15:23:32 2011 (r220206) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 15:27:03 2011 (r220207) @@ -1431,7 +1431,7 @@ g_raid_md_ctl_intel(struct g_raid_md_obj gctl_error(req, "Can't open disk '%s'.", diskname); g_topology_unlock(); - error = -4; + error = -7; break; } pp = cp->provider; @@ -1481,6 +1481,11 @@ g_raid_md_ctl_intel(struct g_raid_md_obj if (error != 0) return (error); + if (sectorsize <= 0) { + gctl_error(req, "Can't get sector size."); + return (-8); + } + /* Reserve some space for metadata. */ size -= ((4096 + sectorsize - 1) / sectorsize) * sectorsize; Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 15:23:32 2011 (r220206) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 15:27:03 2011 (r220207) @@ -1129,6 +1129,11 @@ g_raid_md_ctl_jmicron(struct g_raid_md_o if (error != 0) return (error); + if (sectorsize <= 0) { + gctl_error(req, "Can't get sector size."); + return (-8); + } + /* Reserve space for metadata. */ size -= sectorsize; Modified: projects/graid/head/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 15:23:32 2011 (r220206) +++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 15:27:03 2011 (r220207) @@ -1137,6 +1137,11 @@ g_raid_md_ctl_nvidia(struct g_raid_md_ob if (error != 0) return (error); + if (sectorsize <= 0) { + gctl_error(req, "Can't get sector size."); + return (-8); + } + /* Reserve space for metadata. */ size -= 2 * sectorsize; Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 15:23:32 2011 (r220206) +++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 15:27:03 2011 (r220207) @@ -1343,6 +1343,11 @@ g_raid_md_ctl_promise(struct g_raid_md_o return (error); } + if (sectorsize <= 0) { + gctl_error(req, "Can't get sector size."); + return (-8); + } + /* Handle size argument. */ len = sizeof(*sizearg); sizearg = gctl_get_param(req, "size", &len); Modified: projects/graid/head/sys/geom/raid/md_sii.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 15:23:32 2011 (r220206) +++ projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 15:27:03 2011 (r220207) @@ -1215,6 +1215,11 @@ g_raid_md_ctl_sii(struct g_raid_md_objec if (error != 0) return (error); + if (sectorsize <= 0) { + gctl_error(req, "Can't get sector size."); + return (-8); + } + /* Reserve space for metadata. */ size -= 0x800 * sectorsize; From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 15:52:12 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BE0EA1065673; Thu, 31 Mar 2011 15:52:12 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AE2FA8FC1E; Thu, 31 Mar 2011 15:52:12 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VFqC1K011211; Thu, 31 Mar 2011 15:52:12 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VFqCHE011204; Thu, 31 Mar 2011 15:52:12 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201103311552.p2VFqCHE011204@svn.freebsd.org> From: Alexander Motin Date: Thu, 31 Mar 2011 15:52:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220208 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 15:52:12 -0000 Author: mav Date: Thu Mar 31 15:52:12 2011 New Revision: 220208 URL: http://svn.freebsd.org/changeset/base/220208 Log: Remove unused assignments and variables. Found with: Clang Static Analyzer Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/md_intel.c projects/graid/head/sys/geom/raid/md_jmicron.c projects/graid/head/sys/geom/raid/md_nvidia.c projects/graid/head/sys/geom/raid/md_promise.c projects/graid/head/sys/geom/raid/md_sii.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Thu Mar 31 15:27:03 2011 (r220207) +++ projects/graid/head/sys/geom/raid/g_raid.c Thu Mar 31 15:52:12 2011 (r220208) @@ -1608,7 +1608,7 @@ g_raid_access(struct g_provider *pp, int { struct g_raid_volume *vol; struct g_raid_softc *sc; - int dcr, dcw, dce, opens, error = 0; + int dcw, opens, error = 0; g_topology_assert(); sc = pp->geom->softc; @@ -1618,10 +1618,7 @@ g_raid_access(struct g_provider *pp, int G_RAID_DEBUG1(2, sc, "Access request for %s: r%dw%de%d.", pp->name, acr, acw, ace); - - dcr = pp->acr + acr; dcw = pp->acw + acw; - dce = pp->ace + ace; g_topology_unlock(); sx_xlock(&sc->sc_lock); Modified: projects/graid/head/sys/geom/raid/md_intel.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 15:27:03 2011 (r220207) +++ projects/graid/head/sys/geom/raid/md_intel.c Thu Mar 31 15:52:12 2011 (r220208) @@ -1153,7 +1153,6 @@ g_raid_md_taste_intel(struct g_raid_md_o /* Read metadata from device. */ meta = NULL; - spare = 0; vendor = 0xffff; disk_pos = 0; if (g_access(cp, 1, 0, 0) != 0) Modified: projects/graid/head/sys/geom/raid/md_jmicron.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 15:27:03 2011 (r220207) +++ projects/graid/head/sys/geom/raid/md_jmicron.c Thu Mar 31 15:52:12 2011 (r220208) @@ -831,9 +831,7 @@ g_raid_md_taste_jmicron(struct g_raid_md /* Read metadata from device. */ meta = NULL; - spare = 0; vendor = 0xffff; - disk_pos = 0; if (g_access(cp, 1, 0, 0) != 0) return (G_RAID_MD_TASTE_FAIL); g_topology_unlock(); Modified: projects/graid/head/sys/geom/raid/md_nvidia.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 15:27:03 2011 (r220207) +++ projects/graid/head/sys/geom/raid/md_nvidia.c Thu Mar 31 15:52:12 2011 (r220208) @@ -824,7 +824,7 @@ g_raid_md_taste_nvidia(struct g_raid_md_ struct nvidia_raid_conf *meta; struct g_raid_md_nvidia_perdisk *pd; struct g_geom *geom; - int error, disk_pos, result, spare, len; + int error, result, spare, len; char name[32]; uint16_t vendor; @@ -834,9 +834,7 @@ g_raid_md_taste_nvidia(struct g_raid_md_ /* Read metadata from device. */ meta = NULL; - spare = 0; vendor = 0xffff; - disk_pos = 0; if (g_access(cp, 1, 0, 0) != 0) return (G_RAID_MD_TASTE_FAIL); g_topology_unlock(); @@ -862,16 +860,9 @@ g_raid_md_taste_nvidia(struct g_raid_md_ return (G_RAID_MD_TASTE_FAIL); } - /* Check this disk position in obtained metadata. */ - disk_pos = meta->disk_number; - if (disk_pos == -1) { - G_RAID_DEBUG(1, "NVIDIA disk position not found"); - goto fail1; - } - /* Metadata valid. Print it. */ g_raid_md_nvidia_print(meta); - G_RAID_DEBUG(1, "NVIDIA disk position %d", disk_pos); + G_RAID_DEBUG(1, "NVIDIA disk position %d", meta->disk_number); spare = 0;//(meta->type == NVIDIA_T_SPARE) ? 1 : 0; search: Modified: projects/graid/head/sys/geom/raid/md_promise.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 15:27:03 2011 (r220207) +++ projects/graid/head/sys/geom/raid/md_promise.c Thu Mar 31 15:52:12 2011 (r220208) @@ -1154,12 +1154,10 @@ g_raid_md_event_promise(struct g_raid_md struct g_raid_disk *disk, u_int event) { struct g_raid_softc *sc; - struct g_raid_md_promise_perdisk *pd; sc = md->mdo_softc; if (disk == NULL) return (-1); - pd = (struct g_raid_md_promise_perdisk *)disk->d_md_data; switch (event) { case G_RAID_DISK_E_DISCONNECTED: /* Delete disk. */ Modified: projects/graid/head/sys/geom/raid/md_sii.c ============================================================================== --- projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 15:27:03 2011 (r220207) +++ projects/graid/head/sys/geom/raid/md_sii.c Thu Mar 31 15:52:12 2011 (r220208) @@ -917,9 +917,7 @@ g_raid_md_taste_sii(struct g_raid_md_obj /* Read metadata from device. */ meta = NULL; - spare = 0; vendor = 0xffff; - disk_pos = 0; if (g_access(cp, 1, 0, 0) != 0) return (G_RAID_MD_TASTE_FAIL); g_topology_unlock(); From owner-svn-src-projects@FreeBSD.ORG Thu Mar 31 18:17:16 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EC45E1065670; Thu, 31 Mar 2011 18:17:16 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id C12578FC0A; Thu, 31 Mar 2011 18:17:16 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p2VIHGc5014591; Thu, 31 Mar 2011 18:17:16 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p2VIHGWw014589; Thu, 31 Mar 2011 18:17:16 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201103311817.p2VIHGWw014589@svn.freebsd.org> From: Attilio Rao Date: Thu, 31 Mar 2011 18:17:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220213 - projects/sv/sys/netinet X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 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: Thu, 31 Mar 2011 18:17:17 -0000 Author: attilio Date: Thu Mar 31 18:17:16 2011 New Revision: 220213 URL: http://svn.freebsd.org/changeset/base/220213 Log: Add the CTLFLAG_MPSAFE and fix style for sysctl definitions. Modified: projects/sv/sys/netinet/netdump_client.c Modified: projects/sv/sys/netinet/netdump_client.c ============================================================================== --- projects/sv/sys/netinet/netdump_client.c Thu Mar 31 18:12:04 2011 (r220212) +++ projects/sv/sys/netinet/netdump_client.c Thu Mar 31 18:17:16 2011 (r220213) @@ -235,21 +235,23 @@ sysctl_handle_inaddr(SYSCTL_HANDLER_ARGS return (error); } -SYSCTL_NODE(_net, OID_AUTO, dump, CTLFLAG_RW, 0, "netdump"); -SYSCTL_PROC(_net_dump, OID_AUTO, server, CTLTYPE_STRING|CTLFLAG_RW, &nd_server, - 0, sysctl_handle_inaddr, "A", "dump server"); -SYSCTL_PROC(_net_dump, OID_AUTO, client, CTLTYPE_STRING|CTLFLAG_RW, &nd_client, - 0, sysctl_handle_inaddr, "A", "dump client"); -SYSCTL_PROC(_net_dump, OID_AUTO, gateway, CTLTYPE_STRING|CTLFLAG_RW, &nd_gw, - 0, sysctl_handle_inaddr, "A", "dump default gateway"); -SYSCTL_PROC(_net_dump, OID_AUTO, nic, CTLTYPE_STRING|CTLFLAG_RW, &nd_ifp_str, - 0, sysctl_handle_ifxname, "A", "dumping interface name"); -SYSCTL_INT(_net_dump, OID_AUTO, polls, CTLTYPE_INT|CTLFLAG_RW, &nd_polls, 0, - "times to poll NIC per retry"); -SYSCTL_INT(_net_dump, OID_AUTO, retries, CTLTYPE_INT|CTLFLAG_RW, &nd_retries, 0, - "times to retransmit lost packets"); -SYSCTL_INT(_net_dump, OID_AUTO, enable, CTLTYPE_INT|CTLFLAG_RW, &nd_enable, - 0, "enable network dump"); +SYSCTL_NODE(_net, OID_AUTO, dump, CTLFLAG_RW | CTLFLAG_MPSAFE, 0, "netdump"); +SYSCTL_PROC(_net_dump, OID_AUTO, server, CTLTYPE_STRING | CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_server, 0, sysctl_handle_inaddr, "A", "dump server"); +SYSCTL_PROC(_net_dump, OID_AUTO, client, CTLTYPE_STRING |CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_client, 0, sysctl_handle_inaddr, "A", "dump client"); +SYSCTL_PROC(_net_dump, OID_AUTO, gateway, CTLTYPE_STRING | CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_gw, 0, sysctl_handle_inaddr, "A", + "dump default gateway"); +SYSCTL_PROC(_net_dump, OID_AUTO, nic, CTLTYPE_STRING | CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_ifp_str, 0, sysctl_handle_ifxname, "A", + "dumping interface name"); +SYSCTL_INT(_net_dump, OID_AUTO, polls, CTLTYPE_INT | CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_polls, 0, "times to poll NIC per retry"); +SYSCTL_INT(_net_dump, OID_AUTO, retries, CTLTYPE_INT | CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_retries, 0, "times to retransmit lost packets"); +SYSCTL_INT(_net_dump, OID_AUTO, enable, CTLTYPE_INT | CTLFLAG_RW | + CTLFLAG_MPSAFE, &nd_enable, 0, "enable network dump"); TUNABLE_STR("net.dump.server", nd_server_tun, sizeof(nd_server_tun)); TUNABLE_STR("net.dump.client", nd_client_tun, sizeof(nd_client_tun));