From owner-p4-projects@FreeBSD.ORG Mon Jul 2 14:37:08 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4C74A106567C; Mon, 2 Jul 2012 14:37:08 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id EABB8106566B for ; Mon, 2 Jul 2012 14:37:07 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id D39E08FC17 for ; Mon, 2 Jul 2012 14:37:07 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q62Eb75o062266 for ; Mon, 2 Jul 2012 14:37:07 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q62Eb7FO062263 for perforce@freebsd.org; Mon, 2 Jul 2012 14:37:07 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Mon, 2 Jul 2012 14:37:07 GMT Message-Id: <201207021437.q62Eb7FO062263@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213777 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jul 2012 14:37:08 -0000 http://p4web.freebsd.org/@@213777?ac=10 Change 213777 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/02 14:36:44 Define a kernel option to disable console-level flow control for writes in the Altera JTAG UART driver, and set in various BERI kernel configurations. In the future we will try to do something more interesting with the AC bit. This doesn't affect the high-level tty driver, which exposes flow control up the stack, but should prevent the boot from stalling when JTAG is not connected. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/conf/options.mips#5 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#3 edit .. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_MDROOT#5 edit .. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_SDROOT#6 edit .. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_SIM_MDROOT#2 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/conf/options.mips#5 (text+ko) ==== @@ -47,6 +47,8 @@ ISA_MIPS64 opt_cputype.h ISA_MIPS64v2 opt_cputype.h +ALTERA_JTAG_UART_FC_DISABLE opt_jtag_uart.h + COMPAT_FREEBSD32 opt_compat.h YAMON opt_global.h ==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#3 (text+ko) ==== @@ -31,6 +31,8 @@ #include __FBSDID("$FreeBSD$"); +#include "opt_jtag_uart.h" + #include #include #include @@ -154,6 +156,42 @@ ALTERA_JTAG_UART_CONTROL_OFF))); } +static inline void +aju_cons_control_write(uint32_t v) +{ + + mips_iowrite_uint32le(mips_phys_to_uncached(BERI_UART_BASE + + ALTERA_JTAG_UART_CONTROL_OFF), v); +} + +/* + * Routines to query (and clear) the AC bit, which indicates that a JTAG + * client has polled since it was last cleared. + */ +__unused static int +aju_cons_ac_get(void) +{ + uint32_t v; + + AJU_CONSOLE_LOCK_ASSERT(); + + v = aju_cons_control_read(); + return ((v & ALTERA_JTAG_UART_CONTROL_AC) != 0); + +} + +__unused static int +aju_cons_ac_clear(void) +{ + uint32_t v; + + AJU_CONSOLE_LOCK_ASSERT(); + + v = aju_cons_control_read(); + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); +} + /* * Slightly higher-level routines aware of buffering and flow control. */ @@ -161,8 +199,12 @@ aju_cons_writable(void) { +#ifdef ALTERA_JTAG_UART_FC_DISABLE + return (1); +#else return ((aju_cons_control_read() & ALTERA_JTAG_UART_CONTROL_WSPACE) != 0); +#endif } static int ==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_MDROOT#5 (text+ko) ==== @@ -21,6 +21,8 @@ makeoptions MFS_IMAGE=/local/scratch/rnw24/mdroot.img options ROOTDEVNAME=\"ufs:md0\" +options ALTERA_JTAG_UART_FC_DISABLE + device altera_avgen device altera_jtag_uart device altera_sdcard ==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_SDROOT#6 (text+ko) ==== @@ -14,6 +14,8 @@ options ROOTDEVNAME=\"ufs:altera_sdcard0\" +options ALTERA_JTAG_UART_FC_DISABLE + device altera_avgen device altera_jtag_uart device altera_sdcard ==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_SIM_MDROOT#2 (text+ko) ==== @@ -20,6 +20,8 @@ makeoptions MFS_IMAGE=/local/scratch/rnw24/mdroot.img options ROOTDEVNAME=\"ufs:md0\" +options ALTERA_JTAG_UART_FC_DISABLE + device altera_avgen device altera_jtag_uart device altera_sdcard From owner-p4-projects@FreeBSD.ORG Mon Jul 2 16:12:42 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5CC2B1065670; Mon, 2 Jul 2012 16:12:42 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 072E5106564A for ; Mon, 2 Jul 2012 16:12:42 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id DE6948FC0A for ; Mon, 2 Jul 2012 16:12:41 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q62GCf5Q066301 for ; Mon, 2 Jul 2012 16:12:41 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q62GCf8L066298 for perforce@freebsd.org; Mon, 2 Jul 2012 16:12:41 GMT (envelope-from jhb@freebsd.org) Date: Mon, 2 Jul 2012 16:12:41 GMT Message-Id: <201207021612.q62GCf8L066298@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213780 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Jul 2012 16:12:42 -0000 http://p4web.freebsd.org/@@213780?ac=10 Change 213780 by jhb@jhb_jhbbsd on 2012/07/02 16:12:25 An experimental patch to let threads blocking on low memory during page faults lend priority to pagedaemon. Affected files ... .. //depot/projects/smpng/sys/vm/vm_page.c#128 edit .. //depot/projects/smpng/sys/vm/vm_pageout.c#90 edit .. //depot/projects/smpng/sys/vm/vm_pageout.h#22 edit Differences ... ==== //depot/projects/smpng/sys/vm/vm_page.c#128 (text+ko) ==== @@ -1866,6 +1866,7 @@ vm_pages_needed = 1; wakeup(&vm_pages_needed); } + pagedaemon_lendprio(); msleep(&cnt.v_free_count, &vm_page_queue_free_mtx, PDROP | PVM, "vmwait", 0); } @@ -1890,6 +1891,7 @@ vm_pages_needed = 1; wakeup(&vm_pages_needed); } + pagedaemon_lendprio(); msleep(&cnt.v_free_count, &vm_page_queue_free_mtx, PDROP | PUSER, "pfault", 0); } @@ -2340,7 +2342,7 @@ (object->type == OBJT_SWAP && !vm_pager_has_page(object, m->pindex, NULL, NULL))) { /* - * Hypothesis: A cache-elgible page belonging to a + * Hypothesis: A cache-eligible page belonging to a * default object or swap object but without a backing * store must be zero filled. */ ==== //depot/projects/smpng/sys/vm/vm_pageout.c#90 (text+ko) ==== @@ -116,6 +116,7 @@ static void vm_pageout_scan(int pass); struct proc *pageproc; +static struct thread *pagethread; static struct kproc_desc page_kp = { "pagedaemon", @@ -1558,6 +1559,7 @@ if (vm_pageout_full_stats_interval == 0) vm_pageout_full_stats_interval = vm_pageout_stats_interval * 4; + pagethread = curthread; swap_pager_swap_init(); pass = 0; /* @@ -1574,7 +1576,13 @@ if (vm_pages_needed && !vm_page_count_min()) { if (!vm_paging_needed()) vm_pages_needed = 0; + critical_enter(); + thread_lock(pagethread); + if (pagethread->td_flags & TDF_BORROWING) + sched_unlend_prio(pagethread, PRI_MAX); + thread_unlock(pagethread); wakeup(&cnt.v_free_count); + critical_exit(); } if (vm_pages_needed) { /* @@ -1614,6 +1622,22 @@ } /* + * Called by threads blocking on pagedaemon to lend their priority to + * pagedaemon while waiting for it to free pages. + */ +void +pagedaemon_lendprio(void) +{ + + if (curthread != pagethread) { + thread_lock(pagethread); + if (pagethread->td_priority > curthread->td_priority) + sched_lend_prio(pagethread, curthread->td_priority); + thread_unlock(pagethread); + } +} + +/* * Unless the free page queue lock is held by the caller, this function * should be regarded as advisory. Specifically, the caller should * not msleep() on &cnt.v_free_count following this function unless ==== //depot/projects/smpng/sys/vm/vm_pageout.h#22 (text+ko) ==== @@ -94,6 +94,7 @@ * Signal pageout-daemon and wait for it. */ +void pagedaemon_lendprio(void); extern void pagedaemon_wakeup(void); #define VM_WAIT vm_wait() #define VM_WAITPFAULT vm_waitpfault() From owner-p4-projects@FreeBSD.ORG Tue Jul 3 14:41:59 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 8C8231065673; Tue, 3 Jul 2012 14:41:58 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 445521065670 for ; Tue, 3 Jul 2012 14:41:58 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 311A68FC12 for ; Tue, 3 Jul 2012 14:41:58 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q63EfwEL039036 for ; Tue, 3 Jul 2012 14:41:58 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q63Efvcm039033 for perforce@freebsd.org; Tue, 3 Jul 2012 14:41:57 GMT (envelope-from jhb@freebsd.org) Date: Tue, 3 Jul 2012 14:41:57 GMT Message-Id: <201207031441.q63Efvcm039033@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213849 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2012 14:42:00 -0000 http://p4web.freebsd.org/@@213849?ac=10 Change 213849 by jhb@jhb_ralph on 2012/07/03 14:41:27 Add decoding for 'xsave', 'xrstor', 'xsaveopt', 'vmcall', 'vmlaunch', 'vmresume', 'xgetbv', 'xsetbv', and 'rdtscp'. Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#7 edit .. //depot/projects/smpng/sys/modules/x86dis/Makefile#1 add .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#1 add Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#7 (text+ko) ==== @@ -169,9 +169,9 @@ "fxrstor", "ldmxcsr", "stmxcsr", - "", - "", - "", + "xsave", + "xrstor", + "xsaveopt", "clflush" }; @@ -1269,6 +1269,26 @@ /* Special cases that don't fit well in the tables. */ if (ip->i_extra == db_Grp7 && f_mod(rex, regmodrm) == 3) { switch (regmodrm) { + case 0xc1: + i_name = "vmcall"; + i_size = NONE; + i_mode = 0; + break; + case 0xc2: + i_name = "vmlaunch"; + i_size = NONE; + i_mode = 0; + break; + case 0xc3: + i_name = "vmresume"; + i_size = NONE; + i_mode = 0; + break; + case 0xc3: + i_name = "vmxoff"; + i_size = NONE; + i_mode = 0; + break; case 0xc8: i_name = "monitor"; i_size = NONE; @@ -1279,11 +1299,26 @@ i_size = NONE; i_mode = 0; break; + case 0xd0: + i_name = "xgetbv"; + i_size = NONE; + i_mode = 0; + break; + case 0xd1: + i_name = "xsetbv"; + i_size = NONE; + i_mode = 0; + break; case 0xf8: i_name = "swapgs"; i_size = NONE; i_mode = 0; break; + case 0xf9: + i_name = "rdtscp"; + i_size = NONE; + i_mode = 0; + break; } } if (ip->i_extra == db_Grp15 && f_mod(rex, regmodrm) == 3) { From owner-p4-projects@FreeBSD.ORG Tue Jul 3 14:56:14 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 070EA106567D; Tue, 3 Jul 2012 14:56:13 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B13831065679 for ; Tue, 3 Jul 2012 14:56:12 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 96A5D8FC12 for ; Tue, 3 Jul 2012 14:56:12 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q63EuCsv039361 for ; Tue, 3 Jul 2012 14:56:12 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q63EuCkX039358 for perforce@freebsd.org; Tue, 3 Jul 2012 14:56:12 GMT (envelope-from jhb@freebsd.org) Date: Tue, 3 Jul 2012 14:56:12 GMT Message-Id: <201207031456.q63EuCkX039358@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213850 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2012 14:56:14 -0000 http://p4web.freebsd.org/@@213850?ac=10 Change 213850 by jhb@jhb_ralph on 2012/07/03 14:55:34 More test cases. Affected files ... .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#2 edit Differences ... ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#2 (text+ko) ==== @@ -25,6 +25,28 @@ } static __inline void +xsaveopt(char *addr, uint64_t mask) +{ + uint32_t low, hi; + + low = mask; + hi = mask >> 32; + /* xsaveopt (%rdi) */ + __asm __volatile(".byte 0x0f,0xae,0x37" : : + "a" (low), "d" (hi), "D" (addr) : "memory"); +} + +static __inline uint64_t +xgetbv(uint32_t reg) +{ + uint32_t low, high; + + __asm __volatile(".byte 0x0f,0x01,0xd0" : "=a" (low), "=d" (high) : + "c" (reg)); + return (low | ((uint64_t)high << 32)); +} + +static __inline void xsetbv(uint32_t reg, uint64_t val) { uint32_t low, hi; @@ -35,13 +57,54 @@ "c" (reg), "a" (low), "d" (hi)); } +static __inline uint64_t +rdtscp(uint32_t *aux) +{ + uint32_t low, high; + + __asm __volatile("rdtscp" : "=a" (low), "=d" (high), "=c" (*aux)); + return (low | ((uint64_t)high << 32)); +} + +static __inline void +vmcall(void) +{ + + __asm __volatile(".byte 0x0f,0x01,0xc1"); +} + +static __inline void +vmlaunch(void) +{ + + __asm __volatile(".byte 0x0f,0x01,0xc2"); +} + +static __inline void +vmresume(void) +{ + + __asm __volatile(".byte 0x0f,0x01,0xc3"); +} + extern void isn_list(char *addr, uint32_t reg, uint64_t mask, uint64_t val); void isn_list(char *addr, uint32_t reg, uint64_t mask, uint64_t val) { + uint32_t aux; + + /* + * XXX: More to add? + */ + rdtscp(&aux); + xsaveopt(addr, mask); xrstor(addr, mask); xsave(addr, mask); + xgetbv(reg); xsetbv(reg, val); + vmcall(); + vmlaunch(); + vmresume(); } From owner-p4-projects@FreeBSD.ORG Tue Jul 3 20:00:19 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 650111065674; Tue, 3 Jul 2012 20:00:19 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 279AD106566B for ; Tue, 3 Jul 2012 20:00:19 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 019768FC14 for ; Tue, 3 Jul 2012 20:00:19 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q63K0I2A056168 for ; Tue, 3 Jul 2012 20:00:18 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q63K0IgV056165 for perforce@freebsd.org; Tue, 3 Jul 2012 20:00:18 GMT (envelope-from brooks@freebsd.org) Date: Tue, 3 Jul 2012 20:00:18 GMT Message-Id: <201207032000.q63K0IgV056165@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213865 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2012 20:00:19 -0000 http://p4web.freebsd.org/@@213865?ac=10 Change 213865 by brooks@brooks_ecr_current on 2012/07/03 19:59:15 Checkpoint part of the beginnings of a file browser. Basically all functionality is currently missing, but the background image is displayed and the tty is set up. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/Makefile#7 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/Makefile#1 add .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#1 add .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/Makefile#1 add .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/browser.png#1 add Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/Makefile#7 (text+ko) ==== @@ -1,6 +1,7 @@ .include -SUBDIR= cycle_led \ +SUBDIR= browser \ + cycle_led \ flashit \ minifile \ pictview \ From owner-p4-projects@FreeBSD.ORG Tue Jul 3 20:01:25 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 520841065670; Tue, 3 Jul 2012 20:01:25 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 145DD106566B for ; Tue, 3 Jul 2012 20:01:25 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id D99D88FC0C for ; Tue, 3 Jul 2012 20:01:24 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q63K1Oaa056233 for ; Tue, 3 Jul 2012 20:01:24 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q63K1OJP056230 for perforce@freebsd.org; Tue, 3 Jul 2012 20:01:24 GMT (envelope-from jhb@freebsd.org) Date: Tue, 3 Jul 2012 20:01:24 GMT Message-Id: <201207032001.q63K1OJP056230@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213866 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2012 20:01:25 -0000 http://p4web.freebsd.org/@@213866?ac=10 Change 213866 by jhb@jhb_ralph on 2012/07/03 20:00:43 Let the assembler see xsave/xrstor/xsaveopt/xgetbv/xsetbv instructions if NEW_AS is defined. (I'm have some patches to add those to binutils.) Affected files ... .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#3 edit Differences ... ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#3 (text+ko) ==== @@ -1,5 +1,7 @@ #include +//#define NEW_AS + static __inline void xrstor(char *addr, uint64_t mask) { @@ -7,9 +9,13 @@ low = mask; hi = mask >> 32; +#ifdef NEW_AS + __asm __volatile("xrstor %0" : : "m" (addr), "a" (low), "d" (hi)); +#else /* xrstor (%rdi) */ __asm __volatile(".byte 0x0f,0xae,0x2f" : : "a" (low), "d" (hi), "D" (addr)); +#endif } static __inline void @@ -19,9 +25,14 @@ low = mask; hi = mask >> 32; +#ifdef NEW_AS + __asm __volatile("xsave %0" : "=m" (addr) : "a" (low), "d" (hi) : + "memory"); +#else /* xsave (%rdi) */ __asm __volatile(".byte 0x0f,0xae,0x27" : : "a" (low), "d" (hi), "D" (addr) : "memory"); +#endif } static __inline void @@ -31,9 +42,14 @@ low = mask; hi = mask >> 32; +#ifdef NEW_AS + __asm __volatile("xsaveopt %0" : "=m" (addr) : "a" (low), "d" (hi) : + "memory"); +#else /* xsaveopt (%rdi) */ __asm __volatile(".byte 0x0f,0xae,0x37" : : "a" (low), "d" (hi), "D" (addr) : "memory"); +#endif } static __inline uint64_t @@ -41,8 +57,12 @@ { uint32_t low, high; +#ifdef NEW_AS + __asm __volatile("xgetbv" : "=a" (low), "=d" (high) : "c" (reg)); +#else __asm __volatile(".byte 0x0f,0x01,0xd0" : "=a" (low), "=d" (high) : "c" (reg)); +#endif return (low | ((uint64_t)high << 32)); } @@ -53,8 +73,12 @@ low = val; hi = val >> 32; +#ifdef NEW_AS + __asm __volatile("xsetbv" : : "c" (reg), "a" (low), "d" (hi)); +#else __asm __volatile(".byte 0x0f,0x01,0xd1" : : "c" (reg), "a" (low), "d" (hi)); +#endif } static __inline uint64_t From owner-p4-projects@FreeBSD.ORG Tue Jul 3 20:03:37 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 812FE1065673; Tue, 3 Jul 2012 20:03:37 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 43903106566B for ; Tue, 3 Jul 2012 20:03:37 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 148F88FC0A for ; Tue, 3 Jul 2012 20:03:37 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q63K3afJ056319 for ; Tue, 3 Jul 2012 20:03:36 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q63K3aBL056316 for perforce@freebsd.org; Tue, 3 Jul 2012 20:03:36 GMT (envelope-from brooks@freebsd.org) Date: Tue, 3 Jul 2012 20:03:36 GMT Message-Id: <201207032003.q63K3aBL056316@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213867 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2012 20:03:37 -0000 http://p4web.freebsd.org/@@213867?ac=10 Change 213867 by brooks@brooks_ecr_current on 2012/07/03 20:03:25 Remove a defunct variable. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/pictview/pictview.c#8 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/pictview/pictview.c#8 (text+ko) ==== @@ -637,7 +637,6 @@ main(int argc, char *argv[]) { int tty; - pid_t pid; char *devpath; fb_buf = malloc(sizeof(*fb_buf) * fb_width * fb_height); From owner-p4-projects@FreeBSD.ORG Tue Jul 3 23:00:21 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 110A11065675; Tue, 3 Jul 2012 23:00:21 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id CB5A11065672 for ; Tue, 3 Jul 2012 23:00:20 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id A02098FC08 for ; Tue, 3 Jul 2012 23:00:20 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q63N0KIt064574 for ; Tue, 3 Jul 2012 23:00:20 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q63N0K3h064571 for perforce@freebsd.org; Tue, 3 Jul 2012 23:00:20 GMT (envelope-from jhb@freebsd.org) Date: Tue, 3 Jul 2012 23:00:20 GMT Message-Id: <201207032300.q63N0K3h064571@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213872 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 03 Jul 2012 23:00:21 -0000 http://p4web.freebsd.org/@@213872?ac=10 Change 213872 by jhb@jhb_ralph on 2012/07/03 23:00:05 Fix the memory operand for xsave/xrstor. Affected files ... .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#4 edit Differences ... ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#4 (text+ko) ==== @@ -10,7 +10,7 @@ low = mask; hi = mask >> 32; #ifdef NEW_AS - __asm __volatile("xrstor %0" : : "m" (addr), "a" (low), "d" (hi)); + __asm __volatile("xrstor %0" : : "m" (*addr), "a" (low), "d" (hi)); #else /* xrstor (%rdi) */ __asm __volatile(".byte 0x0f,0xae,0x2f" : : @@ -26,7 +26,7 @@ low = mask; hi = mask >> 32; #ifdef NEW_AS - __asm __volatile("xsave %0" : "=m" (addr) : "a" (low), "d" (hi) : + __asm __volatile("xsave %0" : "=m" (*addr) : "a" (low), "d" (hi) : "memory"); #else /* xsave (%rdi) */ @@ -43,7 +43,7 @@ low = mask; hi = mask >> 32; #ifdef NEW_AS - __asm __volatile("xsaveopt %0" : "=m" (addr) : "a" (low), "d" (hi) : + __asm __volatile("xsaveopt %0" : "=m" (*addr) : "a" (low), "d" (hi) : "memory"); #else /* xsaveopt (%rdi) */ From owner-p4-projects@FreeBSD.ORG Wed Jul 4 07:43:13 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B250E1065673; Wed, 4 Jul 2012 07:43:11 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 32CDC106566B for ; Wed, 4 Jul 2012 07:43:11 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 191778FC17 for ; Wed, 4 Jul 2012 07:43:11 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q647hAjJ094881 for ; Wed, 4 Jul 2012 07:43:10 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q647hAsI094878 for perforce@freebsd.org; Wed, 4 Jul 2012 07:43:10 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Wed, 4 Jul 2012 07:43:10 GMT Message-Id: <201207040743.q647hAsI094878@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213884 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Jul 2012 07:43:13 -0000 http://p4web.freebsd.org/@@213884?ac=10 Change 213884 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/04 07:43:08 At the low-level console layer of the Altera JTAG UART driver, introduce a new "adaptive" model for write flow control, which attempts to provide full reliability only when the JTAG client is present. This is somewhat awkward to implement, as JTAG presence is indicated by the setting of a bit at an uncertain polling interval, which must be routinely cleared by software to detect continued presence. At higher layers in the driver, we will be able to rely on timers to "time out" an absent JTAG client, but at the console layer, we instead detect JTAG disappearing only at write-time, where we will spin polling for space in the write FIFO as long as the AC bit keeps being set bysoftware. This requires some hand-waving at a poll interval; I'vechosen 10ms arbitrarily, which appears to work thus far, but might need re-tuning. As with other properties at the low-level console layer, I've exposed the symbol for in-flight JTAG state up the stack so that the TTY layer can see and manipulate it as well. This removes the need for ALTERA_JTAG_UART_FC_DISABLE. I will separately commit the changes to the TTY-layer driver. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/conf/options.mips#6 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#4 edit .. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_MDROOT#6 edit .. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_SDROOT#7 edit .. //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_SIM_MDROOT#3 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/conf/options.mips#6 (text+ko) ==== @@ -47,8 +47,6 @@ ISA_MIPS64 opt_cputype.h ISA_MIPS64v2 opt_cputype.h -ALTERA_JTAG_UART_FC_DISABLE opt_jtag_uart.h - COMPAT_FREEBSD32 opt_compat.h YAMON opt_global.h ==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#4 (text+ko) ==== @@ -31,8 +31,6 @@ #include __FBSDID("$FreeBSD$"); -#include "opt_jtag_uart.h" - #include #include #include @@ -57,6 +55,7 @@ */ char aju_cons_buffer_data; int aju_cons_buffer_valid; +int aju_cons_jtag_present; struct mtx aju_cons_lock; /* @@ -71,6 +70,14 @@ static cn_ungrab_t aju_cnungrab; /* + * JTAG sets the ALTERA_JTAG_UART_CONTROL_AC bit whenever it accesses the + * FIFO. This allows us to (sort of) tell when JTAG is present, so that we + * can adopt lossy, rather than blocking, behaviour when JTAG isn't there. + * When it is present, we do full flow control. + */ +#define ALTERA_JTAG_UART_AC_POLL_DELAY 10000 + +/* * I/O routines lifted from Deimos. This is not only MIPS-specific, but also * BERI-specific, as we're hard coding the the address at which we expect to * find the Altera JTAG UART and using it unconditionally. We use these @@ -165,49 +172,9 @@ } /* - * Routines to query (and clear) the AC bit, which indicates that a JTAG - * client has polled since it was last cleared. - */ -__unused static int -aju_cons_ac_get(void) -{ - uint32_t v; - - AJU_CONSOLE_LOCK_ASSERT(); - - v = aju_cons_control_read(); - return ((v & ALTERA_JTAG_UART_CONTROL_AC) != 0); - -} - -__unused static int -aju_cons_ac_clear(void) -{ - uint32_t v; - - AJU_CONSOLE_LOCK_ASSERT(); - - v = aju_cons_control_read(); - v &= ~ALTERA_JTAG_UART_CONTROL_AC; - aju_cons_control_write(v); -} - -/* * Slightly higher-level routines aware of buffering and flow control. */ static int -aju_cons_writable(void) -{ - -#ifdef ALTERA_JTAG_UART_FC_DISABLE - return (1); -#else - return ((aju_cons_control_read() & - ALTERA_JTAG_UART_CONTROL_WSPACE) != 0); -#endif -} - -static int aju_cons_readable(void) { uint32_t v; @@ -228,10 +195,41 @@ static void aju_cons_write(char ch) { + uint32_t v; AJU_CONSOLE_LOCK_ASSERT(); - while (!aju_cons_writable()); + /* + * The flow control logic here is somewhat subtle: we want to wait for + * write buffer space only while JTAG is present. However, we can't + * directly ask if JTAG is present -- just whether it's been seen + * since we last cleared the ALTERA_JTAG_UART_CONTROL_AC bit. As + * such, implement a polling loop in which we both wait for space and + * try to decide whether JTAG has disappeared on us. We will have to + * wait one complete polling delay to detect that JTAG has gone away, + * but otherwise shouldn't wait any further once it has gone. And we + * had to wait for buffer space anyway, if it was there. + * + * XXXRW: The polling delay may require tuning. + */ + v = aju_cons_control_read(); + if (v & ALTERA_JTAG_UART_CONTROL_AC) { + aju_cons_jtag_present = 1; + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); + } + while ((v & ALTERA_JTAG_UART_CONTROL_WSPACE) == 0) { + if (!aju_cons_jtag_present) + return; + DELAY(ALTERA_JTAG_UART_AC_POLL_DELAY); + v = aju_cons_control_read(); + if (v & ALTERA_JTAG_UART_CONTROL_AC) { + aju_cons_jtag_present = 1; + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); + } else + aju_cons_jtag_present = 0; + } aju_cons_data_write(ch); } @@ -260,8 +258,15 @@ static void aju_cninit(struct consdev *cp) { + uint32_t v; AJU_CONSOLE_LOCK_INIT(); + + AJU_CONSOLE_LOCK(); + v = aju_cons_control_read(); + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); + AJU_CONSOLE_UNLOCK(); } static void ==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_MDROOT#6 (text+ko) ==== @@ -21,8 +21,6 @@ makeoptions MFS_IMAGE=/local/scratch/rnw24/mdroot.img options ROOTDEVNAME=\"ufs:md0\" -options ALTERA_JTAG_UART_FC_DISABLE - device altera_avgen device altera_jtag_uart device altera_sdcard ==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_DE4_SDROOT#7 (text+ko) ==== @@ -14,8 +14,6 @@ options ROOTDEVNAME=\"ufs:altera_sdcard0\" -options ALTERA_JTAG_UART_FC_DISABLE - device altera_avgen device altera_jtag_uart device altera_sdcard ==== //depot/projects/ctsrd/beribsd/src/sys/mips/conf/BERI_SIM_MDROOT#3 (text+ko) ==== @@ -20,8 +20,6 @@ makeoptions MFS_IMAGE=/local/scratch/rnw24/mdroot.img options ROOTDEVNAME=\"ufs:md0\" -options ALTERA_JTAG_UART_FC_DISABLE - device altera_avgen device altera_jtag_uart device altera_sdcard From owner-p4-projects@FreeBSD.ORG Wed Jul 4 13:15:56 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0D4B3106566C; Wed, 4 Jul 2012 13:15:55 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B82D51065672 for ; Wed, 4 Jul 2012 13:15:54 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 8950F8FC0A for ; Wed, 4 Jul 2012 13:15:54 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q64DFsiE016326 for ; Wed, 4 Jul 2012 13:15:54 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q64DFsup016323 for perforce@freebsd.org; Wed, 4 Jul 2012 13:15:54 GMT (envelope-from jhb@freebsd.org) Date: Wed, 4 Jul 2012 13:15:54 GMT Message-Id: <201207041315.q64DFsup016323@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213890 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Jul 2012 13:15:56 -0000 http://p4web.freebsd.org/@@213890?ac=10 Change 213890 by jhb@jhb_ralph on 2012/07/04 13:15:40 - Add rxcr() and load_xcr() wrappers around xgetbv/xsetbv. - Use the actual instructions for xsave and xrstor. Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/fpu.c#23 edit .. //depot/projects/smpng/sys/amd64/include/cpufunc.h#25 edit Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/fpu.c#23 (text+ko) ==== @@ -85,9 +85,7 @@ low = mask; hi = mask >> 32; - /* xrstor (%rdi) */ - __asm __volatile(".byte 0x0f,0xae,0x2f" : : - "a" (low), "d" (hi), "D" (addr)); + __asm __volatile("xrstor %0" : : "m" (*addr), "a" (low), "d" (hi)); } static __inline void @@ -97,22 +95,10 @@ low = mask; hi = mask >> 32; - /* xsave (%rdi) */ - __asm __volatile(".byte 0x0f,0xae,0x27" : : - "a" (low), "d" (hi), "D" (addr) : "memory"); + __asm __volatile("xsave %0" : "=m" (*addr) : "a" (low), "d" (hi) : + "memory"); } -static __inline void -xsetbv(uint32_t reg, uint64_t val) -{ - uint32_t low, hi; - - low = val; - hi = val >> 32; - __asm __volatile(".byte 0x0f,0x01,0xd1" : : - "c" (reg), "a" (low), "d" (hi)); -} - #else /* !(__GNUCLIKE_ASM && !lint) */ void fldcw(u_short cw); @@ -127,7 +113,6 @@ void stop_emulating(void); void xrstor(char *addr, uint64_t mask); void xsave(char *addr, uint64_t mask); -void xsetbv(uint32_t reg, uint64_t val); #endif /* __GNUCLIKE_ASM && !lint */ @@ -238,7 +223,7 @@ if (use_xsave) { load_cr4(rcr4() | CR4_XSAVE); - xsetbv(XCR0, xsave_mask); + load_xcr(XCR0, xsave_mask); } /* ==== //depot/projects/smpng/sys/amd64/include/cpufunc.h#25 (text+ko) ==== @@ -411,6 +411,25 @@ return (data); } +static __inline u_long +rxcr(u_int reg) +{ + u_int low, high; + + __asm __volatile("xgetbv" : "=a" (low), "=d" (high) : "c" (reg)); + return (low | ((uint64_t)high << 32)); +} + +static __inline void +load_xcr(u_int reg, u_long val) +{ + u_int low, hi; + + low = val; + hi = val >> 32; + __asm __volatile("xsetbv" : : "c" (reg), "a" (low), "d" (hi)); +} + /* * Global TLB flush (except for thise for pages marked PG_G) */ From owner-p4-projects@FreeBSD.ORG Wed Jul 4 14:25:10 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id D98691065675; Wed, 4 Jul 2012 14:25:08 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7FB4C106566C for ; Wed, 4 Jul 2012 14:25:08 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 52C3B8FC19 for ; Wed, 4 Jul 2012 14:25:08 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q64EP8Un018760 for ; Wed, 4 Jul 2012 14:25:08 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q64EP8vQ018757 for perforce@freebsd.org; Wed, 4 Jul 2012 14:25:08 GMT (envelope-from jhb@freebsd.org) Date: Wed, 4 Jul 2012 14:25:08 GMT Message-Id: <201207041425.q64EP8vQ018757@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213892 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Jul 2012 14:25:10 -0000 http://p4web.freebsd.org/@@213892?ac=10 Change 213892 by jhb@jhb_ralph on 2012/07/04 14:24:14 More instructions to make sure their disassembly still works since they share a group with xsave/xrstor. Affected files ... .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#5 edit Differences ... ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#5 (text+ko) ==== @@ -131,4 +131,8 @@ vmcall(); vmlaunch(); vmresume(); + lfence(); + mfence(); + sfence(); + clflush(addr); } From owner-p4-projects@FreeBSD.ORG Wed Jul 4 16:37:00 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 25B851065676; Wed, 4 Jul 2012 16:36:59 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D22331065673 for ; Wed, 4 Jul 2012 16:36:58 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id B9B0C8FC08 for ; Wed, 4 Jul 2012 16:36:58 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q64GawOp024969 for ; Wed, 4 Jul 2012 16:36:58 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q64Gawgl024966 for perforce@freebsd.org; Wed, 4 Jul 2012 16:36:58 GMT (envelope-from jhb@freebsd.org) Date: Wed, 4 Jul 2012 16:36:58 GMT Message-Id: <201207041636.q64Gawgl024966@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213897 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Jul 2012 16:37:00 -0000 http://p4web.freebsd.org/@@213897?ac=10 Change 213897 by jhb@jhb_jhbbsd on 2012/07/04 16:35:56 Compile. Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#8 edit .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#6 edit Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#8 (text+ko) ==== @@ -1284,7 +1284,7 @@ i_size = NONE; i_mode = 0; break; - case 0xc3: + case 0xc4: i_name = "vmxoff"; i_size = NONE; i_mode = 0; ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#6 (text+ko) ==== @@ -1,6 +1,7 @@ #include +#include -//#define NEW_AS +#define NEW_AS static __inline void xrstor(char *addr, uint64_t mask) @@ -131,8 +132,8 @@ vmcall(); vmlaunch(); vmresume(); - lfence(); + __asm __volatile("lfence" ::: "memory"); mfence(); - sfence(); - clflush(addr); + __asm __volatile("sfence" ::: "memory"); + clflush((u_long)addr); } From owner-p4-projects@FreeBSD.ORG Thu Jul 5 11:45:11 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5786C106564A; Thu, 5 Jul 2012 11:45:10 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 0C62F1065676 for ; Thu, 5 Jul 2012 11:45:10 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id E41E28FC1D for ; Thu, 5 Jul 2012 11:45:09 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q65Bj9B2073548 for ; Thu, 5 Jul 2012 11:45:09 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q65Bj9TQ073545 for perforce@freebsd.org; Thu, 5 Jul 2012 11:45:09 GMT (envelope-from jhb@freebsd.org) Date: Thu, 5 Jul 2012 11:45:09 GMT Message-Id: <201207051145.q65Bj9TQ073545@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213933 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Jul 2012 11:45:12 -0000 http://p4web.freebsd.org/@@213933?ac=10 Change 213933 by jhb@jhb_jhbbsd on 2012/07/05 11:44:43 Use high rather than hi to be consistent with the rest of this file. Affected files ... .. //depot/projects/smpng/sys/amd64/include/cpufunc.h#26 edit Differences ... ==== //depot/projects/smpng/sys/amd64/include/cpufunc.h#26 (text+ko) ==== @@ -423,11 +423,11 @@ static __inline void load_xcr(u_int reg, u_long val) { - u_int low, hi; + u_int low, high; low = val; - hi = val >> 32; - __asm __volatile("xsetbv" : : "c" (reg), "a" (low), "d" (hi)); + high = val >> 32; + __asm __volatile("xsetbv" : : "c" (reg), "a" (low), "d" (high)); } /* From owner-p4-projects@FreeBSD.ORG Thu Jul 5 23:23:29 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id BCC88106566B; Thu, 5 Jul 2012 23:23:27 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5CA221065678 for ; Thu, 5 Jul 2012 23:23:27 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 45E048FC0A for ; Thu, 5 Jul 2012 23:23:27 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q65NNRPj025611 for ; Thu, 5 Jul 2012 23:23:27 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q65NNRPu025608 for perforce@freebsd.org; Thu, 5 Jul 2012 23:23:27 GMT (envelope-from brooks@freebsd.org) Date: Thu, 5 Jul 2012 23:23:27 GMT Message-Id: <201207052323.q65NNRPu025608@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213951 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 05 Jul 2012 23:23:29 -0000 http://p4web.freebsd.org/@@213951?ac=10 Change 213951 by brooks@brooks_ecr_current on 2012/07/05 23:23:23 Implement text rendering using fonts from syscons. Font file parsing code is from vidcontol. Also implement a fb_post_region() function to update rectangular regions of the framebuffer. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/Makefile#3 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.c#3 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.h#3 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/syscons-fonts.c#1 add Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/Makefile#3 (text+ko) ==== @@ -5,12 +5,15 @@ LIB= de4tc SHLIB_MAJOR= 1 -SRCS= de4tc.c +SRCS= de4tc.c syscons-fonts.c INCS= de4tc.h +.PATH: ${.CURDIR}/../../usr.sbin/vidcontrol +CFLAGS+=-I${.CURDIR}/../../usr.sbin/vidcontrol +SRCS+= decode.c + CFLAGS+= -I${.CURDIR}/../libvuln_png/ -#LDADD+= -L../libvuln_png/ -lvuln_png -lz -lm #WARNS?= 0 ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.c#3 (text+ko) ==== @@ -52,7 +52,7 @@ static int dispfd; static int textfd; static int fademode=0; -static volatile u_int32_t *pfbp; +volatile u_int32_t *pfbp; static volatile u_int16_t *tfbp; static volatile u_int32_t *mtlctrl; @@ -62,6 +62,9 @@ // number of lines in the line pattern static const int num_lines_pattern = 600; +const int fb_height = 480; +const int fb_width = 800; + /***************************************************************************** * hack around endian issue @@ -217,6 +220,17 @@ void +fb_post_region(u_int32_t *buf, int x, int y, int w, int h) +{ + int col, row; + + for (row = 0; row < h; row++) + for (col = 0; col < w; col++) + pfbp[(y + row) * fb_width + (x + col)] = buf[row * w + col]; +} + + +void fb_blend(int blend_text_bg, int blend_text_fg, int blend_pixel, int wash __unused) { mtlctrl[0] = ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.h#3 (text+ko) ==== @@ -1,5 +1,6 @@ /*- * Copyright (c) 2012 Simon W. Moore + * Copyright (c) 2012 SRI International * All rights reserved. * * This software was developed by SRI International and the University of @@ -38,8 +39,8 @@ extern int touch_gesture; extern int touch_count; -const int fb_height = 480; -const int fb_width = 800; +extern const int fb_height; +extern const int fb_width; void multitouch_pole(void); void multitouch_filter(void); @@ -50,6 +51,7 @@ void fb_putpixel(int px, int py, int colour); void fb_fill(int col); void fb_post(u_int32_t *buf); +void fb_post_region(u_int32_t *buf, int x, int y, int w, int h); void fb_blend(int blend_text_bg, int blend_text_fg, int blend_pixel, int wash); void fb_text_cursor(int x, int y); void fb_fade2off(void); @@ -58,4 +60,10 @@ void plot_line(int x1, int y1, int x2, int y2, unsigned int colour); void read_png_file(const char* file_name, u_int32_t* imgbuf, int maxwidth, int maxheight); +void fb_load_syscons_font(const char *type, const char *filename); +int fb_get_font_height(void); +int fb_get_font_width(void); +void fb_render_text(const char *string, int expand, u_int32_t con, u_int32_t coff, + u_int32_t *buffer, int w, int h); + #endif /* !_DE4TC_H_ */ From owner-p4-projects@FreeBSD.ORG Fri Jul 6 00:52:07 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 5AD75106564A; Fri, 6 Jul 2012 00:52:06 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 122291065670 for ; Fri, 6 Jul 2012 00:52:06 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id ECE498FC0A for ; Fri, 6 Jul 2012 00:52:05 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q660q5OO029159 for ; Fri, 6 Jul 2012 00:52:05 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q660q5jB029155 for perforce@freebsd.org; Fri, 6 Jul 2012 00:52:05 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 6 Jul 2012 00:52:05 GMT Message-Id: <201207060052.q660q5jB029155@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213956 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 00:52:07 -0000 http://p4web.freebsd.org/@@213956?ac=10 Change 213956 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/06 00:52:03 At the TTY layer of the Altera JTAG UART driver, poll intermittently for JTAG activity in order to disable flow-control based output. The low-level console and TTY layers share state so that they can use a combined notion of JTAG detection. This implementation slightly unsatisfying: we don't want to wait to see that JTAG is still there on every write, as that involves clearing the AC bit and then waiting a while to see if it comes back. However, there's also no way to flush writes stuck in the write buffer once JTAG is disconnected. As a result, when the JTAG console is restored, you see 512 bytes of earlier output. However, the good news is that leaving JTAG unplugged at boot not only doesn't block the kernel boot on low-level console output, but also no longer blocks the userspace boot on high-level console output, if JTAG is unplugged. Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.h#4 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#5 edit .. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_tty.c#6 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.h#4 (text+ko) ==== @@ -56,7 +56,8 @@ u_int ajus_flags; struct mtx *ajus_lockp; struct mtx ajus_lock; - struct callout ajus_callout; + struct callout ajus_io_callout; + struct callout ajus_ac_callout; /* * One-character buffer required because it's not possible to peek at @@ -66,6 +67,10 @@ int *ajus_buffer_validp; uint8_t ajus_buffer_data; uint8_t *ajus_buffer_datap; + int ajus_jtag_present; + int *ajus_jtag_presentp; + u_int ajus_jtag_missed; + u_int *ajus_jtag_missedp; }; #define AJU_TTYNAME "ttyu" @@ -126,6 +131,8 @@ extern struct mtx aju_cons_lock; extern char aju_cons_buffer_data; extern int aju_cons_buffer_valid; +extern int aju_cons_jtag_present; +extern u_int aju_cons_jtag_missed; /* * Base physical address of the JTAG UART in BERI. ==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#5 (text+ko) ==== @@ -56,6 +56,7 @@ char aju_cons_buffer_data; int aju_cons_buffer_valid; int aju_cons_jtag_present; +u_int aju_cons_jtag_missed; struct mtx aju_cons_lock; /* @@ -73,7 +74,9 @@ * JTAG sets the ALTERA_JTAG_UART_CONTROL_AC bit whenever it accesses the * FIFO. This allows us to (sort of) tell when JTAG is present, so that we * can adopt lossy, rather than blocking, behaviour when JTAG isn't there. - * When it is present, we do full flow control. + * When it is present, we do full flow control. This delay is how long we + * wait to see if JTAG has really disappeared when finding a full buffer and + * no AC bit set. */ #define ALTERA_JTAG_UART_AC_POLL_DELAY 10000 @@ -210,11 +213,16 @@ * but otherwise shouldn't wait any further once it has gone. And we * had to wait for buffer space anyway, if it was there. * + * If JTAG is spotted, reset the TTY-layer miss counter so console- + * layer clearing of the bit doesn't trigger a TTY-layer + * disconnection. + * * XXXRW: The polling delay may require tuning. */ v = aju_cons_control_read(); if (v & ALTERA_JTAG_UART_CONTROL_AC) { aju_cons_jtag_present = 1; + aju_cons_jtag_missed = 0; v &= ~ALTERA_JTAG_UART_CONTROL_AC; aju_cons_control_write(v); } ==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_tty.c#6 (text+ko) ==== @@ -55,7 +55,8 @@ static struct altera_jtag_uart_softc *aju_cons_sc; static tsw_outwakeup_t aju_outwakeup; -static void aju_timeout(void *); +static void aju_ac_callout(void *); +static void aju_io_callout(void *); static struct ttydevsw aju_ttydevsw = { .tsw_flags = TF_NOPREFIX, @@ -63,9 +64,16 @@ }; /* - * Poll for new input every (aju_pollinterval) ticks. + * When polling for the AC bit, the number of times we have to not see it + * before assuming JTAG has disappeared on us. By default, one second. + */ +#define AJU_JTAG_MAXMISS 5 + +/* + * Polling intervals for input/output and JTAG connection events. */ -static u_int aju_pollinterval = 1; +#define AJU_IO_POLLINTERVAL (hz/100) +#define AJU_AC_POLLINTERVAL (hz/5) /* * Low-level read and write register routines; the Altera UART is little @@ -232,6 +240,7 @@ static void aju_handle_output(struct altera_jtag_uart_softc *sc, struct tty *tp) { + uint32_t v; uint8_t ch; tty_lock_assert(tp, MA_OWNED); @@ -240,14 +249,31 @@ AJU_UNLOCK(sc); while (ttydisc_getc_poll(tp) != 0) { AJU_LOCK(sc); - if (aju_writable(sc)) { + v = aju_control_read(sc); + if ((v & ALTERA_JTAG_UART_CONTROL_WSPACE) != 0) { AJU_UNLOCK(sc); if (ttydisc_getc(tp, &ch, sizeof(ch)) != sizeof(ch)) panic("%s: ttydisc_getc", __func__); AJU_LOCK(sc); aju_data_write(sc, ch); } else { - aju_intr_writable_enable(sc); + /* + * If JTAG is not present, then we will drop this + * character instead of perhaps scheduling an + * interrupt to let us know when there is buffer + * space. Otherwise we might get a write interrupt + * later even though we aren't interested in sending + * anymore. Loop to drain TTY-layer buffer. + */ + if (*sc->ajus_jtag_presentp == 0) { + if (ttydisc_getc(tp, &ch, sizeof(ch)) != + sizeof(ch)) + panic("%s: ttydisc_getc 2", __func__); + AJU_UNLOCK(sc); + continue; + } + if (sc->ajus_irq_res != NULL) + aju_intr_writable_enable(sc); return; } AJU_UNLOCK(sc); @@ -269,7 +295,7 @@ } static void -aju_timeout(void *arg) +aju_io_callout(void *arg) { struct altera_jtag_uart_softc *sc = arg; struct tty *tp = sc->ajus_ttyp; @@ -293,7 +319,39 @@ * pending in the output buffer, or have we recently had input, but we * don't. */ - callout_reset(&sc->ajus_callout, aju_pollinterval, aju_timeout, sc); + callout_reset(&sc->ajus_io_callout, AJU_IO_POLLINTERVAL, + aju_io_callout, sc); + AJU_UNLOCK(sc); + tty_unlock(tp); +} + +static void +aju_ac_callout(void *arg) +{ + struct altera_jtag_uart_softc *sc = arg; + struct tty *tp = sc->ajus_ttyp; + uint32_t v; + + tty_lock(tp); + AJU_LOCK(sc); + v = aju_control_read(sc); + if (v & ALTERA_JTAG_UART_CONTROL_AC) { + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_control_write(sc, v); + if (*sc->ajus_jtag_presentp == 0) { + *sc->ajus_jtag_missedp = 0; + *sc->ajus_jtag_presentp = 1; + aju_handle_output(sc, tp); + } + } else if (*sc->ajus_jtag_presentp != 0) { + (*sc->ajus_jtag_missedp)++; + if (*sc->ajus_jtag_missedp >= AJU_JTAG_MAXMISS) { + *sc->ajus_jtag_presentp = 0; + aju_handle_output(sc, tp); + } + } + callout_reset(&sc->ajus_ac_callout, AJU_AC_POLLINTERVAL, + aju_ac_callout, sc); AJU_UNLOCK(sc); tty_unlock(tp); } @@ -333,11 +391,15 @@ sc->ajus_lockp = &aju_cons_lock; sc->ajus_buffer_validp = &aju_cons_buffer_valid; sc->ajus_buffer_datap = &aju_cons_buffer_data; + sc->ajus_jtag_presentp = &aju_cons_jtag_present; + sc->ajus_jtag_missedp = &aju_cons_jtag_missed; sc->ajus_flags |= ALTERA_JTAG_UART_FLAG_CONSOLE; } else { sc->ajus_lockp = &sc->ajus_lock; sc->ajus_buffer_validp = &sc->ajus_buffer_valid; sc->ajus_buffer_datap = &sc->ajus_buffer_data; + sc->ajus_jtag_presentp = &sc->ajus_jtag_present; + sc->ajus_jtag_missedp = &sc->ajus_jtag_missed; } /* @@ -376,10 +438,13 @@ aju_intr_readable_enable(sc); AJU_UNLOCK(sc); } else { - callout_init(&sc->ajus_callout, CALLOUT_MPSAFE); - callout_reset(&sc->ajus_callout, aju_pollinterval, - aju_timeout, sc); + callout_init(&sc->ajus_io_callout, CALLOUT_MPSAFE); + callout_reset(&sc->ajus_io_callout, AJU_IO_POLLINTERVAL, + aju_io_callout, sc); } + callout_init(&sc->ajus_ac_callout, CALLOUT_MPSAFE); + callout_reset(&sc->ajus_ac_callout, AJU_AC_POLLINTERVAL, + aju_ac_callout, sc); return (0); } @@ -399,7 +464,8 @@ bus_teardown_intr(sc->ajus_dev, sc->ajus_irq_res, sc->ajus_irq_cookie); } else - callout_drain(&sc->ajus_callout); + callout_drain(&sc->ajus_io_callout); + callout_drain(&sc->ajus_ac_callout); if (sc->ajus_flags & ALTERA_JTAG_UART_FLAG_CONSOLE) aju_cons_sc = NULL; tty_lock(tp); From owner-p4-projects@FreeBSD.ORG Fri Jul 6 12:22:18 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2E5761065672; Fri, 6 Jul 2012 12:22:18 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E4F21106566C for ; Fri, 6 Jul 2012 12:22:17 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id CC4448FC0C for ; Fri, 6 Jul 2012 12:22:17 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66CMHsj058710 for ; Fri, 6 Jul 2012 12:22:17 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66CMH38058707 for perforce@freebsd.org; Fri, 6 Jul 2012 12:22:17 GMT (envelope-from jhb@freebsd.org) Date: Fri, 6 Jul 2012 12:22:17 GMT Message-Id: <201207061222.q66CMH38058707@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213974 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 12:22:18 -0000 http://p4web.freebsd.org/@@213974?ac=10 Change 213974 by jhb@jhb_jhbbsd on 2012/07/06 12:21:44 Add decoding support for all VMX instructions along with several other cleanups and restructuring to the disassembler. Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#9 edit .. //depot/projects/smpng/sys/modules/x86dis/Makefile#2 edit .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#7 edit Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#9 (text+ko) ==== @@ -31,6 +31,7 @@ * Instruction disassembler. */ #include +#include #include #include @@ -47,7 +48,9 @@ #define DBLR 5 #define EXTR 6 #define SDEP 7 -#define NONE 8 +#define ADEP 8 +#define ESC 9 +#define NONE 10 /* * REX prefix and bits @@ -67,6 +70,7 @@ #define Eb 4 /* address, byte size */ #define R 5 /* register, in 'reg' field */ #define Rw 6 /* word register, in 'reg' field */ +#define Rq 39 /* quad register, in 'reg' field */ #define Ri 7 /* register in instruction */ #define S 8 /* segment reg, in 'reg' field */ #define Si 9 /* segment reg, in instruction */ @@ -120,6 +124,45 @@ (or pointer to table) */ }; +static const struct inst db_inst_0f388x[] = { +/*80*/ { "", TRUE, SDEP, op2(E, Rq), "invept" }, +/*81*/ { "", TRUE, SDEP, op2(E, Rq), "invvpid" }, +/*82*/ { "", FALSE, NONE, 0, 0 }, +/*83*/ { "", FALSE, NONE, 0, 0 }, +/*84*/ { "", FALSE, NONE, 0, 0 }, +/*85*/ { "", FALSE, NONE, 0, 0 }, +/*86*/ { "", FALSE, NONE, 0, 0 }, +/*87*/ { "", FALSE, NONE, 0, 0 }, + +/*88*/ { "", FALSE, NONE, 0, 0 }, +/*89*/ { "", FALSE, NONE, 0, 0 }, +/*8a*/ { "", FALSE, NONE, 0, 0 }, +/*8b*/ { "", FALSE, NONE, 0, 0 }, +/*8c*/ { "", FALSE, NONE, 0, 0 }, +/*8d*/ { "", FALSE, NONE, 0, 0 }, +/*8e*/ { "", FALSE, NONE, 0, 0 }, +/*8f*/ { "", FALSE, NONE, 0, 0 }, +}; + +static const struct inst * const db_inst_0f38[] = { + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + db_inst_0f388x, + 0, + 0, + 0, + 0, + 0, + 0, + 0 +}; + static const char * const db_Grp6[] = { "sldt", "str", @@ -160,8 +203,8 @@ "", "", "", - "", - "" + "vmptrld", + "vmptrst" }; static const char * const db_Grp15[] = { @@ -236,7 +279,7 @@ /*36*/ { "", FALSE, NONE, 0, 0 }, /*37*/ { "getsec",FALSE, NONE, 0, 0 }, -/*38*/ { "", FALSE, NONE, 0, 0 }, +/*38*/ { "", FALSE, ESC, 0, db_inst_0f38 }, /*39*/ { "", FALSE, NONE, 0, 0 }, /*3a*/ { "", FALSE, NONE, 0, 0 }, /*3b*/ { "", FALSE, NONE, 0, 0 }, @@ -266,6 +309,26 @@ /*4f*/ { "cmovnle",TRUE, NONE, op2(E, R), 0 }, }; +static const struct inst db_inst_0f7x[] = { +/*70*/ { "", FALSE, NONE, 0, 0 }, +/*71*/ { "", FALSE, NONE, 0, 0 }, +/*72*/ { "", FALSE, NONE, 0, 0 }, +/*73*/ { "", FALSE, NONE, 0, 0 }, +/*74*/ { "", FALSE, NONE, 0, 0 }, +/*75*/ { "", FALSE, NONE, 0, 0 }, +/*76*/ { "", FALSE, NONE, 0, 0 }, +/*77*/ { "", FALSE, NONE, 0, 0 }, + +/*78*/ { "vmread", TRUE, NONE, op2(Rq, E), 0 }, +/*79*/ { "vmwrite",TRUE, NONE, op2(E, Rq), 0 }, +/*7a*/ { "", FALSE, NONE, 0, 0 }, +/*7b*/ { "", FALSE, NONE, 0, 0 }, +/*7c*/ { "", FALSE, NONE, 0, 0 }, +/*7d*/ { "", FALSE, NONE, 0, 0 }, +/*7e*/ { "", FALSE, NONE, 0, 0 }, +/*7f*/ { "", FALSE, NONE, 0, 0 }, +}; + static const struct inst db_inst_0f8x[] = { /*80*/ { "jo", FALSE, NONE, op1(Dl), 0 }, /*81*/ { "jno", FALSE, NONE, op1(Dl), 0 }, @@ -373,7 +436,7 @@ db_inst_0f4x, 0, 0, - 0, + db_inst_0f7x, db_inst_0f8x, db_inst_0f9x, db_inst_0fax, @@ -582,7 +645,7 @@ /*0c*/ { "or", FALSE, BYTE, op2(I, A), 0 }, /*0d*/ { "or", FALSE, LONG, op2(I, A), 0 }, /*0e*/ { "push", FALSE, NONE, op1(Si), 0 }, -/*0f*/ { "", FALSE, NONE, 0, 0 }, +/*0f*/ { "", FALSE, ESC, 0, db_inst_0f }, /*10*/ { "adc", TRUE, BYTE, op2(R, E), 0 }, /*11*/ { "adc", TRUE, LONG, op2(R, E), 0 }, @@ -738,8 +801,8 @@ /*96*/ { "xchg", FALSE, LONG, op2(A, Ri), 0 }, /*97*/ { "xchg", FALSE, LONG, op2(A, Ri), 0 }, -/*98*/ { "cbw", FALSE, SDEP, 0, "cwde" }, /* cbw/cwde */ -/*99*/ { "cwd", FALSE, SDEP, 0, "cdq" }, /* cwd/cdq */ +/*98*/ { "cwde", FALSE, SDEP, 0, "cbw" }, +/*99*/ { "cdq", FALSE, SDEP, 0, "cwd" }, /*9a*/ { "lcall", FALSE, NONE, op1(OS), 0 }, /*9b*/ { "wait", FALSE, NONE, 0, 0 }, /*9c*/ { "pushf", FALSE, LONG, 0, 0 }, @@ -822,7 +885,7 @@ /*e0*/ { "loopne",FALSE, NONE, op1(Db), 0 }, /*e1*/ { "loope", FALSE, NONE, op1(Db), 0 }, /*e2*/ { "loop", FALSE, NONE, op1(Db), 0 }, -/*e3*/ { "jcxz", FALSE, SDEP, op1(Db), "jecxz" }, +/*e3*/ { "jrcxz", FALSE, ADEP, op1(Db), "jecxz" }, /*e4*/ { "in", FALSE, BYTE, op2(Ib, A), 0 }, /*e5*/ { "in", FALSE, LONG, op2(Ib, A) , 0 }, /*e6*/ { "out", FALSE, BYTE, op2(A, Ib), 0 }, @@ -1208,14 +1271,6 @@ if (prefix) { get_value_inc(inst, loc, 1, FALSE); } - if (rep == TRUE) { - if (inst == 0x90) { - db_printf("pause\n"); - return (loc); - } - db_printf("repe "); /* XXX repe VS rep */ - rep = FALSE; - } } while (prefix); if (inst >= 0xd8 && inst <= 0xdf) { @@ -1224,9 +1279,10 @@ return (loc); } - if (inst == 0x0f) { + ip = &db_inst_table[inst]; + while (ip->i_size == ESC) { get_value_inc(inst, loc, 1, FALSE); - ip = db_inst_0f[inst>>4]; + ip = ((const struct inst * const *)ip->i_extra)[inst>>4]; if (ip == 0) { ip = &db_bad_inst; } @@ -1234,8 +1290,6 @@ ip = &ip[inst&0xf]; } } - else - ip = &db_inst_table[inst]; if (ip->i_has_modrm) { get_value_inc(regmodrm, loc, 1, FALSE); @@ -1327,8 +1381,42 @@ i_mode = 0; } + /* Handle instructions identified by mandatory prefixes. */ + if (rep == TRUE) { + if (inst == 0x90) { + i_name = "pause"; + i_size = NONE; + i_mode = 0; + rep = FALSE; + } else if (ip->i_extra == db_Grp9 && f_mod(rex, regmodrm) != 3 && + f_reg(rex, regmodrm) == 0x6) { + i_name = "vmxon"; + rep = FALSE; + } + } + if (size == WORD) { + if (ip->i_extra == db_Grp9 && f_mod(rex, regmodrm) != 3 && + f_reg(rex, regmodrm) == 0x6) { + i_name = "vmclear"; + } + } + if (rex & REX_W) { + if (strcmp(i_name, "cwde") == 0) + i_name = "cdqe"; + else if (strcmp(i_name, "cmpxchg8b") == 0) + i_name = "cmpxchg16b"; + } + + if (rep == TRUE) + db_printf("repe "); /* XXX repe VS rep */ + if (i_size == SDEP) { - if (size == WORD) + if (size == LONG) + db_printf("%s", i_name); + else + db_printf("%s", (const char *)ip->i_extra); + } else if (i_size == ADEP) { + if (short_addr == FALSE) db_printf("%s", i_name); else db_printf("%s", (const char *)ip->i_extra); @@ -1401,6 +1489,10 @@ db_printf("%s", db_reg[rex != 0 ? 1 : 0][WORD][f_reg(rex, regmodrm)]); break; + case Rq: + db_printf("%s", db_reg[rex != 0 ? 1 : 0][QUAD][f_reg(rex, regmodrm)]); + break; + case Ri: db_printf("%s", db_reg[0][QUAD][f_rm(rex, inst)]); break; ==== //depot/projects/smpng/sys/modules/x86dis/Makefile#2 (text+ko) ==== @@ -4,4 +4,7 @@ SRCS= x86dis.c KMODDIR=/boot/modules +# To use newer binutils +#CFLAGS+= -B /usr/local/bin + .include ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#7 (text+ko) ==== @@ -10,13 +10,7 @@ low = mask; hi = mask >> 32; -#ifdef NEW_AS __asm __volatile("xrstor %0" : : "m" (*addr), "a" (low), "d" (hi)); -#else - /* xrstor (%rdi) */ - __asm __volatile(".byte 0x0f,0xae,0x2f" : : - "a" (low), "d" (hi), "D" (addr)); -#endif } static __inline void @@ -26,14 +20,8 @@ low = mask; hi = mask >> 32; -#ifdef NEW_AS __asm __volatile("xsave %0" : "=m" (*addr) : "a" (low), "d" (hi) : "memory"); -#else - /* xsave (%rdi) */ - __asm __volatile(".byte 0x0f,0xae,0x27" : : - "a" (low), "d" (hi), "D" (addr) : "memory"); -#endif } static __inline void @@ -43,14 +31,8 @@ low = mask; hi = mask >> 32; -#ifdef NEW_AS __asm __volatile("xsaveopt %0" : "=m" (*addr) : "a" (low), "d" (hi) : "memory"); -#else - /* xsaveopt (%rdi) */ - __asm __volatile(".byte 0x0f,0xae,0x37" : : - "a" (low), "d" (hi), "D" (addr) : "memory"); -#endif } static __inline uint64_t @@ -58,12 +40,7 @@ { uint32_t low, high; -#ifdef NEW_AS __asm __volatile("xgetbv" : "=a" (low), "=d" (high) : "c" (reg)); -#else - __asm __volatile(".byte 0x0f,0x01,0xd0" : "=a" (low), "=d" (high) : - "c" (reg)); -#endif return (low | ((uint64_t)high << 32)); } @@ -74,12 +51,7 @@ low = val; hi = val >> 32; -#ifdef NEW_AS __asm __volatile("xsetbv" : : "c" (reg), "a" (low), "d" (hi)); -#else - __asm __volatile(".byte 0x0f,0x01,0xd1" : : - "c" (reg), "a" (low), "d" (hi)); -#endif } static __inline uint64_t @@ -91,49 +63,69 @@ return (low | ((uint64_t)high << 32)); } -static __inline void -vmcall(void) -{ - - __asm __volatile(".byte 0x0f,0x01,0xc1"); -} - -static __inline void -vmlaunch(void) -{ - - __asm __volatile(".byte 0x0f,0x01,0xc2"); -} - -static __inline void -vmresume(void) -{ - - __asm __volatile(".byte 0x0f,0x01,0xc3"); -} - extern void isn_list(char *addr, uint32_t reg, uint64_t mask, uint64_t val); void isn_list(char *addr, uint32_t reg, uint64_t mask, uint64_t val) { +#if 0 uint32_t aux; - /* - * XXX: More to add? - */ rdtscp(&aux); xsaveopt(addr, mask); xrstor(addr, mask); xsave(addr, mask); xgetbv(reg); xsetbv(reg, val); - vmcall(); - vmlaunch(); - vmresume(); __asm __volatile("lfence" ::: "memory"); mfence(); __asm __volatile("sfence" ::: "memory"); clflush((u_long)addr); +#endif + /* + * TODO: + * * invept + * * invvpid + * * vmcall + * * vmclear + * * vmlaunch + * * vmresume + * * vmptrld + * * vmptrst + * * vmread + * * vmwrite + * * vmxoff + * * vmxon + */ + __asm __volatile("cbw"); + __asm __volatile("cwde"); + __asm __volatile("cdqe"); + __asm __volatile("cwd"); + __asm __volatile("cdq"); + __asm __volatile("jecxz 1f; 1:"); + __asm __volatile("jrcxz 1f; 1:"); + __asm __volatile("pause"); + __asm __volatile("cmpxchg8b %0" : "+m" (*addr)); + __asm __volatile("cmpxchg16b %0" : "+m" (*addr)); + __asm __volatile("rep stosl"); +#ifdef NEW_AS + __asm __volatile("invept %0,%1" :: "m" (*addr), "r" ((uint64_t)reg)); + __asm __volatile("invvpid %0,%1" :: "m" (*addr), "r" ((uint64_t)reg)); +#else + /* invept (%rdi),%rax */ + __asm __volatile(".byte 0x66,0x0f,0x38,0x80,0x07" :: "D" (*addr), "a" (reg)); + /* invvpid (%rdi),%rax */ + __asm __volatile(".byte 0x66,0x0f,0x38,0x81,0x07" :: "D" (*addr), "a" (reg)); +#endif + __asm __volatile("vmcall"); + __asm __volatile("vmclear %0" : "=m" (*addr)); + __asm __volatile("vmlaunch"); + __asm __volatile("vmresume"); + __asm __volatile("vmptrld %0" :: "m" (*addr)); + __asm __volatile("vmptrst %0" :: "m" (*addr)); + __asm __volatile("vmread %1,%0" : "=m" (*addr) : "r" ((uint64_t)reg)); + __asm __volatile("vmwrite %0,%1" :: "m" (*addr), "r" ((uint64_t)reg)); + __asm __volatile("vmxoff"); + __asm __volatile("vmxon %0" :: "m" (*addr)); } From owner-p4-projects@FreeBSD.ORG Fri Jul 6 12:23:24 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6079F1065670; Fri, 6 Jul 2012 12:23:24 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 23179106566B for ; Fri, 6 Jul 2012 12:23:24 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 0C1488FC12 for ; Fri, 6 Jul 2012 12:23:24 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66CNN8P058767 for ; Fri, 6 Jul 2012 12:23:23 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66CNNXV058764 for perforce@freebsd.org; Fri, 6 Jul 2012 12:23:23 GMT (envelope-from jhb@freebsd.org) Date: Fri, 6 Jul 2012 12:23:23 GMT Message-Id: <201207061223.q66CNNXV058764@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213975 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 12:23:24 -0000 http://p4web.freebsd.org/@@213975?ac=10 Change 213975 by jhb@jhb_jhbbsd on 2012/07/06 12:22:19 Cleanup. Affected files ... .. //depot/projects/smpng/sys/modules/x86dis/x86dis.c#8 edit Differences ... ==== //depot/projects/smpng/sys/modules/x86dis/x86dis.c#8 (text+ko) ==== @@ -1,8 +1,6 @@ #include #include -#define NEW_AS - static __inline void xrstor(char *addr, uint64_t mask) { @@ -69,7 +67,6 @@ void isn_list(char *addr, uint32_t reg, uint64_t mask, uint64_t val) { -#if 0 uint32_t aux; rdtscp(&aux); @@ -82,22 +79,6 @@ mfence(); __asm __volatile("sfence" ::: "memory"); clflush((u_long)addr); -#endif - /* - * TODO: - * * invept - * * invvpid - * * vmcall - * * vmclear - * * vmlaunch - * * vmresume - * * vmptrld - * * vmptrst - * * vmread - * * vmwrite - * * vmxoff - * * vmxon - */ __asm __volatile("cbw"); __asm __volatile("cwde"); __asm __volatile("cdqe"); @@ -109,15 +90,8 @@ __asm __volatile("cmpxchg8b %0" : "+m" (*addr)); __asm __volatile("cmpxchg16b %0" : "+m" (*addr)); __asm __volatile("rep stosl"); -#ifdef NEW_AS __asm __volatile("invept %0,%1" :: "m" (*addr), "r" ((uint64_t)reg)); __asm __volatile("invvpid %0,%1" :: "m" (*addr), "r" ((uint64_t)reg)); -#else - /* invept (%rdi),%rax */ - __asm __volatile(".byte 0x66,0x0f,0x38,0x80,0x07" :: "D" (*addr), "a" (reg)); - /* invvpid (%rdi),%rax */ - __asm __volatile(".byte 0x66,0x0f,0x38,0x81,0x07" :: "D" (*addr), "a" (reg)); -#endif __asm __volatile("vmcall"); __asm __volatile("vmclear %0" : "=m" (*addr)); __asm __volatile("vmlaunch"); From owner-p4-projects@FreeBSD.ORG Fri Jul 6 15:23:27 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 195901065673; Fri, 6 Jul 2012 15:23:27 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CEE2E106566B for ; Fri, 6 Jul 2012 15:23:26 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id B553F8FC08 for ; Fri, 6 Jul 2012 15:23:26 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66FNQYn066179 for ; Fri, 6 Jul 2012 15:23:26 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66FNOAH066175 for perforce@freebsd.org; Fri, 6 Jul 2012 15:23:24 GMT (envelope-from jhb@freebsd.org) Date: Fri, 6 Jul 2012 15:23:24 GMT Message-Id: <201207061523.q66FNOAH066175@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213982 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 15:23:27 -0000 http://p4web.freebsd.org/@@213982?ac=10 Change 213982 by jhb@jhb_jhbbsd on 2012/07/06 15:23:03 IFC @213981 Affected files ... .. //depot/projects/smpng/share/man/man9/cd.9#2 integrate .. //depot/projects/smpng/share/man/man9/disk.9#2 integrate .. //depot/projects/smpng/share/man/man9/locking.9#8 integrate .. //depot/projects/smpng/share/man/man9/rtalloc.9#4 integrate .. //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#10 integrate .. //depot/projects/smpng/sys/amd64/amd64/fpu.c#24 integrate .. //depot/projects/smpng/sys/amd64/amd64/pmap.c#123 integrate .. //depot/projects/smpng/sys/amd64/conf/GENERIC#102 integrate .. //depot/projects/smpng/sys/amd64/include/cpufunc.h#27 integrate .. //depot/projects/smpng/sys/amd64/include/elf.h#12 integrate .. //depot/projects/smpng/sys/amd64/include/vdso.h#1 branch .. //depot/projects/smpng/sys/arm/at91/at91_machdep.c#11 integrate .. //depot/projects/smpng/sys/arm/at91/at91_pmcvar.h#5 integrate .. //depot/projects/smpng/sys/arm/at91/at91_twi.c#19 integrate .. //depot/projects/smpng/sys/arm/at91/at91reg.h#4 integrate .. //depot/projects/smpng/sys/arm/at91/at91sam9x25.c#1 branch .. //depot/projects/smpng/sys/arm/at91/at91sam9x25reg.h#1 branch .. //depot/projects/smpng/sys/arm/at91/board_sam9x25ek.c#1 branch .. //depot/projects/smpng/sys/arm/at91/std.at91#7 integrate .. //depot/projects/smpng/sys/arm/at91/std.at91sam9#5 integrate .. //depot/projects/smpng/sys/arm/at91/std.atmel#1 branch .. //depot/projects/smpng/sys/arm/at91/std.ethernut5#2 integrate .. //depot/projects/smpng/sys/arm/at91/std.hl201#3 integrate .. //depot/projects/smpng/sys/arm/at91/std.qila9g20#3 integrate .. //depot/projects/smpng/sys/arm/at91/std.sam9g20ek#3 integrate .. //depot/projects/smpng/sys/arm/at91/std.sam9x25ek#1 branch .. //depot/projects/smpng/sys/arm/conf/ATMEL#1 branch .. //depot/projects/smpng/sys/arm/conf/SAM9X25EK#1 branch .. //depot/projects/smpng/sys/arm/conf/SAM9X25EK.hints#1 branch .. //depot/projects/smpng/sys/arm/include/_stdint.h#5 integrate .. //depot/projects/smpng/sys/arm/include/_types.h#12 integrate .. //depot/projects/smpng/sys/arm/include/elf.h#13 integrate .. //depot/projects/smpng/sys/arm/include/vdso.h#1 branch .. //depot/projects/smpng/sys/arm/mv/mv_machdep.c#18 integrate .. //depot/projects/smpng/sys/arm/xscale/std.xscale#2 integrate .. //depot/projects/smpng/sys/boot/userboot/libstand/Makefile#3 integrate .. //depot/projects/smpng/sys/cam/cam_periph.c#48 integrate .. //depot/projects/smpng/sys/cam/ctl/ctl.c#3 integrate .. //depot/projects/smpng/sys/cam/ctl/ctl_backend.c#3 integrate .. //depot/projects/smpng/sys/cam/ctl/ctl_frontend_cam_sim.c#2 integrate .. //depot/projects/smpng/sys/cam/ctl/ctl_frontend_internal.c#3 integrate .. //depot/projects/smpng/sys/cam/ctl/scsi_ctl.c#3 integrate .. //depot/projects/smpng/sys/cam/scsi/scsi_all.c#38 integrate .. //depot/projects/smpng/sys/cam/scsi/scsi_all.h#24 integrate .. //depot/projects/smpng/sys/cam/scsi/scsi_cd.c#53 integrate .. //depot/projects/smpng/sys/cam/scsi/scsi_da.c#105 integrate .. //depot/projects/smpng/sys/cam/scsi/scsi_da.h#6 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c#11 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c#13 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c#4 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h#4 integrate .. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h#4 integrate .. //depot/projects/smpng/sys/cddl/dev/dtrace/amd64/dis_tables.c#2 integrate .. //depot/projects/smpng/sys/cddl/dev/dtrace/i386/dis_tables.c#2 integrate .. //depot/projects/smpng/sys/compat/linux/linux_file.c#52 integrate .. //depot/projects/smpng/sys/conf/files#279 integrate .. //depot/projects/smpng/sys/conf/files.arm#23 integrate .. //depot/projects/smpng/sys/conf/files.ia64#72 integrate .. //depot/projects/smpng/sys/conf/files.mips#19 integrate .. //depot/projects/smpng/sys/conf/files.powerpc#72 integrate .. //depot/projects/smpng/sys/conf/files.sparc64#82 integrate .. //depot/projects/smpng/sys/conf/kern.post.mk#73 integrate .. //depot/projects/smpng/sys/conf/kmod.mk#86 integrate .. //depot/projects/smpng/sys/conf/options#196 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/changes.txt#18 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/common/ahpredef.c#1 branch .. //depot/projects/smpng/sys/contrib/dev/acpica/common/dmextern.c#9 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/common/dmrestag.c#9 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslcompile.c#18 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslerror.c#14 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslfiles.c#14 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/asllookup.c#14 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslmain.c#18 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslsupport.l#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslutils.c#15 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/dttemplate.c#6 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/debugger/dbdisply.c#3 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/debugger/dbexec.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/debugger/dbutils.c#3 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/disassembler/dmopcode.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/disassembler/dmwalk.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/dispatcher/dsfield.c#3 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/events/evgpe.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/events/evgpeutil.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/events/evxfgpe.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/executer/exconfig.c#2 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/components/utilities/utmisc.c#3 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/acdebug.h#11 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/acdisasm.h#12 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/acglobal.h#17 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/aclocal.h#17 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/acpixf.h#18 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/acpredef.h#8 integrate .. //depot/projects/smpng/sys/contrib/dev/acpica/include/acutils.h#11 integrate .. //depot/projects/smpng/sys/contrib/dev/iwn/iwlwifi-6000g2a-17.168.5.3.fw.uu#1 branch .. //depot/projects/smpng/sys/contrib/dev/iwn/iwlwifi-6000g2b-18.168.6.1.fw.uu#1 branch .. //depot/projects/smpng/sys/dev/acpi_support/acpi_asus_wmi.c#1 branch .. //depot/projects/smpng/sys/dev/acpi_support/acpi_ibm.c#20 integrate .. //depot/projects/smpng/sys/dev/acpica/acpi_cpu.c#60 integrate .. //depot/projects/smpng/sys/dev/adb/adb_kbd.c#6 integrate .. //depot/projects/smpng/sys/dev/agp/agp_i810.c#14 integrate .. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.c#30 integrate .. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx_osm.c#31 integrate .. //depot/projects/smpng/sys/dev/aic7xxx/aic7xxx.c#29 integrate .. //depot/projects/smpng/sys/dev/aic7xxx/aic7xxx_osm.c#24 integrate .. //depot/projects/smpng/sys/dev/ath/ah_osdep.c#17 integrate .. //depot/projects/smpng/sys/dev/ath/ah_osdep.h#8 integrate .. //depot/projects/smpng/sys/dev/ath/ath_dfs/null/dfs_null.c#6 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ah.h#18 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ah_debug.h#5 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ah_internal.h#20 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416.h#13 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_btcoex.c#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_btcoex.h#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_gpio.c#5 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c#11 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c#6 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar9002/ar9285.h#3 integrate .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_hal/ar9003/ar9300_btcoex.h#1 branch .. //depot/projects/smpng/sys/dev/ath/ath_rate/amrr/amrr.c#18 integrate .. //depot/projects/smpng/sys/dev/ath/ath_rate/onoe/onoe.c#18 integrate .. //depot/projects/smpng/sys/dev/ath/ath_rate/sample/sample.c#21 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath.c#102 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath_ahb.c#4 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath_led.c#2 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath_rx.c#3 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath_rx.h#2 integrate .. //depot/projects/smpng/sys/dev/ath/if_ath_rx_edma.c#1 branch .. //depot/projects/smpng/sys/dev/ath/if_ath_rx_edma.h#1 branch .. //depot/projects/smpng/sys/dev/ath/if_ath_tx.c#7 integrate .. //depot/projects/smpng/sys/dev/ath/if_athdfs.h#4 integrate .. //depot/projects/smpng/sys/dev/ath/if_athioctl.h#28 integrate .. //depot/projects/smpng/sys/dev/ath/if_athvar.h#60 integrate .. //depot/projects/smpng/sys/dev/atkbdc/atkbdc_isa.c#10 integrate .. //depot/projects/smpng/sys/dev/cxgb/cxgb_adapter.h#27 integrate .. //depot/projects/smpng/sys/dev/cxgb/cxgb_main.c#42 integrate .. //depot/projects/smpng/sys/dev/cxgb/cxgb_sge.c#36 integrate .. //depot/projects/smpng/sys/dev/cxgbe/adapter.h#7 integrate .. //depot/projects/smpng/sys/dev/cxgbe/common/common.h#5 integrate .. //depot/projects/smpng/sys/dev/cxgbe/common/t4_hw.c#5 integrate .. //depot/projects/smpng/sys/dev/cxgbe/common/t4_msg.h#2 integrate .. //depot/projects/smpng/sys/dev/cxgbe/firmware/t4fw_cfg.txt#2 integrate .. //depot/projects/smpng/sys/dev/cxgbe/firmware/t4fw_cfg_uwire.txt#2 integrate .. //depot/projects/smpng/sys/dev/cxgbe/firmware/t4fw_interface.h#2 integrate .. //depot/projects/smpng/sys/dev/cxgbe/osdep.h#5 integrate .. //depot/projects/smpng/sys/dev/cxgbe/t4_l2t.c#4 integrate .. //depot/projects/smpng/sys/dev/cxgbe/t4_main.c#8 integrate .. //depot/projects/smpng/sys/dev/cxgbe/t4_sge.c#7 integrate .. //depot/projects/smpng/sys/dev/cxgbe/tom/t4_cpl_io.c#2 integrate .. //depot/projects/smpng/sys/dev/drm2/drmP.h#2 integrate .. //depot/projects/smpng/sys/dev/drm2/drm_pciids.h#2 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_82541.c#9 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_82543.c#7 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_82571.c#11 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_82575.c#13 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_api.c#12 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_api.h#9 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_defines.h#12 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_hw.h#13 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_i210.c#1 branch .. //depot/projects/smpng/sys/dev/e1000/e1000_i210.h#1 branch .. //depot/projects/smpng/sys/dev/e1000/e1000_ich8lan.c#12 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_mac.c#11 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_mac.h#6 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_manage.c#7 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_manage.h#3 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_phy.c#12 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_phy.h#10 integrate .. //depot/projects/smpng/sys/dev/e1000/e1000_regs.h#12 integrate .. //depot/projects/smpng/sys/dev/e1000/if_em.c#31 integrate .. //depot/projects/smpng/sys/dev/e1000/if_igb.c#37 integrate .. //depot/projects/smpng/sys/dev/fdt/fdtbus.c#7 integrate .. //depot/projects/smpng/sys/dev/fdt/simplebus.c#4 integrate .. //depot/projects/smpng/sys/dev/filemon/filemon_wrapper.c#2 integrate .. //depot/projects/smpng/sys/dev/firewire/sbp_targ.c#16 integrate .. //depot/projects/smpng/sys/dev/isp/isp.c#70 integrate .. //depot/projects/smpng/sys/dev/isp/isp_freebsd.c#74 integrate .. //depot/projects/smpng/sys/dev/isp/isp_freebsd.h#53 integrate .. //depot/projects/smpng/sys/dev/isp/isp_pci.c#69 integrate .. //depot/projects/smpng/sys/dev/isp/ispmbox.h#32 integrate .. //depot/projects/smpng/sys/dev/isp/ispvar.h#47 integrate .. //depot/projects/smpng/sys/dev/iwn/if_iwn.c#28 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe.c#31 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_82598.c#11 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_82598.h#2 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_82599.c#8 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_api.c#11 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_api.h#12 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_common.c#12 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_common.h#10 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_osdep.h#9 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_phy.c#11 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_type.h#12 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_vf.c#3 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_x540.c#2 integrate .. //depot/projects/smpng/sys/dev/ixgbe/ixv.c#5 integrate .. //depot/projects/smpng/sys/dev/mfi/mfi.c#37 integrate .. //depot/projects/smpng/sys/dev/mfi/mfi_tbolt.c#2 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_cnfg.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_hbd.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_history.txt#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_init.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_ioc.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_ra.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_raid.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_sas.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_targ.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_tool.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_type.h#3 integrate .. //depot/projects/smpng/sys/dev/mps/mps.c#7 integrate .. //depot/projects/smpng/sys/dev/mps/mps_config.c#2 integrate .. //depot/projects/smpng/sys/dev/mps/mps_ioctl.h#4 integrate .. //depot/projects/smpng/sys/dev/mps/mps_mapping.c#2 integrate .. //depot/projects/smpng/sys/dev/mps/mps_mapping.h#2 integrate .. //depot/projects/smpng/sys/dev/mps/mps_sas.c#8 integrate .. //depot/projects/smpng/sys/dev/mps/mps_sas.h#2 integrate .. //depot/projects/smpng/sys/dev/mps/mps_sas_lsi.c#2 integrate .. //depot/projects/smpng/sys/dev/mps/mps_user.c#5 integrate .. //depot/projects/smpng/sys/dev/mps/mpsvar.h#6 integrate .. //depot/projects/smpng/sys/dev/mpt/mpt_cam.c#41 integrate .. //depot/projects/smpng/sys/dev/nand/nand.c#2 integrate .. //depot/projects/smpng/sys/dev/nand/nandsim.c#2 integrate .. //depot/projects/smpng/sys/dev/nand/nfc_fsl.c#1 branch .. //depot/projects/smpng/sys/dev/nand/nfc_fsl.h#1 branch .. //depot/projects/smpng/sys/dev/pccard/pccard.c#51 integrate .. //depot/projects/smpng/sys/dev/pccard/pccardvarp.h#7 integrate .. //depot/projects/smpng/sys/dev/pci/pci_pci.c#50 integrate .. //depot/projects/smpng/sys/dev/re/if_re.c#95 integrate .. //depot/projects/smpng/sys/dev/sio/sio.c#71 integrate .. //depot/projects/smpng/sys/dev/sound/pci/hda/hdaa.c#3 integrate .. //depot/projects/smpng/sys/dev/sound/pci/hda/hdaa_patches.c#2 integrate .. //depot/projects/smpng/sys/dev/sound/pci/hdspe.c#2 integrate .. //depot/projects/smpng/sys/dev/twa/tw_osl_cam.c#15 integrate .. //depot/projects/smpng/sys/dev/usb/controller/ehci_pci.c#20 integrate .. //depot/projects/smpng/sys/dev/usb/controller/ohci_pci.c#15 integrate .. //depot/projects/smpng/sys/dev/usb/controller/xhci_pci.c#6 integrate .. //depot/projects/smpng/sys/dev/usb/quirk/usb_quirk.c#25 integrate .. //depot/projects/smpng/sys/dev/usb/serial/u3g.c#30 integrate .. //depot/projects/smpng/sys/dev/usb/usbdevs#174 integrate .. //depot/projects/smpng/sys/dev/virtio/balloon/virtio_balloon.h#3 integrate .. //depot/projects/smpng/sys/dev/virtio/block/virtio_blk.h#3 integrate .. //depot/projects/smpng/sys/dev/virtio/network/virtio_net.h#3 integrate .. //depot/projects/smpng/sys/dev/virtio/virtio.h#3 integrate .. //depot/projects/smpng/sys/dev/virtio/virtio_ring.h#4 integrate .. //depot/projects/smpng/sys/dev/virtio/virtqueue.h#3 integrate .. //depot/projects/smpng/sys/dev/xen/blkfront/blkfront.c#16 integrate .. //depot/projects/smpng/sys/fs/devfs/devfs_vnops.c#98 integrate .. //depot/projects/smpng/sys/fs/ext2fs/ext2_vfsops.c#7 integrate .. //depot/projects/smpng/sys/fs/nfsclient/nfs_clbio.c#17 integrate .. //depot/projects/smpng/sys/geom/eli/g_eli.c#38 integrate .. //depot/projects/smpng/sys/geom/eli/g_eli.h#15 integrate .. //depot/projects/smpng/sys/geom/eli/g_eli_ctl.c#14 integrate .. //depot/projects/smpng/sys/geom/eli/g_eli_key.c#8 integrate .. //depot/projects/smpng/sys/geom/eli/g_eli_key_cache.c#2 integrate .. //depot/projects/smpng/sys/geom/gate/g_gate.c#24 integrate .. //depot/projects/smpng/sys/geom/gate/g_gate.h#9 integrate .. //depot/projects/smpng/sys/geom/geom.h#61 integrate .. //depot/projects/smpng/sys/geom/geom_disk.c#65 integrate .. //depot/projects/smpng/sys/geom/geom_disk.h#13 integrate .. //depot/projects/smpng/sys/geom/geom_map.c#2 integrate .. //depot/projects/smpng/sys/geom/geom_subr.c#66 integrate .. //depot/projects/smpng/sys/geom/mirror/g_mirror.c#48 integrate .. //depot/projects/smpng/sys/geom/mirror/g_mirror.h#17 integrate .. //depot/projects/smpng/sys/i386/i386/elf_machdep.c#25 integrate .. //depot/projects/smpng/sys/i386/i386/machdep.c#175 integrate .. //depot/projects/smpng/sys/i386/i386/pmap.c#162 integrate .. //depot/projects/smpng/sys/i386/i386/vm86.c#27 integrate .. //depot/projects/smpng/sys/i386/include/elf.h#14 integrate .. //depot/projects/smpng/sys/i386/include/vdso.h#1 branch .. //depot/projects/smpng/sys/i386/include/vmparam.h#20 integrate .. //depot/projects/smpng/sys/ia64/include/_stdint.h#5 integrate .. //depot/projects/smpng/sys/ia64/include/_types.h#12 integrate .. //depot/projects/smpng/sys/ia64/include/elf.h#19 integrate .. //depot/projects/smpng/sys/ia64/include/vdso.h#1 branch .. //depot/projects/smpng/sys/kern/imgact_aout.c#37 integrate .. //depot/projects/smpng/sys/kern/imgact_elf.c#81 integrate .. //depot/projects/smpng/sys/kern/imgact_gzip.c#18 integrate .. //depot/projects/smpng/sys/kern/kern_descrip.c#142 integrate .. //depot/projects/smpng/sys/kern/kern_exec.c#141 integrate .. //depot/projects/smpng/sys/kern/kern_malloc.c#67 integrate .. //depot/projects/smpng/sys/kern/kern_sharedpage.c#1 branch .. //depot/projects/smpng/sys/kern/kern_tc.c#57 integrate .. //depot/projects/smpng/sys/kern/subr_dummy_vdso_tc.c#1 branch .. //depot/projects/smpng/sys/kern/subr_firmware.c#25 integrate .. //depot/projects/smpng/sys/kern/subr_witness.c#191 integrate .. //depot/projects/smpng/sys/kern/uipc_socket.c#148 integrate .. //depot/projects/smpng/sys/kern/vfs_syscalls.c#169 integrate .. //depot/projects/smpng/sys/kern/vfs_vnops.c#113 integrate .. //depot/projects/smpng/sys/mips/cavium/uart_bus_octeonusart.c#5 integrate .. //depot/projects/smpng/sys/mips/include/_stdint.h#6 integrate .. //depot/projects/smpng/sys/mips/include/_types.h#8 integrate .. //depot/projects/smpng/sys/mips/include/elf.h#9 integrate .. //depot/projects/smpng/sys/mips/include/vdso.h#1 branch .. //depot/projects/smpng/sys/mips/mips/pmap.c#35 integrate .. //depot/projects/smpng/sys/modules/Makefile#190 integrate .. //depot/projects/smpng/sys/modules/acpi/Makefile#37 integrate .. //depot/projects/smpng/sys/modules/acpi/acpi_asus_wmi/Makefile#1 branch .. //depot/projects/smpng/sys/modules/ath/Makefile#16 integrate .. //depot/projects/smpng/sys/modules/cxgbe/if_cxgbe/Makefile#4 integrate .. //depot/projects/smpng/sys/modules/igb/Makefile#8 integrate .. //depot/projects/smpng/sys/modules/nand/Makefile#1 branch .. //depot/projects/smpng/sys/modules/rdma/krping/Makefile#3 integrate .. //depot/projects/smpng/sys/modules/toecore/Makefile#2 integrate .. //depot/projects/smpng/sys/net/flowtable.c#19 integrate .. //depot/projects/smpng/sys/net/if.h#54 integrate .. //depot/projects/smpng/sys/net/if_gif.c#62 integrate .. //depot/projects/smpng/sys/net/if_lagg.c#26 integrate .. //depot/projects/smpng/sys/net/route.h#41 integrate .. //depot/projects/smpng/sys/net80211/_ieee80211.h#19 integrate .. //depot/projects/smpng/sys/net80211/ieee80211_output.c#55 integrate .. //depot/projects/smpng/sys/netinet/igmp.c#43 integrate .. //depot/projects/smpng/sys/netinet/ip_input.c#121 integrate .. //depot/projects/smpng/sys/netinet/ip_mroute.c#77 integrate .. //depot/projects/smpng/sys/netinet/ip_mroute.h#18 integrate .. //depot/projects/smpng/sys/netinet/ip_output.c#126 integrate .. //depot/projects/smpng/sys/netinet/ipfw/ip_dummynet.c#17 integrate .. //depot/projects/smpng/sys/netinet/ipfw/ip_fw_table.c#10 integrate .. //depot/projects/smpng/sys/netinet/sctp_asconf.c#28 integrate .. //depot/projects/smpng/sys/netinet/sctp_asconf.h#13 integrate .. //depot/projects/smpng/sys/netinet/sctp_bsd_addr.c#25 integrate .. //depot/projects/smpng/sys/netinet/sctp_bsd_addr.h#12 integrate .. //depot/projects/smpng/sys/netinet/sctp_indata.c#44 integrate .. //depot/projects/smpng/sys/netinet/sctp_indata.h#16 integrate .. //depot/projects/smpng/sys/netinet/sctp_input.c#44 integrate .. //depot/projects/smpng/sys/netinet/sctp_input.h#11 integrate .. //depot/projects/smpng/sys/netinet/sctp_os_bsd.h#37 integrate .. //depot/projects/smpng/sys/netinet/sctp_output.c#52 integrate .. //depot/projects/smpng/sys/netinet/sctp_output.h#21 integrate .. //depot/projects/smpng/sys/netinet/sctp_pcb.c#52 integrate .. //depot/projects/smpng/sys/netinet/sctp_pcb.h#29 integrate .. //depot/projects/smpng/sys/netinet/sctp_sysctl.c#27 integrate .. //depot/projects/smpng/sys/netinet/sctp_sysctl.h#20 integrate .. //depot/projects/smpng/sys/netinet/sctp_usrreq.c#46 integrate .. //depot/projects/smpng/sys/netinet/sctputil.c#53 integrate .. //depot/projects/smpng/sys/netinet/sctputil.h#27 integrate .. //depot/projects/smpng/sys/netinet/tcp_hostcache.c#29 integrate .. //depot/projects/smpng/sys/netinet6/in6.c#81 integrate .. //depot/projects/smpng/sys/netinet6/in6_src.c#55 integrate .. //depot/projects/smpng/sys/netinet6/ip6_mroute.c#48 integrate .. //depot/projects/smpng/sys/netinet6/ip6_mroute.h#11 integrate .. //depot/projects/smpng/sys/netinet6/ip6_output.c#79 integrate .. //depot/projects/smpng/sys/netinet6/mld6.c#42 integrate .. //depot/projects/smpng/sys/netinet6/nd6_nbr.c#48 integrate .. //depot/projects/smpng/sys/netinet6/sctp6_usrreq.c#28 integrate .. //depot/projects/smpng/sys/ofed/include/linux/workqueue.h#2 integrate .. //depot/projects/smpng/sys/pc98/include/vdso.h#1 branch .. //depot/projects/smpng/sys/powerpc/aim/locore32.S#6 integrate .. //depot/projects/smpng/sys/powerpc/aim/locore64.S#6 integrate .. //depot/projects/smpng/sys/powerpc/aim/mmu_oea.c#26 integrate .. //depot/projects/smpng/sys/powerpc/booke/machdep.c#27 integrate .. //depot/projects/smpng/sys/powerpc/booke/pmap.c#29 integrate .. //depot/projects/smpng/sys/powerpc/booke/trap.c#10 integrate .. //depot/projects/smpng/sys/powerpc/booke/trap_subr.S#8 integrate .. //depot/projects/smpng/sys/powerpc/conf/DEFAULTS#16 integrate .. //depot/projects/smpng/sys/powerpc/conf/GENERIC#77 integrate .. //depot/projects/smpng/sys/powerpc/conf/GENERIC64#11 integrate .. //depot/projects/smpng/sys/powerpc/include/_stdint.h#6 integrate .. //depot/projects/smpng/sys/powerpc/include/_types.h#10 integrate .. //depot/projects/smpng/sys/powerpc/include/elf.h#14 integrate .. //depot/projects/smpng/sys/powerpc/include/vdso.h#1 branch .. //depot/projects/smpng/sys/powerpc/mpc85xx/lbc.c#5 integrate .. //depot/projects/smpng/sys/powerpc/mpc85xx/lbc.h#6 integrate .. //depot/projects/smpng/sys/powerpc/mpc85xx/nexus.c#6 integrate .. //depot/projects/smpng/sys/powerpc/powermac/hrowpic.c#18 integrate .. //depot/projects/smpng/sys/sparc64/conf/GENERIC#114 integrate .. //depot/projects/smpng/sys/sparc64/include/_stdint.h#5 integrate .. //depot/projects/smpng/sys/sparc64/include/_types.h#10 integrate .. //depot/projects/smpng/sys/sparc64/include/elf.h#18 integrate .. //depot/projects/smpng/sys/sparc64/include/vdso.h#1 branch .. //depot/projects/smpng/sys/sparc64/sparc64/pmap.c#101 integrate .. //depot/projects/smpng/sys/sys/_types.h#18 integrate .. //depot/projects/smpng/sys/sys/file.h#38 integrate .. //depot/projects/smpng/sys/sys/imgact_aout.h#13 integrate .. //depot/projects/smpng/sys/sys/param.h#177 integrate .. //depot/projects/smpng/sys/sys/proc.h#222 integrate .. //depot/projects/smpng/sys/sys/stdint.h#6 integrate .. //depot/projects/smpng/sys/sys/sysent.h#44 integrate .. //depot/projects/smpng/sys/sys/vdso.h#1 branch .. //depot/projects/smpng/sys/ufs/ffs/ffs_alloc.c#62 integrate .. //depot/projects/smpng/sys/vm/uma_core.c#91 integrate .. //depot/projects/smpng/sys/vm/vm_map.c#120 integrate .. //depot/projects/smpng/sys/vm/vm_object.h#48 integrate .. //depot/projects/smpng/sys/vm/vm_page.c#129 integrate .. //depot/projects/smpng/sys/x86/include/_stdint.h#3 integrate .. //depot/projects/smpng/sys/x86/include/_types.h#3 integrate .. //depot/projects/smpng/sys/x86/include/vdso.h#1 branch .. //depot/projects/smpng/sys/x86/x86/tsc.c#7 integrate Differences ... ==== //depot/projects/smpng/share/man/man9/cd.9#2 (text+ko) ==== @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/cd.9,v 1.23 2005/02/13 22:25:19 ru Exp $ +.\" $FreeBSD: src/share/man/man9/cd.9,v 1.24 2012/07/01 19:40:51 schweikh Exp $ .\" .Dd September 2, 2003 .Dt CD 9 @@ -57,7 +57,7 @@ The following is a list of quirks that the driver recognize. .Bl -tag -width CD_Q_BCD_TRACKS .It Dv CD_Q_NO_TOUCH -This flag tell the driver not to probe the drive at attach time to see if +This flag tells the driver not to probe the drive at attach time to see if there is a disk in the drive and find out what size it is. This flag is currently unimplemented in the CAM .Nm ==== //depot/projects/smpng/share/man/man9/disk.9#2 (text+ko) ==== @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH .\" DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/disk.9,v 1.11 2009/02/22 13:38:16 trasz Exp $ +.\" $FreeBSD: src/share/man/man9/disk.9,v 1.12 2012/06/24 04:29:03 ken Exp $ .\" .Dd February 18, 2004 .Dt DISK 9 @@ -145,6 +145,16 @@ .Xr dumpon 8 , this function is invoked from a very restricted system state after a kernel panic to record a copy of the system RAM to the disk. +.It Vt "disk_getattr_t *" Va d_getattr +Optional: if this method is provided, it gives the disk driver the +opportunity to override the default GEOM response to BIO_GETATTR requests. +This function should return -1 if the attribute is not handled, 0 if the +attribute is handled, or an errno to be passed to g_io_deliver(). +.It Vt "disk_gone_t *" Va d_gone +Optional: if this method is provided, it will be called after disk_gone() +is called, once GEOM has finished its cleanup process. +Once this callback is called, it is safe for the disk driver to free all of +its resources, as it will not be receiving further calls from GEOM. .El .Ss Mandatory Media Properties The following fields identify the size and granularity of the disk device. @@ -180,7 +190,23 @@ .Pa src/sys/geom/notes for details. .It Vt char Va d_ident[DISK_IDENT_SIZE] -This field can and should be used to store disk's serial number. +This field can and should be used to store disk's serial number if the +d_getattr method described above isn't implemented, or if it does not +support the GEOM::ident attribute. +.It Vt char Va d_descr[DISK_IDENT_SIZE] +This field can be used to store the disk vendor and product description. +.It Vt uint16_t Va d_hba_vendor +This field can be used to store the PCI vendor ID for the HBA connected to +the disk. +.It Vt uint16_t Va d_hba_device +This field can be used to store the PCI device ID for the HBA connected to +the disk. +.It Vt uint16_t Va d_hba_subvendor +This field can be used to store the PCI subvendor ID for the HBA connected to +the disk. +.It Vt uint16_t Va d_hba_subdevice +This field can be used to store the PCI subdevice ID for the HBA connected to +the disk. .El .Ss Driver Private Data This field may be used by the device driver to store a pointer to ==== //depot/projects/smpng/share/man/man9/locking.9#8 (text+ko) ==== @@ -22,7 +22,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/locking.9,v 1.30 2012/05/29 14:41:16 trasz Exp $ +.\" $FreeBSD: src/share/man/man9/locking.9,v 1.31 2012/06/27 01:13:37 julian Exp $ .\" .Dd May 25, 2012 .Dt LOCKING 9 @@ -37,11 +37,19 @@ several different synchronization primitives to allow the developers to safely access and manipulate the many data types required. .Ss Mutexes -Mutexes (also called "sleep mutexes") are the most commonly used +Mutexes (also erroneously called "sleep mutexes") are the most commonly used synchronization primitive in the kernel. -Thread acquires (locks) a mutex before accessing data shared with other +A thread acquires (locks) a mutex before accessing data shared with other threads (including interrupt threads), and releases (unlocks) it afterwards. -If the mutex cannot be acquired, the thread requesting it will sleep. +If the mutex cannot be acquired, the thread requesting it will wait. +Mutexes are by default adaptive, meaning that +if the owner of a contended mutex is currently running on another CPU, +then a thread attempting to acquire the mutex will briefly spin +in the hope that the owner is only briefly holding it, +and might release it shortly. +If the owner does not do so, the waiting thread proceeds to yield the processor, +allowing other threads to run. +If the owner is not currently actually running then the spin step is skipped. Mutexes fully support priority propagation. .Pp See @@ -49,9 +57,10 @@ for details. .Ss Spin mutexes Spin mutexes are variation of basic mutexes; the main difference between -the two is that spin mutexes never sleep - instead, they spin, waiting -for the thread holding the lock, which runs on another CPU, to release it. -Differently from ordinary mutex, spin mutexes disable interrupts when acquired. +the two is that spin mutexes never yield the processor - instead, they spin, +waiting for the thread holding the lock, +(which must be running on another CPU), to release it. +Spin mutexes disable interrupts while the held so as to not get pre-empted. Since disabling interrupts is expensive, they are also generally slower. Spin mutexes should be used only when necessary, e.g. to protect data shared with interrupt filter code (see @@ -122,7 +131,7 @@ They don't support priority propagation. They should be considered to be closely related to .Xr sleep 9 . -In fact it could in some cases be +They could in some cases be considered a conditional sleep. .Pp See @@ -146,8 +155,8 @@ .Fn cv_wait* , functions. When a thread waits on a condition, the mutex -is atomically released before the thread is blocked, then reacquired -before the function call returns. +is atomically released before the thread thread yields the processor, +then reacquired before the function call returns. .Pp See .Xr condvar 9 @@ -255,14 +264,14 @@ .Xr witness 4 code. .Ss Bounded vs. unbounded sleep -The following primitives perform bounded sleep: mutexes, pool mutexes, -reader/writer locks and read-mostly locks. +The following primitives perform bounded sleep: + mutexes, pool mutexes, reader/writer locks and read-mostly locks. .Pp -The following primitives block (perform unbounded sleep): shared/exclusive locks, -counting semaphores, condition variables, sleep/wakeup and lockmanager locks. +The following primitives may perform an unbounded sleep: +shared/exclusive locks, counting semaphores, condition variables, sleep/wakeup and lockmanager locks. .Pp -It is an error to do any operation that could result in any kind of sleep while -holding spin mutex. +It is an error to do any operation that could result in yielding the processor +while holding a spin mutex. .Pp As a general rule, it is an error to do any operation that could result in unbounded sleep while holding any primitive from the 'bounded sleep' group. @@ -284,21 +293,22 @@ the assumptions that were made before, all the way up the call graph to the place where the lock was acquired. .Pp -It is an error to do any operation that could result in any kind of sleep when -running inside an interrupt filter. +It is an error to do any operation that could result in yielding of +the processor when running inside an interrupt filter. .Pp It is an error to do any operation that could result in unbounded sleep when running inside an interrupt thread. .Ss Interaction table The following table shows what you can and can not do while holding one of the synchronization primitives discussed: -.Bl -column ".Ic xxxxxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXX" -offset indent -.It Em "You have: You want:" Ta spin mtx Ta mutex Ta sx Ta rwlock Ta rmlock Ta sleep +.Bl -column ".Ic xxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXX" -offset indent +.It Em " You want:" Ta spin-mtx Ta mutex Ta rwlock Ta rmlock Ta sx Ta sleep +.It Em "You have: " Ta ------ Ta ------ Ta ------ Ta ------ Ta ------ Ta ------ .It spin mtx Ta \&ok-1 Ta \&no Ta \&no Ta \&no Ta \&no Ta \&no-3 -.It mutex Ta \&ok Ta \&ok-1 Ta \&no Ta \&ok Ta \&ok Ta \&no-3 -.It sx Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok Ta \&ok Ta \&ok-4 -.It rwlock Ta \&ok Ta \&ok Ta \&no Ta \&ok-2 Ta \&ok Ta \&no-3 -.It rmlock Ta \&ok Ta \&ok Ta \&no-5 Ta \&ok Ta \&ok-2 Ta \&no-5 +.It mutex Ta \&ok Ta \&ok-1 Ta \&ok Ta \&ok Ta \&no Ta \&no-3 +.It rwlock Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok Ta \&no Ta \&no-3 +.It rmlock Ta \&ok Ta \&ok Ta \&ok Ta \&ok-2 Ta \&no-5 Ta \&no-5 +.It sx Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&no-2 Ta \&ok-4 .El .Pp .Em *1 ==== //depot/projects/smpng/share/man/man9/rtalloc.9#4 (text+ko) ==== @@ -26,9 +26,9 @@ .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.\" $FreeBSD: src/share/man/man9/rtalloc.9,v 1.22 2011/12/14 14:52:50 glebius Exp $ +.\" $FreeBSD: src/share/man/man9/rtalloc.9,v 1.23 2012/07/04 07:42:12 glebius Exp $ .\" -.Dd December 14, 2011 +.Dd July 4, 2012 .Dt RTALLOC 9 .Os .Sh NAME @@ -52,6 +52,7 @@ .Fn RT_UNLOCK "struct rt_entry *rt" .Fn RT_ADDREF "struct rt_entry *rt" .Fn RT_REMREF "struct rt_entry *rt" +.Fn RO_RTFREE "struct route *ro" .Ft void .Fn rtfree "struct rt_entry *rt" .Ft "struct rtentry *" @@ -203,6 +204,14 @@ .Fn RT_ADDREF . .Pp The +.Fn RO_RTFREE +macro is used to free route entry that is referenced by struct route. +At certain circumstances the latter may not hold a reference on rtentry, +and +.Fn RO_RTFREE +treats such routes correctly. +.Pp +The .Fn rtfree function does the actual free of the routing table entry, and shouldn't be called directly by facilities, that just perform routing table lookups. ==== //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#10 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_disasm.c,v 1.32 2008/08/11 20:19:42 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_disasm.c,v 1.34 2012/07/06 14:25:59 jhb Exp $"); /* * Instruction disassembler. ==== //depot/projects/smpng/sys/amd64/amd64/fpu.c#24 (text+ko) ==== @@ -31,7 +31,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/fpu.c,v 1.182 2012/05/17 17:30:16 kib Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/fpu.c,v 1.183 2012/07/05 18:19:35 jhb Exp $"); #include #include ==== //depot/projects/smpng/sys/amd64/amd64/pmap.c#123 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.751 2012/06/21 16:37:36 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.764 2012/07/06 06:42:25 alc Exp $"); /* * Manages physical address maps. @@ -173,6 +173,31 @@ #define PHYS_TO_PV_LIST_LOCK(pa) \ (&pv_list_locks[pa_index(pa) % NPV_LIST_LOCKS]) +#define CHANGE_PV_LIST_LOCK_TO_PHYS(lockp, pa) do { \ + struct rwlock **_lockp = (lockp); \ + struct rwlock *_new_lock; \ + \ + _new_lock = PHYS_TO_PV_LIST_LOCK(pa); \ + if (_new_lock != *_lockp) { \ + if (*_lockp != NULL) \ + rw_wunlock(*_lockp); \ + *_lockp = _new_lock; \ + rw_wlock(*_lockp); \ + } \ +} while (0) + +#define CHANGE_PV_LIST_LOCK_TO_VM_PAGE(lockp, m) \ + CHANGE_PV_LIST_LOCK_TO_PHYS(lockp, VM_PAGE_TO_PHYS(m)) + +#define RELEASE_PV_LIST_LOCK(lockp) do { \ + struct rwlock **_lockp = (lockp); \ + \ + if (*_lockp != NULL) { \ + rw_wunlock(*_lockp); \ + *_lockp = NULL; \ + } \ +} while (0) + #define VM_PAGE_TO_PV_LIST_LOCK(m) \ PHYS_TO_PV_LIST_LOCK(VM_PAGE_TO_PHYS(m)) @@ -239,11 +264,17 @@ static void free_pv_chunk(struct pv_chunk *pc); static void free_pv_entry(pmap_t pmap, pv_entry_t pv); -static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try); -static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); +static pv_entry_t get_pv_entry(pmap_t pmap, struct rwlock **lockp); +static int popcnt_pc_map_elem(uint64_t elem); +static vm_page_t reclaim_pv_chunk(pmap_t locked_pmap, struct rwlock **lockp); +static void reserve_pv_entries(pmap_t pmap, int needed, + struct rwlock **lockp); +static void pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa, + struct rwlock **lockp); static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa, struct rwlock **lockp); -static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa); +static void pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa, + struct rwlock **lockp); static void pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va); static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap, vm_offset_t va); @@ -251,6 +282,8 @@ static int pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode); static boolean_t pmap_demote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va); +static boolean_t pmap_demote_pde_locked(pmap_t pmap, pd_entry_t *pde, + vm_offset_t va, struct rwlock **lockp); static boolean_t pmap_demote_pdpe(pmap_t pmap, pdp_entry_t *pdpe, vm_offset_t va); static boolean_t pmap_enter_pde(pmap_t pmap, vm_offset_t va, vm_page_t m, @@ -264,14 +297,16 @@ static void pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int mode); static vm_page_t pmap_lookup_pt_page(pmap_t pmap, vm_offset_t va); static void pmap_pde_attr(pd_entry_t *pde, int cache_bits); -static void pmap_promote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va); +static void pmap_promote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va, + struct rwlock **lockp); static boolean_t pmap_protect_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t sva, vm_prot_t prot); static void pmap_pte_attr(pt_entry_t *pte, int cache_bits); static int pmap_remove_pde(pmap_t pmap, pd_entry_t *pdq, vm_offset_t sva, - vm_page_t *free); + vm_page_t *free, struct rwlock **lockp); static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, - vm_offset_t sva, pd_entry_t ptepde, vm_page_t *free); + vm_offset_t sva, pd_entry_t ptepde, vm_page_t *free, + struct rwlock **lockp); static void pmap_remove_pt_page(pmap_t pmap, vm_page_t mpte); static void pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde, vm_page_t *free); @@ -281,10 +316,13 @@ pd_entry_t newpde); static void pmap_update_pde_invalidate(vm_offset_t va, pd_entry_t newpde); -static vm_page_t pmap_allocpde(pmap_t pmap, vm_offset_t va, int flags); -static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags); +static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, + struct rwlock **lockp); +static vm_page_t pmap_allocpde(pmap_t pmap, vm_offset_t va, + struct rwlock **lockp); +static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, + struct rwlock **lockp); -static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags); static int _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t* free); static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t, vm_page_t *); @@ -604,7 +642,7 @@ /* * Initialize the global pv list lock. */ - rw_init(&pvh_global_lock, "pvh global"); + rw_init(&pvh_global_lock, "pmap pv global"); /* * Reserve some special page table entries/VA space for temporary @@ -772,13 +810,13 @@ /* * Initialize the pv chunk list mutex. */ - mtx_init(&pv_chunks_mutex, "pv chunk list", NULL, MTX_DEF); + mtx_init(&pv_chunks_mutex, "pmap pv chunk list", NULL, MTX_DEF); /* * Initialize the pool of pv list locks. */ for (i = 0; i < NPV_LIST_LOCKS; i++) - rw_init(&pv_list_locks[i], "pv list"); + rw_init(&pv_list_locks[i], "pmap pv list"); /* * Calculate the size of the pv head table for superpages. @@ -1662,8 +1700,10 @@ } /* - * this routine is called if the page table page is not - * mapped correctly. + * This routine is called if the desired page table page does not exist. + * + * If page table page allocation fails, this routine may sleep before + * returning NULL. It sleeps only if a lock pointer was given. * * Note: If a page allocation fails at page table level two or three, * one or two pages may be held during the wait, only to be released @@ -1671,25 +1711,23 @@ * race conditions. */ static vm_page_t -_pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags) +_pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, struct rwlock **lockp) { vm_page_t m, pdppg, pdpg; - KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT || - (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK, - ("_pmap_allocpte: flags is neither M_NOWAIT nor M_WAITOK")); + PMAP_LOCK_ASSERT(pmap, MA_OWNED); - PMAP_LOCK_ASSERT(pmap, MA_OWNED); /* * Allocate a page table page. */ if ((m = vm_page_alloc(NULL, ptepindex, VM_ALLOC_NOOBJ | VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) { - if (flags & M_WAITOK) { + if (lockp != NULL) { + RELEASE_PV_LIST_LOCK(lockp); PMAP_UNLOCK(pmap); - rw_wunlock(&pvh_global_lock); + rw_runlock(&pvh_global_lock); VM_WAIT; - rw_wlock(&pvh_global_lock); + rw_rlock(&pvh_global_lock); PMAP_LOCK(pmap); } @@ -1730,7 +1768,7 @@ if ((*pml4 & PG_V) == 0) { /* Have to allocate a new pdp, recurse */ if (_pmap_allocpte(pmap, NUPDE + NUPDPE + pml4index, - flags) == NULL) { + lockp) == NULL) { --m->wire_count; atomic_subtract_int(&cnt.v_wire_count, 1); vm_page_free_zero(m); @@ -1763,7 +1801,7 @@ if ((*pml4 & PG_V) == 0) { /* Have to allocate a new pd, recurse */ if (_pmap_allocpte(pmap, NUPDE + pdpindex, - flags) == NULL) { + lockp) == NULL) { --m->wire_count; atomic_subtract_int(&cnt.v_wire_count, 1); vm_page_free_zero(m); @@ -1777,7 +1815,7 @@ if ((*pdp & PG_V) == 0) { /* Have to allocate a new pd, recurse */ if (_pmap_allocpte(pmap, NUPDE + pdpindex, - flags) == NULL) { + lockp) == NULL) { --m->wire_count; atomic_subtract_int(&cnt.v_wire_count, 1); @@ -1803,15 +1841,12 @@ } static vm_page_t -pmap_allocpde(pmap_t pmap, vm_offset_t va, int flags) +pmap_allocpde(pmap_t pmap, vm_offset_t va, struct rwlock **lockp) { vm_pindex_t pdpindex, ptepindex; pdp_entry_t *pdpe; vm_page_t pdpg; - KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT || - (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK, - ("pmap_allocpde: flags is neither M_NOWAIT nor M_WAITOK")); retry: pdpe = pmap_pdpe(pmap, va); if (pdpe != NULL && (*pdpe & PG_V) != 0) { @@ -1822,24 +1857,20 @@ /* Allocate a pd page. */ ptepindex = pmap_pde_pindex(va); pdpindex = ptepindex >> NPDPEPGSHIFT; - pdpg = _pmap_allocpte(pmap, NUPDE + pdpindex, flags); - if (pdpg == NULL && (flags & M_WAITOK)) + pdpg = _pmap_allocpte(pmap, NUPDE + pdpindex, lockp); + if (pdpg == NULL && lockp != NULL) goto retry; } return (pdpg); } static vm_page_t -pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags) +pmap_allocpte(pmap_t pmap, vm_offset_t va, struct rwlock **lockp) { vm_pindex_t ptepindex; pd_entry_t *pd; vm_page_t m; - KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT || - (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK, - ("pmap_allocpte: flags is neither M_NOWAIT nor M_WAITOK")); - /* * Calculate pagetable page index */ @@ -1855,7 +1886,7 @@ * normal 4K page. */ if (pd != NULL && (*pd & (PG_PS | PG_V)) == (PG_PS | PG_V)) { - if (!pmap_demote_pde(pmap, pd, va)) { + if (!pmap_demote_pde_locked(pmap, pd, va, lockp)) { /* * Invalidation of the 2MB page mapping may have caused * the deallocation of the underlying PD page. @@ -1876,8 +1907,8 @@ * Here if the pte page isn't mapped, or if it has been * deallocated. */ - m = _pmap_allocpte(pmap, ptepindex, flags); - if (m == NULL && (flags & M_WAITOK)) + m = _pmap_allocpte(pmap, ptepindex, lockp); + if (m == NULL && lockp != NULL) goto retry; } return (m); @@ -2071,14 +2102,16 @@ * drastic measures to free some pages so we can allocate * another pv entry chunk. * + * Returns NULL if PV entries were reclaimed from the specified pmap. + * * We do not, however, unmap 2mpages because subsequent accesses will * allocate per-page pv entries until repromotion occurs, thereby * exacerbating the shortage of free pv entries. */ static vm_page_t -pmap_pv_reclaim(pmap_t locked_pmap) +reclaim_pv_chunk(pmap_t locked_pmap, struct rwlock **lockp) { - struct pch newtail; + struct pch new_tail; struct pv_chunk *pc; struct md_page *pvh; pd_entry_t *pde; @@ -2090,13 +2123,16 @@ uint64_t inuse; int bit, field, freed; - rw_assert(&pvh_global_lock, RA_WLOCKED); + rw_assert(&pvh_global_lock, RA_LOCKED); PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED); + KASSERT(lockp != NULL, ("reclaim_pv_chunk: lockp is NULL")); pmap = NULL; free = m_pc = NULL; - TAILQ_INIT(&newtail); + TAILQ_INIT(&new_tail); + mtx_lock(&pv_chunks_mutex); while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && free == NULL) { TAILQ_REMOVE(&pv_chunks, pc, pc_lru); + mtx_unlock(&pv_chunks_mutex); if (pmap != pc->pc_pmap) { if (pmap != NULL) { pmap_invalidate_all(pmap); @@ -2105,11 +2141,14 @@ } pmap = pc->pc_pmap; /* Avoid deadlock and lock recursion. */ - if (pmap > locked_pmap) + if (pmap > locked_pmap) { + RELEASE_PV_LIST_LOCK(lockp); PMAP_LOCK(pmap); - else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) { + } else if (pmap != locked_pmap && + !PMAP_TRYLOCK(pmap)) { pmap = NULL; - TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + TAILQ_INSERT_TAIL(&new_tail, pc, pc_lru); + mtx_lock(&pv_chunks_mutex); continue; } } @@ -2138,6 +2177,7 @@ vm_page_dirty(m); if ((tpte & PG_A) != 0) vm_page_aflag_set(m, PGA_REFERENCED); + CHANGE_PV_LIST_LOCK_TO_VM_PAGE(lockp, m); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); if (TAILQ_EMPTY(&m->md.pv_list) && (m->flags & PG_FICTITIOUS) == 0) { @@ -2153,32 +2193,36 @@ } } if (freed == 0) { - TAILQ_INSERT_TAIL(&newtail, pc, pc_lru); + TAILQ_INSERT_TAIL(&new_tail, pc, pc_lru); + mtx_lock(&pv_chunks_mutex); >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Fri Jul 6 18:17:30 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id CC3F51065679; Fri, 6 Jul 2012 18:17:29 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 8138B1065676 for ; Fri, 6 Jul 2012 18:17:29 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 6AD028FC23 for ; Fri, 6 Jul 2012 18:17:29 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66IHTcb073067 for ; Fri, 6 Jul 2012 18:17:29 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66IHTtJ073064 for perforce@freebsd.org; Fri, 6 Jul 2012 18:17:29 GMT (envelope-from brooks@freebsd.org) Date: Fri, 6 Jul 2012 18:17:29 GMT Message-Id: <201207061817.q66IHTtJ073064@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213988 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 18:17:30 -0000 http://p4web.freebsd.org/@@213988?ac=10 Change 213988 by brooks@brooks_ecr_current on 2012/07/06 18:16:34 Add a fb_fill_region() function to fill part of the screen. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.c#4 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.h#4 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.c#4 (text+ko) ==== @@ -211,6 +211,17 @@ void +fb_fill_region(u_int32_t colour, int x, int y, int w, int h) +{ + int col, row; + + for (row = 0; row < h; row++) + for (col = 0; col < w; col++) + pfbp[(y + row) * fb_width + (x + col)] = colour; +} + + +void fb_post(u_int32_t *buf) { int addr; ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/libde4tc/de4tc.h#4 (text+ko) ==== @@ -50,6 +50,7 @@ u_int32_t fb_colour(int r, int g, int b); void fb_putpixel(int px, int py, int colour); void fb_fill(int col); +void fb_fill_region(u_int32_t colour, int x, int y, int w, int h); void fb_post(u_int32_t *buf); void fb_post_region(u_int32_t *buf, int x, int y, int w, int h); void fb_blend(int blend_text_bg, int blend_text_fg, int blend_pixel, int wash); From owner-p4-projects@FreeBSD.ORG Fri Jul 6 18:24:06 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 9D9131065670; Fri, 6 Jul 2012 18:24:05 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 54450106566C for ; Fri, 6 Jul 2012 18:24:05 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 3B7EE8FC15 for ; Fri, 6 Jul 2012 18:24:05 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66IO5Te073218 for ; Fri, 6 Jul 2012 18:24:05 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66IO4c9073215 for perforce@freebsd.org; Fri, 6 Jul 2012 18:24:04 GMT (envelope-from brooks@freebsd.org) Date: Fri, 6 Jul 2012 18:24:04 GMT Message-Id: <201207061824.q66IO4c9073215@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213989 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 18:24:06 -0000 http://p4web.freebsd.org/@@213989?ac=10 Change 213989 by brooks@brooks_ecr_current on 2012/07/06 18:23:32 Checkpoint with text based file browser support and basic rendering including file names and placeholders for icons. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#2 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#2 (text+ko) ==== @@ -31,13 +31,17 @@ #include #include +#include #include +#include #include +#include #include #include #include #include +#include #include #include #include @@ -47,11 +51,42 @@ #define BASEIMG "/usr/share/images/browser.png" -#define black fb_colour(0, 0, 0) -#define white fb_colour(0xff, 0xff, 0xff); -#define red fb_colour(0xff, 0, 0) -#define green fb_colour(0, 0xff, 0) -#define blue fb_colour(0, 0, 0xff) +#define vwhite(v) fb_colour((v), (v), (v)) +#define vred(v) fb_colour((v), 0, 0) +#define vgreen(v) fb_colour(0, (v), 0) +#define vblue(v) fb_colour(0, 0, (v)) +#define black vwhite(0) +#define white vwhite(0xFF) +#define red vred(0xFF) +#define green vgreen(0xFF) +#define blue vblue(0xFF) + +/* + * Each file is displayed in a 266x40 box: + * +--------------------------------------------------------------------------+ + * | 4 pixel border | + * |4 +------+ 4+----------------------------------------------------------+ | + * |p |32x32 | p| Text in 16x32 characters | | + * |x |icon | x| | | + * | +------+ +----------------------------------------------------------+ | + * | 4 pixel border | + * +--------------------------------------------------------------------------+ + * |----------------------------------(800/3 = 266) pixels--------------------| + */ +#define FROW 41 +#define NCOL 3 +#define NROW 10 +#define NSLOTS (NCOL * NROW) +#define CWIDTH 266 +#define RHEIGHT 40 +#define ICON_WH 32 +#define BORDER 4 +#define CHAR_HEIGHT 32 +#define CHAR_WIDTH 16 +#define TEXT_OFFSET (BORDER + ICON_WH + BORDER) +#define _TEXTSPACE (CWIDTH - (TEXT_OFFSET + BORDER)) +#define TEXTSPACE (_TEXTSPACE - _TEXTSPACE % CHAR_WIDTH) + /* Beginning and ending colums of each sandbox type's name */ #define SB_IMG_SPACING 20 @@ -66,6 +101,9 @@ #define SB_MINROW (fb_height - 39) #define SB_MAXROW (fb_height - 1) +/* Start offsets for browser columns */ +const int colstart[] = {0, 267, 534}; + enum _sbtype { SB_NONE = 1, SB_CAPSICUM, @@ -83,20 +121,55 @@ { 0, 0, 0 } }; -static u_int32_t *image; +static u_int32_t *bgimage; +static magic_t magic; static void usage(void) { - printf("usage: browser\n"); + printf("usage: browser \n"); + printf(" browser -T \n"); exit(1); } static void +init_tty(char *tty_name) { + int tty; + char *devpath; + + if (tty_name[0] != '/') + asprintf(&devpath, "/dev/%s", tty_name); + else + devpath = tty_name; + if ((tty = open(devpath, O_RDWR)) < 0) { + syslog(LOG_ALERT, "open failed with %s", strerror(errno)); + err(1, "open(%s)", devpath); + } + if (login_tty(tty) < 0) { + syslog(LOG_ALERT, "login_tty failed: %s", strerror(errno)); + err(1, "login_tty()"); + } + if (devpath != tty_name) + free(devpath); +} + +static void +init_magic(void) { + magic = magic_open(MAGIC_MIME_TYPE); + if (magic == NULL) + errx(1, "magic_open()"); + if (magic_load(magic, NULL) == -1) { + warnx("magic_load() %s", magic_error(magic)); + magic_close(magic); + exit(1); + } +} + +static void update_sandbox(enum _sbtype type) { - int bcol, ecol, i, j, pixel; + int bcol, ecol, i, j, pixel, value; sbtype = type; @@ -110,65 +183,282 @@ for (j = SB_MINROW; j < SB_MAXROW; j++) { for (i = SB_MINCOL; i <= SB_MAXCOL; i++) { pixel = (j * fb_width) + i; - /* XXX: messes up anti-aliasing */ - if (image[pixel] != black) - image[pixel] = (i >= bcol && i <= ecol) ? - blue : white; + if (bgimage[pixel] != black) { + /* XXX: Assuming we're either blue or white */ + value = (bgimage[pixel] >> 8) & 0xFF; + if (value == 0) { + printf("unexpected zero value, pixel %08x\n", + bgimage[pixel]); + value = 0xff; + } + bgimage[pixel] = (i >= bcol && i <= ecol) ? + vblue(value) : vwhite(value); + } + } + } + fb_post(bgimage); +} + +static const char * +get_desc(int dfd, struct dirent *entry) +{ + int fd, type; + const char *desc; + struct stat sbuf; + + if (entry->d_type == DT_LNK) { + if (fstatat(dfd, entry->d_name, &sbuf, 0) == -1) + type = DT_UNKNOWN; + else + type = IFTODT(sbuf.st_mode); + } else + type = entry->d_type; + + switch (type) { + case DT_UNKNOWN: + desc = "unknown"; + break; + case DT_REG: + if ((fd = openat(dfd, entry->d_name, O_RDONLY)) == -1) + desc = "unknown"; + else { + desc = magic_descriptor(magic, fd); + close(fd); } + break; + case DT_FIFO: + desc = "special/fifo"; + break; + case DT_CHR: + desc = "special/character"; + break; + case DT_DIR: + desc = "directory"; + break; + case DT_BLK: + desc = "special/block"; + break; + case DT_SOCK: + desc = "special/socket"; + break; + case DT_WHT: + desc = "special/whiteout"; + break; + default: + err(1, "Unhandled type %d", type); } - fb_post(image); + + return (desc); } -static void -event_loop(void) +static int +browsedir(int dfd) { - for(;;) { - sleep(1); + int f, i, j, s, nlines; + long curloc, nextloc; + DIR *dirp; + struct dirent *entry, *entry2; + u_int32_t iconbuf[ICON_WH*ICON_WH], textbuf[TEXTSPACE*CHAR_HEIGHT]; + char line[256]; + + if ((dirp = fdopendir(dfd)) == NULL) + err(1, "fdopendir()"); + + for (i = 0; i < 32*32; i++) + iconbuf[i] = blue; + + fb_fill_region(black, colstart[0], FROW, + colstart[NCOL-1] - colstart[0], NROW * RHEIGHT); + + nlines = NSLOTS - 1; + curloc = telldir(dirp); + nextloc = 0; + i = 0; +start: + seekdir(dirp, curloc); + /* telldir() return values are only good once so make a new copy! */ + curloc = telldir(dirp); + s = 0; + if (i > 0) { + printf("p %20s\n", "previous page"); + memset(textbuf, 0, sizeof(textbuf)); + fb_render_text("previous page", 2, white, black, textbuf, + TEXTSPACE, CHAR_HEIGHT); + fb_post_region(textbuf, colstart[(s/NROW)] + TEXT_OFFSET, + FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, + CHAR_HEIGHT); + fb_post_region(iconbuf, colstart[(s/NROW)] + BORDER, + FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); + s = 1; + } + entry = NULL; /* XXX: gcc warning */ + while(s < NSLOTS - 1 && (entry = readdir(dirp)) != NULL) { + printf("%2d %20s %s\n", s, entry->d_name, get_desc(dfd, entry)); + memset(textbuf, 0, sizeof(textbuf)); + fb_render_text(entry->d_name, 2, white, black, textbuf, + TEXTSPACE, CHAR_HEIGHT); + fb_post_region(textbuf, colstart[(s/NROW)]+TEXT_OFFSET, + FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); + fb_post_region(iconbuf, colstart[(s/NROW)] + BORDER, + FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); + s++; + } + + nextloc = telldir(dirp); + if (s == NSLOTS - 1 && entry != NULL) { + /* + * If there are at least two more files then we don't want to + * display a "next" button and instead want either nothing or + * the final entry. + */ + entry = readdir(dirp); + if (entry == NULL) + nextloc = 0; + else { + entry2 = readdir(dirp); + if (entry2 == NULL) { + printf("%2d %20s %s\n", s, + entry->d_name, + get_desc(dfd, entry)); + memset(textbuf, 0, sizeof(textbuf)); + fb_render_text(entry->d_name, 2, white, black, + textbuf, TEXTSPACE, CHAR_HEIGHT); + fb_post_region(textbuf, + colstart[(s/NROW)]+TEXT_OFFSET, + FROW + (RHEIGHT * (s % NROW)) + BORDER, + TEXTSPACE, CHAR_HEIGHT); + fb_post_region(iconbuf, + colstart[(s/NROW)] + BORDER, + FROW + (RHEIGHT * (s % NROW)) + BORDER, + ICON_WH, ICON_WH); + s++; + } else { + printf("n %20s\n", "next page"); + memset(textbuf, 0, sizeof(textbuf)); + fb_render_text("next page", 2, white, black, + textbuf, TEXTSPACE, CHAR_HEIGHT); + fb_post_region(textbuf, + colstart[(s/NROW)]+TEXT_OFFSET, + FROW + (RHEIGHT * (s % NROW)) + BORDER, + TEXTSPACE, CHAR_HEIGHT); + fb_post_region(iconbuf, + colstart[(s/NROW)] + BORDER, + FROW + (RHEIGHT * (s % NROW)) + BORDER, + ICON_WH, ICON_WH); + } + } + } + +prompt: + printf("select a file or directory by number :\n"); + if (fgets(line, sizeof(line), stdin) == NULL) { + if (feof(stdin)) + return (-1); + else + errx(1, "fgets(): %s", strerror(ferror(stdin))); + } + printf("line '%s'\n", line); + f = 0; /* XXX: gcc warning*/ + switch (line[0]) { + case '\n': + case 'n': + /* This leaks an internal struct associted with curloc/ */ + if (nextloc != 0) { + i += s; + curloc = nextloc; + } + goto start; + case 'p': + i -= s; + // XXX previous page + break; + case 'q': + return(-1); + default: + if (!isnumber(line[0])) { + printf("invalid file %s\n", line); + goto prompt; + } + f = atoi(line); + if (f < 0 || f >= nlines) { + printf("invalid file %s\n", line); + goto prompt; + } + } + + /* Take action on the specified file */ + seekdir(dirp, curloc); + curloc = telldir(dirp); + j = 0; + while((entry = readdir(dirp)) != NULL) { + printf("%s\n", entry->d_name); + if (j++ != f) + continue; + if (entry->d_type == DT_DIR) { + if ((dfd = openat(dfd, entry->d_name, + O_RDONLY|O_DIRECTORY)) == -1) + err(1, "open(%s)", entry->d_name); + if (closedir(dirp) == -1) + err(1, "closedir()"); + return (dfd); + } else { + printf ("opening non-directory not supported\n"); + goto start; + } } + + if (closedir(dirp) == -1) + err(1, "closedir()"); + + return (-1); } int main(int argc, char *argv[]) { - int tty; - char *devpath; + int ch, dfd; + int ttyflag = 1; - syslog(LOG_ALERT, "starting up"); - if (argc != 2) - usage(); - - if (argv[1][0] != '/') - asprintf(&devpath, "/dev/%s", argv[1]); - else - devpath = argv[1]; - if ((tty = open(devpath, O_RDWR)) < 0) { - syslog(LOG_ALERT, "open failed with %s", strerror(errno)); - err(1, "open(%s)", devpath); + while ((ch = getopt(argc, argv, "T")) != -1) { + switch (ch) { + case 'T': + ttyflag = 0; + break; + default: + usage(); + } } + argc -= optind; + argv += optind; - if (login_tty(tty) < 0) { - syslog(LOG_ALERT, "login_tty failed: %s", strerror(errno)); - err(1, "login_tty()"); - } - syslog(LOG_ALERT, "tty set up"); + if (argc <= 0 && argc > 2) + usage(); + if (argc == 2) + init_tty(argv[1]); + init_magic(); fb_init(); + fb_load_syscons_font(NULL, "/usr/share/syscons/fonts/iso-8x16.fnt"); - image = malloc(sizeof(u_int32_t) * fb_height * fb_width); - if (image == NULL) + bgimage = malloc(sizeof(u_int32_t) * fb_height * fb_width); + if (bgimage == NULL) err(1, "malloc"); - read_png_file(BASEIMG, image, fb_width, fb_height); + read_png_file(BASEIMG, bgimage, fb_width, fb_height); syslog(LOG_ALERT, "tty set up"); - fb_post(image); + fb_post(bgimage); //fb_fade2on(); fb_fade2text(127); fb_text_cursor(255, 255); update_sandbox(SB_NONE); - event_loop(); + if ((dfd = open(argv[0], O_RDONLY|O_DIRECTORY)) == -1) + err(1, "open(%s)", argv[1]); + + while (dfd != -1) + dfd = browsedir(dfd); return (0); } From owner-p4-projects@FreeBSD.ORG Fri Jul 6 19:12:27 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EE4DB1065672; Fri, 6 Jul 2012 19:12:25 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A7297106564A for ; Fri, 6 Jul 2012 19:12:25 +0000 (UTC) (envelope-from jhb@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 905878FC20 for ; Fri, 6 Jul 2012 19:12:25 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66JCPaW074760 for ; Fri, 6 Jul 2012 19:12:25 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66JCPQq074757 for perforce@freebsd.org; Fri, 6 Jul 2012 19:12:25 GMT (envelope-from jhb@freebsd.org) Date: Fri, 6 Jul 2012 19:12:25 GMT Message-Id: <201207061912.q66JCPQq074757@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213991 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 19:12:27 -0000 http://p4web.freebsd.org/@@213991?ac=10 Change 213991 by jhb@jhb_jhbbsd on 2012/07/06 19:11:59 Add clts() to cpufunc.h and reimplement setting CR0_TS in terms of load_cr0() and rcr0() rather than using lmsw and smsw (Intel discourages use of smsw and lmsw on 386 and newer processors). Affected files ... .. //depot/projects/smpng/sys/amd64/amd64/fpu.c#25 edit .. //depot/projects/smpng/sys/amd64/include/cpufunc.h#28 edit .. //depot/projects/smpng/sys/i386/include/cpufunc.h#49 edit .. //depot/projects/smpng/sys/i386/isa/npx.c#75 edit Differences ... ==== //depot/projects/smpng/sys/amd64/amd64/fpu.c#25 (text+ko) ==== @@ -73,10 +73,6 @@ #define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr))) #define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr))) #define ldmxcsr(csr) __asm __volatile("ldmxcsr %0" : : "m" (csr)) -#define start_emulating() __asm __volatile( \ - "smsw %%ax; orb %0,%%al; lmsw %%ax" \ - : : "n" (CR0_TS) : "ax") -#define stop_emulating() __asm __volatile("clts") static __inline void xrstor(char *addr, uint64_t mask) @@ -109,13 +105,14 @@ void fxsave(caddr_t addr); void fxrstor(caddr_t addr); void ldmxcsr(u_int csr); -void start_emulating(void); -void stop_emulating(void); void xrstor(char *addr, uint64_t mask); void xsave(char *addr, uint64_t mask); #endif /* __GNUCLIKE_ASM && !lint */ +#define start_emulating() load_cr0(rcr0() | CR0_TS) +#define stop_emulating() clts() + #define GET_FPU_CW(thread) ((thread)->td_pcb->pcb_save->sv_env.en_cw) #define GET_FPU_SW(thread) ((thread)->td_pcb->pcb_save->sv_env.en_sw) ==== //depot/projects/smpng/sys/amd64/include/cpufunc.h#28 (text+ko) ==== @@ -109,6 +109,13 @@ } static __inline void +clts(void) +{ + + __asm __volatile("clts"); +} + +static __inline void disable_intr(void) { __asm __volatile("cli" : : : "memory"); @@ -705,6 +712,9 @@ int breakpoint(void); u_int bsfl(u_int mask); u_int bsrl(u_int mask); +void clflush(u_long addr); +void clts(void); +void cpuid_count(u_int ax, u_int cx, u_int *p); void disable_intr(void); void do_cpuid(u_int ax, u_int *p); void enable_intr(void); ==== //depot/projects/smpng/sys/i386/include/cpufunc.h#49 (text+ko) ==== @@ -99,6 +99,13 @@ } static __inline void +clts(void) +{ + + __asm __volatile("clts"); +} + +static __inline void disable_intr(void) { #ifdef XEN @@ -691,6 +698,9 @@ int breakpoint(void); u_int bsfl(u_int mask); u_int bsrl(u_int mask); +void clflush(u_long addr); +void clts(void); +void cpuid_count(u_int ax, u_int cx, u_int *p); void disable_intr(void); void do_cpuid(u_int ax, u_int *p); void enable_intr(void); ==== //depot/projects/smpng/sys/i386/isa/npx.c#75 (text+ko) ==== @@ -100,15 +100,6 @@ #define fxrstor(addr) __asm __volatile("fxrstor %0" : : "m" (*(addr))) #define fxsave(addr) __asm __volatile("fxsave %0" : "=m" (*(addr))) #endif -#ifdef XEN -#define start_emulating() (HYPERVISOR_fpu_taskswitch(1)) -#define stop_emulating() (HYPERVISOR_fpu_taskswitch(0)) -#else -#define start_emulating() __asm __volatile( \ - "smsw %%ax; orb %0,%%al; lmsw %%ax" \ - : : "n" (CR0_TS) : "ax") -#define stop_emulating() __asm __volatile("clts") -#endif #else /* !(__GNUCLIKE_ASM && !lint) */ void fldcw(u_short cw); @@ -123,11 +114,17 @@ void fxsave(caddr_t addr); void fxrstor(caddr_t addr); #endif -void start_emulating(void); -void stop_emulating(void); #endif /* __GNUCLIKE_ASM && !lint */ +#ifdef XEN +#define start_emulating() (HYPERVISOR_fpu_taskswitch(1)) +#define stop_emulating() (HYPERVISOR_fpu_taskswitch(0)) +#else +#define start_emulating() load_cr0(rcr0() | CR0_TS) +#define stop_emulating() clts() +#endif + #ifdef CPU_ENABLE_SSE #define GET_FPU_CW(thread) \ (cpu_fxsr ? \ From owner-p4-projects@FreeBSD.ORG Fri Jul 6 21:05:32 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 0489B106566C; Fri, 6 Jul 2012 21:05:30 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B12CE106564A for ; Fri, 6 Jul 2012 21:05:30 +0000 (UTC) (envelope-from brooks@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 990118FC08 for ; Fri, 6 Jul 2012 21:05:30 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66L5Ubt079553 for ; Fri, 6 Jul 2012 21:05:30 GMT (envelope-from brooks@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66L5UF8079550 for perforce@freebsd.org; Fri, 6 Jul 2012 21:05:30 GMT (envelope-from brooks@freebsd.org) Date: Fri, 6 Jul 2012 21:05:30 GMT Message-Id: <201207062105.q66L5UF8079550@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to brooks@freebsd.org using -f From: Brooks Davis To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213995 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 21:05:32 -0000 http://p4web.freebsd.org/@@213995?ac=10 Change 213995 by brooks@brooks_ecr_current on 2012/07/06 21:04:54 Add more complete icon support. Icons obtained from the Public Domain section of the Open Icon Library http://openiconlibrary.sourceforge.net/ with exception of the ? which is simply Helvetica Bold. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#3 edit .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/images/icons.png#1 add Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#3 (text+ko) ==== @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -50,6 +51,7 @@ #include #define BASEIMG "/usr/share/images/browser.png" +#define ICONS "/usr/share/images/icons.png" #define vwhite(v) fb_colour((v), (v), (v)) #define vred(v) fb_colour((v), 0, 0) @@ -104,6 +106,39 @@ /* Start offsets for browser columns */ const int colstart[] = {0, 267, 534}; +/* + * List of mappings between icons in the icons.png file and values from + * the get_desc() function. Processing is first match so most specific + * entries should come first. + */ +struct _iconmap { + int i_offset; + const char *i_type; +} iconmap[] = { + { 0, "prev" }, + { 1, "next" }, + { 2, "special/character" }, + { 2, "special/block" }, + { 3, "unopenable" }, + { 4, "important" }, + { 5, "devil" }, + { 6, "application/x-executable" }, + { 6, "application/x-sharedlib" }, + { 9, "text/html" }, + { 11, "text/x-shellscript" }, + { 13, "badmagic" }, + { 14, "directory" }, + { 15, "application/x-dbm" }, + + { 7, "audio/*" }, + { 8, "image/*" }, + { 10, "text/*" }, + { 12, "video/*" }, + + { 16, "*" }, + { 0, NULL } +}; + enum _sbtype { SB_NONE = 1, SB_CAPSICUM, @@ -122,6 +157,7 @@ }; static u_int32_t *bgimage; +static u_int32_t *icons; static magic_t magic; static void @@ -200,6 +236,19 @@ } static const char * +get_magic(int fd) +{ + switch (sbtype) { + case SB_NONE: + return magic_descriptor(magic, fd); + case SB_CAPSICUM: + return "devil"; + case SB_CHERI: + return "devil"; + } +} + +static const char * get_desc(int dfd, struct dirent *entry) { int fd, type; @@ -220,9 +269,9 @@ break; case DT_REG: if ((fd = openat(dfd, entry->d_name, O_RDONLY)) == -1) - desc = "unknown"; + desc = "unopenable"; else { - desc = magic_descriptor(magic, fd); + desc = get_magic(fd); close(fd); } break; @@ -251,26 +300,34 @@ return (desc); } +static u_int32_t * +get_icon(const char *desc) +{ + struct _iconmap *icon; + + for (icon = iconmap; icon->i_type != NULL; icon++) + if (fnmatch(icon->i_type, desc, 0) != FNM_NOMATCH) + return (icons + (ICON_WH * ICON_WH * icon->i_offset)); + + return (NULL); +} + static int browsedir(int dfd) { - int f, i, j, s, nlines; + int f, i, j, s; long curloc, nextloc; DIR *dirp; struct dirent *entry, *entry2; - u_int32_t iconbuf[ICON_WH*ICON_WH], textbuf[TEXTSPACE*CHAR_HEIGHT]; + u_int32_t *icon, textbuf[TEXTSPACE*CHAR_HEIGHT]; char line[256]; + const char *desc; if ((dirp = fdopendir(dfd)) == NULL) err(1, "fdopendir()"); - for (i = 0; i < 32*32; i++) - iconbuf[i] = blue; - - fb_fill_region(black, colstart[0], FROW, - colstart[NCOL-1] - colstart[0], NROW * RHEIGHT); + fb_fill_region(black, colstart[0], FROW, fb_width, NROW * RHEIGHT); - nlines = NSLOTS - 1; curloc = telldir(dirp); nextloc = 0; i = 0; @@ -287,19 +344,22 @@ fb_post_region(textbuf, colstart[(s/NROW)] + TEXT_OFFSET, FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); - fb_post_region(iconbuf, colstart[(s/NROW)] + BORDER, + icon = get_icon("prev"); + fb_post_region(icon, colstart[(s/NROW)] + BORDER, FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); s = 1; } entry = NULL; /* XXX: gcc warning */ while(s < NSLOTS - 1 && (entry = readdir(dirp)) != NULL) { - printf("%2d %20s %s\n", s, entry->d_name, get_desc(dfd, entry)); + desc = get_desc(dfd, entry); + printf("%2d %20s %s\n", s, entry->d_name, desc); memset(textbuf, 0, sizeof(textbuf)); fb_render_text(entry->d_name, 2, white, black, textbuf, TEXTSPACE, CHAR_HEIGHT); fb_post_region(textbuf, colstart[(s/NROW)]+TEXT_OFFSET, FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); - fb_post_region(iconbuf, colstart[(s/NROW)] + BORDER, + icon = get_icon(desc); + fb_post_region(icon, colstart[(s/NROW)] + BORDER, FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); s++; } @@ -317,9 +377,9 @@ else { entry2 = readdir(dirp); if (entry2 == NULL) { + desc = get_desc(dfd, entry); printf("%2d %20s %s\n", s, - entry->d_name, - get_desc(dfd, entry)); + entry->d_name, desc); memset(textbuf, 0, sizeof(textbuf)); fb_render_text(entry->d_name, 2, white, black, textbuf, TEXTSPACE, CHAR_HEIGHT); @@ -327,7 +387,8 @@ colstart[(s/NROW)]+TEXT_OFFSET, FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); - fb_post_region(iconbuf, + icon = get_icon(desc); + fb_post_region(icon, colstart[(s/NROW)] + BORDER, FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); @@ -341,7 +402,8 @@ colstart[(s/NROW)]+TEXT_OFFSET, FROW + (RHEIGHT * (s % NROW)) + BORDER, TEXTSPACE, CHAR_HEIGHT); - fb_post_region(iconbuf, + icon = get_icon("next"); + fb_post_region(icon, colstart[(s/NROW)] + BORDER, FROW + (RHEIGHT * (s % NROW)) + BORDER, ICON_WH, ICON_WH); @@ -380,7 +442,7 @@ goto prompt; } f = atoi(line); - if (f < 0 || f >= nlines) { + if (f < 0 || f >= NSLOTS - 1) { printf("invalid file %s\n", line); goto prompt; } @@ -443,13 +505,16 @@ bgimage = malloc(sizeof(u_int32_t) * fb_height * fb_width); if (bgimage == NULL) err(1, "malloc"); + read_png_file(BASEIMG, bgimage, fb_width, fb_height); - read_png_file(BASEIMG, bgimage, fb_width, fb_height); - syslog(LOG_ALERT, "tty set up"); + icons = malloc(sizeof(u_int32_t) * ICON_WH * 640); + if (icons == NULL) + err(1, "malloc"); + read_png_file(ICONS, icons, 32, 640); fb_post(bgimage); - //fb_fade2on(); - fb_fade2text(127); + fb_fade2on(); + //fb_fade2text(127); fb_text_cursor(255, 255); update_sandbox(SB_NONE); From owner-p4-projects@FreeBSD.ORG Fri Jul 6 22:40:11 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id B6F46106566B; Fri, 6 Jul 2012 22:40:10 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 6F130106566C for ; Fri, 6 Jul 2012 22:40:10 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 51D998FC0C for ; Fri, 6 Jul 2012 22:40:10 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q66MeAHG083695 for ; Fri, 6 Jul 2012 22:40:10 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q66Me9Oq083692 for perforce@freebsd.org; Fri, 6 Jul 2012 22:40:09 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Fri, 6 Jul 2012 22:40:09 GMT Message-Id: <201207062240.q66Me9Oq083692@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 213999 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jul 2012 22:40:12 -0000 http://p4web.freebsd.org/@@213999?ac=10 Change 213999 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/06 22:39:08 Integrate CheriBSD branch to brin in Altera JTAG UART driver improvements, significant demo application work. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/Makefile#2 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/de4tc.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/de4tc.h#2 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/syscons-fonts.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libvuln_magic/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libvuln_magic/config.h#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libvuln_magic/funcs.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/Makefile#3 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/browser.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/browser.png#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/images/icons.png#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/cycle_led/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/cycle_led/cycle_led.sh#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/flashit/flashit.sh#2 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd/minifile/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/minifile/minifile.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/pictview/Makefile#2 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd/pictview/pictview.c#3 integrate .. //depot/projects/ctsrd/cheribsd/src/ctsrd/showimage/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/showimage/images/Makefile#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/showimage/images/booting.png#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/showimage/images/upgrade-complete.png#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/showimage/images/upgrade-inprogress.png#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/showimage/showimage.c#1 branch .. //depot/projects/ctsrd/cheribsd/src/ctsrd/spinner/spinner.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/etc/mtree/BSD.usr.dist#2 integrate .. //depot/projects/ctsrd/cheribsd/src/etc/rc#2 integrate .. //depot/projects/ctsrd/cheribsd/src/etc/rc.subr#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/conf/options.mips#4 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.h#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_tty.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4.hints#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4_MDROOT#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_DE4_SDROOT#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/conf/BERI_SIM_MDROOT#2 integrate .. //depot/projects/ctsrd/cheribsd/src/sys/mips/mips/stack_machdep.c#2 integrate .. //depot/projects/ctsrd/cheribsd/src/usr.sbin/isfctl/isfctl.c#2 integrate Differences ... ==== //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/Makefile#2 (text+ko) ==== @@ -5,12 +5,15 @@ LIB= de4tc SHLIB_MAJOR= 1 -SRCS= de4tc.c +SRCS= de4tc.c syscons-fonts.c INCS= de4tc.h +.PATH: ${.CURDIR}/../../usr.sbin/vidcontrol +CFLAGS+=-I${.CURDIR}/../../usr.sbin/vidcontrol +SRCS+= decode.c + CFLAGS+= -I${.CURDIR}/../libvuln_png/ -#LDADD+= -L../libvuln_png/ -lvuln_png -lz -lm #WARNS?= 0 ==== //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/de4tc.c#2 (text+ko) ==== @@ -52,7 +52,7 @@ static int dispfd; static int textfd; static int fademode=0; -static volatile u_int32_t *pfbp; +volatile u_int32_t *pfbp; static volatile u_int16_t *tfbp; static volatile u_int32_t *mtlctrl; @@ -62,7 +62,10 @@ // number of lines in the line pattern static const int num_lines_pattern = 600; +const int fb_height = 480; +const int fb_width = 800; + /***************************************************************************** * hack around endian issue * TODO: replace with endian library call (but not present in Linux?) @@ -208,6 +211,17 @@ void +fb_fill_region(u_int32_t colour, int x, int y, int w, int h) +{ + int col, row; + + for (row = 0; row < h; row++) + for (col = 0; col < w; col++) + pfbp[(y + row) * fb_width + (x + col)] = colour; +} + + +void fb_post(u_int32_t *buf) { int addr; @@ -217,6 +231,17 @@ void +fb_post_region(u_int32_t *buf, int x, int y, int w, int h) +{ + int col, row; + + for (row = 0; row < h; row++) + for (col = 0; col < w; col++) + pfbp[(y + row) * fb_width + (x + col)] = buf[row * w + col]; +} + + +void fb_blend(int blend_text_bg, int blend_text_fg, int blend_pixel, int wash __unused) { mtlctrl[0] = ==== //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/libde4tc/de4tc.h#2 (text+ko) ==== @@ -1,5 +1,6 @@ /*- * Copyright (c) 2012 Simon W. Moore + * Copyright (c) 2012 SRI International * All rights reserved. * * This software was developed by SRI International and the University of @@ -38,8 +39,8 @@ extern int touch_gesture; extern int touch_count; -const int fb_height = 480; -const int fb_width = 800; +extern const int fb_height; +extern const int fb_width; void multitouch_pole(void); void multitouch_filter(void); @@ -49,7 +50,9 @@ u_int32_t fb_colour(int r, int g, int b); void fb_putpixel(int px, int py, int colour); void fb_fill(int col); +void fb_fill_region(u_int32_t colour, int x, int y, int w, int h); void fb_post(u_int32_t *buf); +void fb_post_region(u_int32_t *buf, int x, int y, int w, int h); void fb_blend(int blend_text_bg, int blend_text_fg, int blend_pixel, int wash); void fb_text_cursor(int x, int y); void fb_fade2off(void); @@ -58,4 +61,10 @@ void plot_line(int x1, int y1, int x2, int y2, unsigned int colour); void read_png_file(const char* file_name, u_int32_t* imgbuf, int maxwidth, int maxheight); +void fb_load_syscons_font(const char *type, const char *filename); +int fb_get_font_height(void); +int fb_get_font_width(void); +void fb_render_text(const char *string, int expand, u_int32_t con, u_int32_t coff, + u_int32_t *buffer, int w, int h); + #endif /* !_DE4TC_H_ */ ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/Makefile#3 (text+ko) ==== @@ -1,7 +1,11 @@ .include -SUBDIR= flashit \ +SUBDIR= browser \ + cycle_led \ + flashit \ + minifile \ pictview \ + showimage \ spinner .include ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/flashit/flashit.sh#2 (text+ko) ==== @@ -1,24 +1,26 @@ #!/bin/sh +isf0_DEV=isf0 +isf0_OFFSET=0 +isf0_MAXLEN=0x02000000 + +isf1_DEV=isf1 +isf1_OFFSET=0 +isf1_MAXLEN=0x02000000 + fpga_DEV=isf0 fpga_OFFSET=0x00020000 -fpga_MAXLEN=0x00FE0000 +fpga_MAXLEN=0x00C00000 fpga_SKIP=0x20000 -# New kernel location on isf0 -kernel_DEV=isf0 -kernel_OFFSET=0x01000000 -kernel_MAXLEN=0x01000000 +fpga2_DEV=isf0 +fpga2_OFFSET=0x00C20000 +fpga2_MAXLEN=0x00C00000 +fpga2_SKIP=0x20000 -# Old kernel location on isf1 -kernel2_DEV=isf1 -kernel2_OFFSET=0x01000000 -kernel2_MAXLEN=0x01000000 - -# Proposed root location -root_DEV=isf1 -root_OFFSET=0x00000000 -root_MAXLEN=0x02000000 +kernel_DEV=isf1 +kernel_OFFSET=0x00000000 +kernel_MAXLEN=0x02000000 TARGETS="fpga:kernel:kernel2:root" @@ -114,11 +116,17 @@ case "${source}" in *.bz2) + if [ -z "${tmpdir}" ]; then + err 1 "Can't make a temporary directory, is /tmp writable?" + fi binfile="${tmpdir}/${src_name%.bz2}" echo "Extracting to ${binfile}" bunzip2 -c "${source}" > "${binfile}" ;; *.gz) + if [ -z "${tmpdir}" ]; then + err 1 "Can't make a temporary directory, is /tmp writable?" + fi binfile="${tmpdir}/${src_name%.gz}" echo "Extracting to ${binfile}" gunzip -c "${source}" > "${binfile}" ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/pictview/Makefile#2 (text+ko) ==== @@ -9,7 +9,7 @@ WARNS= 0 -LDADD+= -lde4tc -lvuln_png -lz -lm +LDADD+= -lde4tc -lvuln_png -lz -lm -lutil # Disable the stack protector, we want to be vulnerable SSP_CFLAGS= ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/pictview/pictview.c#3 (text+ko) ==== @@ -29,16 +29,22 @@ */ #include +#include #include +#include #include #include #include +#include +#include +#include +#include +#include #include -#include +#include +#include +#include #include -#include -#include -#include #include @@ -48,8 +54,6 @@ u_int32_t *fb_buf; - - void pen_drawing_clear_screen(void) { @@ -140,6 +144,20 @@ read_png_file("/usr/share/images/keyboardC.png", keyboard_imgs[3], keyboard_width, keyboard_height); } +static void +writeall(int fd, const char *buf, size_t len) +{ + int wlen = 0, n; + + while (wlen != len) { + n = write(fd, buf + wlen, len - wlen); + if (n < 0) { + syslog(LOG_ALERT, "write failed: %s", strerror(errno)); + err(1, "write"); + } + wlen += n; + } +} void keyboard_on(void) @@ -152,6 +170,16 @@ int prev_keymode = -1; int keyYpos = fb_height-keyboard_height; + const int poll_timeout = touch_timeout; + int wait_poll_timeout = poll_timeout; + + static int pmaster; + static pid_t pid; + int pslave, n; + char *devpath, buf[1024]; + ssize_t rlen; + struct pollfd pfd[1]; + // extra mapping codes: // ctrl key = \xff -> keymode=3 // num key = \xfe -> keymode=2 @@ -180,6 +208,28 @@ keymap[1][1][3] = '\xff'; keymap[2][1][3] = '\xff'; + if (kbdfd < 0) { + /* XXX: need to handle the case of the shell exiting. */ + if (openpty(&pmaster, &pslave, NULL, NULL, NULL) == -1) + err(1, "openpty"); + pid = fork(); + if (pid < 0) + err(1, "fork()"); + else if (pid > 0) { + close(pslave); + kbdfd = pmaster; + } else { + close(pmaster); + if (login_tty(pslave) < 0) { + syslog(LOG_ALERT, "login_tty failed in child: %s", strerror(errno)); + err(1, "tty_login"); + } + execl("/bin/sh", "sh", NULL); + syslog(LOG_ALERT, "exec of /bin/sh failed: %s", strerror(errno)); + err(1, "execl()"); + } + } + fb_fade2off(); fb_fade2text(127); do { @@ -236,9 +286,7 @@ } if(ic < 0x80) { // printf("key = \"%c\" = 0x%02x\n", c, ic); - /* XXX: should handle full buffers */ - if (write(kbdfd, &c, 1) == -1) - err(1, "write"); + writeall(kbdfd, &c, 1); // cancel shift and ctrl modes after character sent if((keymode==1) || (keymode==3)) keymode=0; @@ -256,6 +304,43 @@ keyYpos -= fb_height; // put on screen prev_keymode = -1; // redraw keyboard } + + if (kbdfd != 0) { + if (wait_poll_timeout > 0) { + wait_poll_timeout--; + continue; + } + wait_poll_timeout = poll_timeout; + + /* + * If the child has exited, reset the state and return to the + * main screen. + */ + if (wait4(pid, NULL, WNOHANG, NULL) != 0) { + kbdfd = -1; + close(pmaster); + break; + } + + /* Check for output from the child and post it if needed */ + pfd[0].fd = pmaster; + pfd[0].events = POLLIN; + n = poll(pfd, 1, 0); + if (n == 0) + continue; + if (n < 0) { + syslog(LOG_ALERT, "poll failed with %s", strerror(errno)); + err(1, "poll"); + } + if (pfd[0].revents & POLLIN) { + rlen = read(pfd[0].fd, buf, sizeof(buf)); + if (rlen < 0) { + syslog(LOG_ALERT, "read failed: %s", strerror(errno)); + err(1, "read"); + } else if (rlen > 0) + writeall(0, buf, rlen); + } + } } while(!((touch_count==2) && (touch_gesture==0x49))); } @@ -551,8 +636,7 @@ int main(int argc, char *argv[]) { - int ofd, pipefds[2]; - pid_t pid; + int tty; char *devpath; fb_buf = malloc(sizeof(*fb_buf) * fb_width * fb_height); @@ -571,34 +655,19 @@ if (argc > 2) errx(1, "usage: pictview [tty]"); if (argc == 2) { - if (pipe(pipefds) == -1) - err(1, "pipe()"); - pid = fork(); - if (pid < 0) - return (pid); - else if (pid > 0) { - /* XXX: should probably wait a bit and see if the child fails quickly */ - kbdfd=pipefds[0]; - } else { - if (dup2(pipefds[1], 0) == -1) - err(1, "dup2(%d, 0)", pipefds[1]); - if (argv[1][0] != '/') - asprintf(&devpath, "/dev/%s", argv[1]); - else - devpath = argv[1]; - ofd = open(devpath, O_WRONLY); - if (ofd < 0) - err(1, "open(%s)", argv[1]); - if (dup2(ofd, 1) == -1) { - syslog(LOG_ALERT, "redir: dup2(%d, 1) failed with %d", ofd, errno); - exit(1); - } - if (dup2(ofd, 2) == -1) { - syslog(LOG_ALERT, "redir: dup2(%d, 2) failed with %d", ofd, errno); - exit(1); - } - execl("/bin/sh", "sh", "-i", NULL); - err(1, "execl()"); + kbdfd = -1; + if (argv[1][0] != '/') + asprintf(&devpath, "/dev/%s", argv[1]); + else + devpath = argv[1]; + if ((tty = open(devpath, O_RDWR)) < 0) { + syslog(LOG_ALERT, "open failed with %s", strerror(errno)); + err(1, "open(%s)", devpath); + } + + if (login_tty(tty) < 0) { + syslog(LOG_ALERT, "login_tty failed: %s", strerror(errno)); + err(1, "login_tty()"); } } ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/spinner/spinner.c#2 (text+ko) ==== @@ -80,7 +80,7 @@ main(int argc, char *argv[]) { int alpha, ch, i, ofd; - pid_t pid; + pid_t pid = 0; char *ep; char imgpath[MAXPATHLEN]; u_int32_t *bottom, *top; @@ -164,7 +164,8 @@ for (i = 0; i < NSPINNERS; i++) { - poll_child(pid); + if (pid != 0) + poll_child(pid); snprintf(imgpath, sizeof(imgpath), "%s/spinner%02d.png", IMGDIR, i); read_png_file(imgpath, spinners[i], fb_width, fb_height); @@ -191,7 +192,8 @@ if (i >= NSPINNERS) i = 0; fb_post(spinners[i]); - poll_child(pid); + if (pid != 0) + poll_child(pid); } fb_fade2off(); ==== //depot/projects/ctsrd/cheribsd/src/etc/mtree/BSD.usr.dist#2 (text+ko) ==== @@ -322,6 +322,8 @@ fortune .. .. + images + .. info .. i18n ==== //depot/projects/ctsrd/cheribsd/src/etc/rc#2 (text+ko) ==== @@ -82,7 +82,11 @@ # Do a first pass to get everything up to $early_late_divider so that # we can do a second pass that includes $local_startup directories # -files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null` +if [ -r /etc/rcorder.start ]; then + files=`read_fixed_rcorder /etc/rcorder.start` +else + files=`rcorder ${skip} /etc/rc.d/* 2>/dev/null` +fi _rc_elem_done=' ' for _rc_elem in ${files}; do @@ -104,7 +108,11 @@ *) find_local_scripts_new ;; esac -files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` +if [ -r /etc/rcorder.start ]; then + files=`read_fixed_rcorder /etc/rcorder.start` +else + files=`rcorder ${skip} /etc/rc.d/* ${local_rc} 2>/dev/null` +fi for _rc_elem in ${files}; do case "$_rc_elem_done" in *" $_rc_elem "*) continue ;; ==== //depot/projects/ctsrd/cheribsd/src/etc/rc.subr#2 (text+ko) ==== @@ -1738,6 +1738,20 @@ esac } +read_fixed_rcorder() +{ + local _files _file + + _files="" + while read _file; do + if [ -r ${_file} ]; then + _files="${_files} ${_file}" + fi + done < $1 + + echo ${_files} +} + fi # [ -z "${_rc_subr_loaded}" ] _rc_subr_loaded=: ==== //depot/projects/ctsrd/cheribsd/src/sys/conf/options.mips#4 (text+ko) ==== ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/avgen/altera_avgen.c#2 (text+ko) ==== @@ -382,16 +382,18 @@ device_printf(dev, "couldn't map memory\n"); return (ENXIO); } - if (rman_get_size(sc->avg_res) % PAGE_SIZE != 0) { - device_printf(dev, - "memory region not even multiple of page size\n"); - error = ENXIO; - goto error; - } - if (rman_get_start(sc->avg_res) % PAGE_SIZE != 0) { - device_printf(dev, "memory region not page-aligned\n"); - error = ENXIO; - goto error; + if (rman_get_size(sc->avg_res) >= PAGE_SIZE || str_mmapio != NULL) { + if (rman_get_size(sc->avg_res) % PAGE_SIZE != 0) { + device_printf(dev, + "memory region not even multiple of page size\n"); + error = ENXIO; + goto error; + } + if (rman_get_start(sc->avg_res) % PAGE_SIZE != 0) { + device_printf(dev, "memory region not page-aligned\n"); + error = ENXIO; + goto error; + } } /* Device node allocation. */ ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart.h#2 (text+ko) ==== @@ -56,7 +56,8 @@ u_int ajus_flags; struct mtx *ajus_lockp; struct mtx ajus_lock; - struct callout ajus_callout; + struct callout ajus_io_callout; + struct callout ajus_ac_callout; /* * One-character buffer required because it's not possible to peek at @@ -66,6 +67,10 @@ int *ajus_buffer_validp; uint8_t ajus_buffer_data; uint8_t *ajus_buffer_datap; + int ajus_jtag_present; + int *ajus_jtag_presentp; + u_int ajus_jtag_missed; + u_int *ajus_jtag_missedp; }; #define AJU_TTYNAME "ttyu" @@ -126,6 +131,8 @@ extern struct mtx aju_cons_lock; extern char aju_cons_buffer_data; extern int aju_cons_buffer_valid; +extern int aju_cons_jtag_present; +extern u_int aju_cons_jtag_missed; /* * Base physical address of the JTAG UART in BERI. ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_cons.c#2 (text+ko) ==== @@ -55,6 +55,8 @@ */ char aju_cons_buffer_data; int aju_cons_buffer_valid; +int aju_cons_jtag_present; +u_int aju_cons_jtag_missed; struct mtx aju_cons_lock; /* @@ -69,6 +71,16 @@ static cn_ungrab_t aju_cnungrab; /* + * JTAG sets the ALTERA_JTAG_UART_CONTROL_AC bit whenever it accesses the + * FIFO. This allows us to (sort of) tell when JTAG is present, so that we + * can adopt lossy, rather than blocking, behaviour when JTAG isn't there. + * When it is present, we do full flow control. This delay is how long we + * wait to see if JTAG has really disappeared when finding a full buffer and + * no AC bit set. + */ +#define ALTERA_JTAG_UART_AC_POLL_DELAY 10000 + +/* * I/O routines lifted from Deimos. This is not only MIPS-specific, but also * BERI-specific, as we're hard coding the the address at which we expect to * find the Altera JTAG UART and using it unconditionally. We use these @@ -154,17 +166,17 @@ ALTERA_JTAG_UART_CONTROL_OFF))); } -/* - * Slightly higher-level routines aware of buffering and flow control. - */ -static int -aju_cons_writable(void) +static inline void +aju_cons_control_write(uint32_t v) { - return ((aju_cons_control_read() & - ALTERA_JTAG_UART_CONTROL_WSPACE) != 0); + mips_iowrite_uint32le(mips_phys_to_uncached(BERI_UART_BASE + + ALTERA_JTAG_UART_CONTROL_OFF), v); } +/* + * Slightly higher-level routines aware of buffering and flow control. + */ static int aju_cons_readable(void) { @@ -186,10 +198,46 @@ static void aju_cons_write(char ch) { + uint32_t v; AJU_CONSOLE_LOCK_ASSERT(); - while (!aju_cons_writable()); + /* + * The flow control logic here is somewhat subtle: we want to wait for + * write buffer space only while JTAG is present. However, we can't + * directly ask if JTAG is present -- just whether it's been seen + * since we last cleared the ALTERA_JTAG_UART_CONTROL_AC bit. As + * such, implement a polling loop in which we both wait for space and + * try to decide whether JTAG has disappeared on us. We will have to + * wait one complete polling delay to detect that JTAG has gone away, + * but otherwise shouldn't wait any further once it has gone. And we + * had to wait for buffer space anyway, if it was there. + * + * If JTAG is spotted, reset the TTY-layer miss counter so console- + * layer clearing of the bit doesn't trigger a TTY-layer + * disconnection. + * + * XXXRW: The polling delay may require tuning. + */ + v = aju_cons_control_read(); + if (v & ALTERA_JTAG_UART_CONTROL_AC) { + aju_cons_jtag_present = 1; + aju_cons_jtag_missed = 0; + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); + } + while ((v & ALTERA_JTAG_UART_CONTROL_WSPACE) == 0) { + if (!aju_cons_jtag_present) + return; + DELAY(ALTERA_JTAG_UART_AC_POLL_DELAY); + v = aju_cons_control_read(); + if (v & ALTERA_JTAG_UART_CONTROL_AC) { + aju_cons_jtag_present = 1; + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); + } else + aju_cons_jtag_present = 0; + } aju_cons_data_write(ch); } @@ -218,8 +266,15 @@ static void aju_cninit(struct consdev *cp) { + uint32_t v; AJU_CONSOLE_LOCK_INIT(); + + AJU_CONSOLE_LOCK(); + v = aju_cons_control_read(); + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_cons_control_write(v); + AJU_CONSOLE_UNLOCK(); } static void ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/altera/jtag_uart/altera_jtag_uart_tty.c#2 (text+ko) ==== @@ -55,7 +55,8 @@ static struct altera_jtag_uart_softc *aju_cons_sc; static tsw_outwakeup_t aju_outwakeup; -static void aju_timeout(void *); +static void aju_ac_callout(void *); +static void aju_io_callout(void *); static struct ttydevsw aju_ttydevsw = { .tsw_flags = TF_NOPREFIX, @@ -63,9 +64,16 @@ }; /* - * Poll for new input every (aju_pollinterval) ticks. + * When polling for the AC bit, the number of times we have to not see it + * before assuming JTAG has disappeared on us. By default, one second. + */ +#define AJU_JTAG_MAXMISS 5 + +/* + * Polling intervals for input/output and JTAG connection events. */ -static u_int aju_pollinterval = 1; +#define AJU_IO_POLLINTERVAL (hz/100) +#define AJU_AC_POLLINTERVAL (hz/5) /* * Low-level read and write register routines; the Altera UART is little @@ -232,6 +240,7 @@ static void aju_handle_output(struct altera_jtag_uart_softc *sc, struct tty *tp) { + uint32_t v; uint8_t ch; tty_lock_assert(tp, MA_OWNED); @@ -240,14 +249,31 @@ AJU_UNLOCK(sc); while (ttydisc_getc_poll(tp) != 0) { AJU_LOCK(sc); - if (aju_writable(sc)) { + v = aju_control_read(sc); + if ((v & ALTERA_JTAG_UART_CONTROL_WSPACE) != 0) { AJU_UNLOCK(sc); if (ttydisc_getc(tp, &ch, sizeof(ch)) != sizeof(ch)) panic("%s: ttydisc_getc", __func__); AJU_LOCK(sc); aju_data_write(sc, ch); } else { - aju_intr_writable_enable(sc); + /* + * If JTAG is not present, then we will drop this + * character instead of perhaps scheduling an + * interrupt to let us know when there is buffer + * space. Otherwise we might get a write interrupt + * later even though we aren't interested in sending + * anymore. Loop to drain TTY-layer buffer. + */ + if (*sc->ajus_jtag_presentp == 0) { + if (ttydisc_getc(tp, &ch, sizeof(ch)) != + sizeof(ch)) + panic("%s: ttydisc_getc 2", __func__); + AJU_UNLOCK(sc); + continue; + } + if (sc->ajus_irq_res != NULL) + aju_intr_writable_enable(sc); return; } AJU_UNLOCK(sc); @@ -269,7 +295,7 @@ } static void -aju_timeout(void *arg) +aju_io_callout(void *arg) { struct altera_jtag_uart_softc *sc = arg; struct tty *tp = sc->ajus_ttyp; @@ -293,7 +319,39 @@ * pending in the output buffer, or have we recently had input, but we * don't. */ - callout_reset(&sc->ajus_callout, aju_pollinterval, aju_timeout, sc); + callout_reset(&sc->ajus_io_callout, AJU_IO_POLLINTERVAL, + aju_io_callout, sc); + AJU_UNLOCK(sc); + tty_unlock(tp); +} + +static void +aju_ac_callout(void *arg) +{ + struct altera_jtag_uart_softc *sc = arg; + struct tty *tp = sc->ajus_ttyp; + uint32_t v; + + tty_lock(tp); + AJU_LOCK(sc); + v = aju_control_read(sc); + if (v & ALTERA_JTAG_UART_CONTROL_AC) { + v &= ~ALTERA_JTAG_UART_CONTROL_AC; + aju_control_write(sc, v); + if (*sc->ajus_jtag_presentp == 0) { + *sc->ajus_jtag_missedp = 0; + *sc->ajus_jtag_presentp = 1; + aju_handle_output(sc, tp); + } + } else if (*sc->ajus_jtag_presentp != 0) { + (*sc->ajus_jtag_missedp)++; + if (*sc->ajus_jtag_missedp >= AJU_JTAG_MAXMISS) { + *sc->ajus_jtag_presentp = 0; + aju_handle_output(sc, tp); + } + } + callout_reset(&sc->ajus_ac_callout, AJU_AC_POLLINTERVAL, + aju_ac_callout, sc); AJU_UNLOCK(sc); tty_unlock(tp); } @@ -333,11 +391,15 @@ sc->ajus_lockp = &aju_cons_lock; sc->ajus_buffer_validp = &aju_cons_buffer_valid; sc->ajus_buffer_datap = &aju_cons_buffer_data; + sc->ajus_jtag_presentp = &aju_cons_jtag_present; + sc->ajus_jtag_missedp = &aju_cons_jtag_missed; sc->ajus_flags |= ALTERA_JTAG_UART_FLAG_CONSOLE; } else { sc->ajus_lockp = &sc->ajus_lock; sc->ajus_buffer_validp = &sc->ajus_buffer_valid; sc->ajus_buffer_datap = &sc->ajus_buffer_data; + sc->ajus_jtag_presentp = &sc->ajus_jtag_present; + sc->ajus_jtag_missedp = &sc->ajus_jtag_missed; } /* @@ -376,10 +438,13 @@ aju_intr_readable_enable(sc); AJU_UNLOCK(sc); } else { - callout_init(&sc->ajus_callout, CALLOUT_MPSAFE); - callout_reset(&sc->ajus_callout, aju_pollinterval, - aju_timeout, sc); + callout_init(&sc->ajus_io_callout, CALLOUT_MPSAFE); + callout_reset(&sc->ajus_io_callout, AJU_IO_POLLINTERVAL, + aju_io_callout, sc); } + callout_init(&sc->ajus_ac_callout, CALLOUT_MPSAFE); + callout_reset(&sc->ajus_ac_callout, AJU_AC_POLLINTERVAL, + aju_ac_callout, sc); return (0); } @@ -399,7 +464,8 @@ bus_teardown_intr(sc->ajus_dev, sc->ajus_irq_res, sc->ajus_irq_cookie); } else - callout_drain(&sc->ajus_callout); + callout_drain(&sc->ajus_io_callout); + callout_drain(&sc->ajus_ac_callout); if (sc->ajus_flags & ALTERA_JTAG_UART_FLAG_CONSOLE) aju_cons_sc = NULL; tty_lock(tp); ==== //depot/projects/ctsrd/cheribsd/src/sys/dev/terasic/de4led/terasic_de4led.c#2 (text+ko) ==== @@ -63,56 +63,56 @@ } static void -led_1(void *arg, int onoff) +led_0(void *arg, int onoff) { led_update(arg, 0, onoff); } static void -led_2(void *arg, int onoff) +led_1(void *arg, int onoff) { led_update(arg, 1, onoff); } static void -led_3(void *arg, int onoff) +led_2(void *arg, int onoff) { led_update(arg, 2, onoff); } static void -led_4(void *arg, int onoff) +led_3(void *arg, int onoff) { led_update(arg, 3, onoff); } static void -led_5(void *arg, int onoff) +led_4(void *arg, int onoff) { led_update(arg, 4, onoff); } static void -led_6(void *arg, int onoff) +led_5(void *arg, int onoff) { led_update(arg, 5, onoff); } static void -led_7(void *arg, int onoff) +led_6(void *arg, int onoff) { led_update(arg, 6, onoff); } static void -led_8(void *arg, int onoff) +led_7(void *arg, int onoff) { led_update(arg, 7, onoff); >>> TRUNCATED FOR MAIL (1000 lines) <<< From owner-p4-projects@FreeBSD.ORG Sat Jul 7 14:08:57 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 833EF1065672; Sat, 7 Jul 2012 14:08:57 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 45E75106566B for ; Sat, 7 Jul 2012 14:08:57 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 2DD828FC0C for ; Sat, 7 Jul 2012 14:08:57 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q67E8vmD021028 for ; Sat, 7 Jul 2012 14:08:57 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q67E8uNk021025 for perforce@freebsd.org; Sat, 7 Jul 2012 14:08:56 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sat, 7 Jul 2012 14:08:56 GMT Message-Id: <201207071408.q67E8uNk021025@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 214029 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jul 2012 14:08:57 -0000 http://p4web.freebsd.org/@@214029?ac=10 Change 214029 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/07 14:08:38 Minor tweak to the CHERI demo file browser to compile without warnings. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#4 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd/browser/browser.c#4 (text+ko) ==== @@ -245,6 +245,8 @@ return "devil"; case SB_CHERI: return "devil"; + default: + return "unknown"; } } From owner-p4-projects@FreeBSD.ORG Sat Jul 7 14:15:33 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id A64741065676; Sat, 7 Jul 2012 14:15:33 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 68F391065673 for ; Sat, 7 Jul 2012 14:15:33 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id 5137D8FC08 for ; Sat, 7 Jul 2012 14:15:33 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q67EFXfM022096 for ; Sat, 7 Jul 2012 14:15:33 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q67EFXVs022093 for perforce@freebsd.org; Sat, 7 Jul 2012 14:15:33 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sat, 7 Jul 2012 14:15:33 GMT Message-Id: <201207071415.q67EFXVs022093@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 214030 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jul 2012 14:15:33 -0000 http://p4web.freebsd.org/@@214030?ac=10 Change 214030 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/07 14:14:36 Integrate CHERI file browser fix from FreeBSD/BERI to CheriBSD branch. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/browser.c#2 integrate Differences ... ==== //depot/projects/ctsrd/cheribsd/src/ctsrd/browser/browser.c#2 (text+ko) ==== @@ -245,6 +245,8 @@ return "devil"; case SB_CHERI: return "devil"; + default: + return "unknown"; } } From owner-p4-projects@FreeBSD.ORG Sat Jul 7 16:09:44 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1A0DF1065670; Sat, 7 Jul 2012 16:09:44 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D1053106564A for ; Sat, 7 Jul 2012 16:09:43 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id B8F638FC0A for ; Sat, 7 Jul 2012 16:09:43 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q67G9h8Z025795 for ; Sat, 7 Jul 2012 16:09:43 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q67G9hbw025792 for perforce@freebsd.org; Sat, 7 Jul 2012 16:09:43 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sat, 7 Jul 2012 16:09:43 GMT Message-Id: <201207071609.q67G9hbw025792@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 214034 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jul 2012 16:09:44 -0000 http://p4web.freebsd.org/@@214034?ac=10 Change 214034 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/07 16:09:29 Hook up libvuln_magic to the build in FreeBSD/BERI. Affected files ... .. //depot/projects/ctsrd/beribsd/src/ctsrd-lib/Makefile#4 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/ctsrd-lib/Makefile#4 (text+ko) ==== @@ -4,6 +4,7 @@ .include SUBDIR= libde4tc \ + libvuln_magic \ libvuln_png .include From owner-p4-projects@FreeBSD.ORG Sat Jul 7 16:11:56 2012 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 289231065673; Sat, 7 Jul 2012 16:11:56 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id DF7FD106564A for ; Sat, 7 Jul 2012 16:11:55 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:4f8:fff6::2d]) by mx1.freebsd.org (Postfix) with ESMTP id C77238FC0A for ; Sat, 7 Jul 2012 16:11:55 +0000 (UTC) Received: from skunkworks.freebsd.org (localhost [127.0.0.1]) by skunkworks.freebsd.org (8.14.4/8.14.4) with ESMTP id q67GBtul025860 for ; Sat, 7 Jul 2012 16:11:55 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.4/8.14.4/Submit) id q67GBtMV025857 for perforce@freebsd.org; Sat, 7 Jul 2012 16:11:55 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Sat, 7 Jul 2012 16:11:55 GMT Message-Id: <201207071611.q67GBtMV025857@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 To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 214035 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Jul 2012 16:11:56 -0000 http://p4web.freebsd.org/@@214035?ac=10 Change 214035 by rwatson@rwatson_svr_ctsrd_mipsbuild on 2012/07/07 16:11:03 Integerate CheriBSD branch to pick up the libvuln_magic build fix from FreeBSD/BERI. Affected files ... .. //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/Makefile#2 integrate Differences ... ==== //depot/projects/ctsrd/cheribsd/src/ctsrd-lib/Makefile#2 (text+ko) ==== @@ -4,6 +4,7 @@ .include SUBDIR= libde4tc \ + libvuln_magic \ libvuln_png .include