From owner-p4-projects@FreeBSD.ORG Sun Jul 21 09:20:14 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7AE79255; Sun, 21 Jul 2013 09:20:14 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 3AB6F253 for ; Sun, 21 Jul 2013 09:20:14 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) by mx1.freebsd.org (Postfix) with ESMTP id 2B3CADCC for ; Sun, 21 Jul 2013 09:20:14 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6L9KEBb055583 for ; Sun, 21 Jul 2013 09:20:14 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6L9KDTk055580 for perforce@freebsd.org; Sun, 21 Jul 2013 09:20:13 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sun, 21 Jul 2013 09:20:13 GMT Message-Id: <201307210920.r6L9KDTk055580@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231319 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jul 2013 09:20:14 -0000 http://p4web.freebsd.org/@@231319?ac=10 Change 231319 by rwatson@rwatson_cinnamon on 2013/07/21 09:19:59 Assert prior MAC checks for UFS read and write operations only if MAC is compiled into the kernel. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#11 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#11 (text+ko) ==== @@ -438,12 +438,14 @@ int ioflag; vp = ap->a_vp; +#ifdef MAC TESLA_SYSCALL(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0) || previously(mac_vnode_check_readdir(ANY(ptr), vp) == 0)); TESLA_PAGE_FAULT(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0) || previously(mac_vnode_check_readdir(ANY(ptr), vp) == 0)); +#endif uio = ap->a_uio; ioflag = ap->a_ioflag; @@ -666,10 +668,12 @@ int blkoffset, error, flags, ioflag, size, xfersize; vp = ap->a_vp; +#ifdef MAC TESLA_SYSCALL(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); TESLA_PAGE_FAULT(previously(mac_vnode_check_WRITE(ANY(ptr), ANY(ptr), vp) == 0)); +#endif uio = ap->a_uio; ioflag = ap->a_ioflag; From owner-p4-projects@FreeBSD.ORG Sun Jul 21 19:06:51 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B9415751; Sun, 21 Jul 2013 19:06:50 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 7A1D674F for ; Sun, 21 Jul 2013 19:06:50 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) by mx1.freebsd.org (Postfix) with ESMTP id 695DBDBB for ; Sun, 21 Jul 2013 19:06:50 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6LJ6oS9042103 for ; Sun, 21 Jul 2013 19:06:50 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6LJ6ooc042100 for perforce@freebsd.org; Sun, 21 Jul 2013 19:06:50 GMT (envelope-from jonathan@freebsd.org) Date: Sun, 21 Jul 2013 19:06:50 GMT Message-Id: <201307211906.r6LJ6ooc042100@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231325 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jul 2013 19:06:51 -0000 http://p4web.freebsd.org/@@231325?ac=10 Change 231325 by jonathan@jonathan-on-zenith on 2013/07/21 19:06:41 Add __tesla_repeat to kernel version of tesla.h. This requires TESLA commit 892f32 to be useful. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#6 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#6 (text+ko) ==== @@ -72,6 +72,12 @@ #include +#ifdef _KERNEL +#include +#else +#include +#endif + /** * TESLA events can be serialised either with respect to the current thread * or, using explicit synchronisation, the global execution context. @@ -82,6 +88,8 @@ /** A sequence of TESLA events. Can be combined with && or ||. */ struct __tesla_event* __tesla_sequence(__tesla_event*, ...); +/** A sequence of events that repeats. */ +struct __tesla_event* __tesla_repeat(int min, int max, __tesla_event*, ...); /* TESLA events: */ /** Entering a function (with optionally-specified arguments). */ From owner-p4-projects@FreeBSD.ORG Sun Jul 21 19:07:52 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 02C22857; Sun, 21 Jul 2013 19:07:52 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id BA259855 for ; Sun, 21 Jul 2013 19:07:51 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) by mx1.freebsd.org (Postfix) with ESMTP id A9E7CDCE for ; Sun, 21 Jul 2013 19:07:51 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6LJ7plM042184 for ; Sun, 21 Jul 2013 19:07:51 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6LJ7pYC042181 for perforce@freebsd.org; Sun, 21 Jul 2013 19:07:51 GMT (envelope-from jonathan@freebsd.org) Date: Sun, 21 Jul 2013 19:07:51 GMT Message-Id: <201307211907.r6LJ7pYC042181@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231326 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 21 Jul 2013 19:07:52 -0000 http://p4web.freebsd.org/@@231326?ac=10 Change 231326 by jonathan@jonathan-on-zenith on 2013/07/21 19:07:46 Pull in new UPTO definition from TESLA commit 892f32. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla-macros.h#8 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla-macros.h#8 (text+ko) ==== @@ -92,7 +92,7 @@ #define optional(...) __tesla_optional(TIGNORE, __VA_ARGS__) #define ANY_REP INT_MAX #define REPEAT(m, n, ...) __tesla_repeat(m, n, __VA_ARGS__) -#define UPTO(n, ...) __tesla_repeat(0, n, __VA_ARGS__) +#define UPTO(n, ...) __tesla_repeat(1, n, __VA_ARGS__) #define ATLEAST(n, ...) __tesla_repeat(n, ANY_REP, __VA_ARGS__) #define ANY(int_type) __tesla_any(int_type) From owner-p4-projects@FreeBSD.ORG Mon Jul 22 09:34:35 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1A08470D; Mon, 22 Jul 2013 09:34:35 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D0A0670B for ; Mon, 22 Jul 2013 09:34:34 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C09732DCA for ; Mon, 22 Jul 2013 09:34:34 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6M9YYi6073378 for ; Mon, 22 Jul 2013 09:34:34 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6M9YYuA073375 for perforce@freebsd.org; Mon, 22 Jul 2013 09:34:34 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Mon, 22 Jul 2013 09:34:34 GMT Message-Id: <201307220934.r6M9YYuA073375@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231341 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jul 2013 09:34:35 -0000 http://p4web.freebsd.org/@@231341?ac=10 Change 231341 by rwatson@rwatson_cinnamon on 2013/07/22 09:34:25 Add some useful helper macros -- incallstack() provided by Jon Anderson, and TESLA_SYSCALL_{PREVIOUSLY,EVENTUALLY}() that make descriptions of intra-system call events a bit cleaner. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/sys/tesla-kernel.h#5 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/sys/tesla-kernel.h#5 (text+ko) ==== @@ -35,6 +35,8 @@ * FreeBSD kernel-specific TESLA macros. */ +#define incallstack(fn) TSEQUENCE(called(fn), TESLA_ASSERTION_SITE, returned(fn)) + /* * Convenient assertion wrappers for various scopes. */ @@ -47,6 +49,8 @@ extern void syscall(void); #define TESLA_SYSCALL(x) TESLA_WITHIN(syscall, x) #endif +#define TESLA_SYSCALL_PREVIOUSLY(x) TESLA_SYSCALL(previously(x)) +#define TESLA_SYSCALL_EVENTUALLY(x) TESLA_SYSCALL(eventually(x)) /* * XXXRW: Not all architectures have a trap_pfault() function. Can't use From owner-p4-projects@FreeBSD.ORG Mon Jul 22 21:24:29 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D88FDAFD; Mon, 22 Jul 2013 21:24:28 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 80965AFB for ; Mon, 22 Jul 2013 21:24:28 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 700D625B7 for ; Mon, 22 Jul 2013 21:24:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6MLOSEh080135 for ; Mon, 22 Jul 2013 21:24:28 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6MLOSON080132 for perforce@freebsd.org; Mon, 22 Jul 2013 21:24:28 GMT (envelope-from jhb@freebsd.org) Date: Mon, 22 Jul 2013 21:24:28 GMT Message-Id: <201307222124.r6MLOSON080132@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin Subject: PERFORCE change 231353 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jul 2013 21:24:29 -0000 http://p4web.freebsd.org/@@231353?ac=10 Change 231353 by jhb@jhb_jhbbsd on 2013/07/22 21:24:19 WIP changes to move the secbus resource up into the PCI bus layer a bit. Affected files ... .. //depot/projects/pci/sys/dev/pccbb/pccbb_pci.c#9 edit .. //depot/projects/pci/sys/dev/pci/pci.c#45 edit .. //depot/projects/pci/sys/dev/pci/pci_pci.c#43 edit .. //depot/projects/pci/sys/dev/pci/pcib_private.h#27 edit Differences ... ==== //depot/projects/pci/sys/dev/pccbb/pccbb_pci.c#9 (text+ko) ==== @@ -326,8 +326,6 @@ sc->pribus = pcib_get_bus(parent); #if defined(NEW_PCIB) && defined(PCI_RES_BUS) pci_write_config(brdev, PCIR_PRIBUS_2, sc->pribus, 1); - sc->bus.sec_reg = PCIR_SECBUS_2; - sc->bus.sub_reg = PCIR_SUBBUS_2; pcib_setup_secbus(brdev, &sc->bus); #endif SLIST_INIT(&sc->rl); ==== //depot/projects/pci/sys/dev/pci/pci.c#45 (text+ko) ==== @@ -349,6 +349,13 @@ SYSCTL_INT(_hw_pci, OID_AUTO, clear_bars, CTLFLAG_RDTUN, &pci_clear_bars, 0, "Ignore firmware-assigned resources for BARs."); +#if defined(NEW_PCIB) && defined(PCI_RES_BUS) +static int pci_clear_buses; +TUNABLE_INT("hw.pci.clear_buses", &pci_clear_buses); +SYSCTL_INT(_hw_pci, OID_AUTO, clear_buses, CTLFLAG_RDTUN, &pci_clear_buses, 0, + "Ignore firmware-assigned bus numbers."); +#endif + static int pci_has_quirk(uint32_t devid, int quirk) { @@ -3195,6 +3202,134 @@ bus_release_resource(self, SYS_RES_MEMORY, rid, res); } +#if defined(NEW_PCIB) && defined(PCI_RES_BUS) +static void +pci_reserve_secbus(device_t bus, device_t dev, pcicfgregs *cfg, + struct resource_list *rl) +{ + struct resource *res; + u_long start, end, count; + int rid, sec_bus, sec_reg, sub_bus, sub_reg; + + switch (cfg->hdrtype & PCIM_HDRTYPE) { + case PCIM_HDRTYPE_BRIDGE: + sec_reg = PCIR_SECBUS_1; + sub_reg = PCIR_SUBBUS_1; + break; + case PCIM_HDRTYPE_CARDBUS: + sec_reg = PCIR_SECBUS_2; + sub_reg = PCIR_SUBBUS_2; + break; + default: + return; + } + + /* + * If requested, clear secondary bus registers in bridge devices + * to force a complete renumbering rather than reserving the + * existing range. + */ + if (pci_clear_buses) { + PCI_WRITE_CONFIG(bus, dev, sec_reg, 0, 1); + PCI_WRITE_CONFIG(bus, dev, sub_reg, 0, 1); + return; + } + + /* + * If the existing bus range is valid, attempt to reserve it + * from our parent. If this fails for any reason, clear the + * secbus and subbus registers. + * + * XXX: Should we reset sub_bus to sec_bus if it is < sec_bus? + * This would at least preserve the existing sec_bus if it is + * valid. + */ + sec_bus = PCI_READ_CONFIG(bus, dev, sec_reg, 1); + sub_bus = PCI_READ_CONFIG(bus, dev, sub_reg, 1); + if (bootverbose) + printf("\tsecbus=%d, subbus=%d\n", sec_bus, sub_bus); + if (sec_bus > 0 && sub_bus >= sec_bus) { + start = sec_bus; + end = sub_bus; + count = end - start + 1; + + resource_list_add(rl, PCI_RES_BUS, 0, start, end, count); + rid = 0; + res = resource_list_reserve(rl, bus, dev, PCI_RES_BUS, &rid, + start, end, count, 0); + if (res == NULL) { + if (bootverbose) + device_printf(bus, + "pci%d:%d:%d:%d secbus failed to allocate\n", + pci_get_domain(dev), pci_get_bus(dev), + pci_get_slot(dev), pci_get_function(dev)); + resource_list_delete(rl, PCI_RES_BUS, 0); + } + } else + res = NULL; + if (res == NULL) { + PCI_WRITE_CONFIG(bus, dev, sec_reg, 0, 1); + PCI_WRITE_CONFIG(bus, dev, sub_reg, 0, 1); + } +} + +static struct resource * +pci_alloc_secbus(device_t dev, device_t child, int *rid, u_long start, + u_long end, u_long count, u_int flags) +{ + struct pci_devinfo *dinfo; + pcicfgregs *cfg; + struct resource_list *rl; + struct resource *res; + int sec_reg, sub_reg; + + dinfo = device_get_ivars(dev); + cfg = &dinfo->cfg; + rl = &dinfo->resources; + switch (cfg->hdrtype & PCIM_HDRTYPE) { + case PCIM_HDRTYPE_BRIDGE: + sec_reg = PCIR_SECBUS_1; + sub_reg = PCIR_SUBBUS_1; + break; + case PCIM_HDRTYPE_CARDBUS: + sec_reg = PCIR_SECBUS_2; + sub_reg = PCIR_SUBBUS_2; + break; + default: + return (NULL); + } + + /* + * rid 0 is used to request an already reserved range while + * rid 1 is used to request an arbitrary range with a specific + * count. + */ + if (*rid > 1) + return (NULL); + + if (*rid == 1) { + *rid = 0; + resource_list_add(rl, PCI_RES_BUS, *rid, start, end, count); + res = resource_list_reserve(rl, dev, child, PCI_RES_BUS, rid, + start, end, count, flags & ~RF_ACTIVE); + if (res == NULL) { + resource_list_delete(rl, PCI_RES_BUS, *rid); + device_printf(child, "allocating %lu bus%s failed\n", + count, count == 1 ? "" : "es"); + return (NULL); + } + if (bootverbose) + device_printf(child, + "Lazy allocation of %lu bus%s at %lu\n", count, + count == 1 ? "" : "es", rman_get_start(res)); + PCI_WRITE_CONFIG(dev, child, sec_reg, rman_get_start(res), 1); + PCI_WRITE_CONFIG(dev, child, sub_reg, rman_get_end(res), 1); + } + return (resource_list_alloc(rl, dev, child, PCI_RES_BUS, rid, start, + end, count, flags)); +} +#endif + void pci_add_resources(device_t bus, device_t dev, int force, uint32_t prefetchmask) { @@ -3267,6 +3402,14 @@ else if (pci_get_progif(dev) == PCIP_SERIALBUS_USB_UHCI) uhci_early_takeover(dev); } + +#if defined(NEW_PCIB) && defined(PCI_RES_BUS) + /* + * Reserve resources for secondary bus ranges behind bridge + * devices. + */ + pci_reserve_secbus(bus, dev, cfg, rl); +#endif } void @@ -3736,6 +3879,10 @@ retval += resource_list_print_type(rl, "port", SYS_RES_IOPORT, "%#lx"); retval += resource_list_print_type(rl, "mem", SYS_RES_MEMORY, "%#lx"); retval += resource_list_print_type(rl, "irq", SYS_RES_IRQ, "%ld"); +#ifdef PCI_RES_BUS + /* XXX: Maybe? */ + retval += resource_list_print_type(rl, "bus", PCI_RES_BUS, "%ld"); +#endif if (device_get_flags(dev)) retval += printf(" flags %#x", device_get_flags(dev)); @@ -4211,7 +4358,6 @@ { struct pci_devinfo *dinfo = device_get_ivars(child); struct resource_list *rl = &dinfo->resources; - struct resource_list_entry *rle; struct resource *res; struct pci_map *pm; pci_addr_t map, testval; @@ -4284,23 +4430,16 @@ * Allocate enough resource, and then write back the * appropriate BAR for that resource. */ - res = BUS_ALLOC_RESOURCE(device_get_parent(dev), child, type, rid, - start, end, count, flags & ~RF_ACTIVE); + resource_list_add(rl, type, *rid, start, end, count); + res = resource_list_reserve(rl, dev, child, type, rid, start, end, + count, flags & ~RF_ACTIVE); if (res == NULL) { + resource_list_delete(rl, type, *rid); device_printf(child, "%#lx bytes of rid %#x res %d failed (%#lx, %#lx).\n", count, *rid, type, start, end); goto out; } - resource_list_add(rl, type, *rid, start, end, count); - rle = resource_list_find(rl, type, *rid); - if (rle == NULL) - panic("pci_reserve_map: unexpectedly can't find resource."); - rle->res = res; - rle->start = rman_get_start(res); - rle->end = rman_get_end(res); - rle->count = count; - rle->flags = RLE_RESERVED; if (bootverbose) device_printf(child, "Lazy allocation of %#lx bytes rid %#x type %d at %#lx\n", @@ -4334,17 +4473,8 @@ switch (type) { #if defined(NEW_PCIB) && defined(PCI_RES_BUS) case PCI_RES_BUS: - /* - * If rid 0 is not already allocated, create a new - * resource list entry. - */ - if (*rid != 0) - return (NULL); - rle = resource_list_find(rl, type, *rid); - if (rle != NULL && rle->res != NULL) - return (NULL); - resource_list_add(rl, type, *rid, start, end, count); - break; + return (pci_alloc_secbus(dev, child, rid, start, end, count, + flags)); #endif case SYS_RES_IRQ: /* ==== //depot/projects/pci/sys/dev/pci/pci_pci.c#43 (text+ko) ==== @@ -539,6 +539,16 @@ char buf[64]; int error, rid; + switch (pci_read_config(dev, PCIR_HDRTYPE, 1) & PCIM_HDRTYPE) { + case PCIM_HDRTYPE_BRIDGE: + bus->sub_reg = PCIR_SUBBUS_1; + break; + case PCIM_HDRTYPE_CARDBUS: + bus->sub_reg = PCIR_SUBBUS_2; + break; + default: + panic("not a PCI bridge"); + } bus->dev = dev; bus->rman.rm_start = 0; bus->rman.rm_end = PCI_BUSMAX; @@ -550,41 +560,15 @@ panic("Failed to initialize %s bus number rman", device_get_nameunit(dev)); -#if 0 - /* - * XXX: Should we reset subbus to secbus if it is < secbus? - * This would at least preserve the existing secbus if it is - * valid. - */ - if (bus->sub < bus->sec) - bus->sub = bus->sec; -#endif + /* Allocate any existing bus range. */ + rid = 0; + bus->res = bus_alloc_resource_any(dev, PCI_RES_BUS, &rid, 0); - /* - * Allocate a resource for the existing secondary bus number - * range if it is valid. - */ - if (bus->sec != 0 && bus->sub >= bus->sec) { - rid = 0; - bus->res = bus_alloc_resource(dev, PCI_RES_BUS, &rid, bus->sec, - bus->sub, bus->sub - bus->sec + 1, 0); - if (bus->res == NULL) { - if (bootverbose || 1) - device_printf(dev, - "failed to allocate initial secbus range: %u-%u\n", - bus->sec, bus->sub); -#if 0 - /* XXX: Should we clear these on failure? */ - bus->sec = 0; - bus->sub = 0; -#endif - } - /* XXX */ - if (bus->res != NULL) - device_printf(dev, - "allocated initial secbus range %lu-%lu\n", - rman_get_start(bus->res), rman_get_end(bus->res)); - } + /* XXX */ + if (bus->res != NULL) + device_printf(dev, + "allocated initial secbus range %lu-%lu\n", + rman_get_start(bus->res), rman_get_end(bus->res)); /* * If we don't have a valid resource, allocate a fresh resource @@ -600,7 +584,7 @@ * This doesn't use bus_alloc_resource_any() as the * count of 1 is explicit. */ - rid = 0; + rid = 1; bus->res = bus_alloc_resource(dev, PCI_RES_BUS, &rid, 0ul, ~0ul, 1, 0); if (bus->res != NULL) { @@ -610,25 +594,22 @@ device_printf(bus->dev, "allocated initial secbus %lu\n", rman_get_start(bus->res)); - bus->sec = rman_get_start(bus->res); - bus->sub = rman_get_end(bus->res); } else device_printf(bus->dev, "failed to allocate secondary bus number\n"); } /* - * Add the initial resource to the rman and write updated - * secbus and subbus registers. + * Add the initial resource to the rman. */ if (bus->res != NULL) { error = rman_manage_region(&bus->rman, rman_get_start(bus->res), rman_get_end(bus->res)); if (error) panic("Failed to add resource to rman"); + bus->sec = rman_get_start(bus->res); + bus->sub = rman_get_end(bus->res); } - pci_write_config(dev, bus->sec_reg, bus->sec, 1); - pci_write_config(dev, bus->sub_reg, bus->sub, 1); } static struct resource * @@ -637,7 +618,8 @@ { struct resource *res; - res = rman_reserve_resource(&bus->rman, start, end, count, flags, child); + res = rman_reserve_resource(&bus->rman, start, end, count, flags, + child); if (res == NULL) return (NULL); @@ -968,6 +950,8 @@ * Quirk handling. */ switch (pci_get_devid(dev)) { +#if 0 + /* XXX: This is now broken */ case 0x12258086: /* Intel 82454KX/GX (Orion) */ { uint8_t supbus; @@ -979,6 +963,7 @@ } break; } +#endif /* * The i82380FB mobile docking controller is a PCI-PCI bridge, @@ -992,6 +977,7 @@ sc->flags |= PCIB_SUBTRACTIVE; break; +#if !defined(NEW_PCIB) && !defined(PCI_RES_BUS) /* Compaq R3000 BIOS sets wrong subordinate bus number. */ case 0x00dd10de: { @@ -1017,6 +1003,7 @@ } break; } +#endif } if (pci_msi_device_blacklisted(dev)) @@ -1039,8 +1026,6 @@ #ifdef NEW_PCIB #ifdef PCI_RES_BUS - sc->bus.sec_reg = PCIR_SECBUS_1; - sc->bus.sub_reg = PCIR_SUBBUS_1; pcib_setup_secbus(dev, &sc->bus); #endif pcib_probe_windows(sc); ==== //depot/projects/pci/sys/dev/pci/pcib_private.h#27 (text+ko) ==== @@ -91,7 +91,6 @@ struct rman rman; struct resource *res; const char *name; - int sec_reg; int sub_reg; #endif }; From owner-p4-projects@FreeBSD.ORG Mon Jul 22 22:36:47 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D4759FBE; Mon, 22 Jul 2013 22:36:47 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 4FD55FBC for ; Mon, 22 Jul 2013 22:36:47 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 2432D28AA for ; Mon, 22 Jul 2013 22:36:47 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6MMaksv090654 for ; Mon, 22 Jul 2013 22:36:47 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6MMak8d090651 for perforce@freebsd.org; Mon, 22 Jul 2013 22:36:46 GMT (envelope-from brooks@freebsd.org) Date: Mon, 22 Jul 2013 22:36:46 GMT Message-Id: <201307222236.r6MMak8d090651@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231356 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 22 Jul 2013 22:36:48 -0000 http://p4web.freebsd.org/@@231356?ac=10 Change 231356 by brooks@brooks_zenith on 2013/07/22 22:36:32 Make sys/tesla-kernel.h include tesla-macros.h which in turn includes tesla.h. When TESLA is not defined in the pre-processor supress the include of tesla.h and define __tesla_inline_assertion() to a macro that expands to nothing which restores the ability of kernels without options TESLA to build. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/test/tesla_test.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#4 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/vfs_vnops.c#4 edit .. //depot/projects/ctsrd/tesla/src/sys/sys/tesla-kernel.h#6 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#12 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/test/tesla_test.c#3 (text+ko) ==== @@ -35,8 +35,6 @@ #include #include -#include -#include #include /* ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#4 (text+ko) ==== @@ -71,8 +71,6 @@ #include #include -#include -#include #include #ifdef REGRESSION ==== //depot/projects/ctsrd/tesla/src/sys/kern/vfs_vnops.c#4 (text+ko) ==== @@ -75,9 +75,6 @@ #include #include -#include -#include - #include #include #include ==== //depot/projects/ctsrd/tesla/src/sys/sys/tesla-kernel.h#6 (text+ko) ==== @@ -31,6 +31,14 @@ #ifndef _SYS_TESLA_KERNEL_H_ #define _SYS_TESLA_KERNEL_H_ +#ifndef TESLA +/* Cause the include of tesla.h to have no effect */ +#define TESLA_H +#define __tesla_inline_assertion(...) +#endif + +#include + /* * FreeBSD kernel-specific TESLA macros. */ ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#12 (text+ko) ==== @@ -82,8 +82,6 @@ #include -#include -#include #include #include From owner-p4-projects@FreeBSD.ORG Tue Jul 23 00:28:49 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9A6A0264; Tue, 23 Jul 2013 00:28:49 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 48C2E262 for ; Tue, 23 Jul 2013 00:28:49 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 36F6F2C6A for ; Tue, 23 Jul 2013 00:28:49 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6N0SndH007311 for ; Tue, 23 Jul 2013 00:28:49 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6N0Snbh007308 for perforce@freebsd.org; Tue, 23 Jul 2013 00:28:49 GMT (envelope-from jonathan@freebsd.org) Date: Tue, 23 Jul 2013 00:28:49 GMT Message-Id: <201307230028.r6N0Snbh007308@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231357 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 00:28:49 -0000 http://p4web.freebsd.org/@@231357?ac=10 Change 231357 by jonathan@jonathan-on-zenith on 2013/07/23 00:28:45 Pull in latest libtesla parts. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla-macros.h#9 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#7 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_class.c#7 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_debug.c#5 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_internal.h#10 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_notification.c#15 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_store.c#6 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_update.c#11 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla-macros.h#9 (text+ko) ==== @@ -90,17 +90,17 @@ #define tesla_done return (__tesla_automaton_done()) #define optional(...) __tesla_optional(TIGNORE, __VA_ARGS__) -#define ANY_REP INT_MAX +#define ANY_REP __TESLA_INFINITE_REPETITIONS #define REPEAT(m, n, ...) __tesla_repeat(m, n, __VA_ARGS__) #define UPTO(n, ...) __tesla_repeat(1, n, __VA_ARGS__) #define ATLEAST(n, ...) __tesla_repeat(n, ANY_REP, __VA_ARGS__) #define ANY(int_type) __tesla_any(int_type) /** A more programmer-friendly way to write assertions about the past. */ -#define previously(...) TSEQUENCE(__VA_ARGS__, TESLA_ASSERTION_SITE) +#define previously(...) TSEQUENCE(__VA_ARGS__, TESLA_ASSERTION_SITE) /** A more programmer-friendly way to write assertions about the future. */ -#define eventually(...) TSEQUENCE(TESLA_ASSERTION_SITE, __VA_ARGS__) +#define eventually(...) TSEQUENCE(TESLA_ASSERTION_SITE, __VA_ARGS__) /** @} */ ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#7 (text+ko) ==== @@ -66,17 +66,14 @@ __tesla_inline_assertion(const char *filename, int line, int count, __tesla_locality *loc, ...); +#define __TESLA_INFINITE_REPETITIONS INT_MAX + /* Only define the following things if doing TESLA analysis, not compiling. */ #ifdef __TESLA_ANALYSER__ #include - -#ifdef _KERNEL -#include -#else #include -#endif /** * TESLA events can be serialised either with respect to the current thread @@ -89,7 +86,7 @@ struct __tesla_event* __tesla_sequence(__tesla_event*, ...); /** A sequence of events that repeats. */ -struct __tesla_event* __tesla_repeat(int min, int max, __tesla_event*, ...); +struct __tesla_event* __tesla_repeat(int min, int max, ...); /* TESLA events: */ /** Entering a function (with optionally-specified arguments). */ @@ -225,6 +222,7 @@ #define __tesla_strict(...) 0 #define __tesla_conditional(...) 0 +#define __tesla_repeat(...) 0 #endif /* __TESLA_ANALYSER__ */ ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_class.c#7 (text+ko) ==== @@ -33,6 +33,7 @@ */ #include "tesla_internal.h" +#include "tesla_key.h" #ifdef _KERNEL MALLOC_DEFINE(M_TESLA, "tesla", "TESLA internal state"); @@ -119,14 +120,6 @@ } -int -tesla_instance_active(const struct tesla_instance *i) -{ - assert(i != NULL); - - return ((i->ti_state != 0) || (i->ti_key.tk_mask != 0)); -} - int32_t tesla_instance_new(struct tesla_class *tclass, const struct tesla_key *name, ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_debug.c#5 (text+ko) ==== @@ -156,12 +156,23 @@ /* * Debugging paths could be more vulnerable to format string problems * than other code; don't allow when running setuid or setgid. - */ - if (issetugid()) + */ + static int isnotme = -1; + + if (isnotme == -1) + isnotme = issetugid(); + + if (isnotme) return 0; #endif - const char *env = getenv("TESLA_DEBUG"); + static const char *env = (char*)-1; + if (env == (char*)-1) + { + env = getenv("TESLA_DEBUG"); + if (env != 0 && *env == '\0') + env = 0; + } /* If TESLA_DEBUG is not set, we're definitely not debugging. */ if (env == NULL) @@ -246,5 +257,11 @@ print("%s", buffer); } +#else + +#undef tesla_debugging +int32_t +tesla_debugging(const char *name) { return 0; } + #endif /* !NDEBUG */ ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_internal.h#10 (text+ko) ==== @@ -113,7 +113,14 @@ * * @returns 1 if active, 0 if inactive */ -int32_t tesla_instance_active(const struct tesla_instance *i); +static inline int32_t +tesla_instance_active(const struct tesla_instance *i) +{ + assert(i != NULL); + + return ((i->ti_state != 0) || (i->ti_key.tk_mask != 0)); +} + /** Clone an existing instance into a new instance. */ @@ -139,13 +146,6 @@ int32_t tesla_match(struct tesla_class *tclass, const struct tesla_key *key, struct tesla_instance **array, uint32_t *size); -/** - * Check to see if a key matches a pattern. - * - * @returns 1 if @a k matches @a pattern, 0 otherwise - */ -int32_t tesla_key_matches( - const struct tesla_key *pattern, const struct tesla_key *k); /** Actions that can be taken by @ref tesla_update_state. */ @@ -176,9 +176,6 @@ const struct tesla_key*, const struct tesla_transitions*, const struct tesla_transition** trigger); -/** Copy new entries from @a source into @a dest. */ -int32_t tesla_key_union(struct tesla_key *dest, const struct tesla_key *source); - #ifndef __unused #if __has_attribute(unused) @@ -346,16 +343,17 @@ #define error(...) fprintf(stderr, __VA_ARGS__) #endif -#ifndef NDEBUG - -#define __debug - #ifdef _KERNEL #include #else #include #endif +#ifndef NDEBUG + +#define __debug + + /** Are we in (verbose) debug mode? */ int32_t tesla_debugging(const char*); @@ -369,7 +367,9 @@ #define __debug __unused #define DEBUG(...) -int32_t tesla_debugging(const char*) { return 0; } +#define tesla_debugging(...) 0 +#define print_key(...) +#define print_class(...) #endif @@ -407,6 +407,10 @@ char* sprint_transitions(char *buffer, const char *end, const struct tesla_transitions *); +/** Flag indicating whether ev_transition should be called. */ +extern int have_transitions; + /** @} */ + #endif /* TESLA_INTERNAL_H */ ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_notification.c#15 (text+ko) ==== @@ -34,6 +34,12 @@ #define ERROR_BUFFER_LENGTH 1024 +#ifndef NDEBUG +int have_transitions = 1; +#else +int have_transitions = 0; +#endif + /** * The currently-active event handlers. */ @@ -68,6 +74,7 @@ .tem_mask = 1, .tem_handlers = singleton, }; + have_transitions = (tehp->teh_transition != 0); singleton[0] = tehp; event_handlers = &singleton_handler; @@ -79,6 +86,7 @@ tesla_set_event_handlers(struct tesla_event_metahandler *temp) { int error = TESLA_SUCCESS; + int will_have_transitions = 0; if (!temp) return (TESLA_ERROR_EINVAL); @@ -91,8 +99,11 @@ error = check_event_handler(temp->tem_handlers[i]); if (error != TESLA_SUCCESS) return (error); + if (temp->tem_handlers[i]->teh_transition) + will_have_transitions = 1; } + have_transitions = will_have_transitions; event_handlers = temp; return (TESLA_SUCCESS); } @@ -101,21 +112,18 @@ /* * generic event handlers: */ -#define FOREACH_ERROR_HANDLER() \ +#define FOREACH_ERROR_HANDLER(x, ...) \ for (uint32_t i = 0; i < event_handlers->tem_length; i++) \ if (event_handlers->tem_mask & (1 << i)) \ - event_handlers->tem_handlers[i] + if (event_handlers->tem_handlers[i]->x) \ + event_handlers->tem_handlers[i]->x(__VA_ARGS__) -static void -ev_noop() -{ -} void ev_new_instance(struct tesla_class *tcp, struct tesla_instance *tip) { - FOREACH_ERROR_HANDLER()->teh_init(tcp, tip); + FOREACH_ERROR_HANDLER(teh_init, tcp, tip); } void @@ -123,7 +131,7 @@ const struct tesla_transition *ttp) { - FOREACH_ERROR_HANDLER()->teh_transition(tcp, tip, ttp); + FOREACH_ERROR_HANDLER(teh_transition, tcp, tip, ttp); } void @@ -131,7 +139,7 @@ struct tesla_instance *copy, const struct tesla_transition *ttp) { - FOREACH_ERROR_HANDLER()->teh_clone(tcp, orig, copy, ttp); + FOREACH_ERROR_HANDLER(teh_clone, tcp, orig, copy, ttp); } void @@ -139,7 +147,7 @@ const struct tesla_transitions *ttp) { - FOREACH_ERROR_HANDLER()->teh_fail_no_instance(tcp, tkp, ttp); + FOREACH_ERROR_HANDLER(teh_fail_no_instance, tcp, tkp, ttp); } void @@ -147,21 +155,21 @@ const struct tesla_transitions *ttp) { - FOREACH_ERROR_HANDLER()->teh_bad_transition(tcp, tip, ttp); + FOREACH_ERROR_HANDLER(teh_bad_transition, tcp, tip, ttp); } void ev_err(struct tesla_class *tcp, int errno, const char *message) { - FOREACH_ERROR_HANDLER()->teh_err(tcp, errno, message); + FOREACH_ERROR_HANDLER(teh_err, tcp, errno, message); } void ev_accept(struct tesla_class *tcp, struct tesla_instance *tip) { - FOREACH_ERROR_HANDLER()->teh_accept(tcp, tip); + FOREACH_ERROR_HANDLER(teh_accept, tcp, tip); } void @@ -169,7 +177,7 @@ const struct tesla_transitions *ttp) { - FOREACH_ERROR_HANDLER()->teh_ignored(tcp, tkp, ttp); + FOREACH_ERROR_HANDLER(teh_ignored, tcp, tkp, ttp); } @@ -309,14 +317,14 @@ }; static const struct tesla_event_handlers printf_on_failure = { - .teh_init = ev_noop, - .teh_transition = ev_noop, - .teh_clone = ev_noop, + .teh_init = 0, + .teh_transition = 0, + .teh_clone = 0, .teh_fail_no_instance = print_no_instance, .teh_bad_transition = print_bad_transition, .teh_err = print_error, - .teh_accept = ev_noop, - .teh_ignored = ev_noop, + .teh_accept = 0, + .teh_ignored = 0, }; /* @@ -349,14 +357,14 @@ } static const struct tesla_event_handlers failstop_handlers = { - .teh_init = ev_noop, - .teh_transition = ev_noop, - .teh_clone = ev_noop, + .teh_init = 0, + .teh_transition = 0, + .teh_clone = 0, .teh_fail_no_instance = panic_no_instance, .teh_bad_transition = panic_bad_transition, .teh_err = panic_errno, - .teh_accept = ev_noop, - .teh_ignored = ev_noop, + .teh_accept = 0, + .teh_ignored = 0, }; @@ -365,7 +373,9 @@ * either use DTrace or fail-stop if DTrace is not available. */ const static struct tesla_event_handlers* const default_handlers[] = { +#ifndef NDEBUG &printf_handlers, +#endif &printf_on_failure, #if defined(_KERNEL) && defined(KDTRACE_HOOKS) &dtrace_handlers, ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_store.c#6 (text+ko) ==== @@ -61,6 +61,10 @@ tesla_global_store_sysinit, NULL); #endif +#ifndef _KERNEL +__thread tesla_store *cache = NULL; +#endif + int32_t tesla_store_get(enum tesla_context context, uint32_t classes, uint32_t instances, tesla_store* *storep) @@ -78,8 +82,12 @@ #ifdef _KERNEL store = curthread->td_tesla; #else - pthread_key_t key = pthread_key(); - store = pthread_getspecific(key); + pthread_key_t key; + if (!cache) { + key = pthread_key(); + cache = pthread_getspecific(key); + } + store = cache; #endif // Create a new store if we don't already have one. ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_update.c#11 (text+ko) ==== @@ -31,6 +31,7 @@ */ #include "tesla_internal.h" +#include "tesla_key.h" #ifndef _KERNEL #include @@ -72,14 +73,15 @@ PRINT("\n----\n"); struct tesla_store *store; - assert(tesla_store_get(tesla_context, TESLA_MAX_CLASSES, - TESLA_MAX_INSTANCES, &store) == TESLA_SUCCESS); + int ret = tesla_store_get(tesla_context, TESLA_MAX_CLASSES, + TESLA_MAX_INSTANCES, &store); + assert(ret == TESLA_SUCCESS); PRINT("store: 0x%tx\n", (intptr_t) store); struct tesla_class *class; - assert(tesla_class_get(store, class_id, &class, name, description) - == TESLA_SUCCESS); + ret = tesla_class_get(store, class_id, &class, name, description); + assert(ret == TESLA_SUCCESS); print_class(class); @@ -99,13 +101,15 @@ // Iterate over existing instances, figure out what to do with each. int err = TESLA_SUCCESS; - for (uint32_t i = 0; i < class->tc_limit; i++) { + int expected = class->tc_limit - class->tc_free; + for (uint32_t i = 0; expected > 0 && (i < class->tc_limit); i++) { assert(class->tc_instances != NULL); tesla_instance *inst = class->tc_instances + i; const tesla_transition *trigger = NULL; enum tesla_action_t action = tesla_action(inst, pattern, trans, &trigger); + expected -= action == IGNORE ? 0 : 1; switch (action) { case FAIL: @@ -116,7 +120,8 @@ break; case UPDATE: - ev_transition(class, inst, trigger); + if (have_transitions) + ev_transition(class, inst, trigger); inst->ti_state = trigger->to; matched_something = true; From owner-p4-projects@FreeBSD.ORG Tue Jul 23 00:40:01 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9AA593F7; Tue, 23 Jul 2013 00:40:01 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 5D4C13F4 for ; Tue, 23 Jul 2013 00:40:01 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4D9B92CBE for ; Tue, 23 Jul 2013 00:40:01 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6N0e1tf008805 for ; Tue, 23 Jul 2013 00:40:01 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6N0e1jp008798 for perforce@freebsd.org; Tue, 23 Jul 2013 00:40:01 GMT (envelope-from jonathan@freebsd.org) Date: Tue, 23 Jul 2013 00:40:01 GMT Message-Id: <201307230040.r6N0e1jp008798@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231358 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 00:40:01 -0000 http://p4web.freebsd.org/@@231358?ac=10 Change 231358 by jonathan@jonathan-on-zenith on 2013/07/23 00:39:30 Drop tesla_key.c from sys/conf/files; it's now a header to be included and inlined. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/conf/files#10 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/conf/files#10 (text+ko) ==== @@ -492,7 +492,6 @@ contrib/tesla/libtesla/tesla_class_perthread.c optional tesla contrib/tesla/libtesla/tesla_debug.c optional tesla contrib/tesla/libtesla/tesla_dtrace.c optional tesla kdtrace_hooks -contrib/tesla/libtesla/tesla_key.c optional tesla contrib/tesla/libtesla/tesla_notification.c optional tesla contrib/tesla/libtesla/tesla_store.c optional tesla contrib/tesla/libtesla/tesla_update.c optional tesla From owner-p4-projects@FreeBSD.ORG Tue Jul 23 00:41:03 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E445559E; Tue, 23 Jul 2013 00:41:02 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A60B459C for ; Tue, 23 Jul 2013 00:41:02 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 962DB2CD6 for ; Tue, 23 Jul 2013 00:41:02 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6N0f2vM009453 for ; Tue, 23 Jul 2013 00:41:02 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6N0f2ps009450 for perforce@freebsd.org; Tue, 23 Jul 2013 00:41:02 GMT (envelope-from jonathan@freebsd.org) Date: Tue, 23 Jul 2013 00:41:02 GMT Message-Id: <201307230041.r6N0f2ps009450@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231359 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 00:41:03 -0000 http://p4web.freebsd.org/@@231359?ac=10 Change 231359 by jonathan@jonathan-on-zenith on 2013/07/23 00:40:35 Move \#define assert() to above the place where, as of libtesla optimisations, it is now used. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_internal.h#11 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_internal.h#11 (text+ko) ==== @@ -70,6 +70,11 @@ /** Is @a x a subset of @a y? */ #define SUBSET(x,y) ((x & y) == x) +#ifdef _KERNEL +/** Emulate simple POSIX assertions. */ +#define assert(cond) KASSERT((cond), ("Assertion failed: '%s'", #cond)) +#endif + /** * Call this if things go catastrophically, unrecoverably wrong. */ @@ -194,9 +199,6 @@ /** Our @ref tesla_assert has the same signature as @ref KASSERT. */ #define tesla_assert(...) KASSERT(__VA_ARGS__) -/** Emulate simple POSIX assertions. */ -#define assert(cond) KASSERT((cond), ("Assertion failed: '%s'", #cond)) - #define tesla_malloc(len) malloc(len, M_TESLA, M_WAITOK | M_ZERO) #define tesla_free(x) free(x, M_TESLA) From owner-p4-projects@FreeBSD.ORG Tue Jul 23 00:50:12 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C0464759; Tue, 23 Jul 2013 00:50:12 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 832C5757 for ; Tue, 23 Jul 2013 00:50:12 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 72F492D0F for ; Tue, 23 Jul 2013 00:50:12 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6N0oCUg010174 for ; Tue, 23 Jul 2013 00:50:12 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6N0oCS7010171 for perforce@freebsd.org; Tue, 23 Jul 2013 00:50:12 GMT (envelope-from jonathan@freebsd.org) Date: Tue, 23 Jul 2013 00:50:12 GMT Message-Id: <201307230050.r6N0oCS7010171@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231360 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 00:50:13 -0000 http://p4web.freebsd.org/@@231360?ac=10 Change 231360 by jonathan@jonathan-on-zenith on 2013/07/23 00:49:20 Use sys/limits.h in the kernel, not limits.h. This has a feeling of deja vu; I've definitely made a change like this in the past day or two. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#8 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#8 (text+ko) ==== @@ -73,7 +73,11 @@ #ifdef __TESLA_ANALYSER__ #include +#ifdef _KERNEL +#include +#else #include +#endif /** * TESLA events can be serialised either with respect to the current thread From owner-p4-projects@FreeBSD.ORG Tue Jul 23 07:06:01 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 08A819CB; Tue, 23 Jul 2013 07:06:01 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id B73F39C9 for ; Tue, 23 Jul 2013 07:06:00 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8CC142AE1 for ; Tue, 23 Jul 2013 07:06:00 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6N760rx066952 for ; Tue, 23 Jul 2013 07:06:00 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6N75xGB066949 for perforce@freebsd.org; Tue, 23 Jul 2013 07:05:59 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 23 Jul 2013 07:05:59 GMT Message-Id: <201307230705.r6N75xGB066949@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231364 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 07:06:01 -0000 http://p4web.freebsd.org/@@231364?ac=10 Change 231364 by rwatson@rwatson_cinnamon on 2013/07/23 07:05:28 Merge tesla_key.h to the kernel, possibly omitted in prior import. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_key.h#1 add Differences ... From owner-p4-projects@FreeBSD.ORG Tue Jul 23 07:10:05 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1ABD3C79; Tue, 23 Jul 2013 07:10:05 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id D0E71C77 for ; Tue, 23 Jul 2013 07:10:04 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id A69742B0C for ; Tue, 23 Jul 2013 07:10:04 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6N7A4iS067297 for ; Tue, 23 Jul 2013 07:10:04 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6N7A4l7067294 for perforce@freebsd.org; Tue, 23 Jul 2013 07:10:04 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 23 Jul 2013 07:10:04 GMT Message-Id: <201307230710.r6N7A4l7067294@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231365 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 07:10:05 -0000 http://p4web.freebsd.org/@@231365?ac=10 Change 231365 by rwatson@rwatson_cinnamon on 2013/07/23 07:09:28 Remove unneeded tesla_key.c. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_key.c#5 delete Differences ... From owner-p4-projects@FreeBSD.ORG Tue Jul 23 13:09:34 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DD073B4F; Tue, 23 Jul 2013 13:09:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id A0168B4D for ; Tue, 23 Jul 2013 13:09:33 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8F9EC2D9A for ; Tue, 23 Jul 2013 13:09:33 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6ND9XGh022783 for ; Tue, 23 Jul 2013 13:09:33 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6ND9XSJ022780 for perforce@freebsd.org; Tue, 23 Jul 2013 13:09:33 GMT (envelope-from jhb@freebsd.org) Date: Tue, 23 Jul 2013 13:09:33 GMT Message-Id: <201307231309.r6ND9XSJ022780@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin Subject: PERFORCE change 231370 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 13:09:34 -0000 http://p4web.freebsd.org/@@231370?ac=10 Change 231370 by jhb@jhb_pippin on 2013/07/23 13:09:33 - Get correct ivars. - Debug. Affected files ... .. //depot/projects/pci/sys/dev/pci/pci.c#46 edit Differences ... ==== //depot/projects/pci/sys/dev/pci/pci.c#46 (text+ko) ==== @@ -3246,7 +3246,7 @@ */ sec_bus = PCI_READ_CONFIG(bus, dev, sec_reg, 1); sub_bus = PCI_READ_CONFIG(bus, dev, sub_reg, 1); - if (bootverbose) + if (bootverbose || 1) printf("\tsecbus=%d, subbus=%d\n", sec_bus, sub_bus); if (sec_bus > 0 && sub_bus >= sec_bus) { start = sec_bus; @@ -3258,13 +3258,15 @@ res = resource_list_reserve(rl, bus, dev, PCI_RES_BUS, &rid, start, end, count, 0); if (res == NULL) { - if (bootverbose) + if (bootverbose || 1) device_printf(bus, "pci%d:%d:%d:%d secbus failed to allocate\n", pci_get_domain(dev), pci_get_bus(dev), pci_get_slot(dev), pci_get_function(dev)); resource_list_delete(rl, PCI_RES_BUS, 0); - } + } else + /* XXX */ + pci_printf(cfg, "allocated initial secbus range\n"); } else res = NULL; if (res == NULL) { @@ -3283,7 +3285,7 @@ struct resource *res; int sec_reg, sub_reg; - dinfo = device_get_ivars(dev); + dinfo = device_get_ivars(child); cfg = &dinfo->cfg; rl = &dinfo->resources; switch (cfg->hdrtype & PCIM_HDRTYPE) { From owner-p4-projects@FreeBSD.ORG Tue Jul 23 17:57:48 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6860447A; Tue, 23 Jul 2013 17:57:48 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id AB4AC478 for ; Tue, 23 Jul 2013 17:57:47 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 984502C37 for ; Tue, 23 Jul 2013 17:57:47 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6NHvllW068100 for ; Tue, 23 Jul 2013 17:57:47 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6NHvlqu068097 for perforce@freebsd.org; Tue, 23 Jul 2013 17:57:47 GMT (envelope-from jhb@freebsd.org) Date: Tue, 23 Jul 2013 17:57:47 GMT Message-Id: <201307231757.r6NHvlqu068097@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin Subject: PERFORCE change 231377 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 17:57:48 -0000 http://p4web.freebsd.org/@@231377?ac=10 Change 231377 by jhb@jhb_pippin on 2013/07/23 17:57:07 qpi(4) has to learn about bus numbers, too. Affected files ... .. //depot/projects/pci/sys/x86/include/legacyvar.h#3 edit .. //depot/projects/pci/sys/x86/pci/pci_bus.c#5 edit .. //depot/projects/pci/sys/x86/pci/qpi.c#6 edit Differences ... ==== //depot/projects/pci/sys/x86/include/legacyvar.h#3 (text+ko) ==== @@ -57,6 +57,8 @@ uintptr_t value); struct resource *legacy_pcib_alloc_resource(device_t dev, device_t child, int type, int *rid, u_long start, u_long end, u_long count, u_int flags); +int legacy_pcib_adjust_resource(device_t dev, device_t child, int type, + struct resource *r, u_long start, u_long end); int legacy_pcib_release_resource(device_t dev, device_t child, int type, int rid, struct resource *r); int legacy_pcib_map_msi(device_t pcib, device_t dev, int irq, ==== //depot/projects/pci/sys/x86/pci/pci_bus.c#5 (text+ko) ==== @@ -608,7 +608,7 @@ } #if defined(NEW_PCIB) && defined(PCI_RES_BUS) -static int +int legacy_pcib_adjust_resource(device_t dev, device_t child, int type, struct resource *r, u_long start, u_long end) { ==== //depot/projects/pci/sys/x86/pci/qpi.c#6 (text+ko) ==== @@ -45,8 +45,9 @@ #include #include -#include -#include +#include +#include +#include #include #include @@ -237,22 +238,20 @@ } } -static uint32_t -qpi_pcib_read_config(device_t dev, u_int bus, u_int slot, u_int func, - u_int reg, int bytes) +#if defined(NEW_PCIB) && defined(PCI_RES_BUS) +static struct resource * +qpi_pcib_alloc_resource(device_t dev, device_t child, int type, int *rid, + u_long start, u_long end, u_long count, u_int flags) { - return (pci_cfgregread(bus, slot, func, reg, bytes)); + if (type == PCI_RES_BUS) + return (pci_domain_alloc_bus(0, child, rid, start, end, count, + flags)); + return (bus_generic_alloc_resource(dev, child, type, rid, start, end, + count, flags)); } +#endif -static void -qpi_pcib_write_config(device_t dev, u_int bus, u_int slot, u_int func, - u_int reg, uint32_t data, int bytes) -{ - - pci_cfgregwrite(bus, slot, func, reg, data, bytes); -} - static int qpi_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs) @@ -293,8 +292,14 @@ /* Bus interface */ DEVMETHOD(bus_read_ivar, qpi_pcib_read_ivar), +#if defined(NEW_PCIB) && defined(PCI_RES_BUS) + DEVMETHOD(bus_alloc_resource, qpi_pcib_alloc_resource), + DEVMETHOD(bus_adjust_resource, legacy_pcib_adjust_resource), + DEVMETHOD(bus_release_resource, legacy_pcib_release_resource), +#else DEVMETHOD(bus_alloc_resource, bus_generic_alloc_resource), DEVMETHOD(bus_release_resource, bus_generic_release_resource), +#endif DEVMETHOD(bus_activate_resource, bus_generic_activate_resource), DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource), DEVMETHOD(bus_setup_intr, bus_generic_setup_intr), @@ -302,8 +307,8 @@ /* pcib interface */ DEVMETHOD(pcib_maxslots, pcib_maxslots), - DEVMETHOD(pcib_read_config, qpi_pcib_read_config), - DEVMETHOD(pcib_write_config, qpi_pcib_write_config), + DEVMETHOD(pcib_read_config, legacy_pcib_read_config), + DEVMETHOD(pcib_write_config, legacy_pcib_write_config), DEVMETHOD(pcib_alloc_msi, qpi_pcib_alloc_msi), DEVMETHOD(pcib_release_msi, pcib_release_msi), DEVMETHOD(pcib_alloc_msix, qpi_pcib_alloc_msix), From owner-p4-projects@FreeBSD.ORG Tue Jul 23 19:02:58 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id ADBA6A71; Tue, 23 Jul 2013 19:02:58 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 28A21A6F for ; Tue, 23 Jul 2013 19:02:58 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 189FA2F7E for ; Tue, 23 Jul 2013 19:02:58 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6NJ2vsp078003 for ; Tue, 23 Jul 2013 19:02:57 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6NJ2vde078000 for perforce@freebsd.org; Tue, 23 Jul 2013 19:02:57 GMT (envelope-from brooks@freebsd.org) Date: Tue, 23 Jul 2013 19:02:57 GMT Message-Id: <201307231902.r6NJ2vde078000@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231379 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 19:02:59 -0000 http://p4web.freebsd.org/@@231379?ac=10 Change 231379 by brooks@brooks_zenith on 2013/07/23 19:02:54 Merge change 6b5c4c2: Declare the cache global variable static to make clang happy at high warning levels. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_store.c#7 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/libtesla/tesla_store.c#7 (text+ko) ==== @@ -62,7 +62,7 @@ #endif #ifndef _KERNEL -__thread tesla_store *cache = NULL; +static __thread tesla_store *cache = NULL; #endif int32_t From owner-p4-projects@FreeBSD.ORG Tue Jul 23 19:03:59 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9AAD3BB9; Tue, 23 Jul 2013 19:03:59 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 5AF17BB7 for ; Tue, 23 Jul 2013 19:03:59 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4A8F42F9C for ; Tue, 23 Jul 2013 19:03:59 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6NJ3xo7078086 for ; Tue, 23 Jul 2013 19:03:59 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6NJ3xn6078083 for perforce@freebsd.org; Tue, 23 Jul 2013 19:03:59 GMT (envelope-from brooks@freebsd.org) Date: Tue, 23 Jul 2013 19:03:59 GMT Message-Id: <201307231903.r6NJ3xn6078083@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231380 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 19:04:00 -0000 http://p4web.freebsd.org/@@231380?ac=10 Change 231380 by brooks@brooks_zenith on 2013/07/23 19:03:24 tesla_key.c is now an internal header tesla_key.h. Affected files ... .. //depot/projects/ctsrd/tesla/src/lib/libtesla/Makefile#7 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/lib/libtesla/Makefile#7 (text+ko) ==== @@ -11,7 +11,7 @@ INCS= tesla.h libtesla.h SRCS= tesla_class.c tesla_class_global.c tesla_class_perthread.c \ - tesla_debug.c tesla_dtrace.c tesla_key.c tesla_notification.c \ + tesla_debug.c tesla_dtrace.c tesla_notification.c \ tesla_store.c tesla_update.c tesla_util.c .include From owner-p4-projects@FreeBSD.ORG Tue Jul 23 20:43:49 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D753F817; Tue, 23 Jul 2013 20:43:48 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 89F42815 for ; Tue, 23 Jul 2013 20:43:48 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 77DA32410 for ; Tue, 23 Jul 2013 20:43:48 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6NKhmtQ093543 for ; Tue, 23 Jul 2013 20:43:48 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6NKhlMG093540 for perforce@freebsd.org; Tue, 23 Jul 2013 20:43:47 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 23 Jul 2013 20:43:47 GMT Message-Id: <201307232043.r6NKhlMG093540@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231382 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 20:43:49 -0000 http://p4web.freebsd.org/@@231382?ac=10 Change 231382 by rwatson@rwatson_cinnamon on 2013/07/23 20:43:26 Add 70-80 new TESLA assertions relating to MAC, process access-control, and sysctl privilege checking. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ctl.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ioctl.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_note.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_osrel.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_rlimit.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_status.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_type.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_cpuset.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_mib.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#5 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/ksched.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/sys_process.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/uipc_socket.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/modules/Makefile#4 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_cred.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_pipe.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_process.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_socket.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_vfs.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/sys/tesla-kernel.h#7 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#13 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_acl.c#2 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_lookup.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#3 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs.c#2 (text+ko) ==== @@ -54,6 +54,8 @@ #include #include +#include + #include #include #include @@ -72,6 +74,8 @@ struct vnode *textvp; int error; + TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), p) == 0); + freepath = NULL; PROC_LOCK(p); textvp = p->p_textvp; ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ctl.c#2 (text+ko) ==== @@ -46,6 +46,7 @@ #include #include #include +#include #include #include @@ -312,6 +313,8 @@ int error; struct namemap *nm; + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + if (uio == NULL || uio->uio_rw != UIO_WRITE) return (EOPNOTSUPP); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ioctl.c#2 (text+ko) ==== @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -70,6 +71,8 @@ int ival; #endif + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + KASSERT(p != NULL, ("%s() called without a process", __func__)); PROC_LOCK_ASSERT(p, MA_OWNED); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_note.c#2 (text+ko) ==== @@ -39,13 +39,20 @@ #include #include #include +#include #include #include +/* Required for TESLA assertion. */ +#include + int procfs_doprocnote(PFS_FILL_ARGS) { + + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + sbuf_trim(sb); sbuf_finish(sb); /* send to process's notify function */ ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_osrel.c#2 (text+ko) ==== @@ -34,6 +34,7 @@ #include #include #include +#include #include #include @@ -44,6 +45,8 @@ const char *pp; int ov, osrel, i; + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + if (uio == NULL) return (EOPNOTSUPP); if (uio->uio_rw == UIO_READ) { ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_rlimit.c#2 (text+ko) ==== @@ -55,6 +55,7 @@ #include #include #include +#include #include #include @@ -66,6 +67,8 @@ struct plimit *limp; int i; + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + /* * Obtain a private reference to resource limits */ ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_status.c#2 (text+ko) ==== @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -73,6 +74,8 @@ int pid, ppid, pgid, sid; int i; + TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), p) == 0); + pid = p->p_pid; PROC_LOCK(p); ppid = p->p_pptr ? p->p_pptr->p_pid : 0; ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_type.c#2 (text+ko) ==== @@ -38,6 +38,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,8 @@ { static const char *none = "Not Available"; + TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), p) == 0); + if (p != NULL && p->p_sysent && p->p_sysent->sv_name) sbuf_printf(sb, "%s", p->p_sysent->sv_name); else ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_cpuset.c#2 (text+ko) ==== @@ -54,6 +54,7 @@ #include #include #include +#include #include @@ -538,6 +539,8 @@ } } PROC_LOCK_ASSERT(p, MA_OWNED); + TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), p) == 0); + /* * Now that the appropriate locks are held and we have enough cpusets, * make sure the operation will succeed before applying changes. The @@ -713,6 +716,9 @@ error = cpuset_which(CPU_WHICH_TID, id, &p, &td, &set); if (error) goto out; + + TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), p) == 0); + set = NULL; thread_lock(td); error = cpuset_shadow(td->td_cpuset, nset, mask); ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_mib.c#2 (text+ko) ==== @@ -53,8 +53,12 @@ #include #include #include +#include #include +/* Required for TESLA assertion. */ +#include + SYSCTL_NODE(, 0, sysctl, CTLFLAG_RW, 0, "Sysctl internal magic"); SYSCTL_NODE(, CTL_KERN, kern, CTLFLAG_RW|CTLFLAG_CAPRD, 0, @@ -292,6 +296,9 @@ error = sysctl_handle_string(oidp, tmpname, len, req); if (req->newptr != NULL && error == 0) { + TESLA_SYSCALL_PREVIOUSLY(priv_check(req->td, + PRIV_SYSCTL_WRITEJAIL) == 0); + /* * Copy the locally set hostname to all jails that share * this host info. @@ -349,6 +356,10 @@ error = sysctl_handle_int(oidp, &level, 0, req); if (error || !req->newptr) return (error); + + TESLA_SYSCALL_PREVIOUSLY(priv_check(req->td, PRIV_SYSCTL_WRITEJAIL) == + 0); + /* Permit update only if the new securelevel exceeds the old. */ sx_slock(&allprison_lock); mtx_lock(&pr->pr_mtx); ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#5 (text+ko) ==== ==== //depot/projects/ctsrd/tesla/src/sys/kern/ksched.c#2 (text+ko) ==== @@ -48,6 +48,7 @@ #include #include #include +#include FEATURE(kposix_priority_scheduling, "POSIX P1003.1B realtime extensions"); @@ -136,6 +137,8 @@ int policy; int e; + TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), td->td_proc) == 0); + e = getscheduler(ksched, td, &policy); if (e == 0) @@ -152,6 +155,8 @@ { struct rtprio rtp; + TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), td->td_proc) == 0); + pri_to_rtp(td, &rtp); if (RTP_PRIO_IS_REALTIME(rtp.type)) param->sched_priority = rtpprio_to_p4prio(rtp.prio); @@ -182,6 +187,8 @@ int e = 0; struct rtprio rtp; + TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), td->td_proc) == 0); + switch(policy) { case SCHED_RR: @@ -224,6 +231,9 @@ int ksched_getscheduler(struct ksched *ksched, struct thread *td, int *policy) { + + TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), td->td_proc) == 0); + return getscheduler(ksched, td, policy); } @@ -286,6 +296,9 @@ ksched_rr_get_interval(struct ksched *ksched, struct thread *td, struct timespec *timespec) { + + TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), td->td_proc) == 0); + *timespec = ksched->rr_interval; return 0; ==== //depot/projects/ctsrd/tesla/src/sys/kern/sys_process.c#3 (text+ko) ==== @@ -48,6 +48,7 @@ #include #include #include +#include #include @@ -140,6 +141,8 @@ proc_read_regs(struct thread *td, struct reg *regs) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(fill_regs(td, regs)); } @@ -147,6 +150,8 @@ proc_write_regs(struct thread *td, struct reg *regs) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(set_regs(td, regs)); } @@ -154,6 +159,8 @@ proc_read_dbregs(struct thread *td, struct dbreg *dbregs) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(fill_dbregs(td, dbregs)); } @@ -161,6 +168,8 @@ proc_write_dbregs(struct thread *td, struct dbreg *dbregs) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(set_dbregs(td, dbregs)); } @@ -172,6 +181,8 @@ proc_read_fpregs(struct thread *td, struct fpreg *fpregs) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(fill_fpregs(td, fpregs)); } @@ -179,6 +190,8 @@ proc_write_fpregs(struct thread *td, struct fpreg *fpregs) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(set_fpregs(td, fpregs)); } @@ -188,6 +201,8 @@ proc_read_regs32(struct thread *td, struct reg32 *regs32) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(fill_regs32(td, regs32)); } @@ -195,6 +210,8 @@ proc_write_regs32(struct thread *td, struct reg32 *regs32) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(set_regs32(td, regs32)); } @@ -202,6 +219,8 @@ proc_read_dbregs32(struct thread *td, struct dbreg32 *dbregs32) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(fill_dbregs32(td, dbregs32)); } @@ -209,6 +228,8 @@ proc_write_dbregs32(struct thread *td, struct dbreg32 *dbregs32) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(set_dbregs32(td, dbregs32)); } @@ -216,6 +237,8 @@ proc_read_fpregs32(struct thread *td, struct fpreg32 *fpregs32) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(fill_fpregs32(td, fpregs32)); } @@ -223,6 +246,8 @@ proc_write_fpregs32(struct thread *td, struct fpreg32 *fpregs32) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(set_fpregs32(td, fpregs32)); } #endif @@ -231,6 +256,8 @@ proc_sstep(struct thread *td) { + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); + PROC_ACTION(ptrace_single_step(td)); } @@ -242,6 +269,8 @@ vm_prot_t reqprot; int error, fault_flags, page_offset, writing; + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + /* * Assert that someone has locked this vmspace. (Should be * curthread but we can't assert that.) This keeps the process @@ -337,6 +366,8 @@ u_int pathlen; int error, index; + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + error = 0; obj = NULL; @@ -443,6 +474,8 @@ struct ptrace_vm_entry pve; int error; + TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); + pve.pve_entry = pve32->pve_entry; pve.pve_pathlen = pve32->pve_pathlen; pve.pve_path = (void *)(uintptr_t)pve32->pve_path; ==== //depot/projects/ctsrd/tesla/src/sys/kern/uipc_socket.c#3 (text+ko) ==== @@ -136,6 +136,8 @@ #include #include #include +#include + #include #include @@ -422,6 +424,11 @@ struct socket *so; int error; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_create(cred, dom, type, + proto) == 0); +#endif + if (proto) prp = pffindproto(dom, proto, type); else @@ -617,6 +624,11 @@ { int error; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_bind(ANY(ptr), so, nam) == + 0); +#endif + CURVNET_SET(so->so_vnet); error = (*so->so_proto->pr_usrreqs->pru_bind)(so, nam, td); CURVNET_RESTORE(); @@ -628,6 +640,11 @@ { int error; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_bind(ANY(ptr), so, nam) == + 0); +#endif + CURVNET_SET(so->so_vnet); error = (*so->so_proto->pr_usrreqs->pru_bindat)(fd, so, nam, td); CURVNET_RESTORE(); @@ -651,6 +668,10 @@ { int error; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_listen(ANY(ptr), so) == 0); +#endif + CURVNET_SET(so->so_vnet); error = (*so->so_proto->pr_usrreqs->pru_listen)(so, backlog, td); CURVNET_RESTORE(); @@ -898,6 +919,12 @@ { int error; +#ifdef MAC + /* Access-control check is on head rather than so. */ + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_accept(ANY(ptr), ANY(ptr)) == + 0); +#endif + SOCK_LOCK(so); KASSERT((so->so_state & SS_NOFDREF) != 0, ("soaccept: !NOFDREF")); so->so_state &= ~SS_NOFDREF; @@ -913,6 +940,11 @@ soconnect(struct socket *so, struct sockaddr *nam, struct thread *td) { +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_connect(td->td_ucred, so, + nam) == 0); +#endif + return (soconnectat(AT_FDCWD, so, nam, td)); } @@ -1450,6 +1482,10 @@ { int error; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_send(ANY(ptr), so) == 0); +#endif + CURVNET_SET(so->so_vnet); error = so->so_proto->pr_usrreqs->pru_sosend(so, addr, uio, top, control, flags, td); @@ -2406,6 +2442,10 @@ { int error; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_receive(ANY(ptr), so) == 0); +#endif + CURVNET_SET(so->so_vnet); error = (so->so_proto->pr_usrreqs->pru_soreceive(so, psa, uio, mp0, controlp, flagsp)); @@ -3079,6 +3119,14 @@ { int revents = 0; +#ifdef MAC + /* + * XXXRW: Should be active_cred but actually fp->f_cred is getting + * passed down the stack, so the wrong cred here! + */ + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_poll(ANY(ptr), so) == 0); +#endif + SOCKBUF_LOCK(&so->so_snd); SOCKBUF_LOCK(&so->so_rcv); if (events & (POLLIN | POLLRDNORM)) @@ -3124,6 +3172,10 @@ struct socket *so = kn->kn_fp->f_data; struct sockbuf *sb; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_poll(ANY(ptr), so) == 0); +#endif + switch (kn->kn_filter) { case EVFILT_READ: if (so->so_options & SO_ACCEPTCONN) ==== //depot/projects/ctsrd/tesla/src/sys/modules/Makefile#4 (text+ko) ==== @@ -261,7 +261,6 @@ ppc \ ppi \ pps \ - procfs \ pseudofs \ ${_pst} \ pty \ @@ -359,6 +358,10 @@ ${_zfs} \ zlib \ +# XXXRW: Temporarily disable procfs build for TESLA, as the module contains +# assertions which don't build as a module. +# procfs \ + .if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64" _filemon= filemon .endif ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_cred.c#2 (text+ko) ==== @@ -66,6 +66,7 @@ #include #include #include +#include #include #include @@ -195,6 +196,9 @@ mac_cred_relabel(struct ucred *cred, struct label *newlabel) { + TESLA_SYSCALL(previously(mac_cred_check_relabel(cred, newlabel) == + 0)); + MAC_POLICY_PERFORM_NOSLEEP(cred_relabel, cred, newlabel); } ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_pipe.c#2 (text+ko) ==== @@ -55,11 +55,16 @@ #include #include #include +#include #include #include #include +/* Forward declaration for TESLA. */ +static int mac_pipe_check_relabel(struct ucred *cred, struct pipepair *pp, + struct label *newlabel); + struct label * mac_pipe_label_alloc(void) { @@ -138,6 +143,9 @@ struct label *newlabel) { + TESLA_SYSCALL_PREVIOUSLY(mac_pipe_check_relabel(cred, pp, newlabel) + == 0); + MAC_POLICY_PERFORM_NOSLEEP(pipe_relabel, cred, pp, pp->pp_label, newlabel); } ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_process.c#3 (text+ko) ==== @@ -65,6 +65,7 @@ #include #include #include +#include #include #include @@ -170,12 +171,18 @@ return (error); } imgp->execlabel = label; + + TESLA_SYSCALL_EVENTUALLY(called(mac_execve_exit)); + return (0); } void mac_execve_exit(struct image_params *imgp) { + + TESLA_SYSCALL_PREVIOUSLY(called(mac_execve_enter(imgp, ANY(ptr)))); + if (imgp->execlabel != NULL) { mac_cred_label_free(imgp->execlabel); imgp->execlabel = NULL; @@ -192,14 +199,21 @@ mac_vnode_copy_label(interpvp->v_label, *interpvplabel); } else *interpvplabel = NULL; + + TESLA_SYSCALL_EVENTUALLY(called(mac_execve_interpreter_exit)); } void mac_execve_interpreter_exit(struct label *interpvplabel) { - if (interpvplabel != NULL) + if (interpvplabel != NULL) { + /* Awkwardly, _exit() may be called even if _enter() wasn't. */ + TESLA_SYSCALL_PREVIOUSLY(called( + mac_execve_interpreter_enter(ANY(ptr), ANY(ptr)))); + mac_vnode_label_free(interpvplabel); + } } /* ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_socket.c#2 (text+ko) ==== @@ -64,6 +64,7 @@ #include #include #include +#include #include #include @@ -77,6 +78,10 @@ #include #include +/* Definition required for TESLA assertion. */ +static int mac_socket_check_relabel(struct ucred *cred, struct socket *so, + struct label *newlabel); + /* * Currently, sockets hold two labels: the label of the socket itself, and a * peer label, which may be used by policies to hold a copy of the label of @@ -253,6 +258,9 @@ struct label *newlabel) { + TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_relabel(cred, so, newlabel) + == 0); + SOCK_LOCK_ASSERT(so); MAC_POLICY_PERFORM_NOSLEEP(socket_relabel, cred, so, so->so_label, ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_vfs.c#2 (text+ko) ==== @@ -65,6 +65,7 @@ #include #include #include +#include #include #include @@ -948,6 +949,9 @@ struct label *newlabel) { + TESLA_SYSCALL(previously(mac_vnode_check_relabel(cred, vp, newlabel) + == 0)); + MAC_POLICY_PERFORM(vnode_relabel, cred, vp, vp->v_label, newlabel); } ==== //depot/projects/ctsrd/tesla/src/sys/sys/tesla-kernel.h#7 (text+ko) ==== @@ -45,6 +45,11 @@ #define incallstack(fn) TSEQUENCE(called(fn), TESLA_ASSERTION_SITE, returned(fn)) +#if 0 +/* XXXRW: This doesn't yet work. */ +struct timespec __tesla_any_timespec(); +#endif + /* * Convenient assertion wrappers for various scopes. */ ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#13 (text+ko) ==== @@ -77,13 +77,12 @@ #include #include #include +#include #include #include #include -#include - #include #include #include @@ -92,6 +91,10 @@ #include #include +/* Required for TESLA assertion. */ +struct inode; +#include + #include #include #include @@ -437,12 +440,10 @@ vp = ap->a_vp; #ifdef MAC - TESLA_SYSCALL(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) - == 0) || - previously(mac_vnode_check_readdir(ANY(ptr), vp) == 0)); - TESLA_PAGE_FAULT(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), - vp) == 0) || - previously(mac_vnode_check_readdir(ANY(ptr), vp) == 0)); + TESLA_SYSCALL(incallstack(ufs_readdir) || + previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); + TESLA_PAGE_FAULT(incallstack(ufs_readdir) || + previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); #endif uio = ap->a_uio; @@ -1482,6 +1483,12 @@ int ealen, olen, eapad1, eapad2, error, i, easize; u_char *eae, *p; +#ifdef MAC + TESLA_SYSCALL(incallstack(ufs_setacl) || + previously(mac_vnode_check_deleteextattr(ANY(ptr), ap->a_vp, + ap->a_attrnamespace, ap->a_name) == 0)); +#endif + ip = VTOI(ap->a_vp); fs = ip->i_fs; @@ -1569,6 +1576,12 @@ unsigned easize; int error, ealen; +#ifdef MAC + TESLA_SYSCALL(incallstack(ufs_getacl) || + previously(mac_vnode_check_getextattr(ANY(ptr), ap->a_vp, + ap->a_attrnamespace, ap->a_name) == 0)); +#endif + ip = VTOI(ap->a_vp); fs = ip->i_fs; @@ -1625,6 +1638,11 @@ uint32_t ul; int error, ealen; +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_listextattr(ANY(ptr), + ap->a_vp, ap->a_attrnamespace) == 0); +#endif + ip = VTOI(ap->a_vp); fs = ip->i_fs; @@ -1689,6 +1707,12 @@ int olen, eapad1, eapad2, error, i, easize; u_char *eae, *p; +#ifdef MAC + TESLA_SYSCALL(incallstack(ufs_setacl) || + mac_vnode_check_setextattr(ANY(ptr), ap->a_vp, + ap->a_attrnamespace, ap->a_name) == 0); +#endif + ip = VTOI(ap->a_vp); fs = ip->i_fs; ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_acl.c#2 (text+ko) ==== @@ -45,7 +45,11 @@ #include #include #include +#include +/* Required for TESLA assertion. */ +#include + #include #include #include @@ -359,6 +363,11 @@ } */ *ap; { +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_getacl(ANY(ptr), ap->a_vp, + ap->a_type) == 0); +#endif + if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0) return (EOPNOTSUPP); @@ -609,6 +618,16 @@ struct thread *td; } */ *ap; { + +#ifdef MAC + if (ap->a_aclp == NULL) + TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_deleteacl(ANY(ptr), + ap->a_vp, ap->a_type) == 0); + else + TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_setacl(ANY(ptr), + ap->a_vp, ap->a_type, ap->a_aclp) == 0); +#endif + if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0) return (EOPNOTSUPP); ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_lookup.c#3 (text+ko) ==== @@ -51,6 +51,7 @@ #include #include #include +#include #include #include @@ -211,6 +212,11 @@ } */ *ap; { +#ifdef MAC + TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_lookup(ANY(ptr), ap->a_dvp, + ap->a_cnp) == 0); +#endif + return (ufs_lookup_ino(ap->a_dvp, ap->a_vpp, ap->a_cnp, NULL)); } ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#3 (text+ko) ==== @@ -61,11 +61,15 @@ #include #include #include +#include #include #include /* XXX */ +/* Required for TESLA assertion. */ +#include + #include #include @@ -269,6 +273,11 @@ struct vnode *vp = ap->a_vp; struct inode *ip; +#ifdef MAC + TESLA_SYSCALL(incallstack(kern_execve) || + mac_vnode_check_open(ANY(ptr), vp, ANY(int)) == 0); +#endif + >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Tue Jul 23 21:20:29 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D35F1340; Tue, 23 Jul 2013 21:20:28 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 7DFBF33E for ; Tue, 23 Jul 2013 21:20:28 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 6BF6725E5 for ; Tue, 23 Jul 2013 21:20:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6NLKSab099411 for ; Tue, 23 Jul 2013 21:20:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6NLKSAd099408 for perforce@freebsd.org; Tue, 23 Jul 2013 21:20:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 23 Jul 2013 21:20:28 GMT Message-Id: <201307232120.r6NLKSAd099408@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231384 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 21:20:29 -0000 http://p4web.freebsd.org/@@231384?ac=10 Change 231384 by rwatson@rwatson_cinnamon on 2013/07/23 21:20:17 Classify various TESLA assertions and allow them to be conditionally compiled. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/amd64/conf/TESLA#4 edit .. //depot/projects/ctsrd/tesla/src/sys/conf/options#4 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ctl.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ioctl.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_note.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_osrel.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_rlimit.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_status.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_type.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_cpuset.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_mib.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#6 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/ksched.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/sys_process.c#4 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/uipc_socket.c#4 edit .. //depot/projects/ctsrd/tesla/src/sys/kern/vfs_vnops.c#5 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_cred.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_pipe.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_process.c#4 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_socket.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_vfs.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#14 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_acl.c#3 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_lookup.c#4 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#4 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/amd64/conf/TESLA#4 (text+ko) ==== @@ -2,3 +2,7 @@ ident TESLA options TESLA +options TESLA_CAPSICUM +options TESLA_MAC +options TESLA_PRIV +options TESLA_PROC ==== //depot/projects/ctsrd/tesla/src/sys/conf/options#4 (text+ko) ==== @@ -672,6 +672,10 @@ KTR_ENTRIES opt_global.h KTR_VERBOSE opt_ktr.h TESLA opt_global.h +TESLA_CAPSICUM opt_global.h +TESLA_MAC opt_global.h +TESLA_PRIV opt_global.h +TESLA_PROC opt_global.h WITNESS opt_global.h WITNESS_KDB opt_witness.h WITNESS_NO_VNODE opt_witness.h ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs.c#3 (text+ko) ==== @@ -74,7 +74,9 @@ struct vnode *textvp; int error; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), p) == 0); +#endif freepath = NULL; PROC_LOCK(p); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ctl.c#3 (text+ko) ==== @@ -313,7 +313,9 @@ int error; struct namemap *nm; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif if (uio == NULL || uio->uio_rw != UIO_WRITE) return (EOPNOTSUPP); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_ioctl.c#3 (text+ko) ==== @@ -71,7 +71,9 @@ int ival; #endif +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif KASSERT(p != NULL, ("%s() called without a process", __func__)); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_note.c#3 (text+ko) ==== @@ -51,7 +51,9 @@ procfs_doprocnote(PFS_FILL_ARGS) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif sbuf_trim(sb); sbuf_finish(sb); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_osrel.c#3 (text+ko) ==== @@ -45,7 +45,9 @@ const char *pp; int ov, osrel, i; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif if (uio == NULL) return (EOPNOTSUPP); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_rlimit.c#3 (text+ko) ==== @@ -67,7 +67,9 @@ struct plimit *limp; int i; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif /* * Obtain a private reference to resource limits ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_status.c#3 (text+ko) ==== @@ -74,7 +74,9 @@ int pid, ppid, pgid, sid; int i; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), p) == 0); +#endif pid = p->p_pid; PROC_LOCK(p); ==== //depot/projects/ctsrd/tesla/src/sys/fs/procfs/procfs_type.c#3 (text+ko) ==== @@ -48,7 +48,9 @@ { static const char *none = "Not Available"; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), p) == 0); +#endif if (p != NULL && p->p_sysent && p->p_sysent->sv_name) sbuf_printf(sb, "%s", p->p_sysent->sv_name); ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_cpuset.c#3 (text+ko) ==== @@ -539,7 +539,10 @@ } } PROC_LOCK_ASSERT(p, MA_OWNED); + +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), p) == 0); +#endif /* * Now that the appropriate locks are held and we have enough cpusets, @@ -717,7 +720,9 @@ if (error) goto out; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), p) == 0); +#endif set = NULL; thread_lock(td); ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_mib.c#3 (text+ko) ==== @@ -296,8 +296,10 @@ error = sysctl_handle_string(oidp, tmpname, len, req); if (req->newptr != NULL && error == 0) { +#ifdef TESLA_PRIV TESLA_SYSCALL_PREVIOUSLY(priv_check(req->td, PRIV_SYSCTL_WRITEJAIL) == 0); +#endif /* * Copy the locally set hostname to all jails that share @@ -357,8 +359,10 @@ if (error || !req->newptr) return (error); +#ifdef TESLA_PRIV TESLA_SYSCALL_PREVIOUSLY(priv_check(req->td, PRIV_SYSCTL_WRITEJAIL) == 0); +#endif /* Permit update only if the new securelevel exceeds the old. */ sx_slock(&allprison_lock); ==== //depot/projects/ctsrd/tesla/src/sys/kern/kern_prot.c#6 (text+ko) ==== @@ -2148,14 +2148,20 @@ euid = euip->ui_uid; +#ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL( previously(mac_cred_check_setuid(ANY(ptr), euid) == 0) || previously(mac_cred_check_setreuid(ANY(ptr), ANY(int), euid) == 0) || previously(mac_cred_check_setresuid(ANY(ptr), ANY(int), euid, ANY(int)) == 0)); +#endif +#endif +#ifdef TESLA_PROC TESLA_SYSCALL(previously(called(setsugid)) || eventually(called(setsugid))); +#endif newcred->cr_uid = euid; uihold(euip); @@ -2173,14 +2179,20 @@ change_egid(struct ucred *newcred, gid_t egid) { +#ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL( previously(mac_cred_check_setgid(ANY(ptr), egid) == 0) || previously(mac_cred_check_setregid(ANY(ptr), ANY(int), egid) == 0) || previously(mac_cred_check_setresgid(ANY(ptr), ANY(int), egid, ANY(int)) == 0)); +#endif +#endif +#ifdef TESLA_PROC TESLA_SYSCALL(previously(called(setsugid)) || eventually(called(setsugid))); +#endif newcred->cr_groups[0] = egid; } @@ -2198,14 +2210,20 @@ { uid_t ruid = ruip->ui_uid; +#ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL( previously(mac_cred_check_setuid(ANY(ptr), ruid) == 0) || previously(mac_cred_check_setreuid(ANY(ptr), ruid, ANY(int)) == 0) || previously(mac_cred_check_setresuid(ANY(ptr), ruid, ANY(int), ANY(int)) == 0)); +#endif +#endif +#ifdef TESLA_PROC TESLA_SYSCALL(previously(called(setsugid)) || eventually(called(setsugid))); +#endif (void)chgproccnt(newcred->cr_ruidinfo, -1, 0); newcred->cr_ruid = ruid; @@ -2225,14 +2243,20 @@ change_rgid(struct ucred *newcred, gid_t rgid) { +#ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL( previously(mac_cred_check_setgid(ANY(ptr), rgid) == 0) || previously(mac_cred_check_setregid(ANY(ptr), rgid, ANY(int)) == 0) || previously(mac_cred_check_setresgid(ANY(ptr), rgid, ANY(int), ANY(int)) == 0)); +#endif +#endif +#ifdef TESLA_PROC TESLA_SYSCALL(previously(called(setsugid)) || eventually(called(setsugid))); +#endif newcred->cr_rgid = rgid; } @@ -2247,14 +2271,20 @@ change_svuid(struct ucred *newcred, uid_t svuid) { +#ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL( previously(mac_cred_check_setuid(ANY(ptr), ANY(int)) == 0) || previously(mac_cred_check_setreuid(ANY(ptr), ANY(int), ANY(int)) == 0) || previously(mac_cred_check_setresuid(ANY(ptr), ANY(int), ANY(int), ANY(int)) == 0)); +#endif +#endif +#ifdef TESLA_PROC TESLA_SYSCALL(previously(called(setsugid)) || eventually(called(setsugid))); +#endif newcred->cr_svuid = svuid; } @@ -2269,14 +2299,20 @@ change_svgid(struct ucred *newcred, gid_t svgid) { +#ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL( previously(mac_cred_check_setgid(ANY(ptr), ANY(int)) == 0) || previously(mac_cred_check_setregid(ANY(ptr), ANY(int), ANY(int)) == 0) || previously(mac_cred_check_setresgid(ANY(ptr), ANY(int), ANY(int), ANY(int)) == 0)); +#endif +#endif +#ifdef TESLA_PROC TESLA_SYSCALL(previously(called(setsugid)) || eventually(called(setsugid))); +#endif newcred->cr_svgid = svgid; } ==== //depot/projects/ctsrd/tesla/src/sys/kern/ksched.c#3 (text+ko) ==== @@ -137,7 +137,9 @@ int policy; int e; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), td->td_proc) == 0); +#endif e = getscheduler(ksched, td, &policy); @@ -155,7 +157,9 @@ { struct rtprio rtp; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), td->td_proc) == 0); +#endif pri_to_rtp(td, &rtp); if (RTP_PRIO_IS_REALTIME(rtp.type)) @@ -187,7 +191,9 @@ int e = 0; struct rtprio rtp; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansched(ANY(ptr), td->td_proc) == 0); +#endif switch(policy) { @@ -232,7 +238,9 @@ ksched_getscheduler(struct ksched *ksched, struct thread *td, int *policy) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), td->td_proc) == 0); +#endif return getscheduler(ksched, td, policy); } @@ -297,7 +305,9 @@ struct thread *td, struct timespec *timespec) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_cansee(ANY(ptr), td->td_proc) == 0); +#endif *timespec = ksched->rr_interval; ==== //depot/projects/ctsrd/tesla/src/sys/kern/sys_process.c#4 (text+ko) ==== @@ -141,7 +141,9 @@ proc_read_regs(struct thread *td, struct reg *regs) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(fill_regs(td, regs)); } @@ -150,7 +152,9 @@ proc_write_regs(struct thread *td, struct reg *regs) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(set_regs(td, regs)); } @@ -159,7 +163,9 @@ proc_read_dbregs(struct thread *td, struct dbreg *dbregs) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(fill_dbregs(td, dbregs)); } @@ -168,7 +174,9 @@ proc_write_dbregs(struct thread *td, struct dbreg *dbregs) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(set_dbregs(td, dbregs)); } @@ -181,7 +189,9 @@ proc_read_fpregs(struct thread *td, struct fpreg *fpregs) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(fill_fpregs(td, fpregs)); } @@ -190,7 +200,9 @@ proc_write_fpregs(struct thread *td, struct fpreg *fpregs) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(set_fpregs(td, fpregs)); } @@ -201,7 +213,9 @@ proc_read_regs32(struct thread *td, struct reg32 *regs32) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(fill_regs32(td, regs32)); } @@ -210,7 +224,9 @@ proc_write_regs32(struct thread *td, struct reg32 *regs32) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(set_regs32(td, regs32)); } @@ -219,7 +235,9 @@ proc_read_dbregs32(struct thread *td, struct dbreg32 *dbregs32) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(fill_dbregs32(td, dbregs32)); } @@ -228,7 +246,9 @@ proc_write_dbregs32(struct thread *td, struct dbreg32 *dbregs32) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(set_dbregs32(td, dbregs32)); } @@ -237,7 +257,9 @@ proc_read_fpregs32(struct thread *td, struct fpreg32 *fpregs32) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(fill_fpregs32(td, fpregs32)); } @@ -246,7 +268,9 @@ proc_write_fpregs32(struct thread *td, struct fpreg32 *fpregs32) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(set_fpregs32(td, fpregs32)); } @@ -256,7 +280,9 @@ proc_sstep(struct thread *td) { +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), td->td_proc) == 0); +#endif PROC_ACTION(ptrace_single_step(td)); } @@ -269,7 +295,9 @@ vm_prot_t reqprot; int error, fault_flags, page_offset, writing; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif /* * Assert that someone has locked this vmspace. (Should be @@ -366,7 +394,9 @@ u_int pathlen; int error, index; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif error = 0; obj = NULL; @@ -474,7 +504,9 @@ struct ptrace_vm_entry pve; int error; +#ifdef TESLA_PROC TESLA_SYSCALL_PREVIOUSLY(p_candebug(ANY(ptr), p) == 0); +#endif pve.pve_entry = pve32->pve_entry; pve.pve_pathlen = pve32->pve_pathlen; ==== //depot/projects/ctsrd/tesla/src/sys/kern/uipc_socket.c#4 (text+ko) ==== @@ -425,9 +425,11 @@ int error; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_create(cred, dom, type, proto) == 0); #endif +#endif if (proto) prp = pffindproto(dom, proto, type); @@ -625,9 +627,11 @@ int error; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_bind(ANY(ptr), so, nam) == 0); #endif +#endif CURVNET_SET(so->so_vnet); error = (*so->so_proto->pr_usrreqs->pru_bind)(so, nam, td); @@ -641,9 +645,11 @@ int error; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_bind(ANY(ptr), so, nam) == 0); #endif +#endif CURVNET_SET(so->so_vnet); error = (*so->so_proto->pr_usrreqs->pru_bindat)(fd, so, nam, td); @@ -669,8 +675,10 @@ int error; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_listen(ANY(ptr), so) == 0); #endif +#endif CURVNET_SET(so->so_vnet); error = (*so->so_proto->pr_usrreqs->pru_listen)(so, backlog, td); @@ -921,9 +929,11 @@ #ifdef MAC /* Access-control check is on head rather than so. */ +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_accept(ANY(ptr), ANY(ptr)) == 0); #endif +#endif SOCK_LOCK(so); KASSERT((so->so_state & SS_NOFDREF) != 0, ("soaccept: !NOFDREF")); @@ -941,9 +951,11 @@ { #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_connect(td->td_ucred, so, nam) == 0); #endif +#endif return (soconnectat(AT_FDCWD, so, nam, td)); } @@ -1483,7 +1495,9 @@ int error; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_send(ANY(ptr), so) == 0); +#ifdef TESLA_MAC #endif CURVNET_SET(so->so_vnet); @@ -2443,8 +2457,10 @@ int error; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_receive(ANY(ptr), so) == 0); #endif +#endif CURVNET_SET(so->so_vnet); error = (so->so_proto->pr_usrreqs->pru_soreceive(so, psa, uio, mp0, @@ -3124,8 +3140,10 @@ * XXXRW: Should be active_cred but actually fp->f_cred is getting * passed down the stack, so the wrong cred here! */ +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_poll(ANY(ptr), so) == 0); #endif +#endif SOCKBUF_LOCK(&so->so_snd); SOCKBUF_LOCK(&so->so_rcv); @@ -3173,8 +3191,10 @@ struct sockbuf *sb; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_poll(ANY(ptr), so) == 0); #endif +#endif switch (kn->kn_filter) { case EVFILT_READ: ==== //depot/projects/ctsrd/tesla/src/sys/kern/vfs_vnops.c#5 (text+ko) ==== @@ -710,10 +710,12 @@ } offset = uio->uio_offset; +#ifdef TESLA_CAPSICUM TESLA_WITHIN(kern_readv, previously(fget_unlocked(ANY(ptr), ANY(int), bitmask(CAP_READ), ANY(int), &fp, ANY(ptr)) == 0)); TESLA_WITHIN(kern_preadv, previously(fget_unlocked(ANY(ptr), ANY(int), bitmask(CAP_PREAD), ANY(int), &fp, ANY(ptr)) == 0)); +#endif #ifdef MAC error = mac_vnode_check_read(active_cred, fp->f_cred, vp); if (error == 0) @@ -819,10 +821,12 @@ } offset = uio->uio_offset; +#ifdef TESLA_CAPSICUM TESLA_WITHIN(kern_writev, previously(fget_unlocked(ANY(ptr), ANY(int), bitmask(CAP_WRITE), ANY(int), &fp, ANY(ptr)) == 0)); TESLA_WITHIN(kern_pwritev, previously(fget_unlocked(ANY(ptr), ANY(int), bitmask(CAP_PWRITE), ANY(int), &fp, ANY(ptr)) == 0)); +#endif #ifdef MAC error = mac_vnode_check_write(active_cred, fp->f_cred, vp); if (error == 0) @@ -1211,8 +1215,10 @@ if (error) goto out; #endif +#ifdef TESLA_CAPSICUM TESLA_WITHIN(kern_ftruncate, previously(fget_unlocked(ANY(ptr), ANY(int), bitmask(CAP_FTRUNCATE), ANY(int), &fp, ANY(ptr)) == 0)); +#endif error = vn_writechk(vp); if (error == 0) { VATTR_NULL(&vattr); ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_cred.c#3 (text+ko) ==== @@ -196,8 +196,10 @@ mac_cred_relabel(struct ucred *cred, struct label *newlabel) { +#ifdef TESLA_MAC TESLA_SYSCALL(previously(mac_cred_check_relabel(cred, newlabel) == 0)); +#endif MAC_POLICY_PERFORM_NOSLEEP(cred_relabel, cred, newlabel); } ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_pipe.c#3 (text+ko) ==== @@ -143,8 +143,10 @@ struct label *newlabel) { +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_pipe_check_relabel(cred, pp, newlabel) == 0); +#endif MAC_POLICY_PERFORM_NOSLEEP(pipe_relabel, cred, pp, pp->pp_label, newlabel); ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_process.c#4 (text+ko) ==== @@ -172,7 +172,9 @@ } imgp->execlabel = label; +#ifdef TESLA_MAC TESLA_SYSCALL_EVENTUALLY(called(mac_execve_exit)); +#endif return (0); } @@ -181,7 +183,9 @@ mac_execve_exit(struct image_params *imgp) { +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(called(mac_execve_enter(imgp, ANY(ptr)))); +#endif if (imgp->execlabel != NULL) { mac_cred_label_free(imgp->execlabel); @@ -200,7 +204,9 @@ } else *interpvplabel = NULL; +#ifdef TESLA_MAC TESLA_SYSCALL_EVENTUALLY(called(mac_execve_interpreter_exit)); +#endif } void @@ -209,8 +215,10 @@ if (interpvplabel != NULL) { /* Awkwardly, _exit() may be called even if _enter() wasn't. */ +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(called( mac_execve_interpreter_enter(ANY(ptr), ANY(ptr)))); +#endif mac_vnode_label_free(interpvplabel); } ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_socket.c#3 (text+ko) ==== @@ -258,8 +258,10 @@ struct label *newlabel) { +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_relabel(cred, so, newlabel) == 0); +#endif SOCK_LOCK_ASSERT(so); ==== //depot/projects/ctsrd/tesla/src/sys/security/mac/mac_vfs.c#3 (text+ko) ==== @@ -949,8 +949,10 @@ struct label *newlabel) { +#ifdef TESLA_MAC TESLA_SYSCALL(previously(mac_vnode_check_relabel(cred, vp, newlabel) == 0)); +#endif MAC_POLICY_PERFORM(vnode_relabel, cred, vp, vp->v_label, newlabel); } ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#14 (text+ko) ==== @@ -440,11 +440,13 @@ vp = ap->a_vp; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL(incallstack(ufs_readdir) || previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); TESLA_PAGE_FAULT(incallstack(ufs_readdir) || previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); #endif +#endif uio = ap->a_uio; ioflag = ap->a_ioflag; @@ -668,11 +670,13 @@ vp = ap->a_vp; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); - TESLA_PAGE_FAULT(previously(mac_vnode_check_WRITE(ANY(ptr), ANY(ptr), + TESLA_PAGE_FAULT(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); #endif +#endif uio = ap->a_uio; ioflag = ap->a_ioflag; @@ -1484,10 +1488,12 @@ u_char *eae, *p; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL(incallstack(ufs_setacl) || previously(mac_vnode_check_deleteextattr(ANY(ptr), ap->a_vp, ap->a_attrnamespace, ap->a_name) == 0)); #endif +#endif ip = VTOI(ap->a_vp); fs = ip->i_fs; @@ -1577,10 +1583,12 @@ int error, ealen; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL(incallstack(ufs_getacl) || previously(mac_vnode_check_getextattr(ANY(ptr), ap->a_vp, ap->a_attrnamespace, ap->a_name) == 0)); #endif +#endif ip = VTOI(ap->a_vp); fs = ip->i_fs; @@ -1639,9 +1647,11 @@ int error, ealen; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_listextattr(ANY(ptr), ap->a_vp, ap->a_attrnamespace) == 0); #endif +#endif ip = VTOI(ap->a_vp); fs = ip->i_fs; @@ -1708,10 +1718,12 @@ u_char *eae, *p; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL(incallstack(ufs_setacl) || mac_vnode_check_setextattr(ANY(ptr), ap->a_vp, ap->a_attrnamespace, ap->a_name) == 0); #endif +#endif ip = VTOI(ap->a_vp); fs = ip->i_fs; ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_acl.c#3 (text+ko) ==== @@ -364,9 +364,11 @@ { #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_getacl(ANY(ptr), ap->a_vp, ap->a_type) == 0); #endif +#endif if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0) return (EOPNOTSUPP); @@ -620,6 +622,7 @@ { #ifdef MAC +#ifdef TESLA_MAC if (ap->a_aclp == NULL) TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_deleteacl(ANY(ptr), ap->a_vp, ap->a_type) == 0); @@ -627,6 +630,7 @@ TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_setacl(ANY(ptr), ap->a_vp, ap->a_type, ap->a_aclp) == 0); #endif +#endif if ((ap->a_vp->v_mount->mnt_flag & (MNT_ACLS | MNT_NFS4ACLS)) == 0) return (EOPNOTSUPP); ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_lookup.c#4 (text+ko) ==== @@ -213,9 +213,11 @@ { #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_lookup(ANY(ptr), ap->a_dvp, ap->a_cnp) == 0); #endif +#endif return (ufs_lookup_ino(ap->a_dvp, ap->a_vpp, ap->a_cnp, NULL)); } ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#4 (text+ko) ==== @@ -274,9 +274,11 @@ struct inode *ip; #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL(incallstack(kern_execve) || mac_vnode_check_open(ANY(ptr), vp, ANY(int)) == 0); #endif +#endif if (vp->v_type == VCHR || vp->v_type == VBLK) return (EOPNOTSUPP); @@ -538,9 +540,11 @@ } if (vap->va_flags != VNOVAL) { #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_setflags(ANY(ptr), vp, ANY(int)) == 0); #endif +#endif if ((vap->va_flags & ~(UF_NODUMP | UF_IMMUTABLE | UF_APPEND | UF_OPAQUE | UF_NOUNLINK | SF_ARCHIVED | SF_IMMUTABLE | SF_APPEND | SF_NOUNLINK | SF_SNAPSHOT)) != 0) @@ -605,9 +609,11 @@ } if (vap->va_size != VNOVAL) { #ifdef MAC +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0); #endif +#endif /* * XXX most of the following special cases should be in @@ -653,10 +659,12 @@ * XXXRW: TESLA can't currently instrument functions with * struct arguments. */ +#ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_vnode_check_setutimes(ANY(ptr), vp, ANY(timespec), ANY(timespec)) == 0); #endif #endif +#endif if (vp->v_mount->mnt_flag & MNT_RDONLY) return (EROFS); @@ -792,9 +800,11 @@ int error; #ifdef MAC >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Tue Jul 23 22:06:19 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 67C20EC5; Tue, 23 Jul 2013 22:06:19 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 23E1AEC3 for ; Tue, 23 Jul 2013 22:06:19 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 12AF227A8 for ; Tue, 23 Jul 2013 22:06:19 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6NM6IWI005823 for ; Tue, 23 Jul 2013 22:06:18 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6NM6Iq9005820 for perforce@freebsd.org; Tue, 23 Jul 2013 22:06:18 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Tue, 23 Jul 2013 22:06:18 GMT Message-Id: <201307232206.r6NM6Iq9005820@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231387 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Jul 2013 22:06:19 -0000 http://p4web.freebsd.org/@@231387?ac=10 Change 231387 by rwatson@rwatson_cinnamon on 2013/07/23 22:06:14 Fix a TESLA_MAC ifdef. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/kern/uipc_socket.c#5 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/kern/uipc_socket.c#5 (text+ko) ==== @@ -1497,7 +1497,7 @@ #ifdef MAC #ifdef TESLA_MAC TESLA_SYSCALL_PREVIOUSLY(mac_socket_check_send(ANY(ptr), so) == 0); -#ifdef TESLA_MAC +#endif #endif CURVNET_SET(so->so_vnet); From owner-p4-projects@FreeBSD.ORG Wed Jul 24 01:01:29 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1FE7E9B3; Wed, 24 Jul 2013 01:01:29 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id C52CF9B1 for ; Wed, 24 Jul 2013 01:01:28 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id B4B24202D for ; Wed, 24 Jul 2013 01:01:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6O11SJ8033090 for ; Wed, 24 Jul 2013 01:01:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6O11RFm033087 for perforce@freebsd.org; Wed, 24 Jul 2013 01:01:27 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 24 Jul 2013 01:01:27 GMT Message-Id: <201307240101.r6O11RFm033087@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231392 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jul 2013 01:01:29 -0000 http://p4web.freebsd.org/@@231392?ac=10 Change 231392 by rwatson@rwatson_cinnamon on 2013/07/24 01:01:23 Add two missing previously() quantifiers that lead to surprising behaviour. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#15 edit .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#5 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#15 (text+ko) ==== @@ -1720,8 +1720,8 @@ #ifdef MAC #ifdef TESLA_MAC TESLA_SYSCALL(incallstack(ufs_setacl) || - mac_vnode_check_setextattr(ANY(ptr), ap->a_vp, - ap->a_attrnamespace, ap->a_name) == 0); + previously(mac_vnode_check_setextattr(ANY(ptr), ap->a_vp, + ap->a_attrnamespace, ap->a_name) == 0)); #endif #endif ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#5 (text+ko) ==== @@ -276,7 +276,7 @@ #ifdef MAC #ifdef TESLA_MAC TESLA_SYSCALL(incallstack(kern_execve) || - mac_vnode_check_open(ANY(ptr), vp, ANY(int)) == 0); + previously(mac_vnode_check_open(ANY(ptr), vp, ANY(int)) == 0)); #endif #endif From owner-p4-projects@FreeBSD.ORG Wed Jul 24 14:42:26 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EA4E0EA7; Wed, 24 Jul 2013 14:42:25 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id AB908EA5 for ; Wed, 24 Jul 2013 14:42:25 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9BA302370 for ; Wed, 24 Jul 2013 14:42:25 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6OEgPkj060629 for ; Wed, 24 Jul 2013 14:42:25 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6OEgPqE060626 for perforce@freebsd.org; Wed, 24 Jul 2013 14:42:25 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 24 Jul 2013 14:42:25 GMT Message-Id: <201307241442.r6OEgPqE060626@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231415 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jul 2013 14:42:26 -0000 http://p4web.freebsd.org/@@231415?ac=10 Change 231415 by rwatson@rwatson_cinnamon on 2013/07/24 14:41:58 Instead of checking if we are in the execve() call graph, instead allow the exec MAC check to authorise open; while here, also allow the KLD Load check to authorise open as well. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#6 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ufs/ufs_vnops.c#6 (text+ko) ==== @@ -275,7 +275,9 @@ #ifdef MAC #ifdef TESLA_MAC - TESLA_SYSCALL(incallstack(kern_execve) || + TESLA_SYSCALL( + previously(mac_kld_check_load(ANY(ptr), vp) == 0) || + previously(mac_vnode_check_exec(ANY(ptr), vp, ANY(ptr)) == 0) || previously(mac_vnode_check_open(ANY(ptr), vp, ANY(int)) == 0)); #endif #endif From owner-p4-projects@FreeBSD.ORG Wed Jul 24 14:44:29 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1810213A; Wed, 24 Jul 2013 14:44:29 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id CDBA3138 for ; Wed, 24 Jul 2013 14:44:28 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BB568238D for ; Wed, 24 Jul 2013 14:44:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6OEiSJ7060817 for ; Wed, 24 Jul 2013 14:44:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6OEiSZF060814 for perforce@freebsd.org; Wed, 24 Jul 2013 14:44:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 24 Jul 2013 14:44:28 GMT Message-Id: <201307241444.r6OEiSZF060814@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 231416 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jul 2013 14:44:29 -0000 http://p4web.freebsd.org/@@231416?ac=10 Change 231416 by rwatson@rwatson_cinnamon on 2013/07/24 14:43:40 Allow FFS read and write VOPs if a previous call to vn_rdwr() on the same vnode passed the IO_NOMACCHECK flag. Unfortunately we can't specify the UIO_READ or UIO_WRITE flag arguments as enum constants aren't yet allowed in TESLA expressions. Using vn_rdwr() is preferable to white-listing specific code paths, as the programmer has already let us know that the path is exmempt from MAC checking, so quite a bit more compact. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#16 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/ufs/ffs/ffs_vnops.c#16 (text+ko) ==== @@ -441,10 +441,14 @@ vp = ap->a_vp; #ifdef MAC #ifdef TESLA_MAC - TESLA_SYSCALL(incallstack(ufs_readdir) || + TESLA_SYSCALL( + incallstack(ufs_readdir) || + previously(called(vn_rdwr(ANY(int), vp, ANY(ptr), ANY(int), + ANY(int), ANY(int), flags(IO_NOMACCHECK), ANY(ptr), ANY(ptr), + ANY(ptr), ANY(ptr)))) || previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); - TESLA_PAGE_FAULT(incallstack(ufs_readdir) || - previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), vp) == 0)); + TESLA_PAGE_FAULT(previously(mac_vnode_check_read(ANY(ptr), ANY(ptr), + vp) == 0)); #endif #endif @@ -671,8 +675,11 @@ vp = ap->a_vp; #ifdef MAC #ifdef TESLA_MAC - TESLA_SYSCALL(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) - == 0)); + TESLA_SYSCALL( + previously(called(vn_rdwr(ANY(int), vp, ANY(ptr), ANY(int), + ANY(int), ANY(int), flags(IO_NOMACCHECK), ANY(ptr), ANY(ptr), + ANY(ptr), ANY(ptr)))) || + previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); TESLA_PAGE_FAULT(previously(mac_vnode_check_write(ANY(ptr), ANY(ptr), vp) == 0)); #endif From owner-p4-projects@FreeBSD.ORG Wed Jul 24 15:54:45 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D560CED1; Wed, 24 Jul 2013 15:54:44 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 96ED5ECF for ; Wed, 24 Jul 2013 15:54:44 +0000 (UTC) (envelope-from jonathan@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 694DC2A20 for ; Wed, 24 Jul 2013 15:54:44 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6OFsiZC078487 for ; Wed, 24 Jul 2013 15:54:44 GMT (envelope-from jonathan@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6OFsinD078484 for perforce@freebsd.org; Wed, 24 Jul 2013 15:54:44 GMT (envelope-from jonathan@freebsd.org) Date: Wed, 24 Jul 2013 15:54:44 GMT Message-Id: <201307241554.r6OFsinD078484@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jonathan@freebsd.org using -f From: Jonathan Anderson Subject: PERFORCE change 231418 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 24 Jul 2013 15:54:45 -0000 http://p4web.freebsd.org/@@231418?ac=10 Change 231418 by jonathan@jonathan-on-joe on 2013/07/24 15:54:41 Sync commit cf3aca from GitHub: allow programmer-specified assertion names. I wouldn't use this feature very much yet (requires testing), but here are the header changes that will allow it to work. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla-macros.h#10 edit .. //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#9 edit Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla-macros.h#10 (text+ko) ==== @@ -54,7 +54,7 @@ /** An inline assertion. */ #define TESLA_ASSERT(locality, start, end, expression) \ __tesla_inline_assertion( \ - __FILE__, __LINE__, __COUNTER__, \ + "", __FILE__, __LINE__, __COUNTER__, \ locality, start, end, expression \ ) ==== //depot/projects/ctsrd/tesla/src/sys/contrib/tesla/include/tesla.h#9 (text+ko) ==== @@ -57,13 +57,15 @@ * Magic "function" representing a TESLA assertion. * * Its arguments are: + * * an explicit programmer-supplied name (optional: can be set to "") * * name of the file the assertion is located in (__FILE__) * * the line the assertion is defined at (__LINE__) * * a counter to ensure uniqueness (__COUNTER__) * * the TESLA context (per-thread or global) */ void -__tesla_inline_assertion(const char *filename, int line, int count, +__tesla_inline_assertion(const char *name, + const char *filename, int line, int count, __tesla_locality *loc, ...); #define __TESLA_INFINITE_REPETITIONS INT_MAX @@ -165,8 +167,8 @@ struct __tesla_automaton_description* __tesla_automaton_done(); inline struct __tesla_automaton_usage* -__tesla_struct_uses_automaton(const char *automaton, - __tesla_locality *loc, ...) +__tesla_struct_uses_automaton(__unused const char *automaton, + __unused __tesla_locality *loc, ...) { return 0; } @@ -183,7 +185,7 @@ */ #define __tesla_struct_usage(subject, automaton, loc, start, end) \ struct __tesla_automaton_usage* \ - __tesla_struct_automaton_usage_##struct_name##_##automaton(subject) { \ + __tesla_struct_automaton_usage_##struct_name##_##automaton(__unused subject) { \ return __tesla_struct_uses_automaton( \ #automaton, loc, start, end); \ } From owner-p4-projects@FreeBSD.ORG Fri Jul 26 15:21:49 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 01595BA0; Fri, 26 Jul 2013 15:21:49 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B3B3FB9E for ; Fri, 26 Jul 2013 15:21:48 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9F1D62189 for ; Fri, 26 Jul 2013 15:21:48 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6QFLmMH020174 for ; Fri, 26 Jul 2013 15:21:48 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6QFLmA5020171 for perforce@freebsd.org; Fri, 26 Jul 2013 15:21:48 GMT (envelope-from brooks@freebsd.org) Date: Fri, 26 Jul 2013 15:21:48 GMT Message-Id: <201307261521.r6QFLmA5020171@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231484 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jul 2013 15:21:49 -0000 http://p4web.freebsd.org/@@231484?ac=10 Change 231484 by brooks@brooks_zenith on 2013/07/26 15:21:04 Simplify timeout code by switching from struct bintime to sbintime_t. ~1/4ns resolution is more than sufficent for storage device timeouts. Add a missing timeout check when starting a multi-word write. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_core.c#15 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_var.h#7 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_core.c#15 (text+ko) ==== @@ -260,9 +260,8 @@ cfi_attach(device_t dev) { struct cfi_softc *sc; - struct timeval tv; u_int blksz, blocks; - u_int r, u, usec; + u_int r, u; #ifdef CFI_SUPPORT_STRATAFLASH uint64_t ppr; char name[KENV_MNAMELEN], value[32]; @@ -281,38 +280,26 @@ sc->sc_handle = rman_get_bushandle(sc->sc_res); /* Get time-out values for erase, write, and buffer write. */ - bintime_clear(&sc->sc_typical_timeouts[CFI_TIMEOUT_ERASE]); - usec = 1000 * (1 << cfi_read_qry(sc, CFI_QRY_TTO_ERASE)); - tv.tv_sec = usec / 1000000; - tv.tv_usec = usec % 1000000; - timeval2bintime(&tv, &sc->sc_typical_timeouts[CFI_TIMEOUT_ERASE]); + sc->sc_typical_timeouts[CFI_TIMEOUT_ERASE] = + SBT_1MS * (1 << cfi_read_qry(sc, CFI_QRY_TTO_ERASE)); sc->sc_max_timeouts[CFI_TIMEOUT_ERASE] = - sc->sc_typical_timeouts[CFI_TIMEOUT_ERASE]; - bintime_mul(&sc->sc_max_timeouts[CFI_TIMEOUT_ERASE], - 1 << cfi_read_qry(sc, CFI_QRY_MTO_ERASE)); + sc->sc_typical_timeouts[CFI_TIMEOUT_ERASE] * + (1 << cfi_read_qry(sc, CFI_QRY_MTO_ERASE)); - bintime_clear(&sc->sc_typical_timeouts[CFI_TIMEOUT_WRITE]); - usec = 1 << cfi_read_qry(sc, CFI_QRY_TTO_WRITE); - tv.tv_sec = usec / 1000000; - tv.tv_usec = usec % 1000000; - timeval2bintime(&tv, &sc->sc_typical_timeouts[CFI_TIMEOUT_WRITE]); + sc->sc_typical_timeouts[CFI_TIMEOUT_WRITE] = + SBT_1US * (1 << cfi_read_qry(sc, CFI_QRY_TTO_WRITE)); sc->sc_max_timeouts[CFI_TIMEOUT_WRITE] = - sc->sc_typical_timeouts[CFI_TIMEOUT_WRITE]; - bintime_mul(&sc->sc_max_timeouts[CFI_TIMEOUT_WRITE], - 1 << cfi_read_qry(sc, CFI_QRY_MTO_WRITE)); + sc->sc_typical_timeouts[CFI_TIMEOUT_WRITE] * + (1 << cfi_read_qry(sc, CFI_QRY_MTO_WRITE)); - bintime_clear(&sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE]); - usec = 1 << cfi_read_qry(sc, CFI_QRY_TTO_BUFWRITE); - tv.tv_sec = usec / 1000000; - tv.tv_usec = usec % 1000000; - timeval2bintime(&tv, &sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE]); + sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE] = + SBT_1US * (1 << cfi_read_qry(sc, CFI_QRY_TTO_BUFWRITE)); sc->sc_max_timeouts[CFI_TIMEOUT_BUFWRITE] = - sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE]; - bintime_mul(&sc->sc_max_timeouts[CFI_TIMEOUT_BUFWRITE], - 1 << cfi_read_qry(sc, CFI_QRY_MTO_BUFWRITE)); + sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE] * + (1 << cfi_read_qry(sc, CFI_QRY_MTO_BUFWRITE)); /* Get the maximum size of a multibyte program */ - if (bintime_isset(&sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE])) + if (sc->sc_typical_timeouts[CFI_TIMEOUT_BUFWRITE] != 0) sc->sc_maxbuf = 1 << (cfi_read_qry(sc, CFI_QRY_MAXBUF) | cfi_read_qry(sc, CFI_QRY_MAXBUF) << 8); else @@ -384,16 +371,15 @@ } static int -cfi_wait_ready(struct cfi_softc *sc, u_int ofs, struct bintime *start, +cfi_wait_ready(struct cfi_softc *sc, u_int ofs, sbintime_t start, enum cfi_wait_cmd cmd) { int done, error, tto_exceeded; uint32_t st0 = 0, st = 0; - struct bintime mend, now, tend; + sbintime_t mend, now, tend; - tend = mend = *start; - bintime_add(&tend, &sc->sc_typical_timeouts[cmd]); - bintime_add(&mend, &sc->sc_max_timeouts[cmd]); + tend = start + sc->sc_typical_timeouts[cmd]; + mend = start + sc->sc_max_timeouts[cmd]; done = 0; error = 0; @@ -427,11 +413,11 @@ break; } - binuptime(&now); - if (tto_exceeded || bintime_cmp(&now, &tend, >)) { + now = sbinuptime(); + if (tto_exceeded || now > tend) { if (!tto_exceeded) tto_exceeded = 1; - if (bintime_cmp(&now, &mend, >)) { + if (now > mend) { #ifdef CFI_DEBUG_TIMEOUT device_printf(sc->sc_dev, "max timeout exceeded (cmd %d)", cmd); @@ -464,7 +450,7 @@ int error, i, neederase = 0; uint32_t st; u_int wlen; - struct bintime start; + sbintime_t start; /* Intel flash must be unlocked before modification */ switch (sc->sc_cmdset) { @@ -494,7 +480,7 @@ if (neederase) { intr = intr_disable(); - binuptime(&start); + start = sbinuptime(); /* Erase the block. */ switch (sc->sc_cmdset) { case CFI_VEND_INTEL_ECS: @@ -514,7 +500,7 @@ return (ENODEV); } intr_restore(intr); - error = cfi_wait_ready(sc, sc->sc_wrofs, &start, + error = cfi_wait_ready(sc, sc->sc_wrofs, start, CFI_TIMEOUT_ERASE); if (error) goto out; @@ -533,11 +519,14 @@ intr = intr_disable(); - binuptime(&start); + start = sbinuptime(); do { cfi_write(sc, sc->sc_wrofs + i, CFI_BCS_BUF_PROG_SETUP); - /* XXX: do some timeout management */ + if (sbinuptime() > start + sc->sc_max_timeouts[CFI_TIMEOUT_BUFWRITE]) { + error = ETIMEDOUT; + goto out; + } st = cfi_read(sc, sc->sc_wrofs + i); } while (! (st & CFI_INTEL_STATUS_WSMS)); @@ -567,7 +556,9 @@ intr_restore(intr); error = cfi_wait_ready(sc, sc->sc_wrofs + i, - &start, CFI_TIMEOUT_BUFWRITE); + start, CFI_TIMEOUT_BUFWRITE); + if (error != 0) + goto out; } goto out; default: @@ -605,7 +596,7 @@ */ intr = intr_disable(); - binuptime(&start); + start = sbinuptime(); switch (sc->sc_cmdset) { case CFI_VEND_INTEL_ECS: case CFI_VEND_INTEL_SCS: @@ -633,7 +624,7 @@ intr_restore(intr); - error = cfi_wait_ready(sc, sc->sc_wrofs, &start, + error = cfi_wait_ready(sc, sc->sc_wrofs, start, CFI_TIMEOUT_WRITE); if (error) goto out; @@ -732,7 +723,7 @@ #ifdef CFI_ARMEDANDDANGEROUS register_t intr; int i, error; - struct bintime start; + sbintime_t start; #endif if (sc->sc_cmdset != CFI_VEND_INTEL_ECS) @@ -742,11 +733,11 @@ #ifdef CFI_ARMEDANDDANGEROUS for (i = 7; i >= 4; i--, id >>= 16) { intr = intr_disable(); - binuptime(&start); + start = sbinuptime(); cfi_write(sc, 0, CFI_INTEL_PP_SETUP); cfi_put16(sc, CFI_INTEL_PR(i), id&0xffff); intr_restore(intr); - error = cfi_wait_ready(sc, CFI_BCS_READ_STATUS, &start, + error = cfi_wait_ready(sc, CFI_BCS_READ_STATUS, start, CFI_TIMEOUT_WRITE); if (error) break; @@ -787,7 +778,7 @@ #ifdef CFI_ARMEDANDDANGEROUS register_t intr; int error; - struct bintime start; + sbintime_t start; #endif if (sc->sc_cmdset != CFI_VEND_INTEL_ECS) return EOPNOTSUPP; @@ -801,7 +792,7 @@ cfi_write(sc, 0, CFI_INTEL_PP_SETUP); cfi_put16(sc, CFI_INTEL_PLR, 0xFFFD); intr_restore(intr); - error = cfi_wait_ready(sc, CFI_BCS_READ_STATUS, &start, + error = cfi_wait_ready(sc, CFI_BCS_READ_STATUS, start, CFI_TIMEOUT_WRITE); cfi_write(sc, 0, CFI_BCS_READ_ARRAY); return error; ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_var.h#7 (text+ko) ==== @@ -57,8 +57,8 @@ struct cfi_region *sc_region; /* Array of region info. */ u_int sc_cmdset; - struct bintime sc_typical_timeouts[3]; - struct bintime sc_max_timeouts[3]; + sbintime_t sc_typical_timeouts[3]; + sbintime_t sc_max_timeouts[3]; u_int sc_maxbuf; From owner-p4-projects@FreeBSD.ORG Fri Jul 26 15:41:10 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 57CB0491; Fri, 26 Jul 2013 15:41:10 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 13B8D48F for ; Fri, 26 Jul 2013 15:41:10 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id DAD9522CF for ; Fri, 26 Jul 2013 15:41:09 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6QFf96R022898 for ; Fri, 26 Jul 2013 15:41:09 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6QFf903022895 for perforce@freebsd.org; Fri, 26 Jul 2013 15:41:09 GMT (envelope-from brooks@freebsd.org) Date: Fri, 26 Jul 2013 15:41:09 GMT Message-Id: <201307261541.r6QFf903022895@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231486 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jul 2013 15:41:10 -0000 http://p4web.freebsd.org/@@231486?ac=10 Change 231486 by brooks@brooks_zenith on 2013/07/26 15:40:25 Remove a stray blank line. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_disk.c#7 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_disk.c#7 (text+ko) ==== @@ -69,7 +69,6 @@ static void cfi_disk_strategy(struct bio *); static int cfi_disk_ioctl(struct disk *, u_long, void *, int, struct thread *); - static int cfi_disk_probe(device_t dev) { From owner-p4-projects@FreeBSD.ORG Fri Jul 26 15:47:16 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id C0B54643; Fri, 26 Jul 2013 15:47:16 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 816DF641 for ; Fri, 26 Jul 2013 15:47:16 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 6D69B232B for ; Fri, 26 Jul 2013 15:47:16 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6QFlGQG023378 for ; Fri, 26 Jul 2013 15:47:16 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6QFlG6t023375 for perforce@freebsd.org; Fri, 26 Jul 2013 15:47:16 GMT (envelope-from brooks@freebsd.org) Date: Fri, 26 Jul 2013 15:47:16 GMT Message-Id: <201307261547.r6QFlG6t023375@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231487 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jul 2013 15:47:17 -0000 http://p4web.freebsd.org/@@231487?ac=10 Change 231487 by brooks@brooks_zenith on 2013/07/26 15:46:34 Correct a merge error. We only need to unlock the block once on Intel parts... Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_core.c#16 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_core.c#16 (text+ko) ==== @@ -462,15 +462,6 @@ break; } - switch (sc->sc_cmdset) { - case CFI_VEND_INTEL_ECS: - case CFI_VEND_INTEL_SCS: - cfi_write(sc, sc->sc_wrofs, CFI_INTEL_LBS); - cfi_write(sc, sc->sc_wrofs, CFI_INTEL_UB); - cfi_write(sc, sc->sc_wrofs, CFI_BCS_READ_ARRAY); - break; - } - /* Check if an erase is required. */ for (i = 0; i < sc->sc_wrbufsz; i++) if ((sc->sc_wrbuf[i] & sc->sc_wrbufcpy[i]) != sc->sc_wrbuf[i]) { From owner-p4-projects@FreeBSD.ORG Fri Jul 26 19:37:28 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2A7608D5; Fri, 26 Jul 2013 19:37:28 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9B4648D1 for ; Fri, 26 Jul 2013 19:37:27 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [8.8.178.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 876212D22 for ; Fri, 26 Jul 2013 19:37:27 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.7/8.14.7) with ESMTP id r6QJbRON060225 for ; Fri, 26 Jul 2013 19:37:27 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.7/8.14.6/Submit) id r6QJbRlH060222 for perforce@freebsd.org; Fri, 26 Jul 2013 19:37:27 GMT (envelope-from brooks@freebsd.org) Date: Fri, 26 Jul 2013 19:37:27 GMT Message-Id: <201307261937.r6QJbRlH060222@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis Subject: PERFORCE change 231491 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 26 Jul 2013 19:37:28 -0000 http://p4web.freebsd.org/@@231491?ac=10 Change 231491 by brooks@brooks_zenith on 2013/07/26 19:36:34 Add SRI International copyrights and DARPA credits to files I've modifed. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_bus_nexus.c#4 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_core.c#17 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_dev.c#5 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_disk.c#8 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_reg.h#7 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_var.h#8 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_bus_nexus.c#4 (text+ko) ==== @@ -4,6 +4,11 @@ * Copyright (c) 2009 Sam Leffler, Errno Consulting * All rights reserved. * + * Portions of this software were developed by SRI International and the + * University of Cambridge Computer Laboratory under DARPA/AFRL contract + * (FA8750-10-C-0237) ("CTSRD"), as part of the DARPA CRASH research + * programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_core.c#17 (text+ko) ==== @@ -1,7 +1,13 @@ /*- * Copyright (c) 2007, Juniper Networks, Inc. + * Copyright (c) 2012-2013, SRI International * All rights reserved. * + * Portions of this software were developed by SRI International and the + * University of Cambridge Computer Laboratory under DARPA/AFRL contract + * (FA8750-10-C-0237) ("CTSRD"), as part of the DARPA CRASH research + * programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_dev.c#5 (text+ko) ==== @@ -1,7 +1,13 @@ /*- * Copyright (c) 2007, Juniper Networks, Inc. + * Copyright (c) 2012-2013, SRI International * All rights reserved. * + * Portions of this software were developed by SRI International and the + * University of Cambridge Computer Laboratory under DARPA/AFRL contract + * (FA8750-10-C-0237) ("CTSRD"), as part of the DARPA CRASH research + * programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_disk.c#8 (text+ko) ==== @@ -1,7 +1,13 @@ /*- * Copyright (c) 2009 Sam Leffler, Errno Consulting + * Copyright (c) 2012-2013, SRI International * All rights reserved. * + * Portions of this software were developed by SRI International and the + * University of Cambridge Computer Laboratory under DARPA/AFRL contract + * (FA8750-10-C-0237) ("CTSRD"), as part of the DARPA CRASH research + * programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_reg.h#7 (text+ko) ==== @@ -1,7 +1,13 @@ /*- * Copyright (c) 2007, Juniper Networks, Inc. + * Copyright (c) 2012-2013, SRI International * All rights reserved. * + * Portions of this software were developed by SRI International and the + * University of Cambridge Computer Laboratory under DARPA/AFRL contract + * (FA8750-10-C-0237) ("CTSRD"), as part of the DARPA CRASH research + * programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: ==== //depot/projects/ctsrd/beribsd/src/sys/dev/cfi/cfi_var.h#8 (text+ko) ==== @@ -1,7 +1,13 @@ /*- * Copyright (c) 2007, Juniper Networks, Inc. + * Copyright (c) 2012-2013, SRI International * All rights reserved. * + * Portions of this software were developed by SRI International and the + * University of Cambridge Computer Laboratory under DARPA/AFRL contract + * (FA8750-10-C-0237) ("CTSRD"), as part of the DARPA CRASH research + * programme. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: