From owner-svn-soc-all@freebsd.org Mon Jul 13 08:45:42 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CD07F99BF55 for ; Mon, 13 Jul 2015 08:45:42 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id BDB9914C9 for ; Mon, 13 Jul 2015 08:45:42 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6D8jgFn049179 for ; Mon, 13 Jul 2015 08:45:42 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6D8jgik049166 for svn-soc-all@FreeBSD.org; Mon, 13 Jul 2015 08:45:42 GMT (envelope-from mihai@FreeBSD.org) Date: Mon, 13 Jul 2015 08:45:42 GMT Message-Id: <201507130845.t6D8jgik049166@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288273 - soc2015/mihai/bhyve-on-arm-head/sys/arm/arm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jul 2015 08:45:42 -0000 Author: mihai Date: Mon Jul 13 08:45:41 2015 New Revision: 288273 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288273 Log: soc2015: mihai: bhyve: sys: arm: arm: hypervisor-stub.S: fix alignment for hyp exception vector Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/arm/hypervisor-stub.S Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/arm/hypervisor-stub.S ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/arm/hypervisor-stub.S Mon Jul 13 05:59:41 2015 (r288272) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/arm/hypervisor-stub.S Mon Jul 13 08:45:41 2015 (r288273) @@ -48,6 +48,7 @@ END(hypervisor_stub_trap) .globl hypervisor_stub_vect + .align 5 _C_LABEL(hypervisor_stub_vect): .word 0 /* Reset */ .word 0 /* undev */ From owner-svn-soc-all@freebsd.org Mon Jul 13 08:47:04 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 8A68E99BF86 for ; Mon, 13 Jul 2015 08:47:04 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 7B2DE1500 for ; Mon, 13 Jul 2015 08:47:04 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6D8l4PS049796 for ; Mon, 13 Jul 2015 08:47:04 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6D8l3pq049784 for svn-soc-all@FreeBSD.org; Mon, 13 Jul 2015 08:47:03 GMT (envelope-from mihai@FreeBSD.org) Date: Mon, 13 Jul 2015 08:47:03 GMT Message-Id: <201507130847.t6D8l3pq049784@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288274 - soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jul 2015 08:47:04 -0000 Author: mihai Date: Mon Jul 13 08:47:03 2015 New Revision: 288274 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288274 Log: soc2015: mihai: bhyve: sys: arm: vmm: hyp.S: fix HCR load and add a stub push Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Mon Jul 13 08:45:41 2015 (r288273) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Mon Jul 13 08:47:03 2015 (r288274) @@ -68,7 +68,6 @@ orr r1, r1, r2 mcr p15, 4, r1, c1, c1, 2 - restore_guest_regs eret @@ -100,7 +99,7 @@ /* Disable all traps - HCR */ mov r2, #0 - mcr p15, 4, r1, c1, c1, 0 + mcr p15, 4, r2, c1, c1, 0 /* Save guest CP15 registers */ @@ -333,6 +332,7 @@ eret guest_bad_exception: + push {r0, r1, r2} @ Emulate a push to the stack to respect hyp_exit_guest restore convention /* Load hypctx pointer to r0 */ mrc p15, 4, r0, c13, c0, 2 // TODO: load HSR in VCPU From owner-svn-soc-all@freebsd.org Tue Jul 14 09:37:40 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 0C20599CFAE for ; Tue, 14 Jul 2015 09:37:40 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F155BED2 for ; Tue, 14 Jul 2015 09:37:39 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6E9bd2j064987 for ; Tue, 14 Jul 2015 09:37:39 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6E9bdRQ064985 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 09:37:39 GMT (envelope-from mihai@FreeBSD.org) Date: Tue, 14 Jul 2015 09:37:39 GMT Message-Id: <201507140937.t6E9bdRQ064985@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288364 - soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 09:37:40 -0000 Author: mihai Date: Tue Jul 14 09:37:38 2015 New Revision: 288364 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288364 Log: soc2015: mihai: bhyve: sys: arm: vmm: arm.c: set reset state for CPSR Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c Tue Jul 14 08:02:05 2015 (r288363) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c Tue Jul 14 09:37:38 2015 (r288364) @@ -36,7 +36,7 @@ lpae_pd_entry_t *hyp_l1pd; char *stack; -static uint64_t vmid_generation = 1; +static uint64_t vmid_generation = 0; static struct mtx vmid_generation_mtx; static void set_vttbr(struct hyp* hyp) { @@ -202,6 +202,7 @@ hypctx->mpidr = (cp15_mpidr_get() & MPIDR_SMP_MASK) | MPIDR_AFF1_LEVEL(i) | MPIDR_AFF0_LEVEL(i); + hypctx->regs.r_cpsr = PSR_SVC32_MODE | PSR_A | PSR_I | PSR_F; } lpae_vmmmap_set(NULL, @@ -214,7 +215,7 @@ } static int -arm_vmrun(void *arg, int vcpu, register_t rip, pmap_t pmap, +arm_vmrun(void *arg, int vcpu, register_t pc, pmap_t pmap, void *rend_cookie, void *suspended_cookie) { int rc; @@ -231,8 +232,8 @@ handled = UNHANDLED; rc = vmm_call_hyp((void *)hyp_enter_guest, hypctx); - - handled = HANDLED; + printf("%s rc: %d\n",__func__, rc); +// handled = HANDLED; } while(handled); return 0; From owner-svn-soc-all@freebsd.org Tue Jul 14 09:38:42 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1D1F599CFCC for ; Tue, 14 Jul 2015 09:38:42 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E86DFF05 for ; Tue, 14 Jul 2015 09:38:41 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6E9cfsf065273 for ; Tue, 14 Jul 2015 09:38:41 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6E9ceNR065258 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 09:38:40 GMT (envelope-from mihai@FreeBSD.org) Date: Tue, 14 Jul 2015 09:38:40 GMT Message-Id: <201507140938.t6E9ceNR065258@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288365 - soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 09:38:42 -0000 Author: mihai Date: Tue Jul 14 09:38:39 2015 New Revision: 288365 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288365 Log: soc2015: mihai: bhyve: sys: arm: vmm: hyp.S: set VTCR configuration Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Tue Jul 14 09:37:38 2015 (r288364) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Tue Jul 14 09:38:39 2015 (r288365) @@ -185,16 +185,10 @@ bic r0, r0, r1 mcr p15, 4, r0, c2, c0, 2 @ HTCR - @ TODO configure the VTCR for supporting 32/40 bit IPA -/* - mrc p15, 4, r1, c2, c1, 2 @ VTCR - ldr r2, =VTCR_MASK - bic r1, r1, r2 - bic r0, r0, #(~VTCR_HTCR_SH) @ clear non-reusable HTCR bits - orr r1, r0, r1 - orr r1, r1, #(VTCR_SL_L1 | VTCR_T0SZ | KVM_VTCR_S) - mcr p15, 4, r1, c2, c1, 2 @ VTCR -*/ + @ VTCR for supporting only 32 bit IPA [see VMM_VTCR_T0SZ in hyp.h] + ldr r0, =(VTCR_RES | VTCR_SL_L1 | VMM_VTCR_T0SZ | VMM_VTCR_S) + mcr p15, 4, r0, c2, c1, 2 @ VTCR + @ Set the HMAIR0/1 (same as MAIR0/1) registers for AttrIndx[2:0] ldr r0, =HMAIR0 mcr p15, 4, r0, c10, c2, 0 Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h Tue Jul 14 09:37:38 2015 (r288364) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.h Tue Jul 14 09:38:39 2015 (r288365) @@ -50,6 +50,7 @@ #define HTCR_MASK (TTBCR_T0SZ | TTBCR_IRGN0 | TTBCR_ORGN0 | TTBCR_SH0) /* Virtualization Translation Control Register (VTCR) bits */ +#define VTCR_RES (1 << 31) #define VTCR_SH0 (3 << 12) #define VTCR_ORGN0 (3 << 10) #define VTCR_IRGN0 (3 << 8) @@ -58,8 +59,12 @@ #define VTCR_T0SZ (0xf) #define VTCR_MASK (VTCR_SH0 | VTCR_ORGN0 | VTCR_IRGN0 | VTCR_SL0 | VTCR_S | VTCR_T0SZ) #define VTCR_HTCR_SH (VTCR_SH0 | VTCR_ORGN0 | VTCR_IRGN0) -#define VTCR_SL_L2 (0 << 6) /* Starting-level: 2 */ #define VTCR_SL_L1 (1 << 6) /* Starting-level: 1 */ +/* Stage 2 address input size is 2^(32-VTCR T0SZ) (ARM - B4.1.159) */ +#define VMM_IPA_LEN 32 +#define VMM_VTCR_T0SZ ((32 - VMM_IPA_LEN) & VTCR_T0SZ) +/* The sign bit VTCR.S = VTCR.T0SZ[4] */ +#define VMM_VTCR_S (((VMM_VTCR_T0SZ) << 1) & VTCR_S) /* Hyp Configuration Register (HCR) bits */ #define HCR_TGE (1 << 27) From owner-svn-soc-all@freebsd.org Tue Jul 14 10:22:04 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id DF20399C092 for ; Tue, 14 Jul 2015 10:22:03 +0000 (UTC) (envelope-from stefano@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C4B5E925 for ; Tue, 14 Jul 2015 10:22:03 +0000 (UTC) (envelope-from stefano@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6EAM3j4041057 for ; Tue, 14 Jul 2015 10:22:03 GMT (envelope-from stefano@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6EAM1Lr041041 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 10:22:01 GMT (envelope-from stefano@FreeBSD.org) Date: Tue, 14 Jul 2015 10:22:01 GMT Message-Id: <201507141022.t6EAM1Lr041041@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to stefano@FreeBSD.org using -f From: stefano@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288368 - in soc2015/stefano/ptnetmap/stable/10/sys/amd64: include vmm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 10:22:04 -0000 Author: stefano Date: Tue Jul 14 10:22:01 2015 New Revision: 288368 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288368 Log: use vm_map_lookup() to find vm_object to map in the VM Modified: soc2015/stefano/ptnetmap/stable/10/sys/amd64/include/vmm.h soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm.c soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_dev.c soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.c soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.h Modified: soc2015/stefano/ptnetmap/stable/10/sys/amd64/include/vmm.h ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/sys/amd64/include/vmm.h Tue Jul 14 09:25:10 2015 (r288367) +++ soc2015/stefano/ptnetmap/stable/10/sys/amd64/include/vmm.h Tue Jul 14 10:22:01 2015 (r288368) @@ -172,7 +172,7 @@ const char *vm_name(struct vm *vm); int vm_malloc(struct vm *vm, vm_paddr_t gpa, size_t len); int vm_map_mmio(struct vm *vm, vm_paddr_t gpa, size_t len, vm_paddr_t hpa); -int vm_map_mmio_user(struct vm *vm, vm_paddr_t gpa, size_t len, void *buf, struct thread *td); +int vm_map_usermem(struct vm *vm, vm_paddr_t gpa, size_t len, void *buf, struct thread *td); int vm_unmap_mmio(struct vm *vm, vm_paddr_t gpa, size_t len); void *vm_gpa_hold(struct vm *, vm_paddr_t gpa, size_t len, int prot, void **cookie); Modified: soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm.c ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm.c Tue Jul 14 09:25:10 2015 (r288367) +++ soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm.c Tue Jul 14 10:22:01 2015 (r288368) @@ -444,6 +444,7 @@ vhpet_cleanup(vm->vhpet); vatpic_cleanup(vm->vatpic); vioapic_cleanup(vm->vioapic); + vmm_usermem_cleanup(vm->vmspace); for (i = 0; i < VM_MAXCPU; i++) vcpu_cleanup(vm, i, destroy); @@ -506,28 +507,26 @@ static int vm_gpa_wire(struct vm *vm); int -vm_map_mmio_user(struct vm *vm, vm_paddr_t gpa, size_t len, void *buf, struct thread *td) +vm_map_usermem(struct vm *vm, vm_paddr_t gpa, size_t len, void *buf, struct thread *td) { vm_object_t obj; int error; - if ((obj = vmm_mmio_alloc_user(vm->vmspace, gpa, len, buf, td)) == NULL) + + if ((obj = vmm_usermem_alloc(vm->vmspace, gpa, len, buf, td)) == NULL) return (ENOMEM); +#if 0 error = vm_gpa_wire(vm); /* XXX-ste: is needed? */ if (error) goto err; - - - error = vmm_usermem_add(vm, gpa, len); - if (error) - goto err; +#endif return (0); -err: - vmm_mmio_free(vm->vmspace, gpa, len); +//err: + vmm_usermem_free(vm->vmspace, gpa, len); return (error); } @@ -555,7 +554,7 @@ if (ppt_is_mmio(vm, gpa)) return (TRUE); /* 'gpa' is pci passthru mmio */ - if (usermem_is_mmio(vm, gpa)) + if (usermem_mapped(vm->vmspace, gpa)) return (TRUE); /* 'gpa' is user-space buffer mapped */ return (FALSE); Modified: soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_dev.c ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_dev.c Tue Jul 14 09:25:10 2015 (r288367) +++ soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_dev.c Tue Jul 14 10:22:01 2015 (r288368) @@ -164,7 +164,7 @@ struct vm_pptdev_mmio *pptmmio; struct vm_pptdev_msi *pptmsi; struct vm_pptdev_msix *pptmsix; - struct vm_user_buf *usermmio; + struct vm_user_buf *usermem; struct vm_nmi *vmnmi; struct vm_stats *vmstats; struct vm_stat_desc *statdesc; @@ -298,9 +298,9 @@ pptmmio->hpa); break; case VM_MAP_USER_BUF: - usermmio = (struct vm_user_buf *)data; - error = vm_map_mmio_user(sc->vm, usermmio->gpa, usermmio->len, - usermmio->addr, td); + usermem = (struct vm_user_buf *)data; + error = vm_map_usermem(sc->vm, usermem->gpa, usermem->len, + usermem->addr, td); break; case VM_BIND_PPTDEV: pptdev = (struct vm_pptdev *)data; Modified: soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.c ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.c Tue Jul 14 09:25:10 2015 (r288367) +++ soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.c Tue Jul 14 10:22:01 2015 (r288368) @@ -35,6 +35,7 @@ #include #include #include +#include #include #include @@ -46,24 +47,25 @@ #include +#include "vmm_mem.h" #include "vmm_usermem.h" #define MAX_USERMEMS 64 static struct usermem { - struct vm *vm; /* owner of this device */ + struct vmspace *vmspace; /* guest address space */ vm_paddr_t gpa; size_t len; } usermems[MAX_USERMEMS]; -int -vmm_usermem_add(struct vm *vm, vm_paddr_t gpa, size_t len) +static int +vmm_usermem_add(struct vmspace *vmspace, vm_paddr_t gpa, size_t len) { int i; for (i = 0; i < MAX_USERMEMS; i++) { if (usermems[i].len == 0) { - usermems[i].vm = vm; + usermems[i].vmspace = vmspace; usermems[i].gpa = gpa; usermems[i].len = len; break; @@ -78,26 +80,29 @@ return 0; } -void -vmm_usermem_del(struct vm *vm, vm_paddr_t gpa, size_t len) +static int +vmm_usermem_del(struct vmspace *vmspace, vm_paddr_t gpa, size_t len) { int i; for (i = 0; i < MAX_USERMEMS; i++) { - if (usermems[i].vm == vm && usermems[i].gpa == gpa + if (usermems[i].vmspace == vmspace && usermems[i].gpa == gpa && usermems[i].len == len) { bzero(&usermems[i], sizeof(struct usermem)); + return 1; } } + + return 0; } boolean_t -usermem_is_mmio(struct vm *vm, vm_paddr_t gpa) +usermem_mapped(struct vmspace *vmspace, vm_paddr_t gpa) { int i; for (i = 0; i < MAX_USERMEMS; i++) { - if (usermems[i].vm != vm || usermems[i].len == 0) + if (usermems[i].vmspace != vmspace || usermems[i].len == 0) continue; if (gpa >= usermems[i].gpa && gpa < usermems[i].gpa + usermems[i].len) @@ -105,3 +110,65 @@ } return (FALSE); } + +vm_object_t +vmm_usermem_alloc(struct vmspace *vmspace, vm_paddr_t gpa, size_t len, + void *buf, struct thread *td) +{ + int error; + vm_object_t obj; + vm_map_t map; + vm_map_entry_t entry; + vm_pindex_t index; + vm_prot_t prot; + boolean_t wired; + + map = &td->td_proc->p_vmspace->vm_map; + /* lookup the vm_object that describe user addr */ + error = vm_map_lookup(&map, (unsigned long)buf, VM_PROT_RW, &entry, + &obj, &index, &prot, &wired); + + printf("---- guest MAP vm_object_t: %p vm_pindex: %ld ----\n", obj, index); + /* map th vm_object in the vmspace */ + if (obj != NULL) { + error = vm_map_find(&vmspace->vm_map, obj, 0, &gpa, len, 0, + VMFS_NO_SPACE, VM_PROT_RW, VM_PROT_RW, 0); + if (error != KERN_SUCCESS) { + vm_object_deallocate(obj); + obj = NULL; + } + } + vm_map_lookup_done(map, entry); + + /* acquire the reference to the vm_object */ + if (obj != NULL) { + vm_object_reference(obj); + vmm_usermem_add(vmspace, gpa, len); + } + + return (obj); +} + +void +vmm_usermem_free(struct vmspace *vmspace, vm_paddr_t gpa, size_t len) +{ + int ret; + + ret = vmm_usermem_del(vmspace, gpa, len); + if (ret) { + vmm_mem_free(vmspace, gpa, len); + } +} + +void +vmm_usermem_cleanup(struct vmspace *vmspace) +{ + int i; + + for (i = 0; i < MAX_USERMEMS; i++) { + if (usermems[i].vmspace == vmspace) { + vmm_mem_free(vmspace, usermems[i].gpa, usermems[i].len); + bzero(&usermems[i], sizeof(struct usermem)); + } + } +} Modified: soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.h ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.h Tue Jul 14 09:25:10 2015 (r288367) +++ soc2015/stefano/ptnetmap/stable/10/sys/amd64/vmm/vmm_usermem.h Tue Jul 14 10:22:01 2015 (r288368) @@ -31,10 +31,10 @@ struct vm; -int vmm_usermem_add(struct vm *, vm_paddr_t gpa, - size_t len); -void vmm_usermem_del(struct vm *, vm_paddr_t gpa, - size_t len); -boolean_t usermem_is_mmio(struct vm *, vm_paddr_t gpa); +struct vm_object *vmm_usermem_alloc(struct vmspace *, vm_paddr_t gpa, + size_t len, void *buf, struct thread *td); +void vmm_usermem_free(struct vmspace *, vm_paddr_t gpa, size_t len); +void vmm_usermem_cleanup(struct vmspace *); +boolean_t usermem_mapped(struct vmspace *, vm_paddr_t gpa); #endif From owner-svn-soc-all@freebsd.org Tue Jul 14 11:47:15 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1A29B99CE2A for ; Tue, 14 Jul 2015 11:47:15 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F24ED8C for ; Tue, 14 Jul 2015 11:47:14 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6EBlEHb037801 for ; Tue, 14 Jul 2015 11:47:14 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6EBlEbI037785 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 11:47:14 GMT (envelope-from mihai@FreeBSD.org) Date: Tue, 14 Jul 2015 11:47:14 GMT Message-Id: <201507141147.t6EBlEbI037785@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288371 - soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 11:47:15 -0000 Author: mihai Date: Tue Jul 14 11:47:13 2015 New Revision: 288371 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288371 Log: soc2015: mihai: bhyve: sys: arm: vmm: hyp_helpers.h: fix dumb comments Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_helpers.h Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_helpers.h ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_helpers.h Tue Jul 14 10:49:36 2015 (r288370) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_helpers.h Tue Jul 14 11:47:13 2015 (r288371) @@ -23,7 +23,7 @@ /* r0 - address of the hypctx */ \ add r2, r0, #HYPCTX_REGS_R(3); \ stm r2, {r3-r12}; \ - pop {r3-r5}; @ Get r0-r2 from the stack \ + pop {r3-r5}; /* Get r0-r2 from the stack */ \ add r2, r0, #HYPCTX_REGS_R(0); \ stm r2, {r3-r5}; \ \ @@ -131,64 +131,64 @@ msr ELR_hyp, r2 #define load_cp15_regs_batch1 \ - mrc p15, 0, r2, c1, c0, 0; @ SCTLR \ - mrc p15, 0, r3, c1, c0, 2; @ CPACR \ - mrc p15, 0, r4, c2, c0, 2; @ TTBCR \ - mrc p15, 0, r5, c3, c0, 0; @ DACR \ - mrrc p15, 0, r6, r7, c2; @ TTBR 0 \ - mrrc p15, 1, r8, r9, c2; @ TTBR 1 \ - mrc p15, 0, r10, c10, c2, 0; @ PRRR \ - mrc p15, 0, r11, c10, c2, 1; @ NMRR \ - mrc p15, 2, r12, c0, c0, 0 @ CSSELR + mrc p15, 0, r2, c1, c0, 0; /* SCTLR */ \ + mrc p15, 0, r3, c1, c0, 2; /* CPACR */ \ + mrc p15, 0, r4, c2, c0, 2; /* TTBCR */ \ + mrc p15, 0, r5, c3, c0, 0; /* DACR */ \ + mrrc p15, 0, r6, r7, c2; /* TTBR 0 */ \ + mrrc p15, 1, r8, r9, c2; /* TTBR 1 */ \ + mrc p15, 0, r10, c10, c2, 0; /* PRRR */ \ + mrc p15, 0, r11, c10, c2, 1; /* NMRR */ \ + mrc p15, 2, r12, c0, c0, 0 /* CSSELR */ #define load_cp15_regs_batch2 \ - mrc p15, 0, r2, c13, c0, 1; @ CID \ - mrc p15, 0, r3, c13, c0, 2; @ TID_URW \ - mrc p15, 0, r4, c13, c0, 3; @ TID_URO \ - mrc p15, 0, r5, c13, c0, 4; @ TID_PRIV \ - mrc p15, 0, r6, c5, c0, 0; @ DFSR \ - mrc p15, 0, r7, c5, c0, 1; @ IFSR \ - mrc p15, 0, r8, c5, c1, 0; @ ADFSR \ - mrc p15, 0, r9, c5, c1, 1; @ AIFSR \ - mrc p15, 0, r10, c6, c0, 0; @ DFAR \ - mrc p15, 0, r11, c6, c0, 2; @ IFAR \ - mrc p15, 0, r12, c12, c0, 0 @ VBAR + mrc p15, 0, r2, c13, c0, 1; /* CID */ \ + mrc p15, 0, r3, c13, c0, 2; /* TID_URW */ \ + mrc p15, 0, r4, c13, c0, 3; /* TID_URO */ \ + mrc p15, 0, r5, c13, c0, 4; /* TID_PRIV */ \ + mrc p15, 0, r6, c5, c0, 0; /* DFSR */ \ + mrc p15, 0, r7, c5, c0, 1; /* IFSR */ \ + mrc p15, 0, r8, c5, c1, 0; /* ADFSR */ \ + mrc p15, 0, r9, c5, c1, 1; /* AIFSR */ \ + mrc p15, 0, r10, c6, c0, 0; /* DFAR */ \ + mrc p15, 0, r11, c6, c0, 2; /* IFAR */ \ + mrc p15, 0, r12, c12, c0, 0 /* VBAR */ #define load_cp15_regs_batch3 \ - mrc p15, 0, r2, c14, c1, 0; @ CNTKCTL \ - mrrc p15, 0, r3, r4, c7; @ PAR \ - mrc p15, 0, r5, c10, c3, 0; @ AMAIR0 \ - mrc p15, 0, r6, c10, c3, 1 @ AMAIR1 + mrc p15, 0, r2, c14, c1, 0; /* CNTKCTL */ \ + mrrc p15, 0, r3, r4, c7; /* PAR */ \ + mrc p15, 0, r5, c10, c3, 0; /* AMAIR0 */ \ + mrc p15, 0, r6, c10, c3, 1 /* AMAIR1 */ #define store_cp15_regs_batch1 \ - mcr p15, 0, r2, c1, c0, 0; @ SCTLR \ - mcr p15, 0, r3, c1, c0, 2; @ CPACR \ - mcr p15, 0, r4, c2, c0, 2; @ TTBCR \ - mcr p15, 0, r5, c3, c0, 0; @ DACR \ - mcrr p15, 0, r6, r7, c2; @ TTBR 0 \ - mcrr p15, 1, r8, r9, c2; @ TTBR 1 \ - mcr p15, 0, r10, c10, c2, 0; @ PRRR \ - mcr p15, 0, r11, c10, c2, 1; @ NMRR \ - mcr p15, 2, r12, c0, c0, 0 @ CSSELR + mcr p15, 0, r2, c1, c0, 0; /* SCTLR */ \ + mcr p15, 0, r3, c1, c0, 2; /* CPACR */ \ + mcr p15, 0, r4, c2, c0, 2; /* TTBCR */ \ + mcr p15, 0, r5, c3, c0, 0; /* DACR */ \ + mcrr p15, 0, r6, r7, c2; /* TTBR 0 */ \ + mcrr p15, 1, r8, r9, c2; /* TTBR 1 */ \ + mcr p15, 0, r10, c10, c2, 0; /* PRRR */ \ + mcr p15, 0, r11, c10, c2, 1; /* NMRR */ \ + mcr p15, 2, r12, c0, c0, 0 /* CSSELR */ #define store_cp15_regs_batch2 \ - mcr p15, 0, r2, c13, c0, 1; @ CID \ - mcr p15, 0, r3, c13, c0, 2; @ TID_URW \ - mcr p15, 0, r4, c13, c0, 3; @ TID_URO \ - mcr p15, 0, r5, c13, c0, 4; @ TID_PRIV \ - mcr p15, 0, r6, c5, c0, 0; @ DFSR \ - mcr p15, 0, r7, c5, c0, 1; @ IFSR \ - mcr p15, 0, r8, c5, c1, 0; @ ADFSR \ - mcr p15, 0, r9, c5, c1, 1; @ AIFSR \ - mcr p15, 0, r10, c6, c0, 0; @ DFAR \ - mcr p15, 0, r11, c6, c0, 2; @ IFAR \ - mcr p15, 0, r12, c12, c0, 0 @ VBAR + mcr p15, 0, r2, c13, c0, 1; /* CID */ \ + mcr p15, 0, r3, c13, c0, 2; /* TID_URW */ \ + mcr p15, 0, r4, c13, c0, 3; /* TID_URO */ \ + mcr p15, 0, r5, c13, c0, 4; /* TID_PRIV */ \ + mcr p15, 0, r6, c5, c0, 0; /* DFSR */ \ + mcr p15, 0, r7, c5, c0, 1; /* IFSR */ \ + mcr p15, 0, r8, c5, c1, 0; /* ADFSR */ \ + mcr p15, 0, r9, c5, c1, 1; /* AIFSR */ \ + mcr p15, 0, r10, c6, c0, 0; /* DFAR */ \ + mcr p15, 0, r11, c6, c0, 2; /* IFAR */ \ + mcr p15, 0, r12, c12, c0, 0 /* VBAR */ #define store_cp15_regs_batch3 \ - mcr p15, 0, r2, c14, c1, 0; @ CNTKCTL \ - mcrr p15, 0, r3, r4, c7; @ PAR \ - mcr p15, 0, r5, c10, c3, 0; @ AMAIR0 \ - mcr p15, 0, r6, c10, c3, 1 @ AMAIR1 + mcr p15, 0, r2, c14, c1, 0; /* CNTKCTL */ \ + mcrr p15, 0, r3, r4, c7; /* PAR */ \ + mcr p15, 0, r5, c10, c3, 0; /* AMAIR0 */ \ + mcr p15, 0, r6, c10, c3, 1 /* AMAIR1 */ #define store_guest_cp15_regs_batch1 \ str r2, [r0, #HYPCTX_CP15_SCTLR]; \ From owner-svn-soc-all@freebsd.org Tue Jul 14 11:50:31 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id CE75999CEC3 for ; Tue, 14 Jul 2015 11:50:31 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B604C19E for ; Tue, 14 Jul 2015 11:50:31 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6EBoVVF040291 for ; Tue, 14 Jul 2015 11:50:31 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6EBoUI9040286 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 11:50:30 GMT (envelope-from mihai@FreeBSD.org) Date: Tue, 14 Jul 2015 11:50:30 GMT Message-Id: <201507141150.t6EBoUI9040286@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288372 - in soc2015/mihai/bhyve-on-arm-head: sys/arm/vmm usr.sbin/bhyveloadarm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 11:50:32 -0000 Author: mihai Date: Tue Jul 14 11:50:29 2015 New Revision: 288372 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288372 Log: soc2015: mihai: bhyve: sys: arm: vmm: vmm.c: fix set_registers functions Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm_dev.c soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c Tue Jul 14 11:47:13 2015 (r288371) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c Tue Jul 14 11:50:29 2015 (r288372) @@ -46,7 +46,7 @@ int vcpuid; void *stats; struct vm_exit exitinfo; - uint64_t nextrip; /* (x) next instruction to execute */ + uint64_t nextpc; /* (x) next instruction to execute */ }; #define vcpu_lock_initialized(v) mtx_initialized(&((v)->mtx)) @@ -86,8 +86,8 @@ #define VMM_CLEANUP() (ops != NULL ? (*ops->cleanup)() : 0) #define VMINIT(vm) (ops != NULL ? (*ops->vminit)(vm, NULL): NULL) -#define VMRUN(vmi, vcpu, rip, pmap, rptr, sptr) \ - (ops != NULL ? (*ops->vmrun)(vmi, vcpu, rip, pmap, rptr, sptr) : ENXIO) +#define VMRUN(vmi, vcpu, pc, pmap, rptr, sptr) \ + (ops != NULL ? (*ops->vmrun)(vmi, vcpu, pc, pmap, rptr, sptr) : ENXIO) #define VMCLEANUP(vmi) (ops != NULL ? (*ops->vmcleanup)(vmi) : NULL) #define VMMMAP_SET(vmi, gpa, hpa, len, prot) \ (ops != NULL ? \ @@ -262,7 +262,6 @@ void *rptr = NULL, *sptr = NULL; vcpuid = vmrun->cpuid; - if (vcpuid < 0 || vcpuid >= VM_MAXCPU) return (EINVAL); @@ -271,11 +270,15 @@ vcpu = &vm->vcpu[vcpuid]; vme = &vcpu->exitinfo; + + printf("%s vcpuid: %d, nextpc: %llx\n",__func__, vcpuid, vcpu->nextpc); + restart: critical_enter(); - error = VMRUN(vm->cookie, vcpuid, vcpu->nextrip, NULL, rptr, sptr); + error = VMRUN(vm->cookie, vcpuid, vcpu->nextpc, NULL, rptr, sptr); + printf("%s VMRUN error: %d\n",__func__, error); critical_exit(); @@ -289,9 +292,11 @@ if (error == 0 && retu == false) goto restart; - + printf("%s before bhcopy\n",__func__); /* copy the exit information */ bcopy(vme, &vmrun->vm_exit, sizeof(struct vm_exit)); + printf("%s after bhcopy\n",__func__); + return (error); } @@ -468,16 +473,24 @@ } int -vm_set_register(struct vm *vm, int vcpu, int reg, uint64_t val) +vm_set_register(struct vm *vm, int vcpuid, int reg, uint64_t val) { + struct vcpu *vcpu; + int error; - if (vcpu < 0 || vcpu >= VM_MAXCPU) + if (vcpuid < 0 || vcpuid >= VM_MAXCPU) return (EINVAL); if (reg >= VM_REG_LAST) return (EINVAL); + error = (VMSETREG(vm->cookie, vcpuid, reg, val)); + if (error || reg != VM_REG_GUEST_PC) + return (error); + + vcpu = &vm->vcpu[vcpuid]; + vcpu->nextpc = val; - return (VMSETREG(vm->cookie, vcpu, reg, val)); + return(0); } static void Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm_dev.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm_dev.c Tue Jul 14 11:47:13 2015 (r288371) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm_dev.c Tue Jul 14 11:50:29 2015 (r288372) @@ -142,6 +142,7 @@ case VM_RUN: vmrun = (struct vm_run *)data; error = vm_run(sc->vm, vmrun); + printf("%s VM_RUN returned error: %d\n", __func__, error); break; case VM_MAP_MEMORY: seg = (struct vm_memory_segment *)data; Modified: soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c Tue Jul 14 11:47:13 2015 (r288371) +++ soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyveloadarm/bhyveloadarm.c Tue Jul 14 11:50:29 2015 (r288372) @@ -95,7 +95,6 @@ char kernel_image_name[KERNEL_IMAGE_NAME_LEN]; struct stat st; void *addr; - char test[4]; progname = basename(argv[0]); From owner-svn-soc-all@freebsd.org Tue Jul 14 15:08:39 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5DB469A1697 for ; Tue, 14 Jul 2015 15:08:39 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4E5D9A9B for ; Tue, 14 Jul 2015 15:08:39 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6EF8dWc099802 for ; Tue, 14 Jul 2015 15:08:39 GMT (envelope-from clord@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6EF8b8T098321 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 15:08:37 GMT (envelope-from clord@FreeBSD.org) Date: Tue, 14 Jul 2015 15:08:37 GMT Message-Id: <201507141508.t6EF8b8T098321@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to clord@FreeBSD.org using -f From: clord@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288381 - in soc2015/clord/head/sys/contrib/ficl: . ficlplatform MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 15:08:39 -0000 Author: clord Date: Tue Jul 14 15:08:37 2015 New Revision: 288381 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288381 Log: Get rid of more conflicting header files. Modified: soc2015/clord/head/sys/contrib/ficl/ficl.h soc2015/clord/head/sys/contrib/ficl/ficlplatform/unix.h soc2015/clord/head/sys/contrib/ficl/system.c Modified: soc2015/clord/head/sys/contrib/ficl/ficl.h ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/ficl.h Tue Jul 14 14:33:21 2015 (r288380) +++ soc2015/clord/head/sys/contrib/ficl/ficl.h Tue Jul 14 15:08:37 2015 (r288381) @@ -148,7 +148,6 @@ #include #include #include -#include #include /* Modified: soc2015/clord/head/sys/contrib/ficl/ficlplatform/unix.h ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/ficlplatform/unix.h Tue Jul 14 14:33:21 2015 (r288380) +++ soc2015/clord/head/sys/contrib/ficl/ficlplatform/unix.h Tue Jul 14 15:08:37 2015 (r288381) @@ -1,7 +1,6 @@ /* $FreeBSD$ */ #include -#include #define FICL_WANT_PLATFORM (1) Modified: soc2015/clord/head/sys/contrib/ficl/system.c ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/system.c Tue Jul 14 14:33:21 2015 (r288380) +++ soc2015/clord/head/sys/contrib/ficl/system.c Tue Jul 14 15:08:37 2015 (r288381) @@ -57,7 +57,11 @@ /* $FreeBSD$ */ +#ifdef TESTMAIN #include +#else +#include +#endif #include #include "ficl.h" From owner-svn-soc-all@freebsd.org Tue Jul 14 15:22:08 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 426BF9A1C66 for ; Tue, 14 Jul 2015 15:22:08 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 196588C1 for ; Tue, 14 Jul 2015 15:22:08 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6EFM7et063467 for ; Tue, 14 Jul 2015 15:22:07 GMT (envelope-from clord@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6EFM7Oj063465 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 15:22:07 GMT (envelope-from clord@FreeBSD.org) Date: Tue, 14 Jul 2015 15:22:07 GMT Message-Id: <201507141522.t6EFM7Oj063465@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to clord@FreeBSD.org using -f From: clord@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288382 - soc2015/clord/head/sys/contrib/ficl/i386 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 15:22:08 -0000 Author: clord Date: Tue Jul 14 15:22:06 2015 New Revision: 288382 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288382 Log: Fixes outdated definitions for various Ficl constants. Removes unnecessary definitions left from Ficl 3. Modified: soc2015/clord/head/sys/contrib/ficl/i386/sysdep.h Modified: soc2015/clord/head/sys/contrib/ficl/i386/sysdep.h ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/i386/sysdep.h Tue Jul 14 15:08:37 2015 (r288381) +++ soc2015/clord/head/sys/contrib/ficl/i386/sysdep.h Tue Jul 14 15:22:06 2015 (r288382) @@ -84,14 +84,6 @@ #define UNS32 unsigned long #endif -#if !defined UNS16 -#define UNS16 unsigned short -#endif - -#if !defined UNS8 -#define UNS8 unsigned char -#endif - #if !defined NULL #define NULL ((void *)0) #endif @@ -100,7 +92,6 @@ ** FICL_UNS and FICL_INT must have the same size as a void* on ** the target system. A CELL is a union of void*, FICL_UNS, and ** FICL_INT. -** (11/2000: same for FICL_FLOAT) */ #if !defined FICL_INT #define FICL_INT INT32 @@ -110,10 +101,6 @@ #define FICL_UNS UNS32 #endif -#if !defined FICL_FLOAT -#define FICL_FLOAT float -#endif - /* ** Ficl presently supports values of 32 and 64 for BITS_PER_CELL */ @@ -319,8 +306,8 @@ ** a new virtual machine's stacks, unless overridden at ** create time. */ -#if !defined FICL_DEFAULT_STACK -#define FICL_DEFAULT_STACK 128 +#if !defined FICL_DEFAULT_STACK_SIZE +#define FICL_DEFAULT_STACK_SIZE 128 #endif /* @@ -330,12 +317,12 @@ ** FICL_DEFAULT_ENV specifies the number of cells to allot ** for the environment-query dictionary. */ -#if !defined FICL_DEFAULT_DICT -#define FICL_DEFAULT_DICT 12288 +#if !defined FICL_DEFAULT_DICTIONARY_SIZE +#define FICL_DEFAULT_DICTIONARY_SIZE 12288 #endif -#if !defined FICL_DEFAULT_ENV -#define FICL_DEFAULT_ENV 260 +#if !defined FICL_DEFAULT_ENVIRONMENT_SIZE +#define FICL_DEFAULT_ENVIRONMENT_SIZE 260 #endif /* @@ -343,8 +330,8 @@ ** the dictionary search order. See Forth DPANS sec 16.3.3 ** (file://dpans16.htm#16.3.3) */ -#if !defined FICL_DEFAULT_VOCS -#define FICL_DEFAULT_VOCS 16 +#if !defined FICL_MAX_WORDLISTS +#define FICL_MAX_WORDLISTS 16 #endif /* @@ -428,5 +415,11 @@ #define FICL_HAVE_FTRUNCATE 0 #endif +/* +** Remove old definitions to remove conflicts with ficlcompatibility.h +** in case FICL_WANT_COMPATIBILITY is set. +*/ +#undef FICL_UNS +#undef FICL_INT #endif /*__SYSDEP_H__*/ From owner-svn-soc-all@freebsd.org Tue Jul 14 16:36:27 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id AECBD9A1C56 for ; Tue, 14 Jul 2015 16:36:27 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 9FD9CB66 for ; Tue, 14 Jul 2015 16:36:27 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6EGaRn0064059 for ; Tue, 14 Jul 2015 16:36:27 GMT (envelope-from clord@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6EGaRug064029 for svn-soc-all@FreeBSD.org; Tue, 14 Jul 2015 16:36:27 GMT (envelope-from clord@FreeBSD.org) Date: Tue, 14 Jul 2015 16:36:27 GMT Message-Id: <201507141636.t6EGaRug064029@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to clord@FreeBSD.org using -f From: clord@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288388 - soc2015/clord/head/sys/contrib/ficl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Jul 2015 16:36:27 -0000 Author: clord Date: Tue Jul 14 16:36:26 2015 New Revision: 288388 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288388 Log: Change rand and srand calls to random and srandom to match libstand functions. Modified: soc2015/clord/head/sys/contrib/ficl/vm.c Modified: soc2015/clord/head/sys/contrib/ficl/vm.c ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/vm.c Tue Jul 14 15:38:45 2015 (r288387) +++ soc2015/clord/head/sys/contrib/ficl/vm.c Tue Jul 14 16:36:26 2015 (r288388) @@ -1234,7 +1234,7 @@ **************************************************************************/ case ficlInstructionRandom: { - (++dataTop)->i = rand(); + (++dataTop)->i = random(); continue; } @@ -1245,7 +1245,7 @@ **************************************************************************/ case ficlInstructionSeedRandom: { - srand((dataTop--)->i); + srandom((dataTop--)->i); continue; } From owner-svn-soc-all@freebsd.org Wed Jul 15 18:56:15 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D875B9A2CDF for ; Wed, 15 Jul 2015 18:56:15 +0000 (UTC) (envelope-from stefano@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C6C271431 for ; Wed, 15 Jul 2015 18:56:15 +0000 (UTC) (envelope-from stefano@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6FIuFMw000563 for ; Wed, 15 Jul 2015 18:56:15 GMT (envelope-from stefano@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6FIuEsf000508 for svn-soc-all@FreeBSD.org; Wed, 15 Jul 2015 18:56:14 GMT (envelope-from stefano@FreeBSD.org) Date: Wed, 15 Jul 2015 18:56:14 GMT Message-Id: <201507151856.t6FIuEsf000508@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to stefano@FreeBSD.org using -f From: stefano@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288453 - soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jul 2015 18:56:15 -0000 Author: stefano Date: Wed Jul 15 18:56:13 2015 New Revision: 288453 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288453 Log: add net-backend in virtio-net to use multiple backend (netmap, tap) Added: soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/net_backends.c soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/net_backends.h Modified: soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/Makefile soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/pci_virtio_net.c Modified: soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/Makefile ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/Makefile Wed Jul 15 17:43:13 2015 (r288452) +++ soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/Makefile Wed Jul 15 18:56:13 2015 (r288453) @@ -20,6 +20,7 @@ mem.c \ mevent.c \ mptbl.c \ + net_backends.c \ pci_ahci.c \ pci_emul.c \ pci_hostbridge.c \ Added: soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/net_backends.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/net_backends.c Wed Jul 15 18:56:13 2015 (r288453) @@ -0,0 +1,850 @@ +/*- + * Copyright (c) 2014 Vincenzo Maffione + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include /* u_short etc */ +#include /* ETHER_ADDR_LEN */ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mevent.h" +#include "dev/virtio/network/virtio_net.h" +#include "net_backends.h" + +#include + +#define NETMAP_WITH_LIBS +#include +#if (NETMAP_API < 11) +#error "Netmap API version must be >= 11" +#endif + +/* + * The API for network backends. This might need to be exposed + * if we implement them in separate files. + */ +struct net_backend { + const char *name; /* name of the backend */ + /* + * The init and cleanup functions are used internally, + * virtio-net should never use it. + */ + int (*init)(struct net_backend *be, const char *devname, + net_backend_cb_t cb, void *param); + void (*cleanup)(struct net_backend *be); + + + /* + * Called to serve a guest transmit request. The scatter-gather + * vector provided by the caller has 'iovcnt' elements and contains + * the packet to send. 'len' is the length of whole packet in bytes. + */ + int (*send)(struct net_backend *be, struct iovec *iov, + int iovcnt, int len, int more); + + /* + * Called to serve guest receive request. When the function + * returns a positive value, the scatter-gather vector + * provided by the caller (having 'iovcnt' elements in it) will + * contain a chunk of the received packet. The 'more' flag will + * be set if the returned chunk was the last one for the current + * packet, and 0 otherwise. The function returns the chunk size + * in bytes, or 0 if the backend doesn't have a new packet to + * receive. + * Note that it may be necessary to call this callback many + * times to receive a single packet, depending of how big is + * buffers you provide. + */ + int (*recv)(struct net_backend *be, struct iovec *iov, + int iovcnt, int *more); + + /* + * Ask the backend for the virtio-net features it is able to + * support. Possible features are TSO, UFO and checksum offloading + * in both rx and tx direction and for both IPv4 and IPv6. + */ + uint64_t (*get_features)(struct net_backend *be); + + /* + * Tell the backend to enable/disable the specified virtio-net + * features. + */ + uint64_t (*set_features)(struct net_backend *be, uint64_t features); + + struct pci_vtnet_softc *sc; + int fd; + void *priv; /* Pointer to backend-specific data. */ +}; + + +SET_DECLARE(net_backend_set, struct net_backend); + +#define WPRINTF(params) printf params + +/* the null backend */ +static int +netbe_null_init(struct net_backend *be, const char *devname, + net_backend_cb_t cb, void *param) +{ + D("initializing null backend"); + be->fd = -1; + return 0; +} + +static void +netbe_null_cleanup(struct net_backend *be) +{ + D(""); +} + +static uint64_t +netbe_null_get_features(struct net_backend *be) +{ + D(""); + return 0; +} + +static uint64_t +netbe_null_set_features(struct net_backend *be, uint64_t features) +{ + D("setting 0x%lx", features); + return 0; +} + +static int +netbe_null_send(struct net_backend *be, struct iovec *iov, + int iovcnt, int len, int more) +{ + return 0; /* pretend we send */ +} + +static int +netbe_null_recv(struct net_backend *be, struct iovec *iov, + int iovcnt, int *more) +{ + fprintf(stderr, "netbe_null_recv called ?\n"); + return -1; /* never called, i believe */ +} + +static struct net_backend null_backend = { + .name = "null", + .init = netbe_null_init, + .cleanup = netbe_null_cleanup, + .send = netbe_null_send, + .recv = netbe_null_recv, + .get_features = netbe_null_get_features, + .set_features = netbe_null_set_features, +}; + +DATA_SET(net_backend_set, null_backend); + + +/* the tap backend */ + +struct tap_priv { + struct mevent *mevp; +}; + + +static void +tap_cleanup(struct net_backend *be) +{ + // XXX destroy priv->mevp ? + if (be->fd != -1) + close(be->fd); + if (be->priv) + free(be->priv); + be->fd = -1; + be->priv = NULL; +} + + + +static int +tap_init(struct net_backend *be, const char *devname, + net_backend_cb_t cb, void *param) +{ + char tbuf[80]; + int fd; + int opt = 1; + struct tap_priv *priv; + + priv = calloc(1, sizeof(struct tap_priv)); + if (priv == NULL) { + WPRINTF(("tap_priv alloc failed\n")); + return -1; + } + + strcpy(tbuf, "/dev/"); + strlcat(tbuf, devname, sizeof(tbuf)); + + fd = open(tbuf, O_RDWR); + if (fd == -1) { + WPRINTF(("open of tap device %s failed\n", tbuf)); + goto error; + } + + /* + * Set non-blocking and register for read + * notifications with the event loop + */ + if (ioctl(fd, FIONBIO, &opt) < 0) { + WPRINTF(("tap device O_NONBLOCK failed\n")); + goto error; + } + + priv->mevp = mevent_add(fd, + EVF_READ, + cb, + param); + if (priv->mevp == NULL) { + WPRINTF(("Could not register event\n")); + goto error; + } + + be->fd = fd; + be->priv = priv; + + return 0; + +error: + tap_cleanup(be); + return -1; +} + + +/* + * Called to send a buffer chain out to the tap device + */ +static int +tap_send(struct net_backend *be, struct iovec *iov, int iovcnt, int len, + int more) +{ + static char pad[60]; /* all zero bytes */ + + /* Skip the first descriptor, which contains the virtio-net + * header. + */ + len -= iov[0].iov_len; + iov++; + iovcnt--; + + /* + * If the length is < 60, pad out to that and add the + * extra zero'd segment to the iov. It is guaranteed that + * there is always an extra iov available by the caller. + */ + if (len < 60) { + iov[iovcnt].iov_base = pad; + iov[iovcnt].iov_len = 60 - len; + iovcnt++; + } + return writev(be->fd, iov, iovcnt); +} + +static int +tap_recv(struct net_backend *be, struct iovec *iov, int iovcnt, int *more) +{ + struct virtio_net_hdr_mrg_rxbuf *vrx; + uint8_t *buf; + int ret, len = sizeof(*vrx); + + /* Should never be called without a valid tap fd */ + assert(be->fd != -1); + *more = 0; + + /* + * Get a pointer to the rx header, and use the + * data immediately following it for the packet buffer. + */ + vrx = iov[0].iov_base; + buf = (uint8_t *)(vrx + 1); + + ret = read(be->fd, buf, iov[0].iov_len - len); + + if (ret < 0 && errno == EWOULDBLOCK) { + return 0; + } + + /* Insert an empty rx packet header. */ + memset(vrx, 0, len); + ret += len; + + return ret; +} + +static uint64_t +tap_get_features(struct net_backend *be) +{ + return 0; // nothing extra +} + +static uint64_t +tap_set_features(struct net_backend *be, uint64_t features) +{ +#if 0 // XXX todo + if (!(features & VIRTIO_NET_F_MRG_RXBUF)) { + sc->rx_merge = 0; + /* non-merge rx header is 2 bytes shorter */ + sc->rx_vhdrlen -= 2; + } +#endif + return 0; /* success */ +} + +static struct net_backend tap_backend = { + .name = "tap", + .init = tap_init, + .cleanup = tap_cleanup, + .send = tap_send, + .recv = tap_recv, + .get_features = tap_get_features, + .set_features = tap_set_features, +}; + +DATA_SET(net_backend_set, tap_backend); + +/* + * The netmap backend + */ + + +/* The virtio-net features supported by netmap. */ +#define NETMAP_FEATURES (VIRTIO_NET_F_CSUM | VIRTIO_NET_F_HOST_TSO4 | \ + VIRTIO_NET_F_HOST_TSO6 | VIRTIO_NET_F_HOST_UFO | \ + VIRTIO_NET_F_GUEST_CSUM | VIRTIO_NET_F_GUEST_TSO4 | \ + VIRTIO_NET_F_GUEST_TSO6 | VIRTIO_NET_F_GUEST_UFO) + +#define NETMAP_POLLMASK (POLLIN | POLLRDNORM | POLLRDBAND) + +struct netmap_priv { + char ifname[IFNAMSIZ]; + struct nm_desc *nmd; + struct netmap_ring *rx; + struct netmap_ring *tx; + pthread_t evloop_tid; + net_backend_cb_t cb; + void *cb_param; + + /* Support for splitted receives. */ + int rx_continue; + int rx_idx; + uint8_t *rx_buf; + int rx_avail; + int rx_morefrag; + int rx_avail_slots; +}; + +static void * +netmap_evloop_thread(void *param) +{ + struct net_backend *be = param; + struct netmap_priv *priv = be->priv; + struct pollfd pfd; + int ret; + + for (;;) { + pfd.fd = be->fd; + pfd.events = NETMAP_POLLMASK; + ret = poll(&pfd, 1, INFTIM); + if (ret == -1 && errno != EINTR) { + WPRINTF(("netmap poll failed, %d\n", errno)); + } else if (ret == 1 && (pfd.revents & NETMAP_POLLMASK)) { + priv->cb(pfd.fd, EVF_READ, priv->cb_param); + } + } + + return NULL; +} + +static void +netmap_set_vnet_hdr_len(struct net_backend *be, + int vnet_hdr_len) +{ + int err; + struct nmreq req; + struct netmap_priv *priv = be->priv; + + memset(&req, 0, sizeof(req)); + strcpy(req.nr_name, priv->ifname); + req.nr_version = NETMAP_API; + req.nr_cmd = NETMAP_BDG_VNET_HDR; + req.nr_arg1 = vnet_hdr_len; + err = ioctl(be->fd, NIOCREGIF, &req); + if (err) { + WPRINTF(("Unable to set vnet header length %d\n", + vnet_hdr_len)); + } +} + +static uint64_t +netmap_get_features(struct net_backend *be) +{ + return NETMAP_FEATURES; +} + +static uint64_t +netmap_set_features(struct net_backend *be, uint64_t features) +{ + int vnet_hdr_len = 0; + + if (features & NETMAP_FEATURES) { + vnet_hdr_len = sizeof(struct virtio_net_hdr_mrg_rxbuf); + } + + netmap_set_vnet_hdr_len(be, vnet_hdr_len); + return 0; +} + +static int +netmap_init(struct net_backend *be, const char *devname, + net_backend_cb_t cb, void *param) +{ + const char *ndname = "/dev/netmap"; + struct netmap_priv *priv = NULL; + char tname[40]; + + priv = calloc(1, sizeof(struct netmap_priv)); + if (priv == NULL) { + WPRINTF(("Unable alloc netmap private data\n")); + return -1; + } + + strncpy(priv->ifname, devname, sizeof(priv->ifname)); + priv->ifname[sizeof(priv->ifname) - 1] = '\0'; + + priv->nmd = nm_open(priv->ifname, NULL, NETMAP_NO_TX_POLL, NULL); + if (priv->nmd == NULL) { + WPRINTF(("Unable to nm_open(): device '%s', " + "interface '%s', errno (%s)\n", + ndname, devname, strerror(errno))); + goto err_open; + } + + priv->tx = NETMAP_TXRING(priv->nmd->nifp, 0); + priv->rx = NETMAP_RXRING(priv->nmd->nifp, 0); + + priv->cb = cb; + priv->cb_param = param; + priv->rx_continue = 0; + + be->fd = priv->nmd->fd; + be->priv = priv; + + /* Create a thread for netmap poll. */ + pthread_create(&priv->evloop_tid, NULL, netmap_evloop_thread, (void *)be); + snprintf(tname, sizeof(tname), "netmap-evloop-%p", priv); + pthread_set_name_np(priv->evloop_tid, tname); + + return 0; + +err_open: + free(priv); + + return -1; +} + +static void +netmap_cleanup(struct net_backend *be) +{ + struct netmap_priv *priv = be->priv; + + if (priv) { + nm_close(priv->nmd); + } + be->fd = -1; +} + +/* A fast copy routine only for multiples of 64 bytes, non overlapped. */ +static inline void +pkt_copy(const void *_src, void *_dst, int l) +{ + const uint64_t *src = _src; + uint64_t *dst = _dst; + if (l >= 1024) { + bcopy(src, dst, l); + return; + } + for (; l > 0; l -= 64) { + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + *dst++ = *src++; + } +} + +static int +netmap_send(struct net_backend *be, struct iovec *iov, + int iovcnt, int size, int more) +{ + struct netmap_priv *priv = be->priv; + struct netmap_ring *ring; + uint32_t last; + uint32_t idx; + uint8_t *dst; + int j; + uint32_t i; + + if (iovcnt <= 0) + goto txsync; + + ring = priv->tx; + last = i = ring->cur; + + if (nm_ring_space(ring) < iovcnt) { + static int c; + c++; + RD(5, "no space, txsync %d", c); + /* Not enough netmap slots. */ + goto txsync; + } + + for (j = 0; j < iovcnt; j++) { + int iov_frag_size = iov[j].iov_len; + int offset = 0; + int nm_frag_size; + + /* Split each iovec fragment over more netmap slots, if + necessary (without performing data copy). */ + while (iov_frag_size) { + nm_frag_size = iov_frag_size; + if (nm_frag_size > ring->nr_buf_size) { + nm_frag_size = ring->nr_buf_size; + } + + if (nm_ring_empty(ring)) { + /* We run out of netmap slots while splitting the + iovec fragments. */ + goto txsync; + } + + idx = ring->slot[i].buf_idx; + dst = (uint8_t *)NETMAP_BUF(ring, idx); + + ring->slot[i].len = nm_frag_size; +// #define USE_INDIRECT_BUFFERS +#ifdef USE_INDIRECT_BUFFERS + ring->slot[i].flags = NS_MOREFRAG | NS_INDIRECT; + ring->slot[i].ptr = (uintptr_t)(iov[j].iov_base + offset); +#else /* !USE_INDIRECT_BUFFERS */ + ring->slot[i].flags = NS_MOREFRAG; + pkt_copy(iov[j].iov_base + offset, dst, nm_frag_size); +#endif /* !USING_INDIRECT_BUFFERS */ + + last = i; + i = nm_ring_next(ring, i); + + offset += nm_frag_size; + iov_frag_size -= nm_frag_size; + } + } + /* The last slot must not have NS_MOREFRAG set. */ + ring->slot[last].flags &= ~NS_MOREFRAG; + + /* Now update ring->cur and ring->avail. */ + ring->cur = ring->head = i; + +txsync: + if (!more) {// || nm_ring_space(ring) < 64) { + // IFRATE(vq->vq_vs->rate.cur.var2[vq->vq_num]++); + // netmap_ioctl_counter++; + ioctl(be->fd, NIOCTXSYNC, NULL); + } + + return 0; +} + +static int +netmap_receive(struct net_backend *be, struct iovec *iov, + int iovcnt, int *more) +{ + struct netmap_priv *priv = be->priv; + struct netmap_ring *ring; + int tot = 0; + int copylen; + int iov_avail; + uint8_t *iov_buf; + + assert(iovcnt); + + ring = priv->rx; + + /* Init iovec pointers. */ + iov_buf = iov->iov_base; + iov_avail = iov->iov_len; + + if (!priv->rx_continue) { + /* Init netmap pointers. */ + priv->rx_idx = ring->cur; + priv->rx_avail_slots = nm_ring_space(ring); + priv->rx_buf = NETMAP_BUF(ring, + ring->slot[priv->rx_idx].buf_idx); + priv->rx_avail = ring->slot[priv->rx_idx].len; + priv->rx_morefrag = (ring->slot[priv->rx_idx].flags + & NS_MOREFRAG); + + if (!priv->rx_avail_slots) { + goto out; + } + priv->rx_continue = 1; + } + + for (;;) { + copylen = priv->rx_avail; + if (copylen > iov_avail) { + copylen = iov_avail; + } + + /* Copy and update pointers. */ + bcopy(priv->rx_buf, iov_buf, copylen); + iov_buf += copylen; + iov_avail -= copylen; + priv->rx_buf += copylen; + priv->rx_avail -= copylen; + tot += copylen; + + if (!priv->rx_avail) { + priv->rx_avail_slots--; + if (!priv->rx_morefrag || !priv->rx_avail_slots) { + priv->rx_continue = 0; + break; + } + /* Go to the next netmap slot. */ + priv->rx_idx = nm_ring_next(ring, priv->rx_idx); + priv->rx_buf = NETMAP_BUF(ring, + ring->slot[priv->rx_idx].buf_idx); + priv->rx_avail = ring->slot[priv->rx_idx].len; + priv->rx_morefrag = + (ring->slot[priv->rx_idx].flags + & NS_MOREFRAG); + } + + if (!iov_avail) { + iovcnt--; + if (!iovcnt) { + break; + } + /* Go to the next iovec descriptor. */ + iov++; + iov_buf = iov->iov_base; + iov_avail = iov->iov_len; + } + } + + if (!priv->rx_continue) { + /* End of reception: Update the ring now. */ + ring->cur = ring->head = nm_ring_next(ring, priv->rx_idx); + } +out: + *more = priv->rx_continue; + + return tot; +} + +static struct net_backend netmap_backend = { + .name = "netmap|vale", + .init = netmap_init, + .cleanup = netmap_cleanup, + .send = netmap_send, + .recv = netmap_receive, + .get_features = netmap_get_features, + .set_features = netmap_set_features, +}; + +DATA_SET(net_backend_set, netmap_backend); + + +/* + * make sure a backend is properly initialized + */ +static void +netbe_fix(struct net_backend *be) +{ + if (be == NULL) + return; + if (be->name == NULL) { + fprintf(stderr, "missing name for %p\n", be); + be->name = "unnamed netbe"; + } + if (be->init == NULL) { + fprintf(stderr, "missing init for %p %s\n", be, be->name); + be->init = netbe_null_init; + } + if (be->cleanup == NULL) { + fprintf(stderr, "missing cleanup for %p %s\n", be, be->name); + be->cleanup = netbe_null_cleanup; + } + if (be->send == NULL) { + fprintf(stderr, "missing send for %p %s\n", be, be->name); + be->send = netbe_null_send; + } + if (be->recv == NULL) { + fprintf(stderr, "missing recv for %p %s\n", be, be->name); + be->recv = netbe_null_recv; + } + if (be->get_features == NULL) { + fprintf(stderr, "missing get_features for %p %s\n", + be, be->name); + be->get_features = netbe_null_get_features; + } + if (be->set_features == NULL) { + fprintf(stderr, "missing set_features for %p %s\n", + be, be->name); + be->set_features = netbe_null_set_features; + } +} + +/* + * keys is a set of prefixes separated by '|', + * return 1 if the leftmost part of name matches one prefix. + */ +static const char * +netbe_name_match(const char *keys, const char *name) +{ + const char *n = name, *good = keys; + char c; + + if (!keys || !name) + return NULL; + while ( (c = *keys++) ) { + if (c == '|') { /* reached the separator */ + if (good) + break; + /* prepare for new round */ + n = name; + good = keys; + } else if (good && c != *n++) { + good = NULL; /* drop till next keyword */ + } + } + return good; +} + +struct net_backend * +netbe_init(const char *devname, net_backend_cb_t cb, void *param) +{ + /* + * Choose the network backend depending on the user + * provided device name. + */ + struct net_backend **pbe, *ret, *be = NULL; + int err; + + SET_FOREACH(pbe, net_backend_set) { + netbe_fix(*pbe); /* make sure we have all fields */ + if (netbe_name_match((*pbe)->name, devname)) { + be = *pbe; + break; + } + } + if (be == NULL) + return NULL; /* or null backend ? */ + ret = calloc(1, sizeof(*ret)); + *ret = *be; + ret->fd = -1; + ret->priv = NULL; + ret->sc = param; + + err = be->init(ret, devname, cb, param); + if (err) { + free(ret); + ret = NULL; + } + return ret; +} + + +void +netbe_cleanup(struct net_backend *be) +{ + if (be == NULL) + return; + be->cleanup(be); + free(be); +} + + +uint64_t +netbe_get_features(struct net_backend *be) +{ + if (be == NULL) + return 0; + return be->get_features(be); +} + + +uint64_t +netbe_set_features(struct net_backend *be, uint64_t features) +{ + if (be == NULL) + return 0; + return be->set_features(be, features); +} + + +int +netbe_send(struct net_backend *be, struct iovec *iov, int iovcnt, int len, + int more) +{ + if (be == NULL) + return -1; +#if 0 + int i; + D("sending iovcnt %d len %d iovec %p", iovcnt, len, iov); + for (i=0; i < iovcnt; i++) + D(" %3d: %4d %p", i, (int)iov[i].iov_len, iov[i].iov_base); +#endif + return be->send(be, iov, iovcnt, len, more); +} + + +// XXX sc->rx_vhdrlen is the negotiated length +int +netbe_recv(struct net_backend *be, struct iovec *iov, int iovcnt, int *more) +{ + if (be == NULL) + return -1; + return be->recv(be, iov, iovcnt, more); +} Added: soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/net_backends.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/net_backends.h Wed Jul 15 18:56:13 2015 (r288453) @@ -0,0 +1,49 @@ +/*- + * Copyright (c) 2014 Vincenzo Maffione + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __NET_BACKENDS_H__ +#define __NET_BACKENDS_H__ + +#include + +extern int netmap_ioctl_counter; + +typedef void (*net_backend_cb_t)(int, enum ev_type, void *param); + +/* Interface between virtio-net and the network backend. */ +struct net_backend; + +struct net_backend *netbe_init(const char *devname, + net_backend_cb_t cb, void *param); +void netbe_cleanup(struct net_backend *be); +uint64_t netbe_get_features(struct net_backend *be); +uint64_t netbe_set_features(struct net_backend *be, uint64_t features); +int netbe_send(struct net_backend *be, struct iovec *iov, + int iovcnt, int len, int more); +int netbe_recv(struct net_backend *be, struct iovec *iov, + int iovcnt, int *more); + +#endif /* __NET_BACKENDS_H__ */ Modified: soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/pci_virtio_net.c ============================================================================== --- soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/pci_virtio_net.c Wed Jul 15 17:43:13 2015 (r288452) +++ soc2015/stefano/ptnetmap/stable/10/usr.sbin/bhyve/pci_virtio_net.c Wed Jul 15 18:56:13 2015 (r288453) @@ -54,6 +54,7 @@ #include "pci_emul.h" #include "mevent.h" #include "virtio.h" +#include "net_backends.h" #define VTNET_RINGSZ 1024 @@ -130,9 +131,8 @@ struct virtio_softc vsc_vs; struct vqueue_info vsc_queues[VTNET_MAXQ - 1]; pthread_mutex_t vsc_mtx; - struct mevent *vsc_mevp; - int vsc_tapfd; + struct net_backend *vsc_be; int vsc_rx_ready; volatile int resetting; /* set and checked outside lock */ @@ -228,73 +228,38 @@ } /* - * Called to send a buffer chain out to the tap device - */ -static void -pci_vtnet_tap_tx(struct pci_vtnet_softc *sc, struct iovec *iov, int iovcnt, - int len) -{ - static char pad[60]; /* all zero bytes */ - - if (sc->vsc_tapfd == -1) - return; - - /* - * If the length is < 60, pad out to that and add the - * extra zero'd segment to the iov. It is guaranteed that - * there is always an extra iov available by the caller. - */ - if (len < 60) { - iov[iovcnt].iov_base = pad; - iov[iovcnt].iov_len = 60 - len; - iovcnt++; - } - (void) writev(sc->vsc_tapfd, iov, iovcnt); -} - -/* * Called when there is read activity on the tap file descriptor. * Each buffer posted by the guest is assumed to be able to contain * an entire ethernet frame + rx header. * MP note: the dummybuf is only used for discarding frames, so there * is no need for it to be per-vtnet or locked. */ -static uint8_t dummybuf[2048]; - -static __inline struct iovec * -rx_iov_trim(struct iovec *iov, int *niov, int tlen) +void +pci_vtnet_rx_discard(struct pci_vtnet_softc *sc, struct iovec *iov) { - struct iovec *riov; - - /* XXX short-cut: assume first segment is >= tlen */ - assert(iov[0].iov_len >= tlen); + int more; - iov[0].iov_len -= tlen; - if (iov[0].iov_len == 0) { - assert(*niov > 1); - *niov -= 1; - riov = &iov[1]; - } else { - iov[0].iov_base = (void *)((uintptr_t)iov[0].iov_base + tlen); - riov = &iov[0]; - } + /* + * MP note: the dummybuf is only used to discard frames, + * so there is no need for it to be per-vtnet or locked. + * We only make it large enough for TSO-sized segment. + */ + static uint8_t dummybuf[65536+64]; *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-soc-all@freebsd.org Wed Jul 15 21:16:40 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 9F2FB9A2E6F for ; Wed, 15 Jul 2015 21:16:40 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 902B71198 for ; Wed, 15 Jul 2015 21:16:40 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6FLGe9r012519 for ; Wed, 15 Jul 2015 21:16:40 GMT (envelope-from clord@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6FLGeN4012516 for svn-soc-all@FreeBSD.org; Wed, 15 Jul 2015 21:16:40 GMT (envelope-from clord@FreeBSD.org) Date: Wed, 15 Jul 2015 21:16:40 GMT Message-Id: <201507152116.t6FLGeN4012516@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to clord@FreeBSD.org using -f From: clord@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288459 - soc2015/clord/head/sys/contrib/ficl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jul 2015 21:16:40 -0000 Author: clord Date: Wed Jul 15 21:16:39 2015 New Revision: 288459 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288459 Log: Add declarations for FreeBSD related functions back into header file. Modified: soc2015/clord/head/sys/contrib/ficl/ficl.h Modified: soc2015/clord/head/sys/contrib/ficl/ficl.h ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/ficl.h Wed Jul 15 19:38:14 2015 (r288458) +++ soc2015/clord/head/sys/contrib/ficl/ficl.h Wed Jul 15 21:16:39 2015 (r288459) @@ -1794,6 +1794,23 @@ ** Various FreeBSD goodies */ +#if defined(__i386__) && !defined(TESTMAIN) +extern void ficlOutb(FICL_VM *pVM); +extern void ficlInb(FICL_VM *pVM); +#endif + +extern void ficlSetenv(FICL_VM *pVM); +extern void ficlSetenvq(FICL_VM *pVM); +extern void ficlGetenv(FICL_VM *pVM); +extern void ficlUnsetenv(FICL_VM *pVM); +extern void ficlCopyin(FICL_VM *pVM); +extern void ficlCopyout(FICL_VM *pVM); +extern void ficlFindfile(FICL_VM *pVM); +extern void ficlCcall(FICL_VM *pVM); +#if !defined(TESTMAIN) +extern void ficlPnpdevices(FICL_VM *pVM); +extern void ficlPnphandlers(FICL_VM *pVM); +#endif /* ** Used with File-Access wordset. From owner-svn-soc-all@freebsd.org Wed Jul 15 21:18:28 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C01D99A2EB0 for ; Wed, 15 Jul 2015 21:18:28 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B13781237 for ; Wed, 15 Jul 2015 21:18:28 +0000 (UTC) (envelope-from clord@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6FLIS05013628 for ; Wed, 15 Jul 2015 21:18:28 GMT (envelope-from clord@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6FLISEr013615 for svn-soc-all@FreeBSD.org; Wed, 15 Jul 2015 21:18:28 GMT (envelope-from clord@FreeBSD.org) Date: Wed, 15 Jul 2015 21:18:28 GMT Message-Id: <201507152118.t6FLISEr013615@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to clord@FreeBSD.org using -f From: clord@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288460 - soc2015/clord/head/sys/contrib/ficl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jul 2015 21:18:28 -0000 Author: clord Date: Wed Jul 15 21:18:27 2015 New Revision: 288460 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288460 Log: Change function call to one compatible with libstand. Modified: soc2015/clord/head/sys/contrib/ficl/primitives.c Modified: soc2015/clord/head/sys/contrib/ficl/primitives.c ============================================================================== --- soc2015/clord/head/sys/contrib/ficl/primitives.c Wed Jul 15 21:16:39 2015 (r288459) +++ soc2015/clord/head/sys/contrib/ficl/primitives.c Wed Jul 15 21:18:27 2015 (r288460) @@ -414,7 +414,7 @@ desiredLength = isdigit((unsigned char)*format); if (desiredLength) { - desiredLength = strtoul(format, &format, 10); + desiredLength = strtol(format, &format, 10); if (format == formatStop) break; } From owner-svn-soc-all@freebsd.org Fri Jul 17 20:08:34 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 373F29A2850 for ; Fri, 17 Jul 2015 20:08:34 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 265211CAA for ; Fri, 17 Jul 2015 20:08:34 +0000 (UTC) (envelope-from mihai@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6HK8YNF011503 for ; Fri, 17 Jul 2015 20:08:34 GMT (envelope-from mihai@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6HK8VB0011468 for svn-soc-all@FreeBSD.org; Fri, 17 Jul 2015 20:08:31 GMT (envelope-from mihai@FreeBSD.org) Date: Fri, 17 Jul 2015 20:08:31 GMT Message-Id: <201507172008.t6HK8VB0011468@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to mihai@FreeBSD.org using -f From: mihai@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288506 - in soc2015/mihai/bhyve-on-arm-head: sys/arm/include sys/arm/vmm usr.sbin/bhyvearm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jul 2015 20:08:34 -0000 Author: mihai Date: Fri Jul 17 20:08:30 2015 New Revision: 288506 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288506 Log: soc2015: mihai: bhyve: sys: arm: vmm: save the exception state from HYP mode and add the main exception stubs Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/include/vmm.h soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.h soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_genassym.c soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/include/vmm.h ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/include/vmm.h Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/include/vmm.h Fri Jul 17 20:08:30 2015 (r288506) @@ -250,6 +250,7 @@ VM_EXITCODE_PAUSE, VM_EXITCODE_PAGING, VM_EXITCODE_SPINUP_AP, + VM_EXITCODE_HYP, VM_EXITCODE_MAX }; @@ -273,6 +274,17 @@ int inst_length; /* 0 means unknown */ uint64_t pc; union { + /* + * ARM specific payload. + */ + struct { + uint32_t exception_nr; + uint32_t hsr; /* Hyp Syndrome Register */ + uint32_t hdfar; /* VA at a Data Abort exception */ + uint32_t hifar; /* VA at a Prefetch Abort exception */ + uint32_t hpfar; /* IPA[39:12] at aborts on stage 2 address translations */ + } hyp; + struct { uint64_t gpa; int fault_type; Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.c Fri Jul 17 20:08:30 2015 (r288506) @@ -215,6 +215,48 @@ } static int +hyp_exit_process(struct hyp *hyp, int vcpu, struct vm_exit *vmexit) +{ + int handled; + struct hypctx *hypctx; + + hypctx = &hyp->ctx[vcpu]; + + handled = UNHANDLED; + + vmexit->exitcode = VM_EXITCODE_BOGUS; + + switch(vmexit->u.hyp.exception_nr) { + case EXCEPTION_UNDEF: + panic("%s undefined exception\n", __func__); + break; + case EXCEPTION_SVC: + panic("%s take SVC exception to hyp mode\n", __func__); + break; + /* The following are in the same category and are distinguished using HSR */ + case EXCEPTION_PABT: + case EXCEPTION_DABT: + case EXCEPTION_HVC: + printf("%s PABT/DABT/HYP unimplemented exception\n",__func__); + vmexit->exitcode = VM_EXITCODE_HYP; + break; + case EXCEPTION_FIQ: + printf("%s FIQ unsupported exception\n",__func__); + vmexit->exitcode = VM_EXITCODE_HYP; + break; + case EXCEPTION_IRQ: + printf("%s IRQ unsupported exception\n",__func__); + vmexit->exitcode = VM_EXITCODE_HYP; + break; + default: + printf("%s unknown exception: %d\n",__func__, vmexit->u.hyp.exception_nr); + vmexit->exitcode = VM_EXITCODE_HYP; + break; + } + return (handled); +} + +static int arm_vmrun(void *arg, int vcpu, register_t pc, pmap_t pmap, void *rend_cookie, void *suspended_cookie) { @@ -223,17 +265,28 @@ struct hyp *hyp; struct hypctx *hypctx; struct vm *vm; + struct vm_exit *vmexit; hyp = arg; hypctx = &hyp->ctx[vcpu]; vm = hyp->vm; + vmexit = vm_exitinfo(vm, vcpu); do { handled = UNHANDLED; rc = vmm_call_hyp((void *)hyp_enter_guest, hypctx); + printf("%s rc: %d\n",__func__, rc); -// handled = HANDLED; + vmexit->pc = hypctx->regs.r_pc; + vmexit->inst_length = 4; /* TODO -> HSR[25] */ + vmexit->u.hyp.exception_nr = rc; + vmexit->u.hyp.hsr = hypctx->exit_info.hsr; + vmexit->u.hyp.hifar = hypctx->exit_info.hifar; + vmexit->u.hyp.hdfar = hypctx->exit_info.hdfar; + vmexit->u.hyp.hpfar = hypctx->exit_info.hpfar; + + handled = hyp_exit_process(hyp, vcpu, vmexit); } while(handled); return 0; Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.h ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.h Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/arm.h Fri Jul 17 20:08:30 2015 (r288506) @@ -61,6 +61,12 @@ uint64_t cp15_par; uint32_t cp15_amair0; uint32_t cp15_amair1; + struct { + uint32_t hsr; /* Hyp Syndrome Register */ + uint32_t hdfar; /* VA at a Data Abort exception */ + uint32_t hifar; /* VA at a Prefetch Abort exception */ + uint32_t hpfar; /* IPA[39:12] at aborts on stage 2 address translations */ + } exit_info; }; Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp.S Fri Jul 17 20:08:30 2015 (r288506) @@ -78,6 +78,16 @@ * guest r0-r2 saved on stack when trapping in HYP mode */ + /* Save exit status registers */ + mrc p15, 4, r2, c5, c2, 0 @ Load HSR + str r2, [r0, #HYPCTX_EXIT_INFO_HSR] + mrc p15, 4, r2, c6, c0, 2 @ Load HIFAR + str r2, [r0, #HYPCTX_EXIT_INFO_HIFAR] + mrc p15, 4, r2, c6, c0, 0 @ Load HDFAR + str r2, [r0, #HYPCTX_EXIT_INFO_HDFAR] + mrc p15, 4, r2, c6, c0, 4 @ Load HPFAR + str r2, [r0, #HYPCTX_EXIT_INFO_HPFAR] + save_guest_regs /* Disable trap access to the CP10/CP11 [vfp/simd] */ @@ -293,12 +303,10 @@ eret guest_trap: - /* Load hypctx in r0 from HTPIDR*/ + /* Load hypctx in r0 from HTPIDR */ mrc p15, 4, r0, c13, c0, 2 mov r1, #EXCEPTION_HVC - // TODO: check exception cause and load status registers in hypctx - b hyp_exit_guest .align Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_genassym.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_genassym.c Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/hyp_genassym.c Fri Jul 17 20:08:30 2015 (r288506) @@ -71,6 +71,13 @@ ASSYM(HYPCTX_CP15_AMAIR0, offsetof(struct hypctx, cp15_amair0)); ASSYM(HYPCTX_CP15_AMAIR1, offsetof(struct hypctx, cp15_amair1)); +ASSYM(HYPCTX_EXIT_INFO_HSR, offsetof(struct hypctx, exit_info.hsr)); +ASSYM(HYPCTX_EXIT_INFO_HDFAR, offsetof(struct hypctx, exit_info.hdfar)); +ASSYM(HYPCTX_EXIT_INFO_HIFAR, offsetof(struct hypctx, exit_info.hifar)); +ASSYM(HYPCTX_EXIT_INFO_HPFAR, offsetof(struct hypctx, exit_info.hpfar)); + + + Modified: soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/sys/arm/vmm/vmm.c Fri Jul 17 20:08:30 2015 (r288506) @@ -149,6 +149,19 @@ vcpu->vcpuid = vcpu_id; } +struct vm_exit * +vm_exitinfo(struct vm *vm, int cpuid) +{ + struct vcpu *vcpu; + + if (cpuid < 0 || cpuid >= VM_MAXCPU) + panic("vm_exitinfo: invalid cpuid %d", cpuid); + + vcpu = &vm->vcpu[cpuid]; + + return (&vcpu->exitinfo); +} + static int vmm_init(void) { Modified: soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c ============================================================================== --- soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c Fri Jul 17 19:10:43 2015 (r288505) +++ soc2015/mihai/bhyve-on-arm-head/usr.sbin/bhyvearm/bhyverun.c Fri Jul 17 20:08:30 2015 (r288506) @@ -150,7 +150,10 @@ snprintf(tname, sizeof(tname), "%s vcpu %d", vmname, vcpu); pthread_set_name_np(mtp->mt_thr, tname); + printf("%s %s\n",__func__, tname); + vm_loop(mtp->mt_ctx, vcpu, vmexit[vcpu].pc); + printf("%s %s aftervm_loop\n",__func__, tname); /* not reached */ exit(1); @@ -219,11 +222,11 @@ } static int -vmexit_vmx(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) +vmexit_hyp(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) { fprintf(stderr, "vm exit[%d]\n", *pvcpu); - fprintf(stderr, "\treason\t\tVMX\n"); + fprintf(stderr, "\treason\t\tHYP\n"); fprintf(stderr, "\tpc\t\t0x%016llx\n", vmexit->pc); fprintf(stderr, "\tinst_length\t%d\n", vmexit->inst_length); @@ -297,7 +300,7 @@ } static vmexit_handler_t handler[VM_EXITCODE_MAX] = { - [VM_EXITCODE_VMX] = vmexit_vmx, + [VM_EXITCODE_HYP] = vmexit_hyp, [VM_EXITCODE_BOGUS] = vmexit_bogus, [VM_EXITCODE_MTRAP] = vmexit_mtrap, [VM_EXITCODE_PAGING] = vmexit_paging, @@ -317,9 +320,13 @@ sizeof(mask), &mask); assert(error == 0); } - + printf("%s\n",__func__); while (1) { + printf("%s 2\n",__func__); + error = vm_run(ctx, vcpu, pc, &vmexit[vcpu]); + printf("%s 3\n",__func__); + if (error != 0) { /* * It is possible that 'vmmctl' or some other process @@ -451,7 +458,7 @@ error = vm_get_register(ctx, BSP, VM_REG_GUEST_PC, &pc); assert(error == 0); - + printf("%s pc: %llx\n",__func__, pc); /* * Add CPU 0 */ From owner-svn-soc-all@freebsd.org Sat Jul 18 12:24:12 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 452799A4230 for ; Sat, 18 Jul 2015 12:24:12 +0000 (UTC) (envelope-from pratiksinghal@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3526B1E5D for ; Sat, 18 Jul 2015 12:24:12 +0000 (UTC) (envelope-from pratiksinghal@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6ICOCbt066490 for ; Sat, 18 Jul 2015 12:24:12 GMT (envelope-from pratiksinghal@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6ICOBBJ066486 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 12:24:11 GMT (envelope-from pratiksinghal@FreeBSD.org) Date: Sat, 18 Jul 2015 12:24:11 GMT Message-Id: <201507181224.t6ICOBBJ066486@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to pratiksinghal@FreeBSD.org using -f From: pratiksinghal@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288519 - in soc2015/pratiksinghal/cubie-head/sys: arm/allwinner boot/fdt/dts/arm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 12:24:12 -0000 Author: pratiksinghal Date: Sat Jul 18 12:24:10 2015 New Revision: 288519 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288519 Log: Added the modified dts and the header containing useful constants Added: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_ac97.h Modified: soc2015/pratiksinghal/cubie-head/sys/boot/fdt/dts/arm/sun4i-a10.dtsi Added: soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_ac97.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ soc2015/pratiksinghal/cubie-head/sys/arm/allwinner/a10_ac97.h Sat Jul 18 12:24:10 2015 (r288519) @@ -0,0 +1,75 @@ +/*- + * Copyright (c) 2015 Pratik Singhal + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#define __LOWEST_SET_BIT(__mask) ((((__mask) - 1) & (__mask)) ^ (__mask)) +#define __BIT(__n) (((__n) == 32) ? 0 : ((uint32_t)1 << (__n))) +#define __BITS(__m, __n) \ + ((__BIT(MAX((__m), (__n)) + 1) - 1) ^ (__BIT(MIN((__m), (__n))) - 1)) +#define __SHIFTIN(__x, __mask) ((__x) * __LOWEST_SET_BIT(__mask)) + + +/* Module base address */ +#define AC97 0x01C21400 + +/* Register Offsets */ +#define AC_CTL 0x00 /* AC97 control register */ +#define AC_FAT 0x04 /* AC97 Format register */ +#define AC_CMD 0x08 /* AC97 Command register */ +#define AC_CS 0x0C /* AC97 Codec Status register */ +#define AC_TX_FIFO 0x10 /* AC97 TX FIFO */ +#define AC_RX_FIFO 0x14 /* AC97 RX FIFO */ +#define AC_FCTL 0x18 /* AC97 FIFO control register */ +#define AC_FSTA 0x1C /* AC97 FIFO status register */ +#define AC_INT 0x20 /* AC97 interrupt control register */ +#define AC_ISTA 0x24 /* AC97 interrupt status register */ +#define AC_TX_CNT 0x28 /* AC97 TX counter register */ +#define AC_RX_CNT 0x2C /* AC97 RX counter register */ + +/* AC_CTL */ +#define AC_CODEC_FULL (1U << 18) +#define AC_CMD_FULL (1U << 17) +#define AC_RX_MIC_IN (1U << 16) +#define AC_RX_MODE_MIC (1U << 9) +#define AC_TX_EN (1U << 7) +#define AC_RX_EN (1U << 6) +#define AC_LINK_EN (1U << 5) +#define AC_GLOBAL_EN (1U << 4) +#define AC_WARM_RST (1U << 1) + +/* AC_FAT */ +#define AC_TX_MODE_2 (0) +#define AC_TX_MODE_6 (0U << 8)|(1U << 7) +#define AC_DRA_1 (1U << 6) +#define AC_VRA_MODE (1U << 4) +#define AC_TX_RES_16 (0U << 2) +#define AC_TX_RES_18 (2U << 2) +#define AC_TX_RES_20 (1U << 3) +#define AC_RX_RES_16 (0U << 1) +#define AC_RX_RES_18 (2U << 0) +#define AC_RX_RES_20 (1U << 1) + +/* AC_CMD */ +#define AC_CMD_READ (1U << 23) Modified: soc2015/pratiksinghal/cubie-head/sys/boot/fdt/dts/arm/sun4i-a10.dtsi ============================================================================== --- soc2015/pratiksinghal/cubie-head/sys/boot/fdt/dts/arm/sun4i-a10.dtsi Sat Jul 18 09:02:50 2015 (r288518) +++ soc2015/pratiksinghal/cubie-head/sys/boot/fdt/dts/arm/sun4i-a10.dtsi Sat Jul 18 12:24:10 2015 (r288519) @@ -127,6 +127,14 @@ status = "disabled"; }; + ac97@01c21400 { + compatible = "allwinner,sun4i-a10-ac97"; + reg = <0x01C214000 0x1000>; + interrupts = <46> + interrupt-parent = <&AINTC>; + status = "disabled"; + }; + UART0: serial@01c28000 { compatible = "ns16550"; reg = <0x01c28000 0x400>; From owner-svn-soc-all@freebsd.org Sat Jul 18 12:49:57 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 361219A4E6E for ; Sat, 18 Jul 2015 12:49:57 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 275951B24 for ; Sat, 18 Jul 2015 12:49:57 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6ICnvqr077467 for ; Sat, 18 Jul 2015 12:49:57 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6ICnudq077464 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 12:49:56 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 12:49:56 GMT Message-Id: <201507181249.t6ICnudq077464@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288520 - soc2013/def/crashdump-head/sys/sys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 12:49:57 -0000 Author: def Date: Sat Jul 18 12:49:56 2015 New Revision: 288520 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288520 Log: Use uint32_t instead of size_t in kerneldumpkey. Modified: soc2013/def/crashdump-head/sys/sys/kerneldump.h Modified: soc2013/def/crashdump-head/sys/sys/kerneldump.h ============================================================================== --- soc2013/def/crashdump-head/sys/sys/kerneldump.h Sat Jul 18 12:24:10 2015 (r288519) +++ soc2013/def/crashdump-head/sys/sys/kerneldump.h Sat Jul 18 12:49:56 2015 (r288520) @@ -93,9 +93,9 @@ }; struct kerneldumpkey { - size_t kdk_size; + uint32_t kdk_size; uint8_t kdk_iv[KERNELDUMP_IV_SIZE]; - size_t kdk_encryptedkeylen; + uint32_t kdk_encryptedkeylen; uint8_t kdk_encryptedkey[]; }; @@ -105,7 +105,7 @@ if (kdk == NULL) return (0); - return (kdk->kdk_size); + return ((size_t)kdk->kdk_size); } /* From owner-svn-soc-all@freebsd.org Sat Jul 18 12:54:38 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 010069A3011 for ; Sat, 18 Jul 2015 12:54:38 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id E5AE51E0C for ; Sat, 18 Jul 2015 12:54:37 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6ICsbiD084509 for ; Sat, 18 Jul 2015 12:54:37 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6ICsb5m084507 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 12:54:37 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 12:54:37 GMT Message-Id: <201507181254.t6ICsb5m084507@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288521 - soc2013/def/crashdump-head/sbin/cryptcore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 12:54:38 -0000 Author: def Date: Sat Jul 18 12:54:36 2015 New Revision: 288521 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288521 Log: Don't cast pointers returned by calloc and realloc. Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 12:49:56 2015 (r288520) +++ soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 12:54:36 2015 (r288521) @@ -51,7 +51,7 @@ pjdlog_exitx(1, "Unable to read data from %s.", pubkeyfile); pubkeysize = RSA_size(pubkey); - encryptedkey = (uint8_t *)calloc(1, pubkeysize); + encryptedkey = calloc(1, pubkeysize); if (encryptedkey == NULL) pjdlog_exitx(1, "Unable to allocate encrypted key"); @@ -113,7 +113,7 @@ pjdlog_exitx(1, "Unable to allocate an RSA structure."); EVP_CIPHER_CTX_init(&ctx); - kdk = (struct kerneldumpkey *)calloc(1, sizeof(struct kerneldumpkey)); + kdk = calloc(1, sizeof(struct kerneldumpkey)); if (kdk == NULL) pjdlog_exit(1, "Unable to allocate kernel dump key"); @@ -122,7 +122,7 @@ pjdlog_exit(1, "Unable to open %s", keyfile); size = (int)read(fd, kdk, sizeof(struct kerneldumpkey)); if (size == sizeof(struct kerneldumpkey)) { - kdk = (struct kerneldumpkey *)realloc(kdk, kdk->kdk_size); + kdk = realloc(kdk, kdk->kdk_size); size += read(fd, &kdk->kdk_encryptedkey, kdk->kdk_size - sizeof(struct kerneldumpkey)); } From owner-svn-soc-all@freebsd.org Sat Jul 18 12:56:19 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id D74319A305A for ; Sat, 18 Jul 2015 12:56:19 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id C81121F0C for ; Sat, 18 Jul 2015 12:56:19 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6ICuJD9085049 for ; Sat, 18 Jul 2015 12:56:19 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6ICuJxW085037 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 12:56:19 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 12:56:19 GMT Message-Id: <201507181256.t6ICuJxW085037@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288522 - soc2013/def/crashdump-head/sbin/cryptcore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 12:56:19 -0000 Author: def Date: Sat Jul 18 12:56:18 2015 New Revision: 288522 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288522 Log: Use u format for unsigned int value. Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 12:54:36 2015 (r288521) +++ soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 12:56:18 2015 (r288522) @@ -147,7 +147,7 @@ */ privkeysize = RSA_size(privkey); if (privkeysize != (int)kdk->kdk_encryptedkeylen) { - pjdlog_error("RSA modulus size mismatch: equals %db and should be %lub.", + pjdlog_error("RSA modulus size mismatch: equals %db and should be %ub.", 8 * privkeysize, 8 * kdk->kdk_encryptedkeylen); goto failed; } From owner-svn-soc-all@freebsd.org Sat Jul 18 13:09:58 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 639F99A335E for ; Sat, 18 Jul 2015 13:09:58 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 3A67A1509 for ; Sat, 18 Jul 2015 13:09:58 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6ID9wVX028504 for ; Sat, 18 Jul 2015 13:09:58 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6ID9vSJ028502 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:09:57 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:09:57 GMT Message-Id: <201507181309.t6ID9vSJ028502@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288528 - soc2013/def/crashdump-head/sbin/cryptcore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:09:58 -0000 Author: def Date: Sat Jul 18 13:09:57 2015 New Revision: 288528 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288528 Log: Change data types of bytes and size variables to ssize_t. Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 12:25:47 2015 (r288527) +++ soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:09:57 2015 (r288528) @@ -97,8 +97,9 @@ FILE *fp; struct kerneldumpkey *kdk; RSA *privkey; - int err, fd, ofd, privkeysize, size; - size_t bufused, bytes; + int err, fd, ofd, olen, privkeysize; + ssize_t bytes, size; + size_t bufused; PJDLOG_ASSERT(privkeyfile != NULL); PJDLOG_ASSERT(keyfile != NULL); @@ -120,8 +121,8 @@ fd = open(keyfile, O_RDONLY); if (fd == -1) pjdlog_exit(1, "Unable to open %s", keyfile); - size = (int)read(fd, kdk, sizeof(struct kerneldumpkey)); - if (size == sizeof(struct kerneldumpkey)) { + size = read(fd, kdk, sizeof(struct kerneldumpkey)); + if (size == (ssize_t)sizeof(struct kerneldumpkey)) { kdk = realloc(kdk, kdk->kdk_size); size += read(fd, &kdk->kdk_encryptedkey, kdk->kdk_size - sizeof(struct kerneldumpkey)); @@ -129,7 +130,7 @@ err = errno; close(fd); fd = -1; - if (size != (int)kdk->kdk_size) { + if (size != (ssize_t)kdk->kdk_size) { errno = err; pjdlog_exit(1, "Unable to read data from %s", keyfile); } @@ -178,14 +179,14 @@ if (bufused != sizeof(buf)) continue; - if (EVP_DecryptUpdate(&ctx, buf, &size, buf, + if (EVP_DecryptUpdate(&ctx, buf, &olen, buf, sizeof(buf)) == 0) { pjdlog_error("Unable to decrypt core."); goto failed; } - PJDLOG_ASSERT(size == sizeof(buf)); + PJDLOG_ASSERT(olen == (int)sizeof(buf)); - if (write(ofd, buf, sizeof(buf)) != sizeof(buf)) { + if (write(ofd, buf, sizeof(buf)) != (ssize_t)sizeof(buf)) { pjdlog_errno(LOG_ERR, "Unable to write data to %s", output); goto failed; From owner-svn-soc-all@freebsd.org Sat Jul 18 13:11:57 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 5853D9A3491 for ; Sat, 18 Jul 2015 13:11:57 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 499A11887 for ; Sat, 18 Jul 2015 13:11:57 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IDBvBZ034681 for ; Sat, 18 Jul 2015 13:11:57 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IDBuKn034678 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:11:56 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:11:56 GMT Message-Id: <201507181311.t6IDBuKn034678@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288529 - soc2013/def/crashdump-head/sbin/cryptcore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:11:57 -0000 Author: def Date: Sat Jul 18 13:11:56 2015 New Revision: 288529 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288529 Log: Report an error when a kernel dump key couldn't be reallocated. Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:09:57 2015 (r288528) +++ soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:11:56 2015 (r288529) @@ -124,6 +124,8 @@ size = read(fd, kdk, sizeof(struct kerneldumpkey)); if (size == (ssize_t)sizeof(struct kerneldumpkey)) { kdk = realloc(kdk, kdk->kdk_size); + if (kdk == NULL) + pjdlog_exit(1, "Unable to reallocate kernel dump key"); size += read(fd, &kdk->kdk_encryptedkey, kdk->kdk_size - sizeof(struct kerneldumpkey)); } From owner-svn-soc-all@freebsd.org Sat Jul 18 13:13:41 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 1644A9A34BB for ; Sat, 18 Jul 2015 13:13:41 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 074F018B5 for ; Sat, 18 Jul 2015 13:13:41 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IDDe0r035256 for ; Sat, 18 Jul 2015 13:13:40 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IDDeM3035244 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:13:40 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:13:40 GMT Message-Id: <201507181313.t6IDDeM3035244@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288530 - soc2013/def/crashdump-head/sbin/cryptcore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:13:41 -0000 Author: def Date: Sat Jul 18 13:13:39 2015 New Revision: 288530 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288530 Log: Report error message when calloc cannot allocate memory. Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:11:56 2015 (r288529) +++ soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:13:39 2015 (r288530) @@ -53,7 +53,7 @@ pubkeysize = RSA_size(pubkey); encryptedkey = calloc(1, pubkeysize); if (encryptedkey == NULL) - pjdlog_exitx(1, "Unable to allocate encrypted key"); + pjdlog_exit(1, "Unable to allocate encrypted key"); arc4random_buf(key, sizeof(key)); if (RSA_public_encrypt(sizeof(key), key, encryptedkey, pubkey, From owner-svn-soc-all@freebsd.org Sat Jul 18 13:19:43 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 745B99A3541 for ; Sat, 18 Jul 2015 13:19:43 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 60E121978 for ; Sat, 18 Jul 2015 13:19:43 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IDJh26037715 for ; Sat, 18 Jul 2015 13:19:43 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IDJgYk037711 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:19:42 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:19:42 GMT Message-Id: <201507181319.t6IDJgYk037711@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288531 - soc2013/def/crashdump-head/sbin/cryptcore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:19:43 -0000 Author: def Date: Sat Jul 18 13:19:42 2015 New Revision: 288531 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288531 Log: Report an error when it was unable to read data from input file. Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Modified: soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:13:39 2015 (r288530) +++ soc2013/def/crashdump-head/sbin/cryptcore/cryptcore.c Sat Jul 18 13:19:42 2015 (r288531) @@ -195,6 +195,10 @@ } bufused = 0; } + if (bytes < 0) { + pjdlog_errno(LOG_ERR, "Unable to read data from %s", input); + goto failed; + } bzero(key, sizeof(key)); bzero(buf, sizeof(buf)); From owner-svn-soc-all@freebsd.org Sat Jul 18 13:36:10 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C35DB9A38A1 for ; Sat, 18 Jul 2015 13:36:10 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B462C1FAD for ; Sat, 18 Jul 2015 13:36:10 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IDaAQa054993 for ; Sat, 18 Jul 2015 13:36:10 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IDaAp5054989 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:36:10 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:36:10 GMT Message-Id: <201507181336.t6IDaAp5054989@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288532 - soc2013/def/crashdump-head/etc/rc.d MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:36:10 -0000 Author: def Date: Sat Jul 18 13:36:09 2015 New Revision: 288532 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288532 Log: Implement stop command in cryptcore rc.d script. Modified: soc2013/def/crashdump-head/etc/rc.d/cryptcore Modified: soc2013/def/crashdump-head/etc/rc.d/cryptcore ============================================================================== --- soc2013/def/crashdump-head/etc/rc.d/cryptcore Sat Jul 18 13:19:42 2015 (r288531) +++ soc2013/def/crashdump-head/etc/rc.d/cryptcore Sat Jul 18 13:36:09 2015 (r288532) @@ -8,16 +8,22 @@ name="cryptcore" rcvar="cryptcore_enable" +start_precmd="${name}_check" start_cmd="${name}_start" -stop_cmd=":" +stop_precmd="${name}_check" +stop_cmd="${name}_stop" -cryptcore_start() +cryptcore_check() { sysctl -Nq security.ekcd.enable >/dev/null if [ $? -ne 0 ]; then err 1 "Kernel is missing encrypted kernel crash dumps." fi +} + +cryptcore_start() +{ if [ ! -f "${cryptcore_pubkey}" ]; then err 1 "Invalid path to a public key." @@ -31,5 +37,11 @@ sysctl security.ekcd.enable=1 } +cryptcore_stop() +{ + + sysctl security.ekcd.enable=0 +} + load_rc_config $name run_rc_command "$1" From owner-svn-soc-all@freebsd.org Sat Jul 18 13:50:15 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E5BF69A3A64 for ; Sat, 18 Jul 2015 13:50:15 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id CE7B71262 for ; Sat, 18 Jul 2015 13:50:15 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IDoFhn067276 for ; Sat, 18 Jul 2015 13:50:15 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IDoFWf067264 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:50:15 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:50:15 GMT Message-Id: <201507181350.t6IDoFWf067264@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288533 - soc2013/def/crashdump-head/sys/kern MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:50:16 -0000 Author: def Date: Sat Jul 18 13:50:14 2015 New Revision: 288533 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288533 Log: Don't initialize dumpkey as it's already NULL. Modified: soc2013/def/crashdump-head/sys/kern/kern_shutdown.c Modified: soc2013/def/crashdump-head/sys/kern/kern_shutdown.c ============================================================================== --- soc2013/def/crashdump-head/sys/kern/kern_shutdown.c Sat Jul 18 13:36:09 2015 (r288532) +++ soc2013/def/crashdump-head/sys/kern/kern_shutdown.c Sat Jul 18 13:50:14 2015 (r288533) @@ -153,7 +153,7 @@ uint8_t kdc_buf[KERNELDUMP_BUFFER_SIZE]; } dumpcrypto; -static struct kerneldumpkey *dumpkey = NULL; +static struct kerneldumpkey *dumpkey; static int kerneldump_sysctl_enable(SYSCTL_HANDLER_ARGS); static int kerneldump_sysctl_key(SYSCTL_HANDLER_ARGS); From owner-svn-soc-all@freebsd.org Sat Jul 18 13:52:06 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 3E7149A3B83 for ; Sat, 18 Jul 2015 13:52:06 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 2B6FC1598 for ; Sat, 18 Jul 2015 13:52:06 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IDq6ex072571 for ; Sat, 18 Jul 2015 13:52:06 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IDq5DD072568 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 13:52:05 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 13:52:05 GMT Message-Id: <201507181352.t6IDq5DD072568@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288534 - soc2013/def/crashdump-head/sys/sys MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 13:52:06 -0000 Author: def Date: Sat Jul 18 13:52:05 2015 New Revision: 288534 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288534 Log: Remove padding and 4B from panicstring so dumpkey can fit in 512B long kernel dump header. Modified: soc2013/def/crashdump-head/sys/sys/kerneldump.h Modified: soc2013/def/crashdump-head/sys/sys/kerneldump.h ============================================================================== --- soc2013/def/crashdump-head/sys/sys/kerneldump.h Sat Jul 18 13:50:14 2015 (r288533) +++ soc2013/def/crashdump-head/sys/sys/kerneldump.h Sat Jul 18 13:52:05 2015 (r288534) @@ -87,9 +87,8 @@ uint32_t blocksize; char hostname[64]; char versionstring[192]; - char panicstring[192]; + char panicstring[188]; uint32_t parity; - char pad[508]; }; struct kerneldumpkey { From owner-svn-soc-all@freebsd.org Sat Jul 18 15:11:32 2015 Return-Path: Delivered-To: svn-soc-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 41B039A57F8 for ; Sat, 18 Jul 2015 15:11:32 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org (socsvn.freebsd.org [IPv6:2001:1900:2254:206a::50:2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 25A9916A8 for ; Sat, 18 Jul 2015 15:11:32 +0000 (UTC) (envelope-from def@FreeBSD.org) Received: from socsvn.freebsd.org ([127.0.1.124]) by socsvn.freebsd.org (8.15.2/8.15.2) with ESMTP id t6IFBW8i093827 for ; Sat, 18 Jul 2015 15:11:32 GMT (envelope-from def@FreeBSD.org) Received: (from www@localhost) by socsvn.freebsd.org (8.15.2/8.15.2/Submit) id t6IFBT9L093633 for svn-soc-all@FreeBSD.org; Sat, 18 Jul 2015 15:11:29 GMT (envelope-from def@FreeBSD.org) Date: Sat, 18 Jul 2015 15:11:29 GMT Message-Id: <201507181511.t6IFBT9L093633@socsvn.freebsd.org> X-Authentication-Warning: socsvn.freebsd.org: www set sender to def@FreeBSD.org using -f From: def@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r288535 - in soc2013/def/crashdump-head: sbin/savecore sys/amd64/amd64 sys/arm/arm sys/ddb sys/i386/i386 sys/kern sys/mips/mips MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-soc-all@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the entire Summer of Code repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jul 2015 15:11:32 -0000 Author: def Date: Sat Jul 18 15:11:28 2015 New Revision: 288535 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=288535 Log: Kernel dump header has 512B again. Modified: soc2013/def/crashdump-head/sbin/savecore/savecore.c soc2013/def/crashdump-head/sys/amd64/amd64/minidump_machdep.c soc2013/def/crashdump-head/sys/arm/arm/minidump_machdep.c soc2013/def/crashdump-head/sys/ddb/db_textdump.c soc2013/def/crashdump-head/sys/i386/i386/minidump_machdep.c soc2013/def/crashdump-head/sys/kern/kern_dump.c soc2013/def/crashdump-head/sys/mips/mips/minidump_machdep.c Modified: soc2013/def/crashdump-head/sbin/savecore/savecore.c ============================================================================== --- soc2013/def/crashdump-head/sbin/savecore/savecore.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sbin/savecore/savecore.c Sat Jul 18 15:11:28 2015 (r288535) @@ -517,7 +517,7 @@ printf("sectorsize = %u\n", sectorsize); } - lasthd = mediasize - sizeof(kdhl); + lasthd = mediasize - sectorsize; lseek(fd, lasthd, SEEK_SET); error = read(fd, &kdhl, sizeof kdhl); if (error != sizeof kdhl) { Modified: soc2013/def/crashdump-head/sys/amd64/amd64/minidump_machdep.c ============================================================================== --- soc2013/def/crashdump-head/sys/amd64/amd64/minidump_machdep.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sys/amd64/amd64/minidump_machdep.c Sat Jul 18 15:11:28 2015 (r288535) @@ -49,7 +49,7 @@ #include #include -CTASSERT((sizeof(struct kerneldumpheader) % 512) == 0); +CTASSERT(sizeof(struct kerneldumpheader) == 512); /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This Modified: soc2013/def/crashdump-head/sys/arm/arm/minidump_machdep.c ============================================================================== --- soc2013/def/crashdump-head/sys/arm/arm/minidump_machdep.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sys/arm/arm/minidump_machdep.c Sat Jul 18 15:11:28 2015 (r288535) @@ -50,7 +50,7 @@ #include #include -CTASSERT((sizeof(struct kerneldumpheader) % 512) == 0); +CTASSERT(sizeof(struct kerneldumpheader) == 512); /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This Modified: soc2013/def/crashdump-head/sys/ddb/db_textdump.c ============================================================================== --- soc2013/def/crashdump-head/sys/ddb/db_textdump.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sys/ddb/db_textdump.c Sat Jul 18 15:11:28 2015 (r288535) @@ -113,7 +113,7 @@ * Various size assertions -- pretty much everything must be one block in * size. */ -CTASSERT((sizeof(struct kerneldumpheader) % TEXTDUMP_BLOCKSIZE) == 0); +CTASSERT(sizeof(struct kerneldumpheader) == 512); CTASSERT(sizeof(struct ustar_header) == TEXTDUMP_BLOCKSIZE); /* Modified: soc2013/def/crashdump-head/sys/i386/i386/minidump_machdep.c ============================================================================== --- soc2013/def/crashdump-head/sys/i386/i386/minidump_machdep.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sys/i386/i386/minidump_machdep.c Sat Jul 18 15:11:28 2015 (r288535) @@ -45,7 +45,7 @@ #include #include -CTASSERT((sizeof(struct kerneldumpheader) % 512) == 0); +CTASSERT(sizeof(struct kerneldumpheader) == 512); /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This Modified: soc2013/def/crashdump-head/sys/kern/kern_dump.c ============================================================================== --- soc2013/def/crashdump-head/sys/kern/kern_dump.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sys/kern/kern_dump.c Sat Jul 18 15:11:28 2015 (r288535) @@ -47,7 +47,7 @@ #include #include -CTASSERT((sizeof(struct kerneldumpheader) % 512) == 0); +CTASSERT(sizeof(struct kerneldumpheader) == 512); /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This Modified: soc2013/def/crashdump-head/sys/mips/mips/minidump_machdep.c ============================================================================== --- soc2013/def/crashdump-head/sys/mips/mips/minidump_machdep.c Sat Jul 18 13:52:05 2015 (r288534) +++ soc2013/def/crashdump-head/sys/mips/mips/minidump_machdep.c Sat Jul 18 15:11:28 2015 (r288535) @@ -47,7 +47,7 @@ #include #include -CTASSERT((sizeof(struct kerneldumpheader) % 512) == 0); +CTASSERT(sizeof(struct kerneldumpheader) == 512); /* * Don't touch the first SIZEOF_METADATA bytes on the dump device. This