From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 03:43:52 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B6D0BFA6; Thu, 1 Aug 2013 03:43:52 +0000 (UTC) (envelope-from marcel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id A3803256D; Thu, 1 Aug 2013 03:43:52 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r713hqm3028968; Thu, 1 Aug 2013 03:43:52 GMT (envelope-from marcel@svn.freebsd.org) Received: (from marcel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r713hqYf028967; Thu, 1 Aug 2013 03:43:52 GMT (envelope-from marcel@svn.freebsd.org) Message-Id: <201308010343.r713hqYf028967@svn.freebsd.org> From: Marcel Moolenaar Date: Thu, 1 Aug 2013 03:43:52 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253851 - projects/altix2/sys/dev/isp X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 03:43:52 -0000 Author: marcel Date: Thu Aug 1 03:43:52 2013 New Revision: 253851 URL: http://svnweb.freebsd.org/changeset/base/253851 Log: Port the sbus attached to busdma/mi now that I have my Netra fired up... Modified: projects/altix2/sys/dev/isp/isp_sbus.c Modified: projects/altix2/sys/dev/isp/isp_sbus.c ============================================================================== --- projects/altix2/sys/dev/isp/isp_sbus.c Thu Aug 1 02:57:04 2013 (r253850) +++ projects/altix2/sys/dev/isp/isp_sbus.c Thu Aug 1 03:43:52 2013 (r253851) @@ -432,36 +432,14 @@ isp_sbus_wr_reg(ispsoftc_t *isp, int reg MEMORYBARRIER(isp, SYNC_REG, offset, 2, -1); } -struct imush { - ispsoftc_t *isp; - int error; -}; - -static void imc(void *, bus_dma_segment_t *, int, int); - -static void -imc(void *arg, bus_dma_segment_t *segs, int nseg, int error) -{ - struct imush *imushp = (struct imush *) arg; - if (error) { - imushp->error = error; - } else { - ispsoftc_t *isp =imushp->isp; - bus_addr_t addr = segs->ds_addr; - - isp->isp_rquest_dma = addr; - addr += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); - isp->isp_result_dma = addr; - } -} - static int isp_sbus_mbxdma(ispsoftc_t *isp) { - caddr_t base; uint32_t len; int i, error; - struct imush im; + uintptr_t vaddr; + bus_addr_t busaddr; + size_t size; /* * Already been here? If so, leave... @@ -492,17 +470,16 @@ isp_sbus_mbxdma(ispsoftc_t *isp) isp->isp_xflist[len].cmd = &isp->isp_xflist[len+1]; } isp->isp_xffree = isp->isp_xflist; - len = sizeof (bus_dmamap_t) * isp->isp_maxcmds; - if (isp_dma_tag_create(BUS_DMA_ROOTARG(ISP_SBD(isp)), 1, - BUS_SPACE_MAXADDR_24BIT+1, BUS_SPACE_MAXADDR_32BIT, - BUS_SPACE_MAXADDR_32BIT, NULL, NULL, BUS_SPACE_MAXSIZE_32BIT, - ISP_NSEG_MAX, BUS_SPACE_MAXADDR_24BIT, 0, &isp->isp_osinfo.dmat)) { + error = busdma_tag_create(ISP_SBD(isp), 1, BUS_SPACE_MAXADDR_24BIT+1, + BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXSIZE_32BIT, ISP_NSEG_MAX, + BUS_SPACE_MAXADDR_24BIT, 0, 0, &isp->isp_osinfo.dmat); + if (error) { isp_prt(isp, ISP_LOGERR, "could not create master dma tag"); free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); free(isp->isp_xflist, M_DEVBUF); ISP_LOCK(isp); - return(1); + return(error); } /* @@ -511,38 +488,38 @@ isp_sbus_mbxdma(ispsoftc_t *isp) len = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); len += ISP_QUEUE_SIZE(RESULT_QUEUE_LEN(isp)); - if (isp_dma_tag_derive(isp->isp_osinfo.dmat, QENTRY_LEN, - BUS_SPACE_MAXADDR_24BIT+1, BUS_SPACE_MAXADDR_32BIT, - BUS_SPACE_MAXADDR_32BIT, NULL, NULL, len, 1, - BUS_SPACE_MAXADDR_24BIT, 0, &isp->isp_osinfo.cdmat)) { + error = busdma_tag_derive(isp->isp_osinfo.dmat, QENTRY_LEN, + BUS_SPACE_MAXADDR_24BIT+1, BUS_SPACE_MAXADDR_32BIT, len, 1, + BUS_SPACE_MAXADDR_24BIT, 0, 0, &isp->isp_osinfo.cdmat); + if (error) { isp_prt(isp, ISP_LOGERR, "cannot create a dma tag for control spaces"); free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); free(isp->isp_xflist, M_DEVBUF); ISP_LOCK(isp); - return (1); + return (error); } - if (bus_dmamem_alloc(isp->isp_osinfo.cdmat, (void **)&base, BUS_DMA_NOWAIT | BUS_DMA_COHERENT, - &isp->isp_osinfo.cdmap) != 0) { + error = busdma_mem_alloc(isp->isp_osinfo.cdmat, BUSDMA_ALLOC_CONSISTENT, + &isp->isp_osinfo.cdmd); + if (error) { isp_prt(isp, ISP_LOGERR, "cannot allocate %d bytes of CCB memory", len); - bus_dma_tag_destroy(isp->isp_osinfo.cdmat); + busdma_tag_destroy(isp->isp_osinfo.cdmat); free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); free(isp->isp_xflist, M_DEVBUF); ISP_LOCK(isp); - return (1); + return (error); } for (i = 0; i < isp->isp_maxcmds; i++) { struct isp_pcmd *pcmd = &isp->isp_osinfo.pcmd_pool[i]; - error = bus_dmamap_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap); + error = busdma_md_create(isp->isp_osinfo.dmat, 0, &pcmd->dmap); if (error) { isp_prt(isp, ISP_LOGERR, "error %d creating per-cmd DMA maps", error); while (--i >= 0) { - bus_dmamap_destroy(isp->isp_osinfo.dmat, - isp->isp_osinfo.pcmd_pool[i].dmap); + busdma_md_destroy(isp->isp_osinfo.pcmd_pool[i].dmap); } goto bad; } @@ -555,24 +532,24 @@ isp_sbus_mbxdma(ispsoftc_t *isp) } isp->isp_osinfo.pcmd_free = &isp->isp_osinfo.pcmd_pool[0]; - im.isp = isp; - im.error = 0; - bus_dmamap_load(isp->isp_osinfo.cdmat, isp->isp_osinfo.cdmap, base, len, imc, &im, 0); - if (im.error) { - isp_prt(isp, ISP_LOGERR, - "error %d loading dma map for control areas", im.error); - goto bad; - } + busaddr = busdma_md_get_busaddr(isp->isp_osinfo.cdmd, 0); + vaddr = busdma_md_get_vaddr(isp->isp_osinfo.cdmd, 0); + + isp->isp_rquest = (void *)vaddr; + isp->isp_rquest_dma = busaddr; + size = ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); + busaddr += size; + vaddr += size; + + isp->isp_result = (void *)vaddr; + isp->isp_result_dma = busaddr; - isp->isp_rquest = base; - base += ISP_QUEUE_SIZE(RQUEST_QUEUE_LEN(isp)); - isp->isp_result = base; ISP_LOCK(isp); return (0); bad: - bus_dmamem_free(isp->isp_osinfo.cdmat, base, isp->isp_osinfo.cdmap); - bus_dma_tag_destroy(isp->isp_osinfo.cdmat); + busdma_mem_free(isp->isp_osinfo.cdmd); + busdma_tag_destroy(isp->isp_osinfo.cdmat); free(isp->isp_xflist, M_DEVBUF); free(isp->isp_osinfo.pcmd_pool, M_DEVBUF); isp->isp_rquest = NULL; @@ -590,16 +567,15 @@ typedef struct { #define MUSHERR_NOQENTRIES -2 -static void dma2(void *, bus_dma_segment_t *, int, int); - static void -dma2(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) +dma2(void *arg, busdma_md_t md, int error) { mush_t *mp; ispsoftc_t *isp; struct ccb_scsiio *csio; isp_ddir_t ddir; ispreq_t *rq; + u_int nseg; mp = (mush_t *) arg; if (error) { @@ -609,23 +585,23 @@ dma2(void *arg, bus_dma_segment_t *dm_se csio = mp->cmd_token; isp = mp->isp; rq = mp->rq; - if (nseg) { + if (md != NULL) { + nseg = busdma_md_get_nsegs(md); if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_IN) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREREAD); + busdma_sync(PISP_PCMD(csio)->dmap, BUSDMA_SYNC_PREREAD); ddir = ISP_FROM_DEVICE; } else if ((csio->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT) { - bus_dmamap_sync(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap, BUS_DMASYNC_PREWRITE); + busdma_sync(PISP_PCMD(csio)->dmap, BUSDMA_SYNC_PREWRITE); ddir = ISP_TO_DEVICE; } else { ddir = ISP_NOXFR; } } else { - dm_segs = NULL; - nseg = 0; + md = NULL; ddir = ISP_NOXFR; } - if (isp_send_cmd(isp, rq, dm_segs, nseg, XS_XFRLEN(csio), ddir, NULL) != CMD_QUEUED) { + if (isp_send_cmd(isp, rq, md, XS_XFRLEN(csio), ddir, NULL) != CMD_QUEUED) { mp->error = MUSHERR_NOQENTRIES; } } @@ -634,7 +610,6 @@ static int isp_sbus_dmasetup(ispsoftc_t *isp, struct ccb_scsiio *csio, void *ff) { mush_t mush, *mp; - void (*eptr)(void *, bus_dma_segment_t *, int, int); int error; mp = &mush; @@ -644,12 +619,10 @@ isp_sbus_dmasetup(ispsoftc_t *isp, struc mp->error = 0; mp->mapsize = 0; - eptr = dma2; - - error = bus_dmamap_load_ccb(isp->isp_osinfo.dmat, - PISP_PCMD(csio)->dmap, (union ccb *)csio, eptr, mp, 0); + error = busdma_md_load_ccb(PISP_PCMD(csio)->dmap, (union ccb *)csio, + dma2, mp, 0); if (error == EINPROGRESS) { - bus_dmamap_unload(isp->isp_osinfo.dmat, PISP_PCMD(csio)->dmap); + busdma_md_unload(PISP_PCMD(csio)->dmap); mp->error = EINVAL; isp_prt(isp, ISP_LOGERR, "deferred dma allocation not supported"); From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 19:30:11 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 7DECF837; Thu, 1 Aug 2013 19:30:11 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 516B22659; Thu, 1 Aug 2013 19:30:11 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71JUBSN012949; Thu, 1 Aug 2013 19:30:11 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71JUAkv012946; Thu, 1 Aug 2013 19:30:10 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <201308011930.r71JUAkv012946@svn.freebsd.org> From: Neel Natu Date: Thu, 1 Aug 2013 19:30:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253863 - projects/bhyve_npt_pmap/sys/amd64/vmm/intel X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 19:30:11 -0000 Author: neel Date: Thu Aug 1 19:30:10 2013 New Revision: 253863 URL: http://svnweb.freebsd.org/changeset/base/253863 Log: Keep track of the cached value of 'pm_eptgen' for each host cpu. This is necessary to make sure that we invalidate the nested page table TLB entries correctly when a vcpu moves between host cpus. Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.h projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx_support.S Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.h ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.h Thu Aug 1 18:06:58 2013 (r253862) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.h Thu Aug 1 19:30:10 2013 (r253863) @@ -71,7 +71,7 @@ struct vmxctx { int launched; /* vmcs launch state */ int launch_error; - long eptgen; /* cached pmap->pm_eptgen */ + long eptgen[MAXCPU]; /* cached pmap->pm_eptgen */ /* * The 'eptp' and the 'pmap' do not change during the lifetime of Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx_support.S ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx_support.S Thu Aug 1 18:06:58 2013 (r253862) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx_support.S Thu Aug 1 19:30:10 2013 (r253863) @@ -123,20 +123,21 @@ LK btrl %eax, PM_ACTIVE(%r11) /* - * If 'vmxctx->eptgen' is not identical to 'pmap->pm_eptgen' then - * we must invalidate all mappings associated with this eptp. + * If 'vmxctx->eptgen[curcpu]' is not identical to 'pmap->pm_eptgen' + * then we must invalidate all mappings associated with this eptp. * * %rdi = vmxctx - * %rax, %r11 = scratch registers + * %rax, %rbx, %r11 = scratch registers */ #define VMX_CHECK_EPTGEN \ + movl PCPU(CPUID), %ebx; \ movq VMXCTX_PMAP(%rdi), %r11; \ movq PM_EPTGEN(%r11), %rax; \ - cmpq %rax, VMXCTX_EPTGEN(%rdi); \ + cmpq %rax, VMXCTX_EPTGEN(%rdi, %rbx, 8); \ je 9f; \ \ - /* Refresh 'vmxctx->eptgen' */ \ - movq %rax, VMXCTX_EPTGEN(%rdi); \ + /* Refresh 'vmxctx->eptgen[curcpu]' */ \ + movq %rax, VMXCTX_EPTGEN(%rdi, %rbx, 8); \ \ /* Setup the invept descriptor at the top of tmpstk */ \ mov %rdi, %r11; \ From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 19:37:12 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 32F9FB7D; Thu, 1 Aug 2013 19:37:12 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 1FF1126B8; Thu, 1 Aug 2013 19:37:12 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71JbBnt015445; Thu, 1 Aug 2013 19:37:11 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71JbBID015443; Thu, 1 Aug 2013 19:37:11 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <201308011937.r71JbBID015443@svn.freebsd.org> From: Neel Natu Date: Thu, 1 Aug 2013 19:37:11 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253864 - projects/bhyve_npt_pmap/sys/amd64/vmm/intel X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 19:37:12 -0000 Author: neel Date: Thu Aug 1 19:37:11 2013 New Revision: 253864 URL: http://svnweb.freebsd.org/changeset/base/253864 Log: Deal with VM exits during event injection properly by re-injecting the event on the next VM entry. Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmcs.h projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.c Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmcs.h ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmcs.h Thu Aug 1 19:30:10 2013 (r253863) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmcs.h Thu Aug 1 19:37:11 2013 (r253864) @@ -68,6 +68,8 @@ uint64_t vmcs_read(uint32_t encoding); #define vmcs_guest_cr3() vmcs_read(VMCS_GUEST_CR3) #define vmcs_gpa() vmcs_read(VMCS_GUEST_PHYSICAL_ADDRESS) #define vmcs_gla() vmcs_read(VMCS_GUEST_LINEAR_ADDRESS) +#define vmcs_idt_vectoring_info() vmcs_read(VMCS_IDT_VECTORING_INFO) +#define vmcs_idt_vectoring_err() vmcs_read(VMCS_IDT_VECTORING_ERROR) #endif /* _KERNEL */ @@ -314,6 +316,12 @@ uint64_t vmcs_read(uint32_t encoding); #define VMCS_INTERRUPTION_INFO_NMI (2 << 8) /* + * VMCS IDT-Vectoring information fields + */ +#define VMCS_IDT_VEC_VALID (1 << 31) +#define VMCS_IDT_VEC_ERRCODE_VALID (1 << 11) + +/* * VMCS Guest interruptibility field */ #define VMCS_INTERRUPTIBILITY_STI_BLOCKING (1 << 0) Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.c ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.c Thu Aug 1 19:30:10 2013 (r253863) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/intel/vmx.c Thu Aug 1 19:37:11 2013 (r253864) @@ -167,9 +167,6 @@ static int cap_pause_exit; static int cap_unrestricted_guest; static int cap_monitor_trap; -/* statistics */ -static VMM_STAT_INTEL(VMEXIT_HLT_IGNORED, "number of times hlt was ignored"); - #ifdef KTR static const char * exit_reason_to_str(int reason) @@ -1239,18 +1236,47 @@ vmx_exit_process(struct vmx *vmx, int vc int error, handled; struct vmcs *vmcs; struct vmxctx *vmxctx; - uint32_t eax, ecx, edx; - uint64_t qual, gpa, intr_info; + uint32_t eax, ecx, edx, idtvec_info, idtvec_err, reason; + uint64_t qual, gpa; handled = 0; vmcs = &vmx->vmcs[vcpu]; vmxctx = &vmx->ctx[vcpu]; qual = vmexit->u.vmx.exit_qualification; + reason = vmexit->u.vmx.exit_reason; vmexit->exitcode = VM_EXITCODE_BOGUS; vmm_stat_incr(vmx->vm, vcpu, VMEXIT_COUNT, 1); - switch (vmexit->u.vmx.exit_reason) { + /* + * VM exits that could be triggered during event injection on the + * previous VM entry need to be handled specially by re-injecting + * the event. + * + * See "Information for VM Exits During Event Delivery" in Intel SDM + * for details. + */ + switch (reason) { + case EXIT_REASON_EPT_FAULT: + case EXIT_REASON_EPT_MISCONFIG: + case EXIT_REASON_APIC: + case EXIT_REASON_TASK_SWITCH: + case EXIT_REASON_EXCEPTION: + idtvec_info = vmcs_idt_vectoring_info(); + if (idtvec_info & VMCS_IDT_VEC_VALID) { + idtvec_info &= ~(1 << 12); /* clear undefined bit */ + vmwrite(VMCS_ENTRY_INTR_INFO, idtvec_info); + if (idtvec_info & VMCS_IDT_VEC_ERRCODE_VALID) { + idtvec_err = vmcs_idt_vectoring_err(); + vmwrite(VMCS_ENTRY_EXCEPTION_ERROR, idtvec_err); + } + vmwrite(VMCS_ENTRY_INST_LENGTH, vmexit->inst_length); + } + default: + break; + } + + switch (reason) { case EXIT_REASON_CR_ACCESS: vmm_stat_incr(vmx->vm, vcpu, VMEXIT_CR_ACCESS, 1); handled = vmx_emulate_cr_access(vmx, vcpu, qual); @@ -1281,19 +1307,7 @@ vmx_exit_process(struct vmx *vmx, int vc break; case EXIT_REASON_HLT: vmm_stat_incr(vmx->vm, vcpu, VMEXIT_HLT, 1); - /* - * If there is an event waiting to be injected then there is - * no need to 'hlt'. - */ - error = vmread(VMCS_ENTRY_INTR_INFO, &intr_info); - if (error) - panic("vmx_exit_process: vmread(intrinfo) %d", error); - - if (intr_info & VMCS_INTERRUPTION_INFO_VALID) { - handled = 1; - vmm_stat_incr(vmx->vm, vcpu, VMEXIT_HLT_IGNORED, 1); - } else - vmexit->exitcode = VM_EXITCODE_HLT; + vmexit->exitcode = VM_EXITCODE_HLT; break; case EXIT_REASON_MTF: vmm_stat_incr(vmx->vm, vcpu, VMEXIT_MTRAP, 1); From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 22:10:07 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6269AA7D; Thu, 1 Aug 2013 22:10:07 +0000 (UTC) (envelope-from grehan@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 4B4462DBC; Thu, 1 Aug 2013 22:10:07 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71MA7v4061465; Thu, 1 Aug 2013 22:10:07 GMT (envelope-from grehan@svn.freebsd.org) Received: (from grehan@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71M9xq2061342; Thu, 1 Aug 2013 22:09:59 GMT (envelope-from grehan@svn.freebsd.org) Message-Id: <201308012209.r71M9xq2061342@svn.freebsd.org> From: Peter Grehan Date: Thu, 1 Aug 2013 22:09:59 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253869 - in projects/hyperv: . bin/sh cddl/contrib/opensolaris/cmd/dtrace/test/cmd/scripts cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs cddl/contrib/opensolaris/cmd/dtrace/... X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 22:10:07 -0000 Author: grehan Date: Thu Aug 1 22:09:57 2013 New Revision: 253869 URL: http://svnweb.freebsd.org/changeset/base/253869 Log: IFC @ r253862 - change the SI_SUB_RUN_SCHEDULER sysinits in hv_utilc and hv_netvsc_drv_freebsd.c to SI_SUB_KTHREAD_IDLE, since the former is no longer in FreeBSD. The use of these SYSINITs can probably be removed. Added: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.basics.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.basics.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/err.D_PRINT_AGG.bad.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/err.D_PRINT_AGG.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/tst.dyn.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/tst.dyn.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/tst.xlate.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/tst.xlate.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/tst.xlate.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/tst.xlate.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.signs.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.signs.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.signs.d.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.signs.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/trace/err.D_TRACE_AGG.bad.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/trace/err.D_TRACE_AGG.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/trace/tst.dyn.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/trace/tst.dyn.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability1.ksh - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability1.ksh projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability1.ksh.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability1.ksh.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability2.ksh - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability2.ksh projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability2.ksh.out - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/tst.TestTransStability2.ksh.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/types/tst.const.d - copied unchanged from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/types/tst.const.d projects/hyperv/contrib/apr-util/crypto/apr_passwd.c - copied unchanged from r253862, head/contrib/apr-util/crypto/apr_passwd.c projects/hyperv/contrib/apr-util/crypto/crypt_blowfish.c - copied unchanged from r253862, head/contrib/apr-util/crypto/crypt_blowfish.c projects/hyperv/contrib/apr-util/crypto/crypt_blowfish.h - copied unchanged from r253862, head/contrib/apr-util/crypto/crypt_blowfish.h projects/hyperv/etc/libmap.conf - copied unchanged from r253862, head/etc/libmap.conf projects/hyperv/lib/libusb/libusb-0.1.pc - copied unchanged from r253862, head/lib/libusb/libusb-0.1.pc projects/hyperv/lib/libusb/libusb-1.0.pc - copied unchanged from r253862, head/lib/libusb/libusb-1.0.pc projects/hyperv/lib/libusb/libusb-2.0.pc - copied unchanged from r253862, head/lib/libusb/libusb-2.0.pc projects/hyperv/share/man/man4/rsu.4 - copied unchanged from r253862, head/share/man/man4/rsu.4 projects/hyperv/share/man/man4/rsufw.4 - copied unchanged from r253862, head/share/man/man4/rsufw.4 projects/hyperv/sys/arm/freescale/imx/files.imx51 - copied unchanged from r253862, head/sys/arm/freescale/imx/files.imx51 projects/hyperv/sys/arm/freescale/imx/std.imx51 - copied unchanged from r253862, head/sys/arm/freescale/imx/std.imx51 projects/hyperv/sys/contrib/dev/rsu/ - copied from r253862, head/sys/contrib/dev/rsu/ projects/hyperv/sys/dev/cxgbe/t4_tracer.c - copied unchanged from r253862, head/sys/dev/cxgbe/t4_tracer.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_vlans.c - copied unchanged from r253862, head/sys/dev/etherswitch/arswitch/arswitch_vlans.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_vlans.h - copied unchanged from r253862, head/sys/dev/etherswitch/arswitch/arswitch_vlans.h projects/hyperv/sys/dev/nvme/nvme_util.c - copied unchanged from r253862, head/sys/dev/nvme/nvme_util.c projects/hyperv/sys/dev/usb/gadget/ - copied from r253862, head/sys/dev/usb/gadget/ projects/hyperv/sys/dev/usb/wlan/if_rsu.c - copied unchanged from r253862, head/sys/dev/usb/wlan/if_rsu.c projects/hyperv/sys/dev/usb/wlan/if_rsureg.h - copied unchanged from r253862, head/sys/dev/usb/wlan/if_rsureg.h projects/hyperv/sys/dev/wi/if_wi_macio.c - copied unchanged from r253862, head/sys/dev/wi/if_wi_macio.c projects/hyperv/sys/libkern/flsll.c - copied unchanged from r253862, head/sys/libkern/flsll.c projects/hyperv/sys/mips/atheros/ar934x_chip.c - copied unchanged from r253862, head/sys/mips/atheros/ar934x_chip.c projects/hyperv/sys/mips/atheros/ar934x_chip.h - copied unchanged from r253862, head/sys/mips/atheros/ar934x_chip.h projects/hyperv/sys/mips/conf/AR934X_BASE - copied unchanged from r253862, head/sys/mips/conf/AR934X_BASE projects/hyperv/sys/mips/conf/AR934X_BASE.hints - copied unchanged from r253862, head/sys/mips/conf/AR934X_BASE.hints projects/hyperv/sys/mips/conf/DB120 - copied unchanged from r253862, head/sys/mips/conf/DB120 projects/hyperv/sys/mips/conf/DB120.hints - copied unchanged from r253862, head/sys/mips/conf/DB120.hints projects/hyperv/sys/modules/usb/g_audio/ - copied from r253862, head/sys/modules/usb/g_audio/ projects/hyperv/sys/modules/usb/g_keyboard/ - copied from r253862, head/sys/modules/usb/g_keyboard/ projects/hyperv/sys/modules/usb/g_modem/ - copied from r253862, head/sys/modules/usb/g_modem/ projects/hyperv/sys/modules/usb/g_mouse/ - copied from r253862, head/sys/modules/usb/g_mouse/ projects/hyperv/sys/modules/usb/rsu/ - copied from r253862, head/sys/modules/usb/rsu/ projects/hyperv/sys/modules/usb/rsufw/ - copied from r253862, head/sys/modules/usb/rsufw/ projects/hyperv/sys/modules/usb/runfw/ - copied from r253862, head/sys/modules/usb/runfw/ projects/hyperv/tools/build/options/WITH_GNU_PATCH - copied unchanged from r253862, head/tools/build/options/WITH_GNU_PATCH Deleted: projects/hyperv/bin/sh/init.h projects/hyperv/bin/sh/mkinit.c projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.complex.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/err.D_PRINT_DYN.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/translators/man.TestTransStability.d projects/hyperv/contrib/apr-util/aprutil.dsp projects/hyperv/contrib/apr-util/crypto/apr_crypto_nss.dsp projects/hyperv/contrib/apr-util/crypto/apr_crypto_openssl.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_freetds.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_mysql.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_odbc.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_oracle.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_pgsql.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_sqlite2.dsp projects/hyperv/contrib/apr-util/dbd/apr_dbd_sqlite3.dsp projects/hyperv/contrib/apr-util/dbm/apr_dbm_db.dsp projects/hyperv/contrib/apr-util/dbm/apr_dbm_gdbm.dsp projects/hyperv/contrib/apr-util/ldap/apr_ldap.dsp projects/hyperv/contrib/apr-util/libaprutil.dsp projects/hyperv/contrib/apr-util/test/testutildll.dsp projects/hyperv/contrib/apr-util/test/testutillib.dsp projects/hyperv/contrib/openbsm/m4/lt~obsolete.m4 projects/hyperv/sys/arm/freescale/imx/imx.files projects/hyperv/sys/arm/freescale/imx/std.imx projects/hyperv/sys/modules/runfw/ projects/hyperv/tools/build/options/WITH_BSD_PATCH Modified: projects/hyperv/MAINTAINERS (contents, props changed) projects/hyperv/Makefile projects/hyperv/Makefile.inc1 projects/hyperv/UPDATING projects/hyperv/bin/sh/Makefile projects/hyperv/bin/sh/TOUR projects/hyperv/bin/sh/eval.c projects/hyperv/bin/sh/eval.h projects/hyperv/bin/sh/exec.c projects/hyperv/bin/sh/input.c projects/hyperv/bin/sh/input.h projects/hyperv/bin/sh/jobs.c projects/hyperv/bin/sh/main.c projects/hyperv/bin/sh/output.c projects/hyperv/bin/sh/parser.c projects/hyperv/bin/sh/parser.h projects/hyperv/bin/sh/redir.c projects/hyperv/bin/sh/redir.h projects/hyperv/bin/sh/shell.h projects/hyperv/bin/sh/trap.c projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/cmd/scripts/dtest.pl projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionentry.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionreturnvalue.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.ioctlargs.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offset.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offsetzero.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.return0.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.tailcall.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/funcs/tst.strjoin.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.BadAlign.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress2.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress3.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress4.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/err.D_PRINT_VOID.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/err.D_PROTO_LEN.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/printf/tst.ints.d.out projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/safety/tst.copyin.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/speculation/err.BufSizeVariations2.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/trace/err.D_PROTO_LEN.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/trace/err.D_TRACE_VOID.bad.d projects/hyperv/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_aggregate.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cc.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_cg.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_consume.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_decl.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_error.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_errtags.h projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_impl.h projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_parser.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_printf.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/common/dt_subr.c projects/hyperv/cddl/contrib/opensolaris/lib/libdtrace/i386/dt_isadep.c projects/hyperv/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c projects/hyperv/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_sendrecv.c projects/hyperv/cddl/contrib/opensolaris/tools/ctf/cvt/ctf.c projects/hyperv/cddl/contrib/opensolaris/tools/ctf/cvt/ctftools.h projects/hyperv/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c projects/hyperv/cddl/contrib/opensolaris/tools/ctf/cvt/st_parse.c projects/hyperv/contrib/apr-util/CHANGES projects/hyperv/contrib/apr-util/Makefile.win projects/hyperv/contrib/apr-util/NWGNUmakefile projects/hyperv/contrib/apr-util/apr-util.spec projects/hyperv/contrib/apr-util/buckets/apr_brigade.c projects/hyperv/contrib/apr-util/buckets/apr_buckets_alloc.c projects/hyperv/contrib/apr-util/build-outputs.mk projects/hyperv/contrib/apr-util/build.conf projects/hyperv/contrib/apr-util/configure projects/hyperv/contrib/apr-util/configure.in projects/hyperv/contrib/apr-util/crypto/apr_crypto.c projects/hyperv/contrib/apr-util/crypto/apr_crypto_nss.c projects/hyperv/contrib/apr-util/crypto/apr_crypto_openssl.c projects/hyperv/contrib/apr-util/crypto/apr_md5.c projects/hyperv/contrib/apr-util/dbd/NWGNUdbdmysql projects/hyperv/contrib/apr-util/dbd/apr_dbd_freetds.c projects/hyperv/contrib/apr-util/dbd/apr_dbd_mysql.c projects/hyperv/contrib/apr-util/dbd/apr_dbd_pgsql.c projects/hyperv/contrib/apr-util/dbd/apr_dbd_sqlite2.c projects/hyperv/contrib/apr-util/hooks/apr_hooks.c projects/hyperv/contrib/apr-util/include/apr_base64.h projects/hyperv/contrib/apr-util/include/apr_buckets.h projects/hyperv/contrib/apr-util/include/apr_md5.h projects/hyperv/contrib/apr-util/include/apr_queue.h projects/hyperv/contrib/apr-util/include/apu.h.in projects/hyperv/contrib/apr-util/include/apu_version.h projects/hyperv/contrib/apr-util/include/private/apr_crypto_internal.h projects/hyperv/contrib/apr-util/memcache/apr_memcache.c projects/hyperv/contrib/apr-util/misc/apr_thread_pool.c projects/hyperv/contrib/apr-util/test/Makefile.in projects/hyperv/contrib/apr-util/test/Makefile.win projects/hyperv/contrib/apr-util/test/NWGNUmakefile projects/hyperv/contrib/apr-util/test/testbuckets.c projects/hyperv/contrib/apr-util/test/testmd5.c projects/hyperv/contrib/apr-util/test/testmemcache.c projects/hyperv/contrib/apr-util/test/testpass.c projects/hyperv/contrib/apr-util/test/testuri.c projects/hyperv/contrib/apr-util/test/testutil.c projects/hyperv/contrib/apr-util/test/testutil.h projects/hyperv/contrib/apr-util/uri/apr_uri.c projects/hyperv/contrib/apr/CHANGES projects/hyperv/contrib/apr/Makefile.win projects/hyperv/contrib/apr/apr.spec projects/hyperv/contrib/apr/atomic/unix/ia32.c projects/hyperv/contrib/apr/atomic/unix/ppc.c projects/hyperv/contrib/apr/atomic/unix/s390.c projects/hyperv/contrib/apr/configure projects/hyperv/contrib/apr/docs/pool-design.html projects/hyperv/contrib/apr/file_io/unix/seek.c projects/hyperv/contrib/apr/include/apr.hw projects/hyperv/contrib/apr/include/apr_allocator.h projects/hyperv/contrib/apr/include/apr_general.h projects/hyperv/contrib/apr/include/apr_network_io.h projects/hyperv/contrib/apr/include/apr_pools.h projects/hyperv/contrib/apr/include/apr_strings.h projects/hyperv/contrib/apr/include/apr_thread_proc.h projects/hyperv/contrib/apr/include/apr_version.h projects/hyperv/contrib/apr/libapr.rc projects/hyperv/contrib/apr/network_io/unix/multicast.c projects/hyperv/contrib/apr/network_io/unix/sendrecv.c projects/hyperv/contrib/apr/network_io/unix/sockaddr.c projects/hyperv/contrib/apr/network_io/unix/sockopt.c projects/hyperv/contrib/apr/random/unix/sha2.c projects/hyperv/contrib/apr/random/unix/sha2.h projects/hyperv/contrib/apr/random/unix/sha2_glue.c projects/hyperv/contrib/apr/tables/apr_tables.c projects/hyperv/contrib/apr/threadproc/unix/thread.c projects/hyperv/contrib/bind9/lib/dns/rdata/generic/keydata_65533.c projects/hyperv/contrib/binutils/ld/ldmain.c projects/hyperv/contrib/libstdc++/include/c_std/std_cmath.h projects/hyperv/contrib/llvm/tools/clang/lib/Headers/cpuid.h projects/hyperv/contrib/subversion/CHANGES projects/hyperv/contrib/subversion/Makefile.in projects/hyperv/contrib/subversion/build-outputs.mk projects/hyperv/contrib/subversion/configure projects/hyperv/contrib/subversion/configure.ac projects/hyperv/contrib/subversion/get-deps.sh projects/hyperv/contrib/subversion/subversion/include/private/svn_client_private.h projects/hyperv/contrib/subversion/subversion/include/private/svn_io_private.h projects/hyperv/contrib/subversion/subversion/include/private/svn_ra_private.h projects/hyperv/contrib/subversion/subversion/include/svn_version.h projects/hyperv/contrib/subversion/subversion/libsvn_client/client.h projects/hyperv/contrib/subversion/subversion/libsvn_client/commit.c projects/hyperv/contrib/subversion/subversion/libsvn_client/copy.c projects/hyperv/contrib/subversion/subversion/libsvn_client/diff.c projects/hyperv/contrib/subversion/subversion/libsvn_client/diff_local.c projects/hyperv/contrib/subversion/subversion/libsvn_client/log.c projects/hyperv/contrib/subversion/subversion/libsvn_client/merge.c projects/hyperv/contrib/subversion/subversion/libsvn_client/mergeinfo.c projects/hyperv/contrib/subversion/subversion/libsvn_client/ra.c projects/hyperv/contrib/subversion/subversion/libsvn_client/switch.c projects/hyperv/contrib/subversion/subversion/libsvn_delta/compat.c projects/hyperv/contrib/subversion/subversion/libsvn_fs_base/bdb/env.c projects/hyperv/contrib/subversion/subversion/libsvn_fs_base/tree.c projects/hyperv/contrib/subversion/subversion/libsvn_fs_fs/fs_fs.c projects/hyperv/contrib/subversion/subversion/libsvn_fs_fs/rep-cache-db.h projects/hyperv/contrib/subversion/subversion/libsvn_fs_fs/tree.c projects/hyperv/contrib/subversion/subversion/libsvn_ra/ra_loader.c projects/hyperv/contrib/subversion/subversion/libsvn_ra/util.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/blame.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/commit.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/getdate.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/getlocations.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/getlocationsegments.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/getlocks.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/inherited_props.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/log.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/mergeinfo.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/options.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/property.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/ra_serf.h projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/replay.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/serf.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/update.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/util.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_serf/xml.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_svn/client.c projects/hyperv/contrib/subversion/subversion/libsvn_ra_svn/protocol projects/hyperv/contrib/subversion/subversion/libsvn_repos/fs-wrap.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/config_file.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/gpg_agent.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/internal_statements.h projects/hyperv/contrib/subversion/subversion/libsvn_subr/io.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/named_atomic.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/sqlite.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/stream.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/subst.c projects/hyperv/contrib/subversion/subversion/libsvn_subr/utf.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/adm_ops.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/crop.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/externals.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/update_editor.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/upgrade.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc-checks.h projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc-metadata.h projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc-queries.h projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc-queries.sql projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc_db.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc_db.h projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc_db_update_move.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/wc_db_wcroot.c projects/hyperv/contrib/subversion/subversion/libsvn_wc/workqueue.c projects/hyperv/contrib/subversion/subversion/svn/cl.h projects/hyperv/contrib/subversion/subversion/svn/conflict-callbacks.c projects/hyperv/contrib/subversion/subversion/svn/file-merge.c projects/hyperv/contrib/subversion/subversion/svn/merge-cmd.c projects/hyperv/contrib/subversion/subversion/svn/mergeinfo-cmd.c projects/hyperv/contrib/subversion/subversion/svn/svn.c projects/hyperv/contrib/subversion/subversion/svn/util.c projects/hyperv/contrib/subversion/subversion/svnadmin/svnadmin.c projects/hyperv/contrib/subversion/subversion/svnlook/svnlook.c projects/hyperv/contrib/subversion/subversion/svnserve/serve.c projects/hyperv/contrib/subversion/win-tests.py projects/hyperv/contrib/tcpdump/tcpdump.c projects/hyperv/etc/Makefile projects/hyperv/etc/devd/usb.conf projects/hyperv/etc/mtree/BSD.usr.dist projects/hyperv/etc/network.subr projects/hyperv/gnu/usr.bin/patch/Makefile projects/hyperv/lib/libc/arm/gen/sigsetjmp.S projects/hyperv/lib/libc/gen/sysctl.3 projects/hyperv/lib/libc/gen/wordexp.c projects/hyperv/lib/libc/sys/kqueue.2 projects/hyperv/lib/libc/sys/ptrace.2 projects/hyperv/lib/libfetch/common.c projects/hyperv/lib/libfetch/common.h projects/hyperv/lib/libfetch/fetch.3 projects/hyperv/lib/libfetch/http.c projects/hyperv/lib/libgeom/geom_xml2tree.c projects/hyperv/lib/libgeom/libgeom.h projects/hyperv/lib/libusb/Makefile projects/hyperv/lib/msun/src/math.h projects/hyperv/release/Makefile projects/hyperv/release/sparc64/mkisoimages.sh projects/hyperv/sbin/etherswitchcfg/etherswitchcfg.c projects/hyperv/sbin/fsck_ffs/fsck.h projects/hyperv/sbin/fsck_ffs/fsck_ffs.8 projects/hyperv/sbin/fsck_ffs/fsutil.c projects/hyperv/sbin/fsck_ffs/main.c projects/hyperv/sbin/ipfw/ipfw.8 projects/hyperv/sbin/mdconfig/mdconfig.c projects/hyperv/sbin/nvmecontrol/Makefile projects/hyperv/sbin/nvmecontrol/devlist.c projects/hyperv/sbin/nvmecontrol/identify.c projects/hyperv/sbin/route/route.c projects/hyperv/sbin/swapon/swapon.c projects/hyperv/share/man/man4/Makefile projects/hyperv/share/man/man4/ath_hal.4 projects/hyperv/share/man/man4/bridge.4 projects/hyperv/share/man/man9/Makefile projects/hyperv/share/man/man9/microuptime.9 projects/hyperv/share/mk/bsd.own.mk projects/hyperv/sys/amd64/amd64/identcpu.c projects/hyperv/sys/amd64/amd64/initcpu.c projects/hyperv/sys/amd64/amd64/pmap.c projects/hyperv/sys/amd64/amd64/sys_machdep.c projects/hyperv/sys/amd64/include/md_var.h projects/hyperv/sys/amd64/vmm/intel/vmx.c projects/hyperv/sys/amd64/vmm/vmm.c projects/hyperv/sys/amd64/vmm/vmm_instruction_emul.c projects/hyperv/sys/arm/arm/busdma_machdep-v6.c projects/hyperv/sys/arm/arm/cpufunc.c projects/hyperv/sys/arm/arm/identcpu.c projects/hyperv/sys/arm/arm/pl310.c projects/hyperv/sys/arm/conf/BEAGLEBONE projects/hyperv/sys/arm/conf/EFIKA_MX projects/hyperv/sys/arm/conf/RPI-B projects/hyperv/sys/arm/include/armreg.h projects/hyperv/sys/arm/include/atomic.h projects/hyperv/sys/arm/include/kdb.h projects/hyperv/sys/arm/include/smp.h projects/hyperv/sys/arm/ti/am335x/am335x_prcm.c projects/hyperv/sys/arm/ti/ti_prcm.h projects/hyperv/sys/boot/arm/uboot/Makefile projects/hyperv/sys/boot/fdt/dts/am335x.dtsi projects/hyperv/sys/boot/ficl/loader.c projects/hyperv/sys/boot/forth/loader.rc projects/hyperv/sys/cam/ata/ata_da.c projects/hyperv/sys/cam/cam_ccb.h projects/hyperv/sys/cam/cam_xpt.c projects/hyperv/sys/cam/scsi/scsi_da.c projects/hyperv/sys/cddl/contrib/opensolaris/common/zfs/zfs_prop.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dbuf.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_objset.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_tx.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_destroy.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/ddt.h projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_impl.h projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_objset.h projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dmu_send.h projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_dataset.h projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_destroy.h projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c projects/hyperv/sys/cddl/contrib/opensolaris/uts/common/sys/fs/zfs.h projects/hyperv/sys/cddl/dev/dtrace/amd64/dis_tables.c projects/hyperv/sys/cddl/dev/dtrace/amd64/dis_tables.h projects/hyperv/sys/cddl/dev/dtrace/i386/dis_tables.c projects/hyperv/sys/cddl/dev/dtrace/i386/dis_tables.h projects/hyperv/sys/compat/freebsd32/freebsd32.h projects/hyperv/sys/compat/freebsd32/freebsd32_misc.c projects/hyperv/sys/compat/freebsd32/freebsd32_proto.h projects/hyperv/sys/compat/freebsd32/freebsd32_signal.h projects/hyperv/sys/compat/freebsd32/freebsd32_syscall.h projects/hyperv/sys/compat/freebsd32/freebsd32_syscalls.c projects/hyperv/sys/compat/freebsd32/freebsd32_sysent.c projects/hyperv/sys/compat/freebsd32/freebsd32_systrace_args.c projects/hyperv/sys/compat/freebsd32/syscalls.master projects/hyperv/sys/conf/NOTES projects/hyperv/sys/conf/WITHOUT_SOURCELESS_UCODE projects/hyperv/sys/conf/files projects/hyperv/sys/conf/files.amd64 projects/hyperv/sys/conf/files.i386 projects/hyperv/sys/conf/newvers.sh projects/hyperv/sys/contrib/dev/acpica/changes.txt (contents, props changed) projects/hyperv/sys/contrib/dev/acpica/common/dmextern.c projects/hyperv/sys/contrib/dev/acpica/common/getopt.c projects/hyperv/sys/contrib/dev/acpica/compiler/asloffset.c projects/hyperv/sys/contrib/dev/acpica/compiler/asloperands.c projects/hyperv/sys/contrib/dev/acpica/compiler/asloptions.c projects/hyperv/sys/contrib/dev/acpica/compiler/dttemplate.c projects/hyperv/sys/contrib/dev/acpica/components/executer/exoparg1.c projects/hyperv/sys/contrib/dev/acpica/components/hardware/hwtimer.c projects/hyperv/sys/contrib/dev/acpica/components/namespace/nspredef.c projects/hyperv/sys/contrib/dev/acpica/components/namespace/nswalk.c projects/hyperv/sys/contrib/dev/acpica/components/namespace/nsxfeval.c projects/hyperv/sys/contrib/dev/acpica/components/tables/tbfadt.c projects/hyperv/sys/contrib/dev/acpica/components/tables/tbxfroot.c projects/hyperv/sys/contrib/dev/acpica/components/utilities/utglobal.c projects/hyperv/sys/contrib/dev/acpica/components/utilities/utosi.c projects/hyperv/sys/contrib/dev/acpica/components/utilities/utxface.c projects/hyperv/sys/contrib/dev/acpica/include/acglobal.h projects/hyperv/sys/contrib/dev/acpica/include/aclocal.h projects/hyperv/sys/contrib/dev/acpica/include/acnamesp.h projects/hyperv/sys/contrib/dev/acpica/include/acpixf.h projects/hyperv/sys/contrib/dev/acpica/include/actables.h projects/hyperv/sys/contrib/dev/acpica/include/actypes.h projects/hyperv/sys/contrib/dev/acpica/include/acutils.h projects/hyperv/sys/dev/ahci/ahci.c projects/hyperv/sys/dev/ahci/ahci.h projects/hyperv/sys/dev/aic7xxx/aic7xxx_pci.c projects/hyperv/sys/dev/ata/ata-pci.h projects/hyperv/sys/dev/ata/chipsets/ata-intel.c projects/hyperv/sys/dev/ata/chipsets/ata-promise.c projects/hyperv/sys/dev/bge/if_bge.c projects/hyperv/sys/dev/bge/if_bgereg.h projects/hyperv/sys/dev/ciss/ciss.c projects/hyperv/sys/dev/cxgbe/adapter.h projects/hyperv/sys/dev/cxgbe/common/t4_hw.c projects/hyperv/sys/dev/cxgbe/common/t4_hw.h projects/hyperv/sys/dev/cxgbe/t4_ioctl.h projects/hyperv/sys/dev/cxgbe/t4_main.c projects/hyperv/sys/dev/cxgbe/t4_sge.c projects/hyperv/sys/dev/drm2/i915/i915_gem.c projects/hyperv/sys/dev/drm2/i915/intel_ringbuffer.c projects/hyperv/sys/dev/drm2/ttm/ttm_bo_vm.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_7240.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_8216.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_8226.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_8316.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_phy.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_reg.c projects/hyperv/sys/dev/etherswitch/arswitch/arswitch_reg.h projects/hyperv/sys/dev/etherswitch/arswitch/arswitchreg.h projects/hyperv/sys/dev/etherswitch/arswitch/arswitchvar.h projects/hyperv/sys/dev/etherswitch/etherswitch.h projects/hyperv/sys/dev/etherswitch/ip17x/ip175c.c projects/hyperv/sys/dev/etherswitch/ip17x/ip175d.c projects/hyperv/sys/dev/etherswitch/ip17x/ip17x_vlans.c projects/hyperv/sys/dev/etherswitch/rtl8366/rtl8366rb.c projects/hyperv/sys/dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c projects/hyperv/sys/dev/hyperv/utilities/hv_util.c projects/hyperv/sys/dev/ichsmb/ichsmb_pci.c projects/hyperv/sys/dev/ichwd/ichwd.c projects/hyperv/sys/dev/ichwd/ichwd.h projects/hyperv/sys/dev/ipmi/ipmi_isa.c projects/hyperv/sys/dev/ipmi/ipmivars.h projects/hyperv/sys/dev/iwn/if_iwn.c projects/hyperv/sys/dev/mii/brgphy.c projects/hyperv/sys/dev/mii/miidevs projects/hyperv/sys/dev/mps/mps.c projects/hyperv/sys/dev/mps/mps_config.c projects/hyperv/sys/dev/mps/mps_mapping.c projects/hyperv/sys/dev/mps/mps_sas.c projects/hyperv/sys/dev/mps/mps_sas.h projects/hyperv/sys/dev/mps/mps_sas_lsi.c projects/hyperv/sys/dev/mps/mps_user.c projects/hyperv/sys/dev/mps/mpsvar.h projects/hyperv/sys/dev/nvd/nvd.c projects/hyperv/sys/dev/nvme/nvme.c projects/hyperv/sys/dev/nvme/nvme.h projects/hyperv/sys/dev/nvme/nvme_ns.c projects/hyperv/sys/dev/nvme/nvme_ns_cmd.c projects/hyperv/sys/dev/sound/pci/ds1.c projects/hyperv/sys/dev/uart/uart_bus_pci.c projects/hyperv/sys/dev/usb/controller/xhci.c projects/hyperv/sys/dev/usb/net/if_ipheth.c projects/hyperv/sys/dev/usb/usb_pf.c projects/hyperv/sys/dev/usb/wlan/if_rumvar.h projects/hyperv/sys/dev/usb/wlan/if_runvar.h projects/hyperv/sys/dev/usb/wlan/if_uathvar.h projects/hyperv/sys/dev/usb/wlan/if_upgtvar.h projects/hyperv/sys/dev/usb/wlan/if_uralvar.h projects/hyperv/sys/dev/usb/wlan/if_urtwnreg.h projects/hyperv/sys/dev/usb/wlan/if_urtwvar.h projects/hyperv/sys/dev/usb/wlan/if_zydreg.h projects/hyperv/sys/dev/watchdog/watchdog.c projects/hyperv/sys/dev/wi/if_wi.c projects/hyperv/sys/fs/cd9660/iso.h projects/hyperv/sys/fs/devfs/devfs_rule.c projects/hyperv/sys/fs/ext2fs/ext2_hash.c projects/hyperv/sys/fs/ext2fs/ext2_lookup.c projects/hyperv/sys/fs/fuse/fuse_internal.h projects/hyperv/sys/fs/fuse/fuse_kernel.h projects/hyperv/sys/fs/nfs/nfs_commonsubs.c projects/hyperv/sys/fs/tmpfs/tmpfs_vfsops.c projects/hyperv/sys/gdb/gdb_cons.c projects/hyperv/sys/geom/raid/g_raid.c projects/hyperv/sys/geom/raid/g_raid_ctl.c projects/hyperv/sys/i386/i386/identcpu.c projects/hyperv/sys/i386/i386/initcpu.c projects/hyperv/sys/i386/i386/sys_machdep.c projects/hyperv/sys/i386/include/md_var.h projects/hyperv/sys/ia64/ia64/mca.c projects/hyperv/sys/ia64/ia64/pmap.c projects/hyperv/sys/ia64/pci/pci_cfgreg.c projects/hyperv/sys/kern/init_main.c projects/hyperv/sys/kern/kern_exit.c projects/hyperv/sys/kern/kern_malloc.c projects/hyperv/sys/kern/kern_ntptime.c projects/hyperv/sys/kern/kern_sig.c projects/hyperv/sys/kern/kern_time.c projects/hyperv/sys/kern/kern_uuid.c projects/hyperv/sys/kern/sched_4bsd.c projects/hyperv/sys/kern/subr_counter.c projects/hyperv/sys/kern/subr_vmem.c projects/hyperv/sys/kern/sysv_shm.c projects/hyperv/sys/kern/uipc_mqueue.c projects/hyperv/sys/kern/uipc_shm.c projects/hyperv/sys/kern/uipc_syscalls.c projects/hyperv/sys/kern/vfs_aio.c projects/hyperv/sys/kern/vfs_mountroot.c projects/hyperv/sys/kern/vfs_subr.c projects/hyperv/sys/mips/atheros/ar71xx_chip.c projects/hyperv/sys/mips/atheros/ar71xx_cpudef.h projects/hyperv/sys/mips/atheros/ar71xx_gpio.c projects/hyperv/sys/mips/atheros/ar71xx_setup.c projects/hyperv/sys/mips/atheros/ar724x_chip.c projects/hyperv/sys/mips/atheros/ar91xx_chip.c projects/hyperv/sys/mips/atheros/ar933x_chip.c projects/hyperv/sys/mips/atheros/files.ar71xx projects/hyperv/sys/mips/atheros/uart_bus_ar71xx.c projects/hyperv/sys/mips/atheros/uart_bus_ar933x.c projects/hyperv/sys/mips/atheros/uart_cpu_ar71xx.c projects/hyperv/sys/mips/atheros/uart_cpu_ar933x.c projects/hyperv/sys/mips/cavium/std.octeon1 projects/hyperv/sys/mips/conf/DIR-825 projects/hyperv/sys/mips/conf/DIR-825.hints projects/hyperv/sys/modules/Makefile projects/hyperv/sys/modules/cxgbe/if_cxgbe/Makefile projects/hyperv/sys/modules/dtrace/dtrace/Makefile projects/hyperv/sys/modules/nvme/Makefile projects/hyperv/sys/modules/usb/Makefile projects/hyperv/sys/modules/wi/Makefile projects/hyperv/sys/net/ieee8023ad_lacp.c projects/hyperv/sys/net/ieee8023ad_lacp.h projects/hyperv/sys/net/if_bridge.c projects/hyperv/sys/net/if_ethersubr.c projects/hyperv/sys/net/if_lagg.c projects/hyperv/sys/net/if_lagg.h projects/hyperv/sys/net/rtsock.c projects/hyperv/sys/net80211/ieee80211.h projects/hyperv/sys/net80211/ieee80211_mesh.c projects/hyperv/sys/net80211/ieee80211_output.c projects/hyperv/sys/net80211/ieee80211_proto.h projects/hyperv/sys/netgraph/ng_pppoe.c projects/hyperv/sys/netgraph/ng_pppoe.h projects/hyperv/sys/netinet/sctp_asconf.c projects/hyperv/sys/netinet/sctp_input.c projects/hyperv/sys/netinet/sctp_output.c projects/hyperv/sys/netinet/sctp_usrreq.c projects/hyperv/sys/netinet/tcp_input.c projects/hyperv/sys/netinet/udp_usrreq.c projects/hyperv/sys/netinet6/in6.c projects/hyperv/sys/netinet6/in6_ifattach.c projects/hyperv/sys/netinet6/ip6_forward.c projects/hyperv/sys/netinet6/nd6.c projects/hyperv/sys/netinet6/raw_ip6.c projects/hyperv/sys/netinet6/udp6_usrreq.c projects/hyperv/sys/netipsec/ipsec.h projects/hyperv/sys/netpfil/pf/if_pfsync.c projects/hyperv/sys/nfs/bootp_subr.c projects/hyperv/sys/ofed/drivers/net/mlx4/en_netdev.c projects/hyperv/sys/ofed/drivers/net/mlx4/en_tx.c projects/hyperv/sys/ofed/include/linux/module.h projects/hyperv/sys/powerpc/ofw/ofw_real.c projects/hyperv/sys/powerpc/powermac/macio.c projects/hyperv/sys/powerpc/powermac/maciovar.h projects/hyperv/sys/sys/kernel.h projects/hyperv/sys/sys/libkern.h projects/hyperv/sys/sys/param.h projects/hyperv/sys/sys/sched.h projects/hyperv/sys/sys/syscallsubr.h projects/hyperv/sys/sys/uuid.h projects/hyperv/sys/vm/uma_core.c projects/hyperv/sys/vm/uma_int.h projects/hyperv/sys/vm/vm.h projects/hyperv/sys/vm/vm_glue.c projects/hyperv/sys/vm/vm_map.c projects/hyperv/sys/vm/vm_map.h projects/hyperv/sys/vm/vm_mmap.c projects/hyperv/sys/vm/vm_pageout.c projects/hyperv/sys/vm/vm_param.h projects/hyperv/sys/vm/vnode_pager.c projects/hyperv/sys/x86/include/specialreg.h projects/hyperv/tools/regression/aio/aiotest/aiotest.c projects/hyperv/tools/regression/lib/libc/gen/test-wordexp.c projects/hyperv/tools/tools/crypto/ipsecstats.c projects/hyperv/tools/tools/cxgbetool/cxgbetool.c projects/hyperv/tools/tools/sysdoc/tunables.mdoc projects/hyperv/tools/tools/zfsboottest/Makefile projects/hyperv/usr.bin/fetch/fetch.1 projects/hyperv/usr.bin/fetch/fetch.c projects/hyperv/usr.bin/grep/regex/tre-fastmatch.c projects/hyperv/usr.bin/netstat/ipsec.c projects/hyperv/usr.bin/patch/Makefile projects/hyperv/usr.bin/patch/patch.c projects/hyperv/usr.bin/script/script.1 projects/hyperv/usr.bin/svn/lib/libapr_util/Makefile projects/hyperv/usr.bin/svn/lib/libapr_util/apu.h projects/hyperv/usr.bin/svn/svn_private_config.h projects/hyperv/usr.bin/truss/syscall.h projects/hyperv/usr.bin/truss/syscalls.c projects/hyperv/usr.sbin/bsdconfig/include/messages.subr projects/hyperv/usr.sbin/bsdconfig/share/media/ftp.subr projects/hyperv/usr.sbin/bsdinstall/scripts/mirrorselect projects/hyperv/usr.sbin/makefs/cd9660.c projects/hyperv/usr.sbin/makefs/cd9660/iso9660_rrip.c projects/hyperv/usr.sbin/makefs/ffs/ufs_bswap.h projects/hyperv/usr.sbin/pkg/config.c projects/hyperv/usr.sbin/watchdogd/watchdogd.8 projects/hyperv/usr.sbin/watchdogd/watchdogd.c Directory Properties: projects/hyperv/ (props changed) projects/hyperv/cddl/ (props changed) projects/hyperv/cddl/contrib/opensolaris/ (props changed) projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/print/ (props changed) projects/hyperv/cddl/contrib/opensolaris/cmd/zfs/ (props changed) projects/hyperv/cddl/contrib/opensolaris/lib/libzfs/ (props changed) projects/hyperv/contrib/apr/ (props changed) projects/hyperv/contrib/apr-util/ (props changed) projects/hyperv/contrib/bind9/ (props changed) projects/hyperv/contrib/binutils/ (props changed) projects/hyperv/contrib/ipfilter/ (props changed) projects/hyperv/contrib/libstdc++/ (props changed) projects/hyperv/contrib/llvm/ (props changed) projects/hyperv/contrib/llvm/tools/clang/ (props changed) projects/hyperv/contrib/openbsm/ (props changed) projects/hyperv/contrib/subversion/ (props changed) projects/hyperv/contrib/tcpdump/ (props changed) projects/hyperv/lib/libc/ (props changed) projects/hyperv/sbin/ (props changed) projects/hyperv/sbin/ipfw/ (props changed) projects/hyperv/share/man/man4/ (props changed) projects/hyperv/sys/ (props changed) projects/hyperv/sys/amd64/vmm/ (props changed) projects/hyperv/sys/boot/ (props changed) projects/hyperv/sys/cddl/contrib/opensolaris/ (props changed) projects/hyperv/sys/conf/ (props changed) projects/hyperv/sys/contrib/dev/acpica/ (props changed) projects/hyperv/sys/contrib/dev/acpica/common/ (props changed) projects/hyperv/sys/contrib/dev/acpica/compiler/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/debugger/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/disassembler/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/dispatcher/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/events/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/executer/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/hardware/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/namespace/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/parser/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/resources/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/tables/ (props changed) projects/hyperv/sys/contrib/dev/acpica/components/utilities/ (props changed) projects/hyperv/sys/contrib/dev/acpica/include/ (props changed) projects/hyperv/sys/contrib/dev/acpica/os_specific/ (props changed) projects/hyperv/sys/contrib/ipfilter/ (props changed) projects/hyperv/sys/dev/usb/serial/uark.c (props changed) Modified: projects/hyperv/MAINTAINERS ============================================================================== --- projects/hyperv/MAINTAINERS Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/MAINTAINERS Thu Aug 1 22:09:57 2013 (r253869) @@ -128,3 +128,6 @@ sysdoc trhodes Pre-commit review prefe sh(1) jilles Pre-commit review requested. This also applies to kill(1), printf(1) and test(1) which are compiled in as builtins. +nvme(4) jimharris Pre-commit review requested. +nvd(4) jimharris Pre-commit review requested. +nvmecontrol(8) jimharris Pre-commit review requested. Modified: projects/hyperv/Makefile ============================================================================== --- projects/hyperv/Makefile Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/Makefile Thu Aug 1 22:09:57 2013 (r253869) @@ -130,11 +130,34 @@ _MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH .error MAKEOBJDIRPREFIX can only be set in environment, not as a global\ (in make.conf(5)) or command-line variable. .endif -MAKEPATH= ${MAKEOBJDIRPREFIX}${.CURDIR}/make.${MACHINE} -BINMAKE= \ - `if [ -x ${MAKEPATH}/make ]; then echo ${MAKEPATH}/make; else echo ${MAKE}; fi` \ + +# We often need to use the tree's version of make to build it. +# Choices add to complexity though. +# We cannot blindly use a make which may not be the one we want +# so be exlicit - until all choice is removed. +.if !defined(WITHOUT_BMAKE) +WANT_MAKE= bmake +.else +WANT_MAKE= fmake +.endif +MYMAKE= ${MAKEOBJDIRPREFIX}${.CURDIR}/make.${MACHINE}/${WANT_MAKE} +.if defined(.PARSEDIR) +HAVE_MAKE= bmake +.else +HAVE_MAKE= fmake +.endif +.if exists(${MYMAKE}) +SUB_MAKE:= ${MYMAKE} -m ${.CURDIR}/share/mk +.elif ${WANT_MAKE} != ${HAVE_MAKE} || ${WANT_MAKE} != "bmake" +# It may not exist yet but we may cause it to. +# In the case of fmake, upgrade_checks may cause a newer version to be built. +SUB_MAKE= `test -x ${MYMAKE} && echo ${MYMAKE} || echo ${MAKE}` \ -m ${.CURDIR}/share/mk -_MAKE= PATH=${PATH} ${BINMAKE} -f Makefile.inc1 TARGET=${_TARGET} TARGET_ARCH=${_TARGET_ARCH} +.else +SUB_MAKE= ${MAKE} -m ${.CURDIR}/share/mk +.endif + +_MAKE= PATH=${PATH} ${SUB_MAKE} -f Makefile.inc1 TARGET=${_TARGET} TARGET_ARCH=${_TARGET_ARCH} # Guess machine architecture from machine type, and vice versa. .if !defined(TARGET_ARCH) && defined(TARGET) @@ -291,11 +314,13 @@ kernel: buildkernel installkernel # Perform a few tests to determine if the installed tools are adequate # for building the world. # +# Note: if we ever need to care about the version of bmake, simply testing +# MAKE_VERSION against a required version should suffice. +# upgrade_checks: -.if !defined(.PARSEDIR) -.if !defined(WITHOUT_BMAKE) - (cd ${.CURDIR} && ${MAKE} bmake) -.else +.if ${HAVE_MAKE} != ${WANT_MAKE} + @(cd ${.CURDIR} && ${MAKE} ${WANT_MAKE:S,^f,,}) +.elif ${WANT_MAKE} == "fmake" @if ! (cd ${.CURDIR}/tools/build/make_check && \ PATH=${PATH} ${BINMAKE} obj >/dev/null 2>&1 && \ PATH=${PATH} ${BINMAKE} >/dev/null 2>&1); \ @@ -303,14 +328,13 @@ upgrade_checks: (cd ${.CURDIR} && ${MAKE} make); \ fi .endif -.endif # # Upgrade make(1) to the current version using the installed # headers, libraries and tools. Also, allow the location of # the system bsdmake-like utility to be overridden. # -MMAKEENV= MAKEOBJDIRPREFIX=${MAKEPATH} \ +MMAKEENV= MAKEOBJDIRPREFIX=${MYMAKE:H} \ DESTDIR= \ INSTALL="sh ${.CURDIR}/tools/install.sh" MMAKE= ${MMAKEENV} ${MAKE} \ @@ -327,7 +351,7 @@ make bmake: .PHONY ${MMAKE} obj && \ ${MMAKE} depend && \ ${MMAKE} all && \ - ${MMAKE} install DESTDIR=${MAKEPATH} BINDIR= + ${MMAKE} install DESTDIR=${MYMAKE:H} BINDIR= PROGNAME=${MYMAKE:T} tinderbox: @cd ${.CURDIR} && ${MAKE} DOING_TINDERBOX=YES universe @@ -377,7 +401,8 @@ MAKEFAIL=tee -a ${FAILFILE} MAKEFAIL=cat .endif -universe: universe_prologue upgrade_checks +universe_prologue: upgrade_checks +universe: universe_prologue universe_prologue: @echo "--------------------------------------------------------------" @echo ">>> make universe started on ${STARTTIME}" @@ -387,9 +412,9 @@ universe_prologue: .endif .for target in ${TARGETS} universe: universe_${target} -.ORDER: universe_prologue upgrade_checks universe_${target} universe_epilogue +universe_epilogue: universe_${target} universe_${target}: universe_${target}_prologue -universe_${target}_prologue: +universe_${target}_prologue: universe_prologue @echo ">> ${target} started on `LC_ALL=C date`" .if !defined(MAKE_JUST_KERNELS) .for target_arch in ${TARGET_ARCHES_${target}} @@ -397,7 +422,7 @@ universe_${target}: universe_${target}_$ universe_${target}_${target_arch}: universe_${target}_prologue @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} started on `LC_ALL=C date`" @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ - ${MAKE} ${JFLAG} ${UNIVERSE_TARGET} \ + ${SUB_MAKE} ${JFLAG} ${UNIVERSE_TARGET} \ TARGET=${target} \ TARGET_ARCH=${target_arch} \ > _.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \ @@ -418,11 +443,11 @@ universe_${target}: universe_${target}_k universe_${target}_kernels: universe_${target}_prologue .if exists(${KERNSRCDIR}/${target}/conf/NOTES) @(cd ${KERNSRCDIR}/${target}/conf && env __MAKE_CONF=/dev/null \ - ${MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \ + ${SUB_MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \ (echo "${target} 'make LINT' failed," \ "check _.${target}.makeLINT for details"| ${MAKEFAIL})) .endif - @cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} TARGET=${target} \ + @cd ${.CURDIR} && ${SUB_MAKE} ${.MAKEFLAGS} TARGET=${target} \ universe_kernels .endif @echo ">> ${target} completed on `LC_ALL=C date`" @@ -445,7 +470,7 @@ TARGET_ARCH_${kernel}!= cd ${KERNSRCDIR} universe_kernconfs: universe_kernconf_${TARGET}_${kernel} universe_kernconf_${TARGET}_${kernel}: @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \ - ${MAKE} ${JFLAG} buildkernel \ + ${SUB_MAKE} ${JFLAG} buildkernel \ TARGET=${TARGET} \ TARGET_ARCH=${TARGET_ARCH_${kernel}} \ KERNCONF=${kernel} \ Modified: projects/hyperv/Makefile.inc1 ============================================================================== --- projects/hyperv/Makefile.inc1 Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/Makefile.inc1 Thu Aug 1 22:09:57 2013 (r253869) @@ -833,6 +833,18 @@ distributeworld installworld: installche awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \ ${DESTDIR}/${DISTDIR}/${dist}.meta .endfor +.if ${MK_DEBUG_FILES} != "no" +. for dist in base ${EXTRA_DISTRIBUTIONS} + @# For each file that exists in this dist, print the corresponding + @# line from the METALOG. This relies on the fact that + @# a line containing only the filename will sort immediatly before + @# the relevant mtree line. + cd ${DESTDIR}/${DISTDIR}; \ + find ./${dist}/usr/lib/debug | sort -u ${METALOG} - | \ + awk 'BEGIN { print "#${MTREE_MAGIC}" } !/ type=/ { file = $$1 } / type=/ { if ($$1 == file) { sub(/^\.\/${dist}\//, "./"); print } }' > \ + ${DESTDIR}/${DISTDIR}/${dist}.debug.meta +. endfor +.endif .endif .endif @@ -841,13 +853,29 @@ packageworld: .if defined(NO_ROOT) ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.txz \ + --exclude usr/lib/debug \ @${DESTDIR}/${DISTDIR}/${dist}.meta .else ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ - tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.txz . + tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.txz \ + --exclude usr/lib/debug . .endif .endfor +.if ${MK_DEBUG_FILES} != "no" +. for dist in base ${EXTRA_DISTRIBUTIONS} +. if defined(NO_ROOT) + ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ + tar cvJf ${DESTDIR}/${DISTDIR}/${dist}.debug.txz \ + @${DESTDIR}/${DISTDIR}/${dist}.debug.meta +. else + ${_+_}cd ${DESTDIR}/${DISTDIR}/${dist}; \ + tar cvJfL ${DESTDIR}/${DISTDIR}/${dist}.debug.txz \ + usr/lib/debug +. endif +. endfor +.endif + # # reinstall # Modified: projects/hyperv/UPDATING ============================================================================== --- projects/hyperv/UPDATING Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/UPDATING Thu Aug 1 22:09:57 2013 (r253869) @@ -31,6 +31,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20130726: + Behavior of devfs rules path matching has been changed. + Pattern is now always matched against fully qualified devfs + path and slash characters must be explicitly matched by + slashes in pattern (FNM_PATHNAME). Rulesets involving devfs + subdirectories must be reviewed. + 20130716: The default ARM ABI has changed to the ARM EABI. The old ABI is incompatible with the ARM EABI and all programs and modules will Modified: projects/hyperv/bin/sh/Makefile ============================================================================== --- projects/hyperv/bin/sh/Makefile Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/Makefile Thu Aug 1 22:09:57 2013 (r253869) @@ -8,7 +8,7 @@ SHSRCS= alias.c arith_yacc.c arith_yylex histedit.c input.c jobs.c kill.c mail.c main.c memalloc.c miscbltin.c \ mystring.c options.c output.c parser.c printf.c redir.c show.c \ test.c trap.c var.c -GENSRCS= builtins.c init.c nodes.c syntax.c +GENSRCS= builtins.c nodes.c syntax.c GENHDRS= builtins.h nodes.h syntax.h token.h SRCS= ${SHSRCS} ${GENSRCS} ${GENHDRS} @@ -30,26 +30,21 @@ WFORMAT=0 ${.CURDIR}/../test \ ${.CURDIR}/../../usr.bin/printf -CLEANFILES+= mkinit mkinit.o mknodes mknodes.o \ +CLEANFILES+= mknodes mknodes.o \ mksyntax mksyntax.o CLEANFILES+= ${GENSRCS} ${GENHDRS} -build-tools: mkinit mknodes mksyntax +build-tools: mknodes mksyntax .ORDER: builtins.c builtins.h builtins.c builtins.h: mkbuiltins builtins.def sh ${.CURDIR}/mkbuiltins ${.CURDIR} -init.c: mkinit alias.c eval.c exec.c input.c jobs.c options.c parser.c \ - redir.c trap.c var.c - ./mkinit ${.ALLSRC:S/^mkinit$//} - # XXX this is just to stop the default .c rule being used, so that the # intermediate object has a fixed name. # XXX we have a default .c rule, but no default .o rule. .o: ${CC} ${CFLAGS} ${LDFLAGS} ${.IMPSRC} ${LDLIBS} -o ${.TARGET} -mkinit: mkinit.o mknodes: mknodes.o mksyntax: mksyntax.o Modified: projects/hyperv/bin/sh/TOUR ============================================================================== --- projects/hyperv/bin/sh/TOUR Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/TOUR Thu Aug 1 22:09:57 2013 (r253869) @@ -25,38 +25,11 @@ programs is: program input files generates ------- ----------- --------- mkbuiltins builtins builtins.h builtins.c - mkinit *.c init.c mknodes nodetypes nodes.h nodes.c mksyntax - syntax.h syntax.c mktokens - token.h -There are undoubtedly too many of these. Mkinit searches all the -C source files for entries looking like: - - RESET { - x = 2; /* executed when the shell does a longjmp - back to the main command loop */ - } - -It pulls this code out into routines which are when particular -events occur. The intent is to improve modularity by isolating -the information about which modules need to be explicitly -initialized/reset within the modules themselves. - -Mkinit recognizes several constructs for placing declarations in -the init.c file. - INCLUDE "file.h" -includes a file. The storage class MKINIT makes a declaration -available in the init.c file, for example: - MKINIT int funcnest; /* depth of function calls */ -MKINIT alone on a line introduces a structure or union declara- -tion: - MKINIT - struct redirtab { - short renamed[10]; - }; -Preprocessor #define statements are copied to init.c without any -special action to request this. +There are undoubtedly too many of these. EXCEPTIONS: Code for dealing with exceptions appears in exceptions.c. The C language doesn't include exception handling, Modified: projects/hyperv/bin/sh/eval.c ============================================================================== --- projects/hyperv/bin/sh/eval.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/eval.c Thu Aug 1 22:09:57 2013 (r253869) @@ -76,7 +76,7 @@ __FBSDID("$FreeBSD$"); int evalskip; /* set if we are skipping commands */ int skipcount; /* number of levels to skip */ -MKINIT int loopnest; /* current loop nesting level */ +static int loopnest; /* current loop nesting level */ int funcnest; /* depth of function calls */ static int builtin_flags; /* evalcommand flags for builtins */ @@ -104,16 +104,13 @@ static void prehash(union node *); * Called to reset things after an exception. */ -#ifdef mkinit -INCLUDE "eval.h" - -RESET { +void +reseteval(void) +{ evalskip = 0; loopnest = 0; funcnest = 0; } -#endif - /* Modified: projects/hyperv/bin/sh/eval.h ============================================================================== --- projects/hyperv/bin/sh/eval.h Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/eval.h Thu Aug 1 22:09:57 2013 (r253869) @@ -46,6 +46,8 @@ struct backcmd { /* result of evalbackc struct job *jp; /* job structure for command */ }; +void reseteval(void); + /* flags in argument to evaltree/evalstring */ #define EV_EXIT 01 /* exit after evaluating tree */ #define EV_TESTED 02 /* exit status is checked; ignore -e flag */ Modified: projects/hyperv/bin/sh/exec.c ============================================================================== --- projects/hyperv/bin/sh/exec.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/exec.c Thu Aug 1 22:09:57 2013 (r253869) @@ -70,7 +70,6 @@ __FBSDID("$FreeBSD$"); #include "syntax.h" #include "memalloc.h" #include "error.h" -#include "init.h" #include "mystring.h" #include "show.h" #include "jobs.h" Modified: projects/hyperv/bin/sh/input.c ============================================================================== --- projects/hyperv/bin/sh/input.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/input.c Thu Aug 1 22:09:57 2013 (r253869) @@ -92,7 +92,7 @@ struct parsefile { int plinno = 1; /* input line number */ int parsenleft; /* copy of parsefile->nleft */ -MKINIT int parselleft; /* copy of parsefile->lleft */ +static int parselleft; /* copy of parsefile->lleft */ const char *parsenextc; /* copy of parsefile->nextc */ static char basebuf[BUFSIZ + 1];/* buffer for top level input file */ static struct parsefile basepf = { /* top level input file */ @@ -108,15 +108,12 @@ static void pushfile(void); static int preadfd(void); static void popstring(void); -#ifdef mkinit -INCLUDE "input.h" -INCLUDE "error.h" - -RESET { +void +resetinput(void) +{ popallfiles(); parselleft = parsenleft = 0; /* clear input buffer */ } -#endif /* Modified: projects/hyperv/bin/sh/input.h ============================================================================== --- projects/hyperv/bin/sh/input.h Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/input.h Thu Aug 1 22:09:57 2013 (r253869) @@ -47,6 +47,7 @@ extern const char *parsenextc; /* next c struct alias; struct parsefile; +void resetinput(void); char *pfgets(char *, int); int pgetc(void); int preadbuffer(void); Modified: projects/hyperv/bin/sh/jobs.c ============================================================================== --- projects/hyperv/bin/sh/jobs.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/jobs.c Thu Aug 1 22:09:57 2013 (r253869) @@ -77,8 +77,8 @@ __FBSDID("$FreeBSD$"); static struct job *jobtab; /* array of jobs */ static int njobs; /* size of array */ -MKINIT pid_t backgndpid = -1; /* pid of last background process */ -MKINIT struct job *bgjob = NULL; /* last background process */ +static pid_t backgndpid = -1; /* pid of last background process */ +static struct job *bgjob = NULL; /* last background process */ #if JOBS static struct job *jobmru; /* most recently used job list */ static pid_t initialpgrp; /* pgrp of shell on invocation */ @@ -116,7 +116,7 @@ static void showjob(struct job *, int); * Turn job control on and off. */ -MKINIT int jobctl; +static int jobctl; #if JOBS void Modified: projects/hyperv/bin/sh/main.c ============================================================================== --- projects/hyperv/bin/sh/main.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/main.c Thu Aug 1 22:09:57 2013 (r253869) @@ -68,10 +68,10 @@ __FBSDID("$FreeBSD$"); #include "show.h" #include "memalloc.h" #include "error.h" -#include "init.h" #include "mystring.h" #include "exec.h" #include "cd.h" +#include "redir.h" #include "builtins.h" int rootpid; @@ -79,6 +79,7 @@ int rootshell; struct jmploc main_handler; int localeisutf8, initial_localeisutf8; +static void reset(void); static void cmdloop(int); static void read_profile(const char *); static char *find_dot_file(char *); @@ -179,6 +180,14 @@ state4: return 0; } +static void +reset(void) +{ + reseteval(); + resetinput(); + resetparser(); + resetredir(); +} /* * Read and execute commands. "Top" is nonzero for the top level command Modified: projects/hyperv/bin/sh/output.c ============================================================================== --- projects/hyperv/bin/sh/output.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/output.c Thu Aug 1 22:09:57 2013 (r253869) @@ -75,25 +75,6 @@ struct output memout = {NULL, 0, NULL, 0 struct output *out1 = &output; struct output *out2 = &errout; - - -#ifdef mkinit - -INCLUDE "output.h" -INCLUDE "memalloc.h" - -RESET { - out1 = &output; - out2 = &errout; - if (memout.buf != NULL) { - ckfree(memout.buf); - memout.buf = NULL; - } -} - -#endif - - void outcslow(int c, struct output *file) { Modified: projects/hyperv/bin/sh/parser.c ============================================================================== --- projects/hyperv/bin/sh/parser.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/parser.c Thu Aug 1 22:09:57 2013 (r253869) @@ -96,9 +96,9 @@ static struct heredoc *heredoclist; /* l static int doprompt; /* if set, prompt the user */ static int needprompt; /* true if interactive and at start of line */ static int lasttoken; /* last token read */ -MKINIT int tokpushback; /* last token pushed back */ +int tokpushback; /* last token pushed back */ static char *wordtext; /* text of last word returned by readtoken */ -MKINIT int checkkwd; /* 1 == check for kwds, 2 == also eat newlines */ +static int checkkwd; static struct nodelist *backquotelist; static union node *redirnode; static struct heredoc *heredoc; @@ -1819,13 +1819,13 @@ parsearith: { } /* end of readtoken */ - -#ifdef mkinit -RESET { +void +resetparser(void) +{ tokpushback = 0; checkkwd = 0; } -#endif + /* * Returns true if the text contains nothing to expand (no dollar signs Modified: projects/hyperv/bin/sh/parser.h ============================================================================== --- projects/hyperv/bin/sh/parser.h Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/parser.h Thu Aug 1 22:09:57 2013 (r253869) @@ -79,6 +79,7 @@ extern const char *const parsekwd[]; union node *parsecmd(int); void fixredir(union node *, const char *, int); +void resetparser(void); int goodname(const char *); int isassignment(const char *); char *getprompt(void *); Modified: projects/hyperv/bin/sh/redir.c ============================================================================== --- projects/hyperv/bin/sh/redir.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/redir.c Thu Aug 1 22:09:57 2013 (r253869) @@ -66,14 +66,13 @@ __FBSDID("$FreeBSD$"); #define CLOSED -1 /* fd was not open before redir */ -MKINIT struct redirtab { struct redirtab *next; int renamed[10]; }; -MKINIT struct redirtab *redirlist; +static struct redirtab *redirlist; /* * We keep track of whether or not fd0 has been redirected. This is for @@ -324,16 +323,13 @@ popredir(void) * Undo all redirections. Called on error or interrupt. */ -#ifdef mkinit - -INCLUDE "redir.h" - -RESET { +void +resetredir(void) +{ while (redirlist) popredir(); } -#endif /* Return true if fd 0 has already been redirected at least once. */ int Modified: projects/hyperv/bin/sh/redir.h ============================================================================== --- projects/hyperv/bin/sh/redir.h Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/redir.h Thu Aug 1 22:09:57 2013 (r253869) @@ -40,6 +40,7 @@ union node; void redirect(union node *, int); void popredir(void); +void resetredir(void); int fd0_redirected_p(void); void clearredir(void); Modified: projects/hyperv/bin/sh/shell.h ============================================================================== --- projects/hyperv/bin/sh/shell.h Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/shell.h Thu Aug 1 22:09:57 2013 (r253869) @@ -63,7 +63,6 @@ typedef intmax_t arith_t; #define ARITH_MAX INTMAX_MAX typedef void *pointer; -#define MKINIT /* empty */ #include Modified: projects/hyperv/bin/sh/trap.c ============================================================================== --- projects/hyperv/bin/sh/trap.c Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/bin/sh/trap.c Thu Aug 1 22:09:57 2013 (r253869) @@ -72,7 +72,7 @@ __FBSDID("$FreeBSD$"); #define S_RESET 5 /* temporary - to reset a hard ignored sig */ -MKINIT char sigmode[NSIG]; /* current value of signal */ +static char sigmode[NSIG]; /* current value of signal */ volatile sig_atomic_t pendingsig; /* indicates some signal received */ int in_dotrap; /* do we execute in a trap handler? */ static char *volatile trap[NSIG]; /* trap handler commands */ Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/cmd/scripts/dtest.pl ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/cmd/scripts/dtest.pl Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/cmd/scripts/dtest.pl Thu Aug 1 22:09:57 2013 (r253869) @@ -583,6 +583,8 @@ if ($opt_x) { die "$PNAME: failed to open $PNAME.$$.log: $!\n" unless (!$opt_l || open(LOG, ">$PNAME.$$.log")); +$ENV{'DTRACE_DEBUG_REGSET'} = 'true'; + if ($opt_g) { $ENV{'UMEM_DEBUG'} = 'default,verbose'; $ENV{'UMEM_LOGGING'} = 'fail,contents'; Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d) @@ -0,0 +1,35 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +#pragma D option quiet + +/* + * Make sure the sizes of compatible keys doesn't affect the sort order. + */ + +BEGIN +{ + @[(int)1, 0] = sum(10); + @[(uint64_t)2, 0] = sum(20); + @[(int)3, 0] = sum(30); + @[(uint64_t)4, 0] = sum(40); + printa(@); + + exit(0); +} Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d.out (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d.out Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/aggs/tst.sizedkeys.d.out) @@ -0,0 +1,6 @@ + + 1 0 10 + 2 0 20 + 3 0 30 + 4 0 40 + Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.basics.d.out (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.basics.d.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.basics.d.out Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.basics.d.out) @@ -0,0 +1,8 @@ +The value of i is 6 +The value of i is 18 +The value of i is 72 +The value of i is 25920 +The value of i is 935761216 +The value of i is -91738734 +The value of i is -91738729 + Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d) @@ -0,0 +1,50 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * Test compile-time casting between integer types of different size. + */ + +#pragma D option quiet + +int64_t x; + +BEGIN +{ + x = (int32_t)(int16_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + x = (int32_t)(uint16_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + x = (uint32_t)(int16_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + x = (uint32_t)(uint16_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + printf("\n"); + + x = (int16_t)(int32_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + x = (int16_t)(uint32_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + x = (uint16_t)(int32_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + x = (uint16_t)(uint32_t)0xfff0; + printf("%16x %20d %20u\n", x, x, x); + + exit(0); +} Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d.out (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d.out Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compcast.d.out) @@ -0,0 +1,10 @@ +fffffffffffffff0 -16 18446744073709551600 + fff0 65520 65520 + fffffff0 4294967280 4294967280 + fff0 65520 65520 + +fffffffffffffff0 -16 18446744073709551600 +fffffffffffffff0 -16 18446744073709551600 + fff0 65520 65520 + fff0 65520 65520 + Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d) @@ -0,0 +1,36 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * Test narrowing at assignment. + */ + +#pragma D option quiet + +uint16_t x; +uint32_t y; + +BEGIN +{ + x = 0xbeefcafe; + y = x; + printf("%x", y); /* where's the beef? */ + + exit(0); +} Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d.out (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d.out Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.compnarrowassign.d.out) @@ -0,0 +1 @@ +cafe Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d) @@ -0,0 +1,52 @@ +/* + * CDDL HEADER START + * + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + * + * CDDL HEADER END + */ + +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ + +/* + * Test execution-time casting between integer types of different size. + */ + +#pragma D option quiet + +int64_t x; + +BEGIN +{ + z = 0xfff0; + + x = (int32_t)(int16_t)z; + printf("%16x %20d %20u\n", x, x, x); + x = (int32_t)(uint16_t)z; + printf("%16x %20d %20u\n", x, x, x); + x = (uint32_t)(int16_t)z; + printf("%16x %20d %20u\n", x, x, x); + x = (uint32_t)(uint16_t)z; + printf("%16x %20d %20u\n", x, x, x); + printf("\n"); + + x = (int16_t)(int32_t)z; + printf("%16x %20d %20u\n", x, x, x); + x = (int16_t)(uint32_t)z; + printf("%16x %20d %20u\n", x, x, x); + x = (uint16_t)(int32_t)z; + printf("%16x %20d %20u\n", x, x, x); + x = (uint16_t)(uint32_t)z; + printf("%16x %20d %20u\n", x, x, x); + + exit(0); +} Copied: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d.out (from r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d.out) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d.out Thu Aug 1 22:09:57 2013 (r253869, copy of r253862, head/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/arithmetic/tst.execcast.d.out) @@ -0,0 +1,10 @@ +fffffffffffffff0 -16 18446744073709551600 + fff0 65520 65520 + fffffff0 4294967280 4294967280 + fff0 65520 65520 + +fffffffffffffff0 -16 18446744073709551600 +fffffffffffffff0 -16 18446744073709551600 + fff0 65520 65520 + fff0 65520 65520 + Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionentry.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionentry.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionentry.d Thu Aug 1 22:09:57 2013 (r253869) @@ -36,12 +36,12 @@ #pragma D option quiet #pragma D option statusrate=10ms -fbt::ioctl:entry +fbt::kern_ioctl:entry { printf("Entering the ioctl function\n"); } -fbt::ioctl:return +fbt::kern_ioctl:return { printf("Returning from ioctl function\n"); exit(0); Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionreturnvalue.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionreturnvalue.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.functionreturnvalue.d Thu Aug 1 22:09:57 2013 (r253869) @@ -36,7 +36,7 @@ #pragma D option quiet #pragma D option statusrate=10ms -fbt::ioctl:return +fbt::kern_ioctl:return { printf("The function return value is stored in %u\n", arg1); exit(0); Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.ioctlargs.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.ioctlargs.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.ioctlargs.d Thu Aug 1 22:09:57 2013 (r253869) @@ -36,13 +36,13 @@ #pragma D option quiet #pragma D option statusrate=10ms -fbt::ioctl:entry +fbt::kern_ioctl:entry { printf("Entering the ioctl function\n"); printf("The few arguments are %u %u %u %u\n", arg0, arg1, arg2, arg3); } -fbt::ioctl:return +fbt::kern_ioctl:return { printf("Returning from ioctl function\n"); printf("The few arguments are %u %u %u %u\n", arg0, arg1, arg2, arg3); Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offset.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offset.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offset.d Thu Aug 1 22:09:57 2013 (r253869) @@ -41,12 +41,12 @@ BEGIN self->traceme = 1; } -fbt::ioctl:entry +fbt::kern_ioctl:entry { printf("Entering the function\n"); } -fbt::ioctl:return +fbt::kern_ioctl:return { printf("The offset = %u\n", arg0); exit(0); Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offsetzero.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offsetzero.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.offsetzero.d Thu Aug 1 22:09:57 2013 (r253869) @@ -36,14 +36,14 @@ #pragma D option quiet #pragma D option statusrate=10ms -fbt::ioctl:entry +fbt::kern_ioctl:entry { printf("Entering the ioctl function\n"); printf("The few arguments are %u %u %u %u\n", arg0, arg1, arg2, arg3); exit(0); } -fbt::ioctl:return +fbt::kern_ioctl:return { printf("Returning from ioctl function\n"); printf("The few arguments are %u %u %u %u\n", arg0, arg1, arg2, arg3); Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.return0.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.return0.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.return0.d Thu Aug 1 22:09:57 2013 (r253869) @@ -36,7 +36,7 @@ #pragma D option quiet #pragma D option statusrate=10ms -fbt::ioctl:return +fbt::kern_ioctl:return /arg1 == 0/ { printf("%s %x returned 0", probefunc, arg0); Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.tailcall.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.tailcall.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/fbtprovider/tst.tailcall.d Thu Aug 1 22:09:57 2013 (r253869) @@ -36,7 +36,7 @@ #pragma D option quiet #pragma D option statusrate=10ms -fbt::ioctl:entry +fbt::kern_ioctl:entry { self->traceme = 1; } @@ -47,7 +47,7 @@ fbt:::entry printf("called %s\n", probefunc); } -fbt::ioctl:return +fbt::kern_ioctl:return /self->traceme/ { self->traceme = 0; Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/funcs/tst.strjoin.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/funcs/tst.strjoin.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/funcs/tst.strjoin.d Thu Aug 1 22:09:57 2013 (r253869) @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ #pragma D option quiet @@ -36,3 +38,8 @@ BEGIN printf("%s\n", strjoin("", "")); exit(0); } + +BEGIN +{ + exit(1); +} Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.BadAlign.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.BadAlign.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.BadAlign.d Thu Aug 1 22:09:57 2013 (r253869) @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" +/* + * Copyright (c) 2012 by Delphix. All rights reserved. + */ /* * ASSERTION: This test reproduces the alignment error. @@ -39,9 +41,10 @@ BEGIN { - x = (int *) 64; + x = (int *)64; y = *x; trace(y); + exit(0); } ERROR Modified: projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress2.d ============================================================================== --- projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress2.d Thu Aug 1 21:50:50 2013 (r253868) +++ projects/hyperv/cddl/contrib/opensolaris/cmd/dtrace/test/tst/common/pointers/err.InvalidAddress2.d Thu Aug 1 22:09:57 2013 (r253869) @@ -24,7 +24,9 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" *** DIFF OUTPUT TRUNCATED AT 1000 LINES *** From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 23:02:36 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D7EC8951; Thu, 1 Aug 2013 23:02:36 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id AB7082FE6; Thu, 1 Aug 2013 23:02:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71N2aDX078055; Thu, 1 Aug 2013 23:02:36 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71N2aFE078054; Thu, 1 Aug 2013 23:02:36 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308012302.r71N2aFE078054@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 1 Aug 2013 23:02:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253871 - projects/atomic64 X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 23:02:36 -0000 Author: jkim Date: Thu Aug 1 23:02:36 2013 New Revision: 253871 URL: http://svnweb.freebsd.org/changeset/base/253871 Log: Create a project to enhance atomic(9). Added: - copied from r253870, head/ Directory Properties: projects/atomic64/ (props changed) From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 23:20:33 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 44ABAD61; Thu, 1 Aug 2013 23:20:33 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 17DF020BF; Thu, 1 Aug 2013 23:20:33 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71NKWVH083701; Thu, 1 Aug 2013 23:20:32 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71NKWlN083697; Thu, 1 Aug 2013 23:20:32 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308012320.r71NKWlN083697@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 1 Aug 2013 23:20:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253872 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 23:20:33 -0000 Author: jkim Date: Thu Aug 1 23:20:31 2013 New Revision: 253872 URL: http://svnweb.freebsd.org/changeset/base/253872 Log: Allow any register to be used for the return value. Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:02:36 2013 (r253871) +++ projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:20:31 2013 (r253872) @@ -138,14 +138,13 @@ atomic_cmpset_int(volatile u_int *dst, u __asm __volatile( " " MPLOCKED " " - " cmpxchgl %2,%1 ; " + " cmpxchgl %3, %1 ; " " sete %0 ; " - "1: " "# atomic_cmpset_int" - : "=a" (res), /* 0 */ - "=m" (*dst) /* 1 */ - : "r" (src), /* 2 */ - "a" (expect), /* 3 */ + : "=r" (res), /* 0 */ + "=m" (*dst), /* 1 */ + "+a" (expect) /* 2 */ + : "r" (src), /* 3 */ "m" (*dst) /* 4 */ : "memory", "cc"); @@ -159,14 +158,13 @@ atomic_cmpset_long(volatile u_long *dst, __asm __volatile( " " MPLOCKED " " - " cmpxchgq %2,%1 ; " + " cmpxchgq %3, %1 ; " " sete %0 ; " - "1: " "# atomic_cmpset_long" - : "=a" (res), /* 0 */ - "=m" (*dst) /* 1 */ - : "r" (src), /* 2 */ - "a" (expect), /* 3 */ + : "=r" (res), /* 0 */ + "=m" (*dst), /* 1 */ + "+a" (expect) /* 2 */ + : "r" (src), /* 3 */ "m" (*dst) /* 4 */ : "memory", "cc"); Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:02:36 2013 (r253871) +++ projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:20:31 2013 (r253872) @@ -246,14 +246,13 @@ atomic_cmpset_int(volatile u_int *dst, u __asm __volatile( " " MPLOCKED " " - " cmpxchgl %2,%1 ; " - " sete %0 ; " - "1: " + " cmpxchgl %3, %1 ; " + " sete %0 ; " "# atomic_cmpset_int" - : "=a" (res), /* 0 */ - "=m" (*dst) /* 1 */ - : "r" (src), /* 2 */ - "a" (expect), /* 3 */ + : "=r" (res), /* 0 */ + "=m" (*dst), /* 1 */ + "+a" (expect) /* 2 */ + : "r" (src), /* 3 */ "m" (*dst) /* 4 */ : "memory", "cc"); From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 23:38:58 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B740D140; Thu, 1 Aug 2013 23:38:58 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 951252167; Thu, 1 Aug 2013 23:38:58 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71NcwBv087692; Thu, 1 Aug 2013 23:38:58 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71Ncw5M087687; Thu, 1 Aug 2013 23:38:58 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308012338.r71Ncw5M087687@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 1 Aug 2013 23:38:58 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253874 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 23:38:58 -0000 Author: jkim Date: Thu Aug 1 23:38:57 2013 New Revision: 253874 URL: http://svnweb.freebsd.org/changeset/base/253874 Log: Add a new atomic operation atomic_swap for x86. This operation atomically loads the current value and stores a new value at once, i. e., tmp = *p; *p = v; return (tmp); Note atomic_readandclear is now obsolete and reimplemented as a macro around atomic_swap where the new value v is zero. Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:38:30 2013 (r253873) +++ projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:38:57 2013 (r253874) @@ -54,12 +54,14 @@ * atomic_clear_int(P, V) (*(u_int *)(P) &= ~(V)) * atomic_add_int(P, V) (*(u_int *)(P) += (V)) * atomic_subtract_int(P, V) (*(u_int *)(P) -= (V)) + * atomic_swap_int(P, V) (return (*(u_int *)(P)); *(u_int *)(P) = (V);) * atomic_readandclear_int(P) (return (*(u_int *)(P)); *(u_int *)(P) = 0;) * * atomic_set_long(P, V) (*(u_long *)(P) |= (V)) * atomic_clear_long(P, V) (*(u_long *)(P) &= ~(V)) * atomic_add_long(P, V) (*(u_long *)(P) += (V)) * atomic_subtract_long(P, V) (*(u_long *)(P) -= (V)) + * atomic_swap_long(P, V) (return (*(u_long *)(P)); *(u_long *)(P) = (V);) * atomic_readandclear_long(P) (return (*(u_long *)(P)); *(u_long *)(P) = 0;) */ @@ -301,45 +303,39 @@ ATOMIC_STORE(long); #ifndef WANT_FUNCTIONS -/* Read the current value and store a zero in the destination. */ +/* Read the current value and store a new value in the destination. */ #ifdef __GNUCLIKE_ASM static __inline u_int -atomic_readandclear_int(volatile u_int *addr) +atomic_swap_int(volatile u_int *p, u_int v) { - u_int res; - res = 0; __asm __volatile( - " xchgl %1,%0 ; " - "# atomic_readandclear_int" - : "+r" (res), /* 0 */ - "=m" (*addr) /* 1 */ - : "m" (*addr)); - - return (res); + " xchgl %1, %0 ; " + "# atomic_swap_int" + : "+r" (v), /* 0 */ + "=m" (*p) /* 1 */ + : "m" (*p)); + return (v); } static __inline u_long -atomic_readandclear_long(volatile u_long *addr) +atomic_swap_long(volatile u_long *p, u_long v) { - u_long res; - res = 0; __asm __volatile( - " xchgq %1,%0 ; " - "# atomic_readandclear_long" - : "+r" (res), /* 0 */ - "=m" (*addr) /* 1 */ - : "m" (*addr)); - - return (res); + " xchgq %1, %0 ; " + "# atomic_swap_long" + : "+r" (v), /* 0 */ + "=m" (*p) /* 1 */ + : "m" (*p)); + return (v); } #else /* !__GNUCLIKE_ASM */ -u_int atomic_readandclear_int(volatile u_int *addr); -u_long atomic_readandclear_long(volatile u_long *addr); +u_int atomic_swap_int(volatile u_int *, u_int); +u_long atomic_swap_long(volatile u_long *, u_long); #endif /* __GNUCLIKE_ASM */ @@ -383,6 +379,9 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_acq_long atomic_cmpset_long #define atomic_cmpset_rel_long atomic_cmpset_long +#define atomic_readandclear_int(p) atomic_swap_int(p, 0) +#define atomic_readandclear_long(p) atomic_swap_long(p, 0) + /* Operations on 8-bit bytes. */ #define atomic_set_8 atomic_set_char #define atomic_set_acq_8 atomic_set_acq_char @@ -433,6 +432,7 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_32 atomic_cmpset_int #define atomic_cmpset_acq_32 atomic_cmpset_acq_int #define atomic_cmpset_rel_32 atomic_cmpset_rel_int +#define atomic_swap_32 atomic_swap_int #define atomic_readandclear_32 atomic_readandclear_int #define atomic_fetchadd_32 atomic_fetchadd_int @@ -454,6 +454,7 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_64 atomic_cmpset_long #define atomic_cmpset_acq_64 atomic_cmpset_acq_long #define atomic_cmpset_rel_64 atomic_cmpset_rel_long +#define atomic_swap_64 atomic_swap_long #define atomic_readandclear_64 atomic_readandclear_long /* Operations on pointers. */ @@ -474,6 +475,7 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_ptr atomic_cmpset_long #define atomic_cmpset_acq_ptr atomic_cmpset_acq_long #define atomic_cmpset_rel_ptr atomic_cmpset_rel_long +#define atomic_swap_ptr atomic_swap_long #define atomic_readandclear_ptr atomic_readandclear_long #endif /* !WANT_FUNCTIONS */ Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:38:30 2013 (r253873) +++ projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:38:57 2013 (r253874) @@ -54,12 +54,14 @@ * atomic_clear_int(P, V) (*(u_int *)(P) &= ~(V)) * atomic_add_int(P, V) (*(u_int *)(P) += (V)) * atomic_subtract_int(P, V) (*(u_int *)(P) -= (V)) + * atomic_swap_int(P, V) (return (*(u_int *)(P)); *(u_int *)(P) = (V);) * atomic_readandclear_int(P) (return (*(u_int *)(P)); *(u_int *)(P) = 0;) * * atomic_set_long(P, V) (*(u_long *)(P) |= (V)) * atomic_clear_long(P, V) (*(u_long *)(P) &= ~(V)) * atomic_add_long(P, V) (*(u_long *)(P) += (V)) * atomic_subtract_long(P, V) (*(u_long *)(P) -= (V)) + * atomic_swap_long(P, V) (return (*(u_long *)(P)); *(u_long *)(P) = (V);) * atomic_readandclear_long(P) (return (*(u_long *)(P)); *(u_long *)(P) = 0;) */ @@ -392,45 +394,33 @@ atomic_fetchadd_long(volatile u_long *p, return (atomic_fetchadd_int((volatile u_int *)p, (u_int)v)); } -/* Read the current value and store a zero in the destination. */ +/* Read the current value and store a new value in the destination. */ #ifdef __GNUCLIKE_ASM static __inline u_int -atomic_readandclear_int(volatile u_int *addr) +atomic_swap_int(volatile u_int *p, u_int v) { - u_int res; - res = 0; __asm __volatile( - " xchgl %1,%0 ; " - "# atomic_readandclear_int" - : "+r" (res), /* 0 */ - "=m" (*addr) /* 1 */ - : "m" (*addr)); - - return (res); + " xchgl %1, %0 ; " + "# atomic_swap_int" + : "+r" (v), /* 0 */ + "=m" (*p) /* 1 */ + : "m" (*p)); + return (v); } static __inline u_long -atomic_readandclear_long(volatile u_long *addr) +atomic_swap_long(volatile u_long *p, u_long v) { - u_long res; - res = 0; - __asm __volatile( - " xchgl %1,%0 ; " - "# atomic_readandclear_long" - : "+r" (res), /* 0 */ - "=m" (*addr) /* 1 */ - : "m" (*addr)); - - return (res); + return (atomic_swap_int((volatile u_int *)p, (u_int)v)); } #else /* !__GNUCLIKE_ASM */ -u_int atomic_readandclear_int(volatile u_int *addr); -u_long atomic_readandclear_long(volatile u_long *addr); +u_int atomic_swap_int(volatile u_int *, u_int); +u_long atomic_swap_long(volatile u_long *, u_long); #endif /* __GNUCLIKE_ASM */ @@ -474,6 +464,9 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_acq_long atomic_cmpset_long #define atomic_cmpset_rel_long atomic_cmpset_long +#define atomic_readandclear_int(p) atomic_swap_int(p, 0) +#define atomic_readandclear_long(p) atomic_swap_long(p, 0) + /* Operations on 8-bit bytes. */ #define atomic_set_8 atomic_set_char #define atomic_set_acq_8 atomic_set_acq_char @@ -524,6 +517,7 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_32 atomic_cmpset_int #define atomic_cmpset_acq_32 atomic_cmpset_acq_int #define atomic_cmpset_rel_32 atomic_cmpset_rel_int +#define atomic_swap_32 atomic_swap_int #define atomic_readandclear_32 atomic_readandclear_int #define atomic_fetchadd_32 atomic_fetchadd_int @@ -564,6 +558,8 @@ u_long atomic_readandclear_long(volatile #define atomic_cmpset_rel_ptr(dst, old, new) \ atomic_cmpset_rel_int((volatile u_int *)(dst), (u_int)(old), \ (u_int)(new)) +#define atomic_swap_ptr(p, v) \ + atomic_swap_int((volatile u_int *)(p), (u_int)(v)) #define atomic_readandclear_ptr(p) \ atomic_readandclear_int((volatile u_int *)(p)) From owner-svn-src-projects@FreeBSD.ORG Thu Aug 1 23:51:21 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 5505F34D; Thu, 1 Aug 2013 23:51:21 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 40D5E21BB; Thu, 1 Aug 2013 23:51:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r71NpLED092538; Thu, 1 Aug 2013 23:51:21 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r71NpKxk092536; Thu, 1 Aug 2013 23:51:20 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308012351.r71NpKxk092536@svn.freebsd.org> From: Jung-uk Kim Date: Thu, 1 Aug 2013 23:51:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253875 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Aug 2013 23:51:21 -0000 Author: jkim Date: Thu Aug 1 23:51:20 2013 New Revision: 253875 URL: http://svnweb.freebsd.org/changeset/base/253875 Log: Add a new atomic operation atomic_testandset for x86. This operation atomically tests and sets a bit, i. e., tmp = (*p & v) != 0; *p |= v; return (tmp) where v = ()1 << s % (sizeof() * NBBY) Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:38:57 2013 (r253874) +++ projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:51:20 2013 (r253875) @@ -82,6 +82,8 @@ int atomic_cmpset_int(volatile u_int *ds int atomic_cmpset_long(volatile u_long *dst, u_long expect, u_long src); u_int atomic_fetchadd_int(volatile u_int *p, u_int v); u_long atomic_fetchadd_long(volatile u_long *p, u_long v); +int atomic_testandset_int(volatile u_int *p, int v); +int atomic_testandset_long(volatile u_long *p, int v); #define ATOMIC_LOAD(TYPE, LOP) \ u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p) @@ -211,6 +213,42 @@ atomic_fetchadd_long(volatile u_long *p, return (v); } +static __inline int +atomic_testandset_int(volatile u_int *p, int v) +{ + u_char res; + + __asm __volatile( + " " MPLOCKED " " + " btsl %2, %1 ; " + " setc %0 ; " + "# atomic_testandset_int" + : "=r" (res), /* 0 */ + "=m" (*p) /* 1 */ + : "r" (v), /* 2 */ + "m" (*p) /* 3 */ + : "cc"); + return (res); +} + +static __inline int +atomic_testandset_long(volatile u_long *p, int v) +{ + u_char res; + + __asm __volatile( + " " MPLOCKED " " + " btsq %2, %1 ; " + " setc %0 ; " + "# atomic_testandset_long" + : "=r" (res), /* 0 */ + "=m" (*p) /* 1 */ + : "r" ((u_long)v), /* 2 */ + "m" (*p) /* 3 */ + : "cc"); + return (res); +} + /* * We assume that a = b will do atomic loads and stores. Due to the * IA32 memory model, a simple store guarantees release semantics. @@ -435,6 +473,7 @@ u_long atomic_swap_long(volatile u_long #define atomic_swap_32 atomic_swap_int #define atomic_readandclear_32 atomic_readandclear_int #define atomic_fetchadd_32 atomic_fetchadd_int +#define atomic_testandset_32 atomic_testandset_int /* Operations on 64-bit quad words. */ #define atomic_set_64 atomic_set_long @@ -456,6 +495,7 @@ u_long atomic_swap_long(volatile u_long #define atomic_cmpset_rel_64 atomic_cmpset_rel_long #define atomic_swap_64 atomic_swap_long #define atomic_readandclear_64 atomic_readandclear_long +#define atomic_testandset_64 atomic_testandset_long /* Operations on pointers. */ #define atomic_set_ptr atomic_set_long Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:38:57 2013 (r253874) +++ projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:51:20 2013 (r253875) @@ -80,6 +80,7 @@ void atomic_##NAME##_barr_##TYPE(volatil int atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src); u_int atomic_fetchadd_int(volatile u_int *p, u_int v); +int atomic_testandset_int(volatile u_int *p, int v); #define ATOMIC_LOAD(TYPE, LOP) \ u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p) @@ -282,6 +283,24 @@ atomic_fetchadd_int(volatile u_int *p, u return (v); } +static __inline int +atomic_testandset_int(volatile u_int *p, int v) +{ + u_char res; + + __asm __volatile( + " " MPLOCKED " " + " btsl %2, %1 ; " + " setc %0 ; " + "# atomic_testandset_int" + : "=r" (res), /* 0 (result) */ + "=m" (*p) /* 1 */ + : "r" (v), /* 2 */ + "m" (*p) /* 3 */ + : "cc"); + return (res); +} + /* * We assume that a = b will do atomic loads and stores. Due to the * IA32 memory model, a simple store guarantees release semantics. @@ -394,6 +413,13 @@ atomic_fetchadd_long(volatile u_long *p, return (atomic_fetchadd_int((volatile u_int *)p, (u_int)v)); } +static __inline int +atomic_testandset_long(volatile u_long *p, int v) +{ + + return (atomic_testandset_int((volatile u_int *)p, v)); +} + /* Read the current value and store a new value in the destination. */ #ifdef __GNUCLIKE_ASM @@ -520,6 +546,7 @@ u_long atomic_swap_long(volatile u_long #define atomic_swap_32 atomic_swap_int #define atomic_readandclear_32 atomic_readandclear_int #define atomic_fetchadd_32 atomic_fetchadd_int +#define atomic_testandset_32 atomic_testandset_int /* Operations on pointers. */ #define atomic_set_ptr(p, v) \ From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 00:08:01 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 257DA510; Fri, 2 Aug 2013 00:08:01 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 130D12219; Fri, 2 Aug 2013 00:08:01 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r72080u8096594; Fri, 2 Aug 2013 00:08:00 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r7208033096591; Fri, 2 Aug 2013 00:08:00 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308020008.r7208033096591@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 2 Aug 2013 00:08:00 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253876 - in projects/atomic64/sys/i386: i386 include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 00:08:01 -0000 Author: jkim Date: Fri Aug 2 00:08:00 2013 New Revision: 253876 URL: http://svnweb.freebsd.org/changeset/base/253876 Log: - Implement atomic_cmpset_64(), atomic_swap_64(), and atomic_testandset_64() for i386. - Reimplement atomic_*_64_i386() in C to make it more pleasant to read. Note the generated code may not be optimal but much easier to maintain. Modified: projects/atomic64/sys/i386/i386/machdep.c projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/i386/i386/machdep.c ============================================================================== --- projects/atomic64/sys/i386/i386/machdep.c Thu Aug 1 23:51:20 2013 (r253875) +++ projects/atomic64/sys/i386/i386/machdep.c Fri Aug 2 00:08:00 2013 (r253876) @@ -1548,10 +1548,16 @@ idle_sysctl(SYSCTL_HANDLER_ARGS) SYSCTL_PROC(_machdep, OID_AUTO, idle, CTLTYPE_STRING | CTLFLAG_RW, 0, 0, idle_sysctl, "A", "currently selected idle function"); +int (*atomic_cmpset_64)(volatile uint64_t *, uint64_t, uint64_t) = + atomic_cmpset_64_i386; uint64_t (*atomic_load_acq_64)(volatile uint64_t *) = atomic_load_acq_64_i386; void (*atomic_store_rel_64)(volatile uint64_t *, uint64_t) = atomic_store_rel_64_i386; +uint64_t (*atomic_swap_64)(volatile uint64_t *, uint64_t) = + atomic_swap_64_i386; +int (*atomic_testandset_64)(volatile uint64_t *, int) = + atomic_testandset_64_i386; static void cpu_probe_cmpxchg8b(void) @@ -1559,8 +1565,11 @@ cpu_probe_cmpxchg8b(void) if ((cpu_feature & CPUID_CX8) != 0 || cpu_vendor_id == CPU_VENDOR_RISE) { + atomic_cmpset_64 = atomic_cmpset_64_i586; atomic_load_acq_64 = atomic_load_acq_64_i586; atomic_store_rel_64 = atomic_store_rel_64_i586; + atomic_swap_64 = atomic_swap_64_i586; + atomic_testandset_64 = atomic_testandset_64_i586; } } Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:51:20 2013 (r253875) +++ projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 00:08:00 2013 (r253876) @@ -124,48 +124,96 @@ atomic_##NAME##_barr_##TYPE(volatile u_# } \ struct __hack +#define ATOMIC_LOCK_I386(f) \ + __asm __volatile("pushfl; popl %0; cli" : "=r" (f)) +#define ATOMIC_UNLOCK_I386(f) \ + __asm __volatile("pushl %0; popfl" : : "r" (f)) + #if defined(_KERNEL) && !defined(WANT_FUNCTIONS) /* I486 does not support SMP or CMPXCHG8B. */ +static __inline int +atomic_cmpset_64_i386(volatile uint64_t *dst, uint64_t expect, uint64_t src) +{ + int res; + register_t lock; + + res = 0; + ATOMIC_LOCK_I386(lock); + if (*dst == expect) { + *dst = src; + res = 1; + } + ATOMIC_UNLOCK_I386(lock); + return (res); +} + static __inline uint64_t atomic_load_acq_64_i386(volatile uint64_t *p) { - volatile uint32_t *high, *low; uint64_t res; + register_t lock; - low = (volatile uint32_t *)p; - high = (volatile uint32_t *)p + 1; - __asm __volatile( - " pushfl ; " - " cli ; " - " movl %1,%%eax ; " - " movl %2,%%edx ; " - " popfl" - : "=&A" (res) /* 0 */ - : "m" (*low), /* 1 */ - "m" (*high) /* 2 */ - : "memory"); - + ATOMIC_LOCK_I386(lock); + res = *p; + ATOMIC_UNLOCK_I386(lock); return (res); } static __inline void atomic_store_rel_64_i386(volatile uint64_t *p, uint64_t v) { - volatile uint32_t *high, *low; + register_t lock; + + ATOMIC_LOCK_I386(lock); + *p = v; + ATOMIC_UNLOCK_I386(lock); +} + +static __inline uint64_t +atomic_swap_64_i386(volatile uint64_t *p, uint64_t v) +{ + uint64_t res; + register_t lock; + + ATOMIC_LOCK_I386(lock); + res = *p; + *p = v; + ATOMIC_UNLOCK_I386(lock); + return (res); +} + +static __inline int +atomic_testandset_64_i386(volatile uint64_t *p, int v) +{ + const uint64_t s = 1ULL << v % 64; + int res; + register_t lock; + + ATOMIC_LOCK_I386(lock); + res = (*p & s) != 0; + *p |= s; + ATOMIC_UNLOCK_I386(lock); + return (res); +} + +static __inline int +atomic_cmpset_64_i586(volatile uint64_t *dst, uint64_t expect, uint64_t src) +{ + u_char res; - low = (volatile uint32_t *)p; - high = (volatile uint32_t *)p + 1; __asm __volatile( - " pushfl ; " - " cli ; " - " movl %%eax,%0 ; " - " movl %%edx,%1 ; " - " popfl" - : "=m" (*low), /* 0 */ - "=m" (*high) /* 1 */ - : "A" (v) /* 2 */ - : "memory"); + " " MPLOCKED " " + " cmpxchg8b %1 ; " + " sete %0" + : "=r" (res), /* 0 */ + "=m" (*dst), /* 1 */ + "+A" (expect) /* 2 */ + : "b" ((uint32_t)src), /* 3 */ + "c" ((uint32_t)(src >> 32)), /* 4 */ + "m" (*dst) /* 5 */ + : "memory", "cc"); + return (res); } static __inline uint64_t @@ -174,15 +222,14 @@ atomic_load_acq_64_i586(volatile uint64_ uint64_t res; __asm __volatile( - " movl %%ebx,%%eax ; " - " movl %%ecx,%%edx ; " + " movl %%ebx, %%eax ; " + " movl %%ecx, %%edx ; " " " MPLOCKED " " - " cmpxchg8b %2" + " cmpxchg8b %1" : "=&A" (res), /* 0 */ "=m" (*p) /* 1 */ : "m" (*p) /* 2 */ : "memory", "cc"); - return (res); } @@ -191,18 +238,48 @@ atomic_store_rel_64_i586(volatile uint64 { __asm __volatile( - " movl %%eax,%%ebx ; " - " movl %%edx,%%ecx ; " + " movl %%eax, %%ebx ; " + " movl %%edx, %%ecx ; " "1: " " " MPLOCKED " " - " cmpxchg8b %2 ; " - " jne 1b" + " cmpxchg8b %0 ; " + " jne 1b" : "=m" (*p), /* 0 */ "+A" (v) /* 1 */ : "m" (*p) /* 2 */ : "ebx", "ecx", "memory", "cc"); } +static __inline uint64_t +atomic_swap_64_i586(volatile uint64_t *p, uint64_t v) +{ + + __asm __volatile( + " movl %%eax, %%ebx ; " + " movl %%edx, %%ecx ; " + "1: " + " " MPLOCKED " " + " cmpxchg8b %0 ; " + " jne 1b" + : "=m" (*p), /* 0 */ + "+A" (v) /* 1 */ + : "m" (*p) /* 2 */ + : "ebx", "ecx", "memory", "cc"); + return (v); +} + +static __inline int +atomic_testandset_64_i586(volatile uint64_t *p, int v) +{ + const uint64_t s = 1ULL << v % 64; + uint64_t n; + + do { + n = *p; + } while (!atomic_cmpset_64_i586(p, n, n | s)); + return ((n & s) != 0); +} + #endif /* _KERNEL && !WANT_FUNCTIONS */ /* @@ -218,25 +295,16 @@ atomic_store_rel_64_i586(volatile uint64 static __inline int atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src) { - u_char res; - - __asm __volatile( - " pushfl ; " - " cli ; " - " cmpl %3,%4 ; " - " jne 1f ; " - " movl %2,%1 ; " - "1: " - " sete %0 ; " - " popfl ; " - "# atomic_cmpset_int" - : "=q" (res), /* 0 */ - "=m" (*dst) /* 1 */ - : "r" (src), /* 2 */ - "r" (expect), /* 3 */ - "m" (*dst) /* 4 */ - : "memory"); + int res; + register_t lock; + res = 0; + ATOMIC_LOCK_I386(lock); + if (*dst == expect) { + *dst = src; + res = 1; + } + ATOMIC_UNLOCK_I386(lock); return (res); } @@ -264,6 +332,9 @@ atomic_cmpset_int(volatile u_int *dst, u #endif /* CPU_DISABLE_CMPXCHG */ +#undef ATOMIC_LOCK_I386 +#undef ATOMIC_UNLOCK_I386 + /* * Atomically add the value of v to the integer pointed to by p and return * the previous value of *p. @@ -394,8 +465,11 @@ ATOMIC_STORE(long); #ifndef WANT_FUNCTIONS #ifdef _KERNEL +extern int (*atomic_cmpset_64)(volatile uint64_t *, uint64_t, uint64_t); extern uint64_t (*atomic_load_acq_64)(volatile uint64_t *); extern void (*atomic_store_rel_64)(volatile uint64_t *, uint64_t); +extern uint64_t (*atomic_swap_64)(volatile uint64_t *, uint64_t); +extern int (*atomic_testandset_64)(volatile uint64_t *, int); #endif static __inline int From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 00:20:05 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9615D725; Fri, 2 Aug 2013 00:20:05 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 7501B2268; Fri, 2 Aug 2013 00:20:05 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r720K50p099847; Fri, 2 Aug 2013 00:20:05 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r720K5Gu099845; Fri, 2 Aug 2013 00:20:05 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308020020.r720K5Gu099845@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 2 Aug 2013 00:20:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253877 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 00:20:05 -0000 Author: jkim Date: Fri Aug 2 00:20:04 2013 New Revision: 253877 URL: http://svnweb.freebsd.org/changeset/base/253877 Log: Reimplement atomic operations on PDEs and PTEs in pmap.h. This change significantly reduces duplicate code. Also, it may improve and even correct some questionable implementations. Modified: projects/atomic64/sys/amd64/include/pmap.h projects/atomic64/sys/i386/include/pmap.h Modified: projects/atomic64/sys/amd64/include/pmap.h ============================================================================== --- projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 00:08:00 2013 (r253876) +++ projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 00:20:04 2013 (r253877) @@ -185,41 +185,13 @@ extern u_int64_t KPML4phys; /* physical pt_entry_t *vtopte(vm_offset_t); #define vtophys(va) pmap_kextract(((vm_offset_t) (va))) -static __inline pt_entry_t -pte_load(pt_entry_t *ptep) -{ - pt_entry_t r; - - r = *ptep; - return (r); -} - -static __inline pt_entry_t -pte_load_store(pt_entry_t *ptep, pt_entry_t pte) -{ - pt_entry_t r; - - __asm __volatile( - "xchgq %0,%1" - : "=m" (*ptep), - "=r" (r) - : "1" (pte), - "m" (*ptep)); - return (r); -} - -#define pte_load_clear(pte) atomic_readandclear_long(pte) - -static __inline void -pte_store(pt_entry_t *ptep, pt_entry_t pte) -{ +#define pte_load(ptep) atomic_load_acq_long(ptep) +#define pte_load_store(ptep, pte) atomic_swap_long(ptep, pte) +#define pte_load_clear(pte) atomic_swap_long(pte, 0) +#define pte_store(ptep, pte) atomic_store_rel_long(ptep, pte) +#define pte_clear(ptep) atomic_store_rel_long(ptep, 0) - *ptep = pte; -} - -#define pte_clear(ptep) pte_store((ptep), (pt_entry_t)0ULL) - -#define pde_store(pdep, pde) pte_store((pdep), (pde)) +#define pde_store(pdep, pde) atomic_store_rel_long(pdep, pde) extern pt_entry_t pg_nx; Modified: projects/atomic64/sys/i386/include/pmap.h ============================================================================== --- projects/atomic64/sys/i386/include/pmap.h Fri Aug 2 00:08:00 2013 (r253876) +++ projects/atomic64/sys/i386/include/pmap.h Fri Aug 2 00:20:04 2013 (r253877) @@ -326,98 +326,27 @@ pmap_kextract(vm_offset_t va) #if defined(PAE) && !defined(XEN) -#define pde_cmpset(pdep, old, new) \ - atomic_cmpset_64((pdep), (old), (new)) - -static __inline pt_entry_t -pte_load(pt_entry_t *ptep) -{ - pt_entry_t r; - - __asm __volatile( - "lock; cmpxchg8b %1" - : "=A" (r) - : "m" (*ptep), "a" (0), "d" (0), "b" (0), "c" (0)); - return (r); -} - -static __inline pt_entry_t -pte_load_store(pt_entry_t *ptep, pt_entry_t v) -{ - pt_entry_t r; - - r = *ptep; - __asm __volatile( - "1:\n" - "\tlock; cmpxchg8b %1\n" - "\tjnz 1b" - : "+A" (r) - : "m" (*ptep), "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32))); - return (r); -} - -/* XXXRU move to atomic.h? */ -static __inline int -atomic_cmpset_64(volatile uint64_t *dst, uint64_t exp, uint64_t src) -{ - int64_t res = exp; - - __asm __volatile ( - " lock ; " - " cmpxchg8b %2 ; " - " setz %%al ; " - " movzbl %%al,%0 ; " - "# atomic_cmpset_64" - : "+A" (res), /* 0 (result) */ - "=m" (*dst) /* 1 */ - : "m" (*dst), /* 2 */ - "b" ((uint32_t)src), - "c" ((uint32_t)(src >> 32))); - - return (res); -} - -#define pte_load_clear(ptep) pte_load_store((ptep), (pt_entry_t)0ULL) - -#define pte_store(ptep, pte) pte_load_store((ptep), (pt_entry_t)pte) +#define pde_cmpset(pdep, old, new) atomic_cmpset_64_i586(pdep, old, new) +#define pte_load(ptep) atomic_load_acq_64_i586(ptep) +#define pte_load_store(ptep, pte) atomic_swap_64_i586(ptep, pte) +#define pte_load_clear(ptep) atomic_swap_64_i586(ptep, 0) +#define pte_store(ptep, pte) atomic_store_rel_64_i586(ptep, pte) extern pt_entry_t pg_nx; -#elif !defined(PAE) && !defined (XEN) - -#define pde_cmpset(pdep, old, new) \ - atomic_cmpset_int((pdep), (old), (new)) - -static __inline pt_entry_t -pte_load(pt_entry_t *ptep) -{ - pt_entry_t r; - - r = *ptep; - return (r); -} - -static __inline pt_entry_t -pte_load_store(pt_entry_t *ptep, pt_entry_t pte) -{ - __asm volatile("xchgl %0, %1" : "+m" (*ptep), "+r" (pte)); - return (pte); -} - -#define pte_load_clear(pte) atomic_readandclear_int(pte) - -static __inline void -pte_store(pt_entry_t *ptep, pt_entry_t pte) -{ +#elif !defined(PAE) && !defined(XEN) - *ptep = pte; -} +#define pde_cmpset(pdep, old, new) atomic_cmpset_int(pdep, old, new) +#define pte_load(ptep) atomic_load_acq_int(ptep) +#define pte_load_store(ptep, pte) atomic_swap_int(ptep, pte) +#define pte_load_clear(pte) atomic_swap_int(pte, 0) +#define pte_store(ptep, pte) atomic_store_rel_int(ptep, pte) #endif /* PAE */ -#define pte_clear(ptep) pte_store((ptep), (pt_entry_t)0ULL) +#define pte_clear(ptep) pte_store(ptep, 0) -#define pde_store(pdep, pde) pte_store((pdep), (pde)) +#define pde_store(pdep, pde) pte_store(pdep, pde) #endif /* _KERNEL */ From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 05:36:06 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 3307DE85; Fri, 2 Aug 2013 05:36:06 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 0765E2535; Fri, 2 Aug 2013 05:36:06 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r725a5uS096733; Fri, 2 Aug 2013 05:36:05 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r725a5VO096731; Fri, 2 Aug 2013 05:36:05 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308020536.r725a5VO096731@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 2 Aug 2013 05:36:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253881 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 05:36:06 -0000 Author: jkim Date: Fri Aug 2 05:36:05 2013 New Revision: 253881 URL: http://svnweb.freebsd.org/changeset/base/253881 Log: - pde_store() and pte_store() do not need release semantics. [1] - Remove redundant pte_load() macros. Pointed by: alc [1] Modified: projects/atomic64/sys/amd64/include/pmap.h projects/atomic64/sys/i386/include/pmap.h Modified: projects/atomic64/sys/amd64/include/pmap.h ============================================================================== --- projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 05:25:11 2013 (r253880) +++ projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 05:36:05 2013 (r253881) @@ -185,13 +185,18 @@ extern u_int64_t KPML4phys; /* physical pt_entry_t *vtopte(vm_offset_t); #define vtophys(va) pmap_kextract(((vm_offset_t) (va))) -#define pte_load(ptep) atomic_load_acq_long(ptep) #define pte_load_store(ptep, pte) atomic_swap_long(ptep, pte) -#define pte_load_clear(pte) atomic_swap_long(pte, 0) -#define pte_store(ptep, pte) atomic_store_rel_long(ptep, pte) -#define pte_clear(ptep) atomic_store_rel_long(ptep, 0) - -#define pde_store(pdep, pde) atomic_store_rel_long(pdep, pde) +#define pte_load_clear(ptep) atomic_swap_long(ptep, 0) +#define pte_store(ptep, pte) \ + do { \ + *(pt_entry_t *)(ptep) = (pt_entry_t)(pte); \ + } while (0) +#define pte_clear(ptep) pte_store(ptep, 0) + +#define pde_store(pdep, pde) \ + do { \ + *(pd_entry_t *)(pdep) = (pd_entry_t)(pde); \ + } while (0) extern pt_entry_t pg_nx; Modified: projects/atomic64/sys/i386/include/pmap.h ============================================================================== --- projects/atomic64/sys/i386/include/pmap.h Fri Aug 2 05:25:11 2013 (r253880) +++ projects/atomic64/sys/i386/include/pmap.h Fri Aug 2 05:36:05 2013 (r253881) @@ -327,7 +327,6 @@ pmap_kextract(vm_offset_t va) #if defined(PAE) && !defined(XEN) #define pde_cmpset(pdep, old, new) atomic_cmpset_64_i586(pdep, old, new) -#define pte_load(ptep) atomic_load_acq_64_i586(ptep) #define pte_load_store(ptep, pte) atomic_swap_64_i586(ptep, pte) #define pte_load_clear(ptep) atomic_swap_64_i586(ptep, 0) #define pte_store(ptep, pte) atomic_store_rel_64_i586(ptep, pte) @@ -337,10 +336,12 @@ extern pt_entry_t pg_nx; #elif !defined(PAE) && !defined(XEN) #define pde_cmpset(pdep, old, new) atomic_cmpset_int(pdep, old, new) -#define pte_load(ptep) atomic_load_acq_int(ptep) #define pte_load_store(ptep, pte) atomic_swap_int(ptep, pte) -#define pte_load_clear(pte) atomic_swap_int(pte, 0) -#define pte_store(ptep, pte) atomic_store_rel_int(ptep, pte) +#define pte_load_clear(ptep) atomic_swap_int(ptep, 0) +#define pte_store(ptep, pte) \ + do { \ + *(pt_entry_t *)(ptep) = (pt_entry_t)(pte); + while (0) #endif /* PAE */ From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 05:52:54 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 667273FD; Fri, 2 Aug 2013 05:52:54 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 53A4025A1; Fri, 2 Aug 2013 05:52:54 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r725qsRn002235; Fri, 2 Aug 2013 05:52:54 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r725qrGN002233; Fri, 2 Aug 2013 05:52:53 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308020552.r725qrGN002233@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 2 Aug 2013 05:52:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253882 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 05:52:54 -0000 Author: jkim Date: Fri Aug 2 05:52:53 2013 New Revision: 253882 URL: http://svnweb.freebsd.org/changeset/base/253882 Log: Fix incomplete pte_store() macros in the previous commit. Modified: projects/atomic64/sys/amd64/include/pmap.h projects/atomic64/sys/i386/include/pmap.h Modified: projects/atomic64/sys/amd64/include/pmap.h ============================================================================== --- projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 05:36:05 2013 (r253881) +++ projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 05:52:53 2013 (r253882) @@ -189,14 +189,11 @@ pt_entry_t *vtopte(vm_offset_t); #define pte_load_clear(ptep) atomic_swap_long(ptep, 0) #define pte_store(ptep, pte) \ do { \ - *(pt_entry_t *)(ptep) = (pt_entry_t)(pte); \ + *(u_long *)(ptep) = (u_long)(pte); \ } while (0) #define pte_clear(ptep) pte_store(ptep, 0) -#define pde_store(pdep, pde) \ - do { \ - *(pd_entry_t *)(pdep) = (pd_entry_t)(pde); \ - } while (0) +#define pde_store(pdep, pde) pte_store(pdep, pde) extern pt_entry_t pg_nx; Modified: projects/atomic64/sys/i386/include/pmap.h ============================================================================== --- projects/atomic64/sys/i386/include/pmap.h Fri Aug 2 05:36:05 2013 (r253881) +++ projects/atomic64/sys/i386/include/pmap.h Fri Aug 2 05:52:53 2013 (r253882) @@ -340,8 +340,8 @@ extern pt_entry_t pg_nx; #define pte_load_clear(ptep) atomic_swap_int(ptep, 0) #define pte_store(ptep, pte) \ do { \ - *(pt_entry_t *)(ptep) = (pt_entry_t)(pte); - while (0) + *(u_int *)(ptep) = (u_int)(pte); \ + } while (0) #endif /* PAE */ From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 06:31:12 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 09C66ACE; Fri, 2 Aug 2013 06:31:12 +0000 (UTC) (envelope-from neel@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id E9B47269B; Fri, 2 Aug 2013 06:31:11 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r726VBUD014463; Fri, 2 Aug 2013 06:31:11 GMT (envelope-from neel@svn.freebsd.org) Received: (from neel@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r726VADS014454; Fri, 2 Aug 2013 06:31:10 GMT (envelope-from neel@svn.freebsd.org) Message-Id: <201308020631.r726VADS014454@svn.freebsd.org> From: Neel Natu Date: Fri, 2 Aug 2013 06:31:10 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253884 - in projects/bhyve_npt_pmap: lib/libvmmapi sys/amd64/amd64 sys/amd64/include sys/amd64/vmm usr.sbin/bhyvectl X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 06:31:12 -0000 Author: neel Date: Fri Aug 2 06:31:09 2013 New Revision: 253884 URL: http://svnweb.freebsd.org/changeset/base/253884 Log: Add a debugging aid to get the page table entries that map a guest physical address to a host physical address. The option "--get-gpa-pmap " for /usr/sbin/bhyvectl can be used to inspect the mapping from the command line. Modified: projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c projects/bhyve_npt_pmap/sys/amd64/include/pmap.h projects/bhyve_npt_pmap/sys/amd64/include/vmm.h projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c projects/bhyve_npt_pmap/sys/amd64/vmm/vmm_dev.c projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c Modified: projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c ============================================================================== --- projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.c Fri Aug 2 06:31:09 2013 (r253884) @@ -741,3 +741,23 @@ vcpu_reset(struct vmctx *vmctx, int vcpu done: return (error); } + +int +vm_get_gpa_pmap(struct vmctx *ctx, uint64_t gpa, uint64_t *pte, int *num) +{ + int error, i; + struct vm_gpa_pte gpapte; + + bzero(&gpapte, sizeof(gpapte)); + gpapte.gpa = gpa; + + error = ioctl(ctx->fd, VM_GET_GPA_PMAP, &gpapte); + + if (error == 0) { + *num = gpapte.ptenum; + for (i = 0; i < gpapte.ptenum; i++) + pte[i] = gpapte.pte[i]; + } + + return (error); +} Modified: projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h ============================================================================== --- projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/lib/libvmmapi/vmmapi.h Fri Aug 2 06:31:09 2013 (r253884) @@ -48,6 +48,7 @@ void vm_destroy(struct vmctx *ctx); int vm_get_memory_seg(struct vmctx *ctx, vm_paddr_t gpa, size_t *ret_len); int vm_setup_memory(struct vmctx *ctx, size_t len, enum vm_mmap_style s); void *vm_map_gpa(struct vmctx *ctx, vm_paddr_t gaddr, size_t len); +int vm_get_gpa_pmap(struct vmctx *, uint64_t gpa, uint64_t *pte, int *num); uint32_t vm_get_lowmem_limit(struct vmctx *ctx); void vm_set_lowmem_limit(struct vmctx *ctx, uint32_t limit); int vm_set_desc(struct vmctx *ctx, int vcpu, int reg, Modified: projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/sys/amd64/amd64/pmap.c Fri Aug 2 06:31:09 2013 (r253884) @@ -5921,6 +5921,41 @@ pmap_align_superpage(vm_object_t object, *addr = ((*addr + PDRMASK) & ~PDRMASK) + superpage_offset; } +void +pmap_get_mapping(pmap_t pmap, vm_offset_t va, uint64_t *ptr, int *num) +{ + pml4_entry_t *pml4; + pdp_entry_t *pdp; + pd_entry_t *pde; + pt_entry_t *pte; + int idx; + + idx = 0; + PMAP_LOCK(pmap); + + pml4 = pmap_pml4e(pmap, va); + ptr[idx++] = *pml4; + if ((*pml4 & PG_V) == 0) + goto done; + + pdp = pmap_pml4e_to_pdpe(pml4, va); + ptr[idx++] = *pdp; + if ((*pdp & PG_V) == 0 || (*pdp & PG_PS) != 0) + goto done; + + pde = pmap_pdpe_to_pde(pdp, va); + ptr[idx++] = *pde; + if ((*pde & PG_V) == 0 || (*pde & PG_PS) != 0) + goto done; + + pte = pmap_pde_to_pte(pde, va); + ptr[idx++] = *pte; + +done: + PMAP_UNLOCK(pmap); + *num = idx; +} + #include "opt_ddb.h" #ifdef DDB #include Modified: projects/bhyve_npt_pmap/sys/amd64/include/pmap.h ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/include/pmap.h Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/sys/amd64/include/pmap.h Fri Aug 2 06:31:09 2013 (r253884) @@ -341,7 +341,7 @@ void pmap_invalidate_all(pmap_t); void pmap_invalidate_cache(void); void pmap_invalidate_cache_pages(vm_page_t *pages, int count); void pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva); - +void pmap_get_mapping(pmap_t pmap, vm_offset_t va, uint64_t *ptr, int *num); #endif /* _KERNEL */ #endif /* !LOCORE */ Modified: projects/bhyve_npt_pmap/sys/amd64/include/vmm.h ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/include/vmm.h Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/sys/amd64/include/vmm.h Fri Aug 2 06:31:09 2013 (r253884) @@ -152,7 +152,7 @@ vcpu_is_running(struct vm *vm, int vcpu, void *vcpu_stats(struct vm *vm, int vcpu); void vm_interrupt_hostcpu(struct vm *vm, int vcpu); - +struct vmspace *vm_get_vmspace(struct vm *vm); #endif /* KERNEL */ #include Modified: projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/sys/amd64/include/vmm_dev.h Fri Aug 2 06:31:09 2013 (r253884) @@ -135,6 +135,12 @@ struct vm_x2apic { enum x2apic_state state; }; +struct vm_gpa_pte { + uint64_t gpa; /* in */ + uint64_t pte[4]; /* out */ + int ptenum; +}; + enum { IOCNUM_RUN, IOCNUM_MAP_MEMORY, @@ -157,6 +163,7 @@ enum { IOCNUM_VM_STAT_DESC, IOCNUM_SET_X2APIC_STATE, IOCNUM_GET_X2APIC_STATE, + IOCNUM_GET_GPA_PMAP, }; #define VM_RUN \ @@ -201,4 +208,6 @@ enum { _IOW('v', IOCNUM_SET_X2APIC_STATE, struct vm_x2apic) #define VM_GET_X2APIC_STATE \ _IOWR('v', IOCNUM_GET_X2APIC_STATE, struct vm_x2apic) +#define VM_GET_GPA_PMAP \ + _IOWR('v', IOCNUM_GET_GPA_PMAP, struct vm_gpa_pte) #endif Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/vmm.c Fri Aug 2 06:31:09 2013 (r253884) @@ -1135,3 +1135,10 @@ vm_interrupt_hostcpu(struct vm *vm, int } vcpu_unlock(vcpu); } + +struct vmspace * +vm_get_vmspace(struct vm *vm) +{ + + return (vm->vmspace); +} Modified: projects/bhyve_npt_pmap/sys/amd64/vmm/vmm_dev.c ============================================================================== --- projects/bhyve_npt_pmap/sys/amd64/vmm/vmm_dev.c Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/sys/amd64/vmm/vmm_dev.c Fri Aug 2 06:31:09 2013 (r253884) @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include @@ -159,6 +160,7 @@ vmmdev_ioctl(struct cdev *cdev, u_long c struct vm_stats *vmstats; struct vm_stat_desc *statdesc; struct vm_x2apic *x2apic; + struct vm_gpa_pte *gpapte; sc = vmmdev_lookup2(cdev); if (sc == NULL) @@ -346,6 +348,12 @@ vmmdev_ioctl(struct cdev *cdev, u_long c error = vm_get_x2apic_state(sc->vm, x2apic->cpuid, &x2apic->state); break; + case VM_GET_GPA_PMAP: + gpapte = (struct vm_gpa_pte *)data; + pmap_get_mapping(vmspace_pmap(vm_get_vmspace(sc->vm)), + gpapte->gpa, gpapte->pte, &gpapte->ptenum); + error = 0; + break; default: error = ENOTTY; break; Modified: projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c ============================================================================== --- projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c Fri Aug 2 06:25:28 2013 (r253883) +++ projects/bhyve_npt_pmap/usr.sbin/bhyvectl/bhyvectl.c Fri Aug 2 06:31:09 2013 (r253884) @@ -188,12 +188,13 @@ usage(void) " [--unassign-pptdev=]\n" " [--set-mem=]\n" " [--get-lowmem]\n" - " [--get-highmem]\n", + " [--get-highmem]\n" + " [--get-gpa-pmap]\n", progname); exit(1); } -static int get_stats, getcap, setcap, capval; +static int get_stats, getcap, setcap, capval, get_gpa_pmap; static const char *capname; static int create, destroy, get_lowmem, get_highmem; static uint64_t memsize; @@ -377,17 +378,18 @@ enum { SET_CAP, CAPNAME, UNASSIGN_PPTDEV, + GET_GPA_PMAP, }; int main(int argc, char *argv[]) { char *vmname; - int error, ch, vcpu; - vm_paddr_t gpa; + int error, ch, vcpu, ptenum; + vm_paddr_t gpa, gpa_pmap; size_t len; struct vm_exit vmexit; - uint64_t ctl, eptp, bm, addr, u64; + uint64_t ctl, eptp, bm, addr, u64, pteval[4], *pte; struct vmctx *ctx; uint64_t cr0, cr3, cr4, dr7, rsp, rip, rflags, efer, pat; @@ -427,6 +429,7 @@ main(int argc, char *argv[]) { "capname", REQ_ARG, 0, CAPNAME }, { "unassign-pptdev", REQ_ARG, 0, UNASSIGN_PPTDEV }, { "setcap", REQ_ARG, 0, SET_CAP }, + { "get-gpa-pmap", REQ_ARG, 0, GET_GPA_PMAP }, { "getcap", NO_ARG, &getcap, 1 }, { "get-stats", NO_ARG, &get_stats, 1 }, { "get-desc-ds",NO_ARG, &get_desc_ds, 1 }, @@ -666,6 +669,10 @@ main(int argc, char *argv[]) capval = strtoul(optarg, NULL, 0); setcap = 1; break; + case GET_GPA_PMAP: + gpa_pmap = strtoul(optarg, NULL, 0); + get_gpa_pmap = 1; + break; case CAPNAME: capname = optarg; break; @@ -1457,6 +1464,17 @@ main(int argc, char *argv[]) printf("Capability \"%s\" is not available\n", capname); } + if (!error && get_gpa_pmap) { + error = vm_get_gpa_pmap(ctx, gpa_pmap, pteval, &ptenum); + if (error == 0) { + printf("gpa %#lx:", gpa_pmap); + pte = &pteval[0]; + while (ptenum-- > 0) + printf(" %#lx", *pte++); + printf("\n"); + } + } + if (!error && (getcap || get_all)) { int captype, val, getcaptype; From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 08:53:51 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 50A5EB94; Fri, 2 Aug 2013 08:53:51 +0000 (UTC) (envelope-from jilles@stack.nl) Received: from mx1.stack.nl (relay02.stack.nl [IPv6:2001:610:1108:5010::104]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 174C62C1A; Fri, 2 Aug 2013 08:53:51 +0000 (UTC) Received: from snail.stack.nl (snail.stack.nl [IPv6:2001:610:1108:5010::131]) by mx1.stack.nl (Postfix) with ESMTP id A612E3592F7; Fri, 2 Aug 2013 10:53:48 +0200 (CEST) Received: by snail.stack.nl (Postfix, from userid 1677) id 8C5DB28494; Fri, 2 Aug 2013 10:53:48 +0200 (CEST) Date: Fri, 2 Aug 2013 10:53:48 +0200 From: Jilles Tjoelker To: Jung-uk Kim Subject: Re: svn commit: r253875 - in projects/atomic64/sys: amd64/include i386/include Message-ID: <20130802085348.GA49944@stack.nl> References: <201308012351.r71NpKxk092536@svn.freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <201308012351.r71NpKxk092536@svn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 08:53:51 -0000 On Thu, Aug 01, 2013 at 11:51:20PM +0000, Jung-uk Kim wrote: > Author: jkim > Date: Thu Aug 1 23:51:20 2013 > New Revision: 253875 > URL: http://svnweb.freebsd.org/changeset/base/253875 > Log: > Add a new atomic operation atomic_testandset for x86. This operation > atomically tests and sets a bit, i. e., > tmp = (*p & v) != 0; *p |= v; return (tmp) > where > > v = ()1 << s % (sizeof() * NBBY) > Modified: > projects/atomic64/sys/amd64/include/atomic.h > projects/atomic64/sys/i386/include/atomic.h > Modified: projects/atomic64/sys/amd64/include/atomic.h > ============================================================================== > --- projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:38:57 2013 (r253874) > +++ projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:51:20 2013 (r253875) > [snip] > +static __inline int > +atomic_testandset_int(volatile u_int *p, int v) > +{ > + u_char res; > + > + __asm __volatile( > + " " MPLOCKED " " > + " btsl %2, %1 ; " > + " setc %0 ; " > + "# atomic_testandset_int" > + : "=r" (res), /* 0 */ > + "=m" (*p) /* 1 */ > + : "r" (v), /* 2 */ > + "m" (*p) /* 3 */ > + : "cc"); > + return (res); > +} > [snip] On most processors, a BTS on memory is faster if the bit number is an immediate than if it is a register. This could be permitted in the constraint. Side effect: on the machine code level, the immediate is limited to the number of bits in the operand size; only few assemblers adjust the operand's offset to compensate. Therefore, behaviour may change for bit numbers greater than 31 or 63. -- Jilles Tjoelker From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 11:31:29 2013 Return-Path: Delivered-To: svn-src-projects@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 03060CFE; Fri, 2 Aug 2013 11:31:29 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail108.syd.optusnet.com.au (mail108.syd.optusnet.com.au [211.29.132.59]) by mx1.freebsd.org (Postfix) with ESMTP id 810CD2283; Fri, 2 Aug 2013 11:31:24 +0000 (UTC) Received: from c122-106-156-23.carlnfd1.nsw.optusnet.com.au (c122-106-156-23.carlnfd1.nsw.optusnet.com.au [122.106.156.23]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id D37441A2E12; Fri, 2 Aug 2013 21:31:14 +1000 (EST) Date: Fri, 2 Aug 2013 21:31:13 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Jung-uk Kim Subject: Re: svn commit: r253872 - in projects/atomic64/sys: amd64/include i386/include In-Reply-To: <201308012320.r71NKWlN083697@svn.freebsd.org> Message-ID: <20130802201545.Y1195@besplex.bde.org> References: <201308012320.r71NKWlN083697@svn.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=Yos2GeoX c=1 sm=1 tr=0 a=ebeQFi2P/qHVC0Yw9JDJ4g==:117 a=PO7r1zJSAAAA:8 a=GPtdIDiJuvUA:10 a=kj9zAlcOel0A:10 a=JzwRw_2MAAAA:8 a=319NO13Q6JwA:10 a=tgUtnBsCqbOwcrNU3w8A:9 a=CjuIK1q_8ugA:10 Cc: svn-src-projects@FreeBSD.org, src-committers@FreeBSD.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 11:31:29 -0000 On Thu, 1 Aug 2013, Jung-uk Kim wrote: > Log: > Allow any register to be used for the return value. I thought I fixed this in 2006. Actually, I only fixed this for the CPU_DISABLE_CMPXCHG case, which shouldn't exist and only exists on i386. > Modified: projects/atomic64/sys/amd64/include/atomic.h > ============================================================================== > --- projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:02:36 2013 (r253871) > +++ projects/atomic64/sys/amd64/include/atomic.h Thu Aug 1 23:20:31 2013 (r253872) > @@ -138,14 +138,13 @@ atomic_cmpset_int(volatile u_int *dst, u > > __asm __volatile( > " " MPLOCKED " " > - " cmpxchgl %2,%1 ; " > + " cmpxchgl %3, %1 ; " > " sete %0 ; " > - "1: " > "# atomic_cmpset_int" > - : "=a" (res), /* 0 */ > - "=m" (*dst) /* 1 */ > - : "r" (src), /* 2 */ > - "a" (expect), /* 3 */ > + : "=r" (res), /* 0 */ This should be "=q". On amd64, most registers are QI registers so "=r" might work, but it is easier to use the correct constraint. > + "=m" (*dst), /* 1 */ > + "+a" (expect) /* 2 */ The patch is hard to read due to rotating the registers to indicate that 'a' is input-output. I now seem to remember that the hard-coded 'a' register and the difference for the CPU_DISABLE_CMPXCHG cases were intentional. In the CPU_DISABLE_CMPXCHG case, the comparison doesn't clobber any register, so we should use "=q" to let the compiler do the allocation and not copy the "=a" from the !CPU_DISABLE_CMPXCHG case. In the !CPU_DISABLE_CMPXCHG case, we get simpler asm and simplify the task of the register allocator by forcing the useful result into %alm overwriting the clobbered input. Otherwise, the compiler has to notice that %al is dead and reuse it. Not reusing it would require an extra register. > + : "r" (src), /* 3 */ > "m" (*dst) /* 4 */ > : "memory", "cc"); > > ... > Modified: projects/atomic64/sys/i386/include/atomic.h > ============================================================================== > --- projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:02:36 2013 (r253871) > +++ projects/atomic64/sys/i386/include/atomic.h Thu Aug 1 23:20:31 2013 (r253872) > @@ -246,14 +246,13 @@ atomic_cmpset_int(volatile u_int *dst, u > > __asm __volatile( > " " MPLOCKED " " > - " cmpxchgl %2,%1 ; " > - " sete %0 ; " > - "1: " > + " cmpxchgl %3, %1 ; " > + " sete %0 ; " > "# atomic_cmpset_int" > - : "=a" (res), /* 0 */ > - "=m" (*dst) /* 1 */ > - : "r" (src), /* 2 */ > - "a" (expect), /* 3 */ > + : "=r" (res), /* 0 */ This must be "=q". On i386, some registers are not QI registers. "=r" gives a syntax error in the generated asm if a non-QI register is chosen. > + "=m" (*dst), /* 1 */ > + "+a" (expect) /* 2 */ > + : "r" (src), /* 3 */ > "m" (*dst) /* 4 */ > : "memory", "cc"); > I checked one of my old versions for fixing this. It is too large and buggy to show here. It uses the 'q' constraint. The only other good thing in it is is a reminder that the '+a' constraint is a style bug when used as above. The following should be used: u_int junk; ... "=a" (junk) ... "a" (expect) This takes another operand, but makes it clearer that the ouput is unused and has nothing to do with 'expect'. Your version works by abusing 'expect' as a scratch variable to discard the ouput in. 'expect' is a function parameter that isn't used again, so cloberring it is harmless. It is just confusing for both humans and compilers. Compilers should see that both 'junk' and 'expect' are dead, so they can reuse the register previously holding them (the 'a' register here must be used to hold 'expect' as input and then should be used to hold 'res' as output). However, with -g, compilers should generate larger code to keep the clobbered 'expect' and the initialized 'junk' alive for debugging, and normally this is more useful for arg variables, but here it is less useful. Bruce From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 13:52:12 2013 Return-Path: Delivered-To: svn-src-projects@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id ED50DEE2; Fri, 2 Aug 2013 13:52:12 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail108.syd.optusnet.com.au (mail108.syd.optusnet.com.au [211.29.132.59]) by mx1.freebsd.org (Postfix) with ESMTP id B1BB227DA; Fri, 2 Aug 2013 13:52:12 +0000 (UTC) Received: from c122-106-156-23.carlnfd1.nsw.optusnet.com.au (c122-106-156-23.carlnfd1.nsw.optusnet.com.au [122.106.156.23]) by mail108.syd.optusnet.com.au (Postfix) with ESMTPS id 4EB971A2D8D; Fri, 2 Aug 2013 23:52:08 +1000 (EST) Date: Fri, 2 Aug 2013 23:51:58 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Jung-uk Kim Subject: Re: svn commit: r253877 - in projects/atomic64/sys: amd64/include i386/include In-Reply-To: <201308020020.r720K5Gu099845@svn.freebsd.org> Message-ID: <20130802233616.D1711@besplex.bde.org> References: <201308020020.r720K5Gu099845@svn.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=Yos2GeoX c=1 sm=1 tr=0 a=ebeQFi2P/qHVC0Yw9JDJ4g==:117 a=PO7r1zJSAAAA:8 a=neDykAIDxkUA:10 a=kj9zAlcOel0A:10 a=JzwRw_2MAAAA:8 a=319NO13Q6JwA:10 a=xqNytpH3Olhn4sh1VL4A:9 a=CjuIK1q_8ugA:10 Cc: svn-src-projects@FreeBSD.org, src-committers@FreeBSD.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 13:52:13 -0000 On Fri, 2 Aug 2013, Jung-uk Kim wrote: > Log: > Reimplement atomic operations on PDEs and PTEs in pmap.h. This change > significantly reduces duplicate code. Also, it may improve and even correct > some questionable implementations. Do they all (or any) need to be atomic with respect to multiple CPUs? It's hard to see how concurrent accesses to page tables can work worh without higher-level locking than is provided by atomic ops. > Modified: projects/atomic64/sys/amd64/include/pmap.h > ============================================================================== > --- projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 00:08:00 2013 (r253876) > +++ projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 00:20:04 2013 (r253877) > @@ -185,41 +185,13 @@ extern u_int64_t KPML4phys; /* physical > pt_entry_t *vtopte(vm_offset_t); > #define vtophys(va) pmap_kextract(((vm_offset_t) (va))) > > -static __inline pt_entry_t > -pte_load(pt_entry_t *ptep) > -{ > - pt_entry_t r; > - > - r = *ptep; > - return (r); > -} This function wasn't atomic with respect to multiple CPUs. Except on i386 with PAE, but then it changes a 64-bit object on a 32-bit CPU, so it needs some locking just to be atomic with respect to a single CPU. > -static __inline pt_entry_t > -pte_load_store(pt_entry_t *ptep, pt_entry_t pte) > -{ > - pt_entry_t r; > - > - __asm __volatile( > - "xchgq %0,%1" > - : "=m" (*ptep), > - "=r" (r) > - : "1" (pte), > - "m" (*ptep)); > - return (r); > -} This was the main one that was atomic with respect to multiple CPUs on both amd64 and i386. This seems to be accidental -- xchg to memory gives a lock prefix and slowness whether you want it or not. > - > -#define pte_load_clear(pte) atomic_readandclear_long(pte) > - > -static __inline void > -pte_store(pt_entry_t *ptep, pt_entry_t pte) > -{ > +#define pte_load(ptep) atomic_load_acq_long(ptep) > +#define pte_load_store(ptep, pte) atomic_swap_long(ptep, pte) > +#define pte_load_clear(pte) atomic_swap_long(pte, 0) > +#define pte_store(ptep, pte) atomic_store_rel_long(ptep, pte) > +#define pte_clear(ptep) atomic_store_rel_long(ptep, 0) > > - *ptep = pte; > -} pte_store() was also not atomic with respect to multiple CPUs. So almost everything was not atomic with respect to multiple CPUs, except for PAE on i386. Bruce From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 14:35:44 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 932BFA9A; Fri, 2 Aug 2013 14:35:44 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-wg0-x22e.google.com (mail-wg0-x22e.google.com [IPv6:2a00:1450:400c:c00::22e]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id CFB9229DC; Fri, 2 Aug 2013 14:35:43 +0000 (UTC) Received: by mail-wg0-f46.google.com with SMTP id k13so570123wgh.25 for ; Fri, 02 Aug 2013 07:35:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:sender:in-reply-to:references:date:message-id :subject:from:to:cc:content-type; bh=0DjF5/8hrqJYr9dSa8EimqGyEHh3VRUI/zpCCHWfXEA=; b=guVwD00CdlprkQJqEz3zkvY7Nh0tQDm7ArqzmKG4p9haiN7hrb7YAHwhw2wk5w/MAE sJ1ZYDcwvCJkXd+2rrURVbfm3+vxuYwoKhdUi7OyVvtlGjMDgtE8GheQRgVtQIhnaiXA qGDxjkp9jUzOYd4a6V/ovuwSY8eV6uYQwT7oftY0970udeLwV8ZPrEBP5S+0Wgy5gPhR 2AeWQAi5G+ikZUXp2jBOx9M8yWpZX5b0+c1Au8s6h38+7pdyIIiIWpIZgGLZ+zlPQvV1 Lc1FJyaifzQp49rZlw60zBN5kDdcCw6P1Pi8yj40ACPOqKip9/JmUCsyvZUtStPktoRW pbSg== MIME-Version: 1.0 X-Received: by 10.181.13.7 with SMTP id eu7mr2053005wid.54.1375454142199; Fri, 02 Aug 2013 07:35:42 -0700 (PDT) Sender: asmrookie@gmail.com Received: by 10.217.142.76 with HTTP; Fri, 2 Aug 2013 07:35:42 -0700 (PDT) In-Reply-To: <201308020008.r7208033096591@svn.freebsd.org> References: <201308020008.r7208033096591@svn.freebsd.org> Date: Fri, 2 Aug 2013 16:35:42 +0200 X-Google-Sender-Auth: hZYk4n91fNfK74wgXbogRJ5TVSg Message-ID: Subject: Re: svn commit: r253876 - in projects/atomic64/sys/i386: i386 include From: Attilio Rao To: Jung-uk Kim Content-Type: text/plain; charset=UTF-8 Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: attilio@FreeBSD.org List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 14:35:44 -0000 On Fri, Aug 2, 2013 at 2:08 AM, Jung-uk Kim wrote: > Author: jkim > Date: Fri Aug 2 00:08:00 2013 > New Revision: 253876 > URL: http://svnweb.freebsd.org/changeset/base/253876 > > Log: > - Implement atomic_cmpset_64(), atomic_swap_64(), and atomic_testandset_64() > for i386. > - Reimplement atomic_*_64_i386() in C to make it more pleasant to read. > Note the generated code may not be optimal but much easier to maintain. Please don't do this. The reason why we never had 64 bits atomic on 32-bits architectures is because we never could implement them in efficient way, namely without disabling interrupts. If we make 64 bits atomics available on every 32 bits architecure by implementing the slow way we could end up developing some patterns in MI layers which depend on them that end up by being much slower than expected. If you want to implement such functions to use only on i386 internal code it is a different story but you must absolutely use a different name by atomic_xxx_64() to stress-out the difference, either comment out that they are heavier than expected and should be careful used. Attilio -- Peace can only be achieved by understanding - A. Einstein From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 14:39:14 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id B4749C03; Fri, 2 Aug 2013 14:39:14 +0000 (UTC) (envelope-from asmrookie@gmail.com) Received: from mail-we0-x229.google.com (mail-we0-x229.google.com [IPv6:2a00:1450:400c:c03::229]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id F19DA2A09; Fri, 2 Aug 2013 14:39:13 +0000 (UTC) Received: by mail-we0-f169.google.com with SMTP id n5so598038wev.14 for ; Fri, 02 Aug 2013 07:39:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:reply-to:sender:in-reply-to:references:date :x-google-sender-auth:message-id:subject:from:to:cc:content-type; bh=wOt4Xrr0If3nPMqFISKXvmcUQB3T3dzyzLMgstKhJio=; b=JlXOnjOlsYa00O/nbUBBR8Xdzo1IyfxWUkMpg6CHv10I/f/a1yVSR6PBOUYUvnKfyN 5td1lImjsx4AItGzHRDiveziY9gNHaoCanB4IpNiQrmkYFbabXpbVIzUmBSsdJH65c6M AjoG1cFa5yGncBRc+KBpeU4yXCmknf2pjpis6fHeBLkLSK0b/I6QSYgwODKFpHXtIfy+ 4P4E6teW7q02z1RkOnq8jYNR1yITsqzJNu8w5zK4wrT4peSSVQJeofJ1SDb3/fy3Xa1x NSeB9KFkYDYT090fKH7kDU8fxAStpB4LBoEY9gA5eh1wwVXfl1FqftOXAzb7Wv5N57Ol UHsA== MIME-Version: 1.0 X-Received: by 10.180.149.134 with SMTP id ua6mr2081868wib.51.1375454352187; Fri, 02 Aug 2013 07:39:12 -0700 (PDT) Sender: asmrookie@gmail.com Received: by 10.217.142.76 with HTTP; Fri, 2 Aug 2013 07:39:12 -0700 (PDT) In-Reply-To: <201308020020.r720K5Gu099845@svn.freebsd.org> References: <201308020020.r720K5Gu099845@svn.freebsd.org> Date: Fri, 2 Aug 2013 16:39:12 +0200 X-Google-Sender-Auth: u2RmR-mhOBJJNWwPmCm3oM1WHrQ Message-ID: Subject: Re: svn commit: r253877 - in projects/atomic64/sys: amd64/include i386/include From: Attilio Rao To: Jung-uk Kim Content-Type: text/plain; charset=UTF-8 Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: attilio@FreeBSD.org List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 14:39:14 -0000 On Fri, Aug 2, 2013 at 2:20 AM, Jung-uk Kim wrote: > Author: jkim > Date: Fri Aug 2 00:20:04 2013 > New Revision: 253877 > URL: http://svnweb.freebsd.org/changeset/base/253877 > > Log: > Reimplement atomic operations on PDEs and PTEs in pmap.h. This change > significantly reduces duplicate code. Also, it may improve and even correct > some questionable implementations. I think this is not the right way to do it, in particular the loadstore part. What you should do is to implement atomic_readandclear_* with an atomic_readandset_* (so taking a parameter as a set value) and then use atomic_readandset_*() for PTE operations. Attilio -- Peace can only be achieved by understanding - A. Einstein From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 15:42:18 2013 Return-Path: Delivered-To: svn-src-projects@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D05A3304; Fri, 2 Aug 2013 15:42:18 +0000 (UTC) (envelope-from alc@rice.edu) Received: from pp1.rice.edu (proofpoint1.mail.rice.edu [128.42.201.100]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 9DC8B2D06; Fri, 2 Aug 2013 15:42:18 +0000 (UTC) Received: from pps.filterd (pp1.rice.edu [127.0.0.1]) by pp1.rice.edu (8.14.5/8.14.5) with SMTP id r727McW3006998; Fri, 2 Aug 2013 10:42:16 -0500 Received: from mh10.mail.rice.edu (mh10.mail.rice.edu [128.42.201.30]) by pp1.rice.edu with ESMTP id 1dsymjmhvw-1; Fri, 02 Aug 2013 10:42:16 -0500 X-Virus-Scanned: by amavis-2.7.0 at mh10.mail.rice.edu, auth channel Received: from [192.168.5.247] (unknown [12.107.116.132]) (using TLSv1 with cipher RC4-MD5 (128/128 bits)) (No client certificate requested) (Authenticated sender: alc) by mh10.mail.rice.edu (Postfix) with ESMTPSA id DCE48603E2; Fri, 2 Aug 2013 10:42:15 -0500 (CDT) Subject: Re: svn commit: r253877 - in projects/atomic64/sys: amd64/include i386/include Mime-Version: 1.0 (Apple Message framework v1085) Content-Type: text/plain; charset=us-ascii From: Alan Cox In-Reply-To: <20130802233616.D1711@besplex.bde.org> Date: Fri, 2 Aug 2013 08:41:58 -0700 Content-Transfer-Encoding: quoted-printable Message-Id: References: <201308020020.r720K5Gu099845@svn.freebsd.org> <20130802233616.D1711@besplex.bde.org> To: Bruce Evans X-Mailer: Apple Mail (2.1085) Cc: svn-src-projects@FreeBSD.org, src-committers@FreeBSD.org, Jung-uk Kim X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 15:42:19 -0000 On Aug 2, 2013, at 6:51 AM, Bruce Evans wrote: > On Fri, 2 Aug 2013, Jung-uk Kim wrote: >=20 >> Log: >> Reimplement atomic operations on PDEs and PTEs in pmap.h. This = change >> significantly reduces duplicate code. Also, it may improve and even = correct >> some questionable implementations. >=20 > Do they all (or any) need to be atomic with respect to multiple CPUs? > It's hard to see how concurrent accesses to page tables can work worh > without higher-level locking than is provided by atomic ops. >=20 Some do, so that we do not lose a PG_M ("dirty") bit being set = concurrently by another processor. However. none of these accesses need = to be labeled as acquires or releases. =20 >> Modified: projects/atomic64/sys/amd64/include/pmap.h >> = =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D >> --- projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 = 00:08:00 2013 (r253876) >> +++ projects/atomic64/sys/amd64/include/pmap.h Fri Aug 2 = 00:20:04 2013 (r253877) >> @@ -185,41 +185,13 @@ extern u_int64_t KPML4phys; /* physical >> pt_entry_t *vtopte(vm_offset_t); >> #define vtophys(va) pmap_kextract(((vm_offset_t) (va))) >>=20 >> -static __inline pt_entry_t >> -pte_load(pt_entry_t *ptep) >> -{ >> - pt_entry_t r; >> - >> - r =3D *ptep; >> - return (r); >> -} >=20 > This function wasn't atomic with respect to multiple CPUs. Except on > i386 with PAE, but then it changes a 64-bit object on a 32-bit CPU, > so it needs some locking just to be atomic with respect to a single = CPU. >=20 >> -static __inline pt_entry_t >> -pte_load_store(pt_entry_t *ptep, pt_entry_t pte) >> -{ >> - pt_entry_t r; >> - >> - __asm __volatile( >> - "xchgq %0,%1" >> - : "=3Dm" (*ptep), >> - "=3Dr" (r) >> - : "1" (pte), >> - "m" (*ptep)); >> - return (r); >> -} >=20 > This was the main one that was atomic with respect to multiple CPUs on > both amd64 and i386. This seems to be accidental -- xchg to memory = gives > a lock prefix and slowness whether you want it or not. >=20 >> - >> -#define pte_load_clear(pte) atomic_readandclear_long(pte) >> - >> -static __inline void >> -pte_store(pt_entry_t *ptep, pt_entry_t pte) >> -{ >> +#define pte_load(ptep) = atomic_load_acq_long(ptep) >> +#define pte_load_store(ptep, pte) atomic_swap_long(ptep, = pte) >> +#define pte_load_clear(pte) atomic_swap_long(pte, 0) >> +#define pte_store(ptep, pte) = atomic_store_rel_long(ptep, pte) >> +#define pte_clear(ptep) = atomic_store_rel_long(ptep, 0) >>=20 >> - *ptep =3D pte; >> -} >=20 > pte_store() was also not atomic with respect to multiple CPUs. So = almost > everything was not atomic with respect to multiple CPUs, except for = PAE > on i386. >=20 > Bruce >=20 From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 18:32:02 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9E1A3AA1; Fri, 2 Aug 2013 18:32:02 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 8BA4F24AF; Fri, 2 Aug 2013 18:32:02 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r72IW2jE034689; Fri, 2 Aug 2013 18:32:02 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r72IW2pR034687; Fri, 2 Aug 2013 18:32:02 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308021832.r72IW2pR034687@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 2 Aug 2013 18:32:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253891 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 18:32:02 -0000 Author: jkim Date: Fri Aug 2 18:32:01 2013 New Revision: 253891 URL: http://svnweb.freebsd.org/changeset/base/253891 Log: Allow an immediate for the bit number. Suggested by: Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 18:05:42 2013 (r253890) +++ projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 18:32:01 2013 (r253891) @@ -225,7 +225,7 @@ atomic_testandset_int(volatile u_int *p, "# atomic_testandset_int" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "r" (v), /* 2 */ + : "Ir" (v % 32), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); @@ -243,7 +243,7 @@ atomic_testandset_long(volatile u_long * "# atomic_testandset_long" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "r" ((u_long)v), /* 2 */ + : "Jr" ((u_long)v % 64), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 18:05:42 2013 (r253890) +++ projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 18:32:01 2013 (r253891) @@ -364,9 +364,9 @@ atomic_testandset_int(volatile u_int *p, " btsl %2, %1 ; " " setc %0 ; " "# atomic_testandset_int" - : "=r" (res), /* 0 (result) */ + : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "r" (v), /* 2 */ + : "Ir" (v % 32), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 18:33:49 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from hammer.pct.niksun.com (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by hub.freebsd.org (Postfix) with ESMTP id 1759DBA1; Fri, 2 Aug 2013 18:33:49 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Message-ID: <51FBFB33.4080707@FreeBSD.org> Date: Fri, 02 Aug 2013 14:32:19 -0400 From: Jung-uk Kim User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:17.0) Gecko/20130715 Thunderbird/17.0.7 MIME-Version: 1.0 To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: Re: svn commit: r253891 - in projects/atomic64/sys: amd64/include i386/include References: <201308021832.r72IW2pR034687@svn.freebsd.org> In-Reply-To: <201308021832.r72IW2pR034687@svn.freebsd.org> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 18:33:49 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 2013-08-02 14:32:02 -0400, Jung-uk Kim wrote: > Author: jkim Date: Fri Aug 2 18:32:01 2013 New Revision: 253891 > URL: http://svnweb.freebsd.org/changeset/base/253891 > > Log: Allow an immediate for the bit number. > > Suggested by: jilles Jung-uk Kim -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (FreeBSD) iQEcBAEBAgAGBQJR+/szAAoJECXpabHZMqHOPmwIAJUkM0EA40jyIexlKsGcn0ZV AEXDJl6kcnrcnOw9fep6UZavKDmmOWIjdgIpXa4uJUDB1U3KYeOBHU+Wn4uqMt3Y 5kvyHRuqDAkQStVWcKeDJhA8yWrQVXajomn7/bqXsHOr2CjvQOK5YHQaWtCjfccz F7qAPZV+YYvki9aXBYvzzJRurub5+r//J2s+XU+5ee5stIPTaXba7M3vSwUJTODv GSEArKV+bpyStCfA8GnBLZLcwAKgs9F0izsEOt9EZciHOWjthnLSC7dRR/NeE2Xm 4UYuaI6WyiZ174l7RkAHAUdPle2Tf4u3NaymPvaO6KsK942k9uSfTDLocrvgDgI= =D8q1 -----END PGP SIGNATURE----- From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 19:10:47 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 593FA7D6; Fri, 2 Aug 2013 19:10:47 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 46FE22660; Fri, 2 Aug 2013 19:10:47 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r72JAlZ0068408; Fri, 2 Aug 2013 19:10:47 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r72JAkjp068406; Fri, 2 Aug 2013 19:10:46 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308021910.r72JAkjp068406@svn.freebsd.org> From: Jung-uk Kim Date: Fri, 2 Aug 2013 19:10:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253892 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 19:10:47 -0000 Author: jkim Date: Fri Aug 2 19:10:46 2013 New Revision: 253892 URL: http://svnweb.freebsd.org/changeset/base/253892 Log: Refine r253891. Compiler does not know the BTS instruction implicitly does modulo operation and generates poor code when the function is not inlined. Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 18:32:01 2013 (r253891) +++ projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 19:10:46 2013 (r253892) @@ -225,7 +225,7 @@ atomic_testandset_int(volatile u_int *p, "# atomic_testandset_int" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "Ir" (v % 32), /* 2 */ + : "ir" (v), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); @@ -243,7 +243,7 @@ atomic_testandset_long(volatile u_long * "# atomic_testandset_long" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "Jr" ((u_long)v % 64), /* 2 */ + : "ir" ((u_long)v), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 18:32:01 2013 (r253891) +++ projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 19:10:46 2013 (r253892) @@ -366,7 +366,7 @@ atomic_testandset_int(volatile u_int *p, "# atomic_testandset_int" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "Ir" (v % 32), /* 2 */ + : "ir" (v), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 19:14:48 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 43563B7C; Fri, 2 Aug 2013 19:14:48 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BB5FF269F; Fri, 2 Aug 2013 19:14:47 +0000 (UTC) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.14.7/8.14.7) with ESMTP id r72JEgPm034151; Fri, 2 Aug 2013 22:14:42 +0300 (EEST) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.8.3 kib.kiev.ua r72JEgPm034151 Received: (from kostik@localhost) by tom.home (8.14.7/8.14.7/Submit) id r72JEgIJ034150; Fri, 2 Aug 2013 22:14:42 +0300 (EEST) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Fri, 2 Aug 2013 22:14:42 +0300 From: Konstantin Belousov To: Jung-uk Kim Subject: Re: svn commit: r253891 - in projects/atomic64/sys: amd64/include i386/include Message-ID: <20130802191442.GD4972@kib.kiev.ua> References: <201308021832.r72IW2pR034687@svn.freebsd.org> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="NEAn2rYUJijllS+S" Content-Disposition: inline In-Reply-To: <201308021832.r72IW2pR034687@svn.freebsd.org> User-Agent: Mutt/1.5.21 (2010-09-15) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on tom.home Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 19:14:48 -0000 --NEAn2rYUJijllS+S Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Fri, Aug 02, 2013 at 06:32:02PM +0000, Jung-uk Kim wrote: > Author: jkim > Date: Fri Aug 2 18:32:01 2013 > New Revision: 253891 > URL: http://svnweb.freebsd.org/changeset/base/253891 >=20 > Log: > Allow an immediate for the bit number. > =20 > Suggested by: >=20 > Modified: > projects/atomic64/sys/amd64/include/atomic.h > projects/atomic64/sys/i386/include/atomic.h >=20 > Modified: projects/atomic64/sys/amd64/include/atomic.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 18:05:42 2013= (r253890) > +++ projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 18:32:01 2013= (r253891) > @@ -225,7 +225,7 @@ atomic_testandset_int(volatile u_int *p, > "# atomic_testandset_int" > : "=3Dr" (res), /* 0 */ > "=3Dm" (*p) /* 1 */ > - : "r" (v), /* 2 */ > + : "Ir" (v % 32), /* 2 */ > "m" (*p) /* 3 */ > : "cc"); > return (res); > @@ -243,7 +243,7 @@ atomic_testandset_long(volatile u_long * > "# atomic_testandset_long" > : "=3Dr" (res), /* 0 */ > "=3Dm" (*p) /* 1 */ > - : "r" ((u_long)v), /* 2 */ > + : "Jr" ((u_long)v % 64), /* 2 */ > "m" (*p) /* 3 */ > : "cc"); > return (res); >=20 > Modified: projects/atomic64/sys/i386/include/atomic.h > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D > --- projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 18:05:42 2013 = (r253890) > +++ projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 18:32:01 2013 = (r253891) > @@ -364,9 +364,9 @@ atomic_testandset_int(volatile u_int *p, > " btsl %2, %1 ; " > " setc %0 ; " > "# atomic_testandset_int" > - : "=3Dr" (res), /* 0 (result) */ > + : "=3Dr" (res), /* 0 */ > "=3Dm" (*p) /* 1 */ > - : "r" (v), /* 2 */ > + : "Ir" (v % 32), /* 2 */ > "m" (*p) /* 3 */ > : "cc"); > return (res); You should also adjust the pointer then, to compensate the clamp of the bit number. Bit operations apparently work on arbitrary-length bitstrings. --NEAn2rYUJijllS+S Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (FreeBSD) iQIcBAEBAgAGBQJR/AUiAAoJEJDCuSvBvK1BMUQP/iXHMoCOb7tqPrwCe2glUlyI n2Rcbb4TirC2gVAUddwAga8+d3RufKZMvuVY4QocNM5Bb6jtm7t5pPNCHwAPdETT 3v0ulbDSg1POkUZNi6FtOuaOrkYpsFnfq9sfwBQjxidWWGvE/vacScwfgcoQDb9M ReoQ9e83Tt9TlfUDC2KbDf1i4ZUq6v04dD/FcJBniNddWRQtjiUvbm/uuRXToK92 hnosDgKdwzYPMkDeoew9iII9qg9nXIaasJ3LguuInPHO1xvB51mM/WxYKlw/OKJM SImXNfokgaK38Xwk27sfw0BpQoXxNlN0yMHIiTK+fU1N5aIfCFZk8V9Mihcotya6 mZkIuVlkAUBqHyVUarPKwiEpRjS3qJSVlxj1aIg5q/wynGxAgSTpJ4+3Iy4dT9Uy 0ksQkCSOefLrcHbbg77gpdsErhIM9JcPeJ5sd8eZ+JPM3VlaLbbunSPF80ng4Sk5 hVWXxMMVuyiM++hARNurqdCZAF4mD88pE4TsUDRQ2f4wYe4/+IGEyejZwbeE7/Hr JAyDU2kXG9bzcVavY+SisKL/Jv7H9aiztaUv3D8ww6nto3+nCvcp8B8Hk+WVjXhd RFrnCYsxgDELE3ZsIGrf56M4koF39BdRTJyA7Y/lge930WIpbbzIYaB/033rbrmC sm+fyCWJWdRO7WOmcqu+ =RyM8 -----END PGP SIGNATURE----- --NEAn2rYUJijllS+S-- From owner-svn-src-projects@FreeBSD.ORG Fri Aug 2 19:37:21 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from hammer.pct.niksun.com (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) by hub.freebsd.org (Postfix) with ESMTP id 114A73DF; Fri, 2 Aug 2013 19:37:20 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Message-ID: <51FC0A17.3040402@FreeBSD.org> Date: Fri, 02 Aug 2013 15:35:51 -0400 From: Jung-uk Kim User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:17.0) Gecko/20130715 Thunderbird/17.0.7 MIME-Version: 1.0 To: Konstantin Belousov Subject: Re: svn commit: r253891 - in projects/atomic64/sys: amd64/include i386/include References: <201308021832.r72IW2pR034687@svn.freebsd.org> <20130802191442.GD4972@kib.kiev.ua> In-Reply-To: <20130802191442.GD4972@kib.kiev.ua> X-Enigmail-Version: 1.5.1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Cc: svn-src-projects@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 02 Aug 2013 19:37:21 -0000 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 2013-08-02 15:14:42 -0400, Konstantin Belousov wrote: > On Fri, Aug 02, 2013 at 06:32:02PM +0000, Jung-uk Kim wrote: >> Author: jkim Date: Fri Aug 2 18:32:01 2013 New Revision: 253891 >> URL: http://svnweb.freebsd.org/changeset/base/253891 >> >> Log: Allow an immediate for the bit number. >> >> Suggested by: >> >> Modified: projects/atomic64/sys/amd64/include/atomic.h >> projects/atomic64/sys/i386/include/atomic.h >> >> Modified: projects/atomic64/sys/amd64/include/atomic.h >> ============================================================================== >> >> - --- projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 18:05:42 2013 (r253890) >> +++ projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 >> 18:32:01 2013 (r253891) @@ -225,7 +225,7 @@ >> atomic_testandset_int(volatile u_int *p, "# >> atomic_testandset_int" : "=r" (res), /* 0 */ "=m" (*p) /* 1 >> */ - : "r" (v), /* 2 */ + : "Ir" (v % 32), /* 2 */ "m" (*p) >> /* 3 */ : "cc"); return (res); @@ -243,7 +243,7 @@ >> atomic_testandset_long(volatile u_long * "# >> atomic_testandset_long" : "=r" (res), /* 0 */ "=m" (*p) /* 1 >> */ - : "r" ((u_long)v), /* 2 */ + : "Jr" ((u_long)v % 64), /* 2 >> */ "m" (*p) /* 3 */ : "cc"); return (res); >> >> Modified: projects/atomic64/sys/i386/include/atomic.h >> ============================================================================== >> >> - --- projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 18:05:42 2013 (r253890) >> +++ projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 >> 18:32:01 2013 (r253891) @@ -364,9 +364,9 @@ >> atomic_testandset_int(volatile u_int *p, " btsl %2, %1 ; " " setc >> %0 ; " "# atomic_testandset_int" - : "=r" (res), /* 0 (result) >> */ + : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "r" (v), >> /* 2 */ + : "Ir" (v % 32), /* 2 */ "m" (*p) /* 3 */ : "cc"); >> return (res); > > You should also adjust the pointer then, to compensate the clamp > of the bit number. Bit operations apparently work on > arbitrary-length bitstrings. It seems I missed note section of the i386 manual. :-( Jung-uk Kim -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.20 (FreeBSD) iQEcBAEBAgAGBQJR/AoXAAoJECXpabHZMqHOFLkIAIp8yFLiGGDGuT1M80sj2kRV qEECAV3mncbuAynS1sjKFeCDpv4fJCtcWbqmDmn6QFDE3utkGaFaseSdoyhgMzUs laoiLuulfrSHg7E6VfOgUFEdBWZt+zyBsigM60RlGV/7qW8J/W42xYtJwurjO6a1 eRErfHxCdRvTc1I/PXZQXF0bPySIciJOVJXAKLThgCG92TGXWjEh78zwYoSSQ5Jl JG39HyaDrkqDna/eh9nZ8iyvyJWE5MckhgP6MCEYNuZzM8mYDRiOBOITZ7/OF40o 8ePCD/6eE59gg76ODj57X+stWCPP+KMZftc9WfXiGieVrJSdpL/Mq81xU8X90dU= =Mcwe -----END PGP SIGNATURE----- From owner-svn-src-projects@FreeBSD.ORG Sat Aug 3 00:19:27 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 890D7D55; Sat, 3 Aug 2013 00:19:27 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 77270209C; Sat, 3 Aug 2013 00:19:27 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r730JRnA060011; Sat, 3 Aug 2013 00:19:27 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r730JRBn060009; Sat, 3 Aug 2013 00:19:27 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308030019.r730JRBn060009@svn.freebsd.org> From: Jung-uk Kim Date: Sat, 3 Aug 2013 00:19:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253904 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 00:19:27 -0000 Author: jkim Date: Sat Aug 3 00:19:26 2013 New Revision: 253904 URL: http://svnweb.freebsd.org/changeset/base/253904 Log: Redo r253891. It seems compilers generate better code with this change. Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Fri Aug 2 23:33:40 2013 (r253903) +++ projects/atomic64/sys/amd64/include/atomic.h Sat Aug 3 00:19:26 2013 (r253904) @@ -82,8 +82,8 @@ int atomic_cmpset_int(volatile u_int *ds int atomic_cmpset_long(volatile u_long *dst, u_long expect, u_long src); u_int atomic_fetchadd_int(volatile u_int *p, u_int v); u_long atomic_fetchadd_long(volatile u_long *p, u_long v); -int atomic_testandset_int(volatile u_int *p, int v); -int atomic_testandset_long(volatile u_long *p, int v); +int atomic_testandset_int(volatile u_int *p, u_int v); +int atomic_testandset_long(volatile u_long *p, u_int v); #define ATOMIC_LOAD(TYPE, LOP) \ u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p) @@ -214,7 +214,7 @@ atomic_fetchadd_long(volatile u_long *p, } static __inline int -atomic_testandset_int(volatile u_int *p, int v) +atomic_testandset_int(volatile u_int *p, u_int v) { u_char res; @@ -225,14 +225,14 @@ atomic_testandset_int(volatile u_int *p, "# atomic_testandset_int" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "ir" (v), /* 2 */ + : "Ir" (v & 0x1f), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); } static __inline int -atomic_testandset_long(volatile u_long *p, int v) +atomic_testandset_long(volatile u_long *p, u_int v) { u_char res; @@ -243,7 +243,7 @@ atomic_testandset_long(volatile u_long * "# atomic_testandset_long" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "ir" ((u_long)v), /* 2 */ + : "Jr" ((u_long)(v & 0x3f)), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Fri Aug 2 23:33:40 2013 (r253903) +++ projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:19:26 2013 (r253904) @@ -80,7 +80,7 @@ void atomic_##NAME##_barr_##TYPE(volatil int atomic_cmpset_int(volatile u_int *dst, u_int expect, u_int src); u_int atomic_fetchadd_int(volatile u_int *p, u_int v); -int atomic_testandset_int(volatile u_int *p, int v); +int atomic_testandset_int(volatile u_int *p, u_int v); #define ATOMIC_LOAD(TYPE, LOP) \ u_##TYPE atomic_load_acq_##TYPE(volatile u_##TYPE *p) @@ -184,9 +184,9 @@ atomic_swap_64_i386(volatile uint64_t *p } static __inline int -atomic_testandset_64_i386(volatile uint64_t *p, int v) +atomic_testandset_64_i386(volatile uint64_t *p, u_int v) { - const uint64_t s = 1ULL << v % 64; + const uint64_t s = 1ULL << (v & 0x3f); int res; register_t lock; @@ -269,9 +269,9 @@ atomic_swap_64_i586(volatile uint64_t *p } static __inline int -atomic_testandset_64_i586(volatile uint64_t *p, int v) +atomic_testandset_64_i586(volatile uint64_t *p, u_int v) { - const uint64_t s = 1ULL << v % 64; + const uint64_t s = 1ULL << (v & 0x3f); uint64_t n; do { @@ -355,7 +355,7 @@ atomic_fetchadd_int(volatile u_int *p, u } static __inline int -atomic_testandset_int(volatile u_int *p, int v) +atomic_testandset_int(volatile u_int *p, u_int v) { u_char res; @@ -366,7 +366,7 @@ atomic_testandset_int(volatile u_int *p, "# atomic_testandset_int" : "=r" (res), /* 0 */ "=m" (*p) /* 1 */ - : "ir" (v), /* 2 */ + : "Ir" (v & 0x1f), /* 2 */ "m" (*p) /* 3 */ : "cc"); return (res); @@ -469,7 +469,7 @@ extern int (*atomic_cmpset_64)(volatile extern uint64_t (*atomic_load_acq_64)(volatile uint64_t *); extern void (*atomic_store_rel_64)(volatile uint64_t *, uint64_t); extern uint64_t (*atomic_swap_64)(volatile uint64_t *, uint64_t); -extern int (*atomic_testandset_64)(volatile uint64_t *, int); +extern int (*atomic_testandset_64)(volatile uint64_t *, u_int); #endif static __inline int @@ -488,7 +488,7 @@ atomic_fetchadd_long(volatile u_long *p, } static __inline int -atomic_testandset_long(volatile u_long *p, int v) +atomic_testandset_long(volatile u_long *p, u_int v) { return (atomic_testandset_int((volatile u_int *)p, v)); From owner-svn-src-projects@FreeBSD.ORG Sat Aug 3 00:24:13 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4D58AE83; Sat, 3 Aug 2013 00:24:13 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 2059320C8; Sat, 3 Aug 2013 00:24:13 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r730OCPK062404; Sat, 3 Aug 2013 00:24:12 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r730OCMH062399; Sat, 3 Aug 2013 00:24:12 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308030024.r730OCMH062399@svn.freebsd.org> From: Jung-uk Kim Date: Sat, 3 Aug 2013 00:24:12 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253905 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 00:24:13 -0000 Author: jkim Date: Sat Aug 3 00:24:12 2013 New Revision: 253905 URL: http://svnweb.freebsd.org/changeset/base/253905 Log: Use correct constraint for the return values. Suggested by: bde Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Sat Aug 3 00:19:26 2013 (r253904) +++ projects/atomic64/sys/amd64/include/atomic.h Sat Aug 3 00:24:12 2013 (r253905) @@ -145,7 +145,7 @@ atomic_cmpset_int(volatile u_int *dst, u " cmpxchgl %3, %1 ; " " sete %0 ; " "# atomic_cmpset_int" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*dst), /* 1 */ "+a" (expect) /* 2 */ : "r" (src), /* 3 */ @@ -165,7 +165,7 @@ atomic_cmpset_long(volatile u_long *dst, " cmpxchgq %3, %1 ; " " sete %0 ; " "# atomic_cmpset_long" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*dst), /* 1 */ "+a" (expect) /* 2 */ : "r" (src), /* 3 */ @@ -223,7 +223,7 @@ atomic_testandset_int(volatile u_int *p, " btsl %2, %1 ; " " setc %0 ; " "# atomic_testandset_int" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*p) /* 1 */ : "Ir" (v & 0x1f), /* 2 */ "m" (*p) /* 3 */ @@ -241,7 +241,7 @@ atomic_testandset_long(volatile u_long * " btsq %2, %1 ; " " setc %0 ; " "# atomic_testandset_long" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*p) /* 1 */ : "Jr" ((u_long)(v & 0x3f)), /* 2 */ "m" (*p) /* 3 */ Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:19:26 2013 (r253904) +++ projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:24:12 2013 (r253905) @@ -206,7 +206,7 @@ atomic_cmpset_64_i586(volatile uint64_t " " MPLOCKED " " " cmpxchg8b %1 ; " " sete %0" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*dst), /* 1 */ "+A" (expect) /* 2 */ : "b" ((uint32_t)src), /* 3 */ @@ -320,7 +320,7 @@ atomic_cmpset_int(volatile u_int *dst, u " cmpxchgl %3, %1 ; " " sete %0 ; " "# atomic_cmpset_int" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*dst), /* 1 */ "+a" (expect) /* 2 */ : "r" (src), /* 3 */ @@ -364,7 +364,7 @@ atomic_testandset_int(volatile u_int *p, " btsl %2, %1 ; " " setc %0 ; " "# atomic_testandset_int" - : "=r" (res), /* 0 */ + : "=q" (res), /* 0 */ "=m" (*p) /* 1 */ : "Ir" (v & 0x1f), /* 2 */ "m" (*p) /* 3 */ From owner-svn-src-projects@FreeBSD.ORG Sat Aug 3 00:44:26 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 75594117; Sat, 3 Aug 2013 00:44:26 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 634622155; Sat, 3 Aug 2013 00:44:26 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r730iPAO068336; Sat, 3 Aug 2013 00:44:25 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r730iPKU068334; Sat, 3 Aug 2013 00:44:25 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308030044.r730iPKU068334@svn.freebsd.org> From: Jung-uk Kim Date: Sat, 3 Aug 2013 00:44:25 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253906 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 00:44:26 -0000 Author: jkim Date: Sat Aug 3 00:44:25 2013 New Revision: 253906 URL: http://svnweb.freebsd.org/changeset/base/253906 Log: Fix white spaces. Pointed by: bde Modified: projects/atomic64/sys/amd64/include/pmap.h projects/atomic64/sys/i386/include/pmap.h Modified: projects/atomic64/sys/amd64/include/pmap.h ============================================================================== --- projects/atomic64/sys/amd64/include/pmap.h Sat Aug 3 00:24:12 2013 (r253905) +++ projects/atomic64/sys/amd64/include/pmap.h Sat Aug 3 00:44:25 2013 (r253906) @@ -187,10 +187,9 @@ pt_entry_t *vtopte(vm_offset_t); #define pte_load_store(ptep, pte) atomic_swap_long(ptep, pte) #define pte_load_clear(ptep) atomic_swap_long(ptep, 0) -#define pte_store(ptep, pte) \ - do { \ +#define pte_store(ptep, pte) do { \ *(u_long *)(ptep) = (u_long)(pte); \ - } while (0) +} while (0) #define pte_clear(ptep) pte_store(ptep, 0) #define pde_store(pdep, pde) pte_store(pdep, pde) Modified: projects/atomic64/sys/i386/include/pmap.h ============================================================================== --- projects/atomic64/sys/i386/include/pmap.h Sat Aug 3 00:24:12 2013 (r253905) +++ projects/atomic64/sys/i386/include/pmap.h Sat Aug 3 00:44:25 2013 (r253906) @@ -338,10 +338,9 @@ extern pt_entry_t pg_nx; #define pde_cmpset(pdep, old, new) atomic_cmpset_int(pdep, old, new) #define pte_load_store(ptep, pte) atomic_swap_int(ptep, pte) #define pte_load_clear(ptep) atomic_swap_int(ptep, 0) -#define pte_store(ptep, pte) \ - do { \ +#define pte_store(ptep, pte) do { \ *(u_int *)(ptep) = (u_int)(pte); \ - } while (0) +} while (0) #endif /* PAE */ From owner-svn-src-projects@FreeBSD.ORG Sat Aug 3 00:49:51 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id CEEEE226; Sat, 3 Aug 2013 00:49:51 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id BC9F8216D; Sat, 3 Aug 2013 00:49:51 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r730npUH068927; Sat, 3 Aug 2013 00:49:51 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r730npWk068925; Sat, 3 Aug 2013 00:49:51 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308030049.r730npWk068925@svn.freebsd.org> From: Jung-uk Kim Date: Sat, 3 Aug 2013 00:49:51 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253907 - in projects/atomic64/sys: amd64/include i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 00:49:51 -0000 Author: jkim Date: Sat Aug 3 00:49:51 2013 New Revision: 253907 URL: http://svnweb.freebsd.org/changeset/base/253907 Log: Highly experimental changes to find whether the compiler was actually fixed. Modified: projects/atomic64/sys/amd64/include/atomic.h projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/amd64/include/atomic.h ============================================================================== --- projects/atomic64/sys/amd64/include/atomic.h Sat Aug 3 00:44:25 2013 (r253906) +++ projects/atomic64/sys/amd64/include/atomic.h Sat Aug 3 00:49:51 2013 (r253907) @@ -112,8 +112,8 @@ static __inline void \ atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(MPLOCKED OP \ - : "=m" (*p) \ - : CONS (V), "m" (*p) \ + : "+m" (*p) \ + : CONS (V) \ : "cc"); \ } \ \ @@ -121,8 +121,8 @@ static __inline void \ atomic_##NAME##_barr_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(MPLOCKED OP \ - : "=m" (*p) \ - : CONS (V), "m" (*p) \ + : "+m" (*p) \ + : CONS (V) \ : "memory", "cc"); \ } \ struct __hack @@ -146,11 +146,10 @@ atomic_cmpset_int(volatile u_int *dst, u " sete %0 ; " "# atomic_cmpset_int" : "=q" (res), /* 0 */ - "=m" (*dst), /* 1 */ + "+m" (*dst), /* 1 */ "+a" (expect) /* 2 */ - : "r" (src), /* 3 */ - "m" (*dst) /* 4 */ - : "memory", "cc"); + : "r" (src) /* 3 */ + : "cc"); return (res); } @@ -166,11 +165,10 @@ atomic_cmpset_long(volatile u_long *dst, " sete %0 ; " "# atomic_cmpset_long" : "=q" (res), /* 0 */ - "=m" (*dst), /* 1 */ + "+m" (*dst), /* 1 */ "+a" (expect) /* 2 */ - : "r" (src), /* 3 */ - "m" (*dst) /* 4 */ - : "memory", "cc"); + : "r" (src) /* 3 */ + : "cc"); return (res); } @@ -187,10 +185,9 @@ atomic_fetchadd_int(volatile u_int *p, u " " MPLOCKED " " " xaddl %0, %1 ; " "# atomic_fetchadd_int" - : "+r" (v), /* 0 (result) */ - "=m" (*p) /* 1 */ - : "m" (*p) /* 2 */ - : "cc"); + : "+r" (v), /* 0 */ + "+m" (*p) /* 1 */ + : : "cc"); return (v); } @@ -206,10 +203,9 @@ atomic_fetchadd_long(volatile u_long *p, " " MPLOCKED " " " xaddq %0, %1 ; " "# atomic_fetchadd_long" - : "+r" (v), /* 0 (result) */ - "=m" (*p) /* 1 */ - : "m" (*p) /* 2 */ - : "cc"); + : "+r" (v), /* 0 */ + "+m" (*p) /* 1 */ + : : "cc"); return (v); } @@ -224,9 +220,8 @@ atomic_testandset_int(volatile u_int *p, " setc %0 ; " "# atomic_testandset_int" : "=q" (res), /* 0 */ - "=m" (*p) /* 1 */ - : "Ir" (v & 0x1f), /* 2 */ - "m" (*p) /* 3 */ + "+m" (*p) /* 1 */ + : "Ir" (v & 0x1f) /* 2 */ : "cc"); return (res); } @@ -242,9 +237,8 @@ atomic_testandset_long(volatile u_long * " setc %0 ; " "# atomic_testandset_long" : "=q" (res), /* 0 */ - "=m" (*p) /* 1 */ - : "Jr" ((u_long)(v & 0x3f)), /* 2 */ - "m" (*p) /* 3 */ + "+m" (*p) /* 1 */ + : "Jr" ((u_long)(v & 0x3f)) /* 2 */ : "cc"); return (res); } @@ -293,9 +287,8 @@ atomic_load_acq_##TYPE(volatile u_##TYPE \ __asm __volatile(MPLOCKED LOP \ : "=a" (res), /* 0 */ \ - "=m" (*p) /* 1 */ \ - : "m" (*p) /* 2 */ \ - : "memory", "cc"); \ + "+m" (*p) /* 1 */ \ + : : "cc"); \ \ return (res); \ } \ @@ -352,8 +345,7 @@ atomic_swap_int(volatile u_int *p, u_int " xchgl %1, %0 ; " "# atomic_swap_int" : "+r" (v), /* 0 */ - "=m" (*p) /* 1 */ - : "m" (*p)); + "+m" (*p)); /* 1 */ return (v); } @@ -365,8 +357,7 @@ atomic_swap_long(volatile u_long *p, u_l " xchgq %1, %0 ; " "# atomic_swap_long" : "+r" (v), /* 0 */ - "=m" (*p) /* 1 */ - : "m" (*p)); + "+m" (*p)); /* 1 */ return (v); } Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:44:25 2013 (r253906) +++ projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:49:51 2013 (r253907) @@ -109,8 +109,8 @@ static __inline void \ atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(MPLOCKED OP \ - : "=m" (*p) \ - : CONS (V), "m" (*p) \ + : "+m" (*p) \ + : CONS (V) \ : "cc"); \ } \ \ @@ -118,8 +118,8 @@ static __inline void \ atomic_##NAME##_barr_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\ { \ __asm __volatile(MPLOCKED OP \ - : "=m" (*p) \ - : CONS (V), "m" (*p) \ + : "+m" (*p) \ + : CONS (V) \ : "memory", "cc"); \ } \ struct __hack @@ -207,12 +207,11 @@ atomic_cmpset_64_i586(volatile uint64_t " cmpxchg8b %1 ; " " sete %0" : "=q" (res), /* 0 */ - "=m" (*dst), /* 1 */ + "+m" (*dst), /* 1 */ "+A" (expect) /* 2 */ : "b" ((uint32_t)src), /* 3 */ - "c" ((uint32_t)(src >> 32)), /* 4 */ - "m" (*dst) /* 5 */ - : "memory", "cc"); + "c" ((uint32_t)(src >> 32)) /* 4 */ + : "cc"); return (res); } @@ -227,9 +226,8 @@ atomic_load_acq_64_i586(volatile uint64_ " " MPLOCKED " " " cmpxchg8b %1" : "=&A" (res), /* 0 */ - "=m" (*p) /* 1 */ - : "m" (*p) /* 2 */ - : "memory", "cc"); + "+m" (*p) /* 1 */ + : : "cc"); return (res); } @@ -244,10 +242,9 @@ atomic_store_rel_64_i586(volatile uint64 " " MPLOCKED " " " cmpxchg8b %0 ; " " jne 1b" - : "=m" (*p), /* 0 */ + : "+m" (*p), /* 0 */ "+A" (v) /* 1 */ - : "m" (*p) /* 2 */ - : "ebx", "ecx", "memory", "cc"); + : : "ebx", "ecx", "cc"); } static __inline uint64_t @@ -261,10 +258,9 @@ atomic_swap_64_i586(volatile uint64_t *p " " MPLOCKED " " " cmpxchg8b %0 ; " " jne 1b" - : "=m" (*p), /* 0 */ + : "+m" (*p), /* 0 */ "+A" (v) /* 1 */ - : "m" (*p) /* 2 */ - : "ebx", "ecx", "memory", "cc"); + : : "ebx", "ecx", "memory", "cc"); return (v); } @@ -321,10 +317,9 @@ atomic_cmpset_int(volatile u_int *dst, u " sete %0 ; " "# atomic_cmpset_int" : "=q" (res), /* 0 */ - "=m" (*dst), /* 1 */ + "+m" (*dst), /* 1 */ "+a" (expect) /* 2 */ - : "r" (src), /* 3 */ - "m" (*dst) /* 4 */ + : "r" (src) /* 3 */ : "memory", "cc"); return (res); @@ -348,9 +343,8 @@ atomic_fetchadd_int(volatile u_int *p, u " xaddl %0, %1 ; " "# atomic_fetchadd_int" : "+r" (v), /* 0 (result) */ - "=m" (*p) /* 1 */ - : "m" (*p) /* 2 */ - : "cc"); + "+m" (*p) /* 1 */ + : : "cc"); return (v); } @@ -365,9 +359,8 @@ atomic_testandset_int(volatile u_int *p, " setc %0 ; " "# atomic_testandset_int" : "=q" (res), /* 0 */ - "=m" (*p) /* 1 */ - : "Ir" (v & 0x1f), /* 2 */ - "m" (*p) /* 3 */ + "+m" (*p) /* 1 */ + : "Ir" (v & 0x1f) /* 2 */ : "cc"); return (res); } @@ -416,9 +409,8 @@ atomic_load_acq_##TYPE(volatile u_##TYPE \ __asm __volatile(MPLOCKED LOP \ : "=a" (res), /* 0 */ \ - "=m" (*p) /* 1 */ \ - : "m" (*p) /* 2 */ \ - : "memory", "cc"); \ + "+m" (*p) /* 1 */ \ + : : "cc"); \ \ return (res); \ } \ @@ -505,8 +497,7 @@ atomic_swap_int(volatile u_int *p, u_int " xchgl %1, %0 ; " "# atomic_swap_int" : "+r" (v), /* 0 */ - "=m" (*p) /* 1 */ - : "m" (*p)); + "+m" (*p)); /* 1 */ return (v); } From owner-svn-src-projects@FreeBSD.ORG Sat Aug 3 00:55:19 2013 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 4683934E; Sat, 3 Aug 2013 00:55:19 +0000 (UTC) (envelope-from jkim@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 355E02191; Sat, 3 Aug 2013 00:55:19 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r730tJtW071313; Sat, 3 Aug 2013 00:55:19 GMT (envelope-from jkim@svn.freebsd.org) Received: (from jkim@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r730tJxV071312; Sat, 3 Aug 2013 00:55:19 GMT (envelope-from jkim@svn.freebsd.org) Message-Id: <201308030055.r730tJxV071312@svn.freebsd.org> From: Jung-uk Kim Date: Sat, 3 Aug 2013 00:55:19 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r253908 - projects/atomic64/sys/i386/include X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 00:55:19 -0000 Author: jkim Date: Sat Aug 3 00:55:18 2013 New Revision: 253908 URL: http://svnweb.freebsd.org/changeset/base/253908 Log: Remove two more "memory" from clobber list missed in the previous commit. Modified: projects/atomic64/sys/i386/include/atomic.h Modified: projects/atomic64/sys/i386/include/atomic.h ============================================================================== --- projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:49:51 2013 (r253907) +++ projects/atomic64/sys/i386/include/atomic.h Sat Aug 3 00:55:18 2013 (r253908) @@ -260,7 +260,7 @@ atomic_swap_64_i586(volatile uint64_t *p " jne 1b" : "+m" (*p), /* 0 */ "+A" (v) /* 1 */ - : : "ebx", "ecx", "memory", "cc"); + : : "ebx", "ecx", "cc"); return (v); } @@ -320,7 +320,7 @@ atomic_cmpset_int(volatile u_int *dst, u "+m" (*dst), /* 1 */ "+a" (expect) /* 2 */ : "r" (src) /* 3 */ - : "memory", "cc"); + : "cc"); return (res); } From owner-svn-src-projects@FreeBSD.ORG Sat Aug 3 14:07:13 2013 Return-Path: Delivered-To: svn-src-projects@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 9C753627; Sat, 3 Aug 2013 14:07:13 +0000 (UTC) (envelope-from brde@optusnet.com.au) Received: from mail110.syd.optusnet.com.au (mail110.syd.optusnet.com.au [211.29.132.97]) by mx1.freebsd.org (Postfix) with ESMTP id 60B3C23C2; Sat, 3 Aug 2013 14:07:12 +0000 (UTC) Received: from c122-106-156-23.carlnfd1.nsw.optusnet.com.au (c122-106-156-23.carlnfd1.nsw.optusnet.com.au [122.106.156.23]) by mail110.syd.optusnet.com.au (Postfix) with ESMTPS id 04F3A781506; Sun, 4 Aug 2013 00:07:02 +1000 (EST) Date: Sun, 4 Aug 2013 00:07:00 +1000 (EST) From: Bruce Evans X-X-Sender: bde@besplex.bde.org To: Jung-uk Kim Subject: Re: svn commit: r253908 - projects/atomic64/sys/i386/include In-Reply-To: <201308030055.r730tJxV071312@svn.freebsd.org> Message-ID: <20130803233103.U1054@besplex.bde.org> References: <201308030055.r730tJxV071312@svn.freebsd.org> MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed X-Optus-CM-Score: 0 X-Optus-CM-Analysis: v=2.1 cv=DstvpgP+ c=1 sm=1 tr=0 a=ebeQFi2P/qHVC0Yw9JDJ4g==:117 a=PO7r1zJSAAAA:8 a=VcFvI9ESso8A:10 a=kj9zAlcOel0A:10 a=JzwRw_2MAAAA:8 a=994P9zDg0LoA:10 a=xfLVgX1MjMdmklnFdosA:9 a=CjuIK1q_8ugA:10 Cc: svn-src-projects@FreeBSD.org, src-committers@FreeBSD.org X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 03 Aug 2013 14:07:13 -0000 On Sat, 3 Aug 2013, Jung-uk Kim wrote: > Log: > Remove two more "memory" from clobber list missed in the previous commit. Isn't it always needed for acquire/release semantics? Or at least one of those? I previously asked (in private mail?) whether just declaring asms volatile gives sufficient protection. It prevents the compiler reordering code. Thus the compiler must not move loads or stores across the asm. This seems to affect only stores: foo = 1; /* must store before the asm */ bar = baz; /* can delay this */ __volatile __asm(""): /* no memory clobber */ use(bar); /* can use copy loaded before the asm * or discard that copy, either by not * loading it or making another copy, * since the asm said that it didn't * clober memory */ Stores need sort of the opposite of a memory clobber (to force all stores to memory before the asm, in case the asm accesses memory not described in the constraints). This is spelled __volatile and not put in the clobber list. Atomic loads and stores now use __compiler_membar(), which is a volatile asm with a memory clobber on all arches. Atomic ops like add now use a volatile asm without a memory clobber on x86, although they have acq/rel variants. Old atomic readandclear didn't use a memory clobber. Old atomic cmpset did use a memory clobber. Some of these must be wrong. cmpset has the memory written to in a constraint, so it doesn't need a memory clobber any more than readandclear except in very old versions where it was missing the constraint. Bruce