From owner-svn-src-user@FreeBSD.ORG Sat Mar 9 03:19:59 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 34114C40; Sat, 9 Mar 2013 03:19:59 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) by mx1.freebsd.org (Postfix) with ESMTP id 159598DC; Sat, 9 Mar 2013 03:19:59 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.6/8.14.6) with ESMTP id r293JxR9081991; Sat, 9 Mar 2013 03:19:59 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.6/8.14.5/Submit) id r293Js6x081957; Sat, 9 Mar 2013 03:19:54 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201303090319.r293Js6x081957@svn.freebsd.org> From: Attilio Rao Date: Sat, 9 Mar 2013 03:19:54 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r248088 - in user/attilio/vmc-playground: . sbin/geom/class/raid sys/amd64/amd64 sys/arm/arm sys/cddl/compat/opensolaris/kern sys/cddl/compat/opensolaris/sys sys/cddl/contrib/opensolari... X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 09 Mar 2013 03:19:59 -0000 Author: attilio Date: Sat Mar 9 03:19:53 2013 New Revision: 248088 URL: http://svnweb.freebsd.org/changeset/base/248088 Log: Merge from vmcontention. Added: user/attilio/vmc-playground/sys/cddl/compat/opensolaris/kern/opensolaris_vm.c - copied unchanged from r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/kern/opensolaris_vm.c user/attilio/vmc-playground/sys/cddl/compat/opensolaris/sys/freebsd_rwlock.h - copied unchanged from r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/sys/freebsd_rwlock.h user/attilio/vmc-playground/sys/cddl/compat/opensolaris/sys/vm.h - copied unchanged from r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/sys/vm.h user/attilio/vmc-playground/usr.bin/truss/arm-fbsd.c - copied unchanged from r248087, user/attilio/vmcontention/usr.bin/truss/arm-fbsd.c Modified: user/attilio/vmc-playground/UPDATING user/attilio/vmc-playground/sbin/geom/class/raid/graid.8 user/attilio/vmc-playground/sys/amd64/amd64/machdep.c user/attilio/vmc-playground/sys/amd64/amd64/pmap.c user/attilio/vmc-playground/sys/arm/arm/cpufunc_asm_arm11x6.S user/attilio/vmc-playground/sys/arm/arm/machdep.c user/attilio/vmc-playground/sys/arm/arm/pmap-v6.c user/attilio/vmc-playground/sys/arm/arm/pmap.c user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c user/attilio/vmc-playground/sys/compat/linprocfs/linprocfs.c user/attilio/vmc-playground/sys/conf/files user/attilio/vmc-playground/sys/dev/agp/agp.c user/attilio/vmc-playground/sys/dev/agp/agp_i810.c user/attilio/vmc-playground/sys/dev/drm/drmP.h user/attilio/vmc-playground/sys/dev/drm2/drmP.h user/attilio/vmc-playground/sys/dev/drm2/drm_fb_helper.c user/attilio/vmc-playground/sys/dev/drm2/drm_global.c user/attilio/vmc-playground/sys/dev/drm2/i915/i915_gem.c user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo.c user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo_vm.c user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_memory.c user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_tt.c user/attilio/vmc-playground/sys/dev/hwpmc/hwpmc_mod.c user/attilio/vmc-playground/sys/dev/md/md.c user/attilio/vmc-playground/sys/dev/netmap/netmap.c user/attilio/vmc-playground/sys/dev/oce/oce_hw.h user/attilio/vmc-playground/sys/dev/oce/oce_sysctl.c user/attilio/vmc-playground/sys/dev/sound/pcm/dsp.c user/attilio/vmc-playground/sys/fs/fuse/fuse_io.c user/attilio/vmc-playground/sys/fs/fuse/fuse_vnops.c user/attilio/vmc-playground/sys/fs/nfsclient/nfs_clbio.c user/attilio/vmc-playground/sys/fs/nfsclient/nfs_clnode.c user/attilio/vmc-playground/sys/fs/nfsclient/nfs_clvnops.c user/attilio/vmc-playground/sys/fs/nfsserver/nfs_nfsdport.c user/attilio/vmc-playground/sys/fs/procfs/procfs_map.c user/attilio/vmc-playground/sys/fs/tmpfs/tmpfs_subr.c user/attilio/vmc-playground/sys/fs/tmpfs/tmpfs_vnops.c user/attilio/vmc-playground/sys/geom/label/g_label_ntfs.c user/attilio/vmc-playground/sys/geom/raid/g_raid.c user/attilio/vmc-playground/sys/i386/i386/machdep.c user/attilio/vmc-playground/sys/i386/i386/pmap.c user/attilio/vmc-playground/sys/i386/xen/pmap.c user/attilio/vmc-playground/sys/ia64/ia64/machdep.c user/attilio/vmc-playground/sys/ia64/ia64/pmap.c user/attilio/vmc-playground/sys/kern/imgact_elf.c user/attilio/vmc-playground/sys/kern/kern_exec.c user/attilio/vmc-playground/sys/kern/kern_proc.c user/attilio/vmc-playground/sys/kern/kern_sharedpage.c user/attilio/vmc-playground/sys/kern/kern_shutdown.c user/attilio/vmc-playground/sys/kern/kern_timeout.c user/attilio/vmc-playground/sys/kern/subr_param.c user/attilio/vmc-playground/sys/kern/subr_uio.c user/attilio/vmc-playground/sys/kern/sys_process.c user/attilio/vmc-playground/sys/kern/sysv_shm.c user/attilio/vmc-playground/sys/kern/uipc_shm.c user/attilio/vmc-playground/sys/kern/uipc_syscalls.c user/attilio/vmc-playground/sys/kern/vfs_aio.c user/attilio/vmc-playground/sys/kern/vfs_bio.c user/attilio/vmc-playground/sys/kern/vfs_cluster.c user/attilio/vmc-playground/sys/kern/vfs_default.c user/attilio/vmc-playground/sys/kern/vfs_subr.c user/attilio/vmc-playground/sys/kern/vfs_syscalls.c user/attilio/vmc-playground/sys/kern/vfs_vnops.c user/attilio/vmc-playground/sys/mips/mips/machdep.c user/attilio/vmc-playground/sys/mips/mips/pmap.c user/attilio/vmc-playground/sys/modules/ath/Makefile user/attilio/vmc-playground/sys/modules/zfs/Makefile user/attilio/vmc-playground/sys/net/if.c user/attilio/vmc-playground/sys/net/route.c user/attilio/vmc-playground/sys/net/route.h user/attilio/vmc-playground/sys/net80211/ieee80211.c user/attilio/vmc-playground/sys/net80211/ieee80211_freebsd.c user/attilio/vmc-playground/sys/net80211/ieee80211_freebsd.h user/attilio/vmc-playground/sys/net80211/ieee80211_hostap.c user/attilio/vmc-playground/sys/net80211/ieee80211_ht.c user/attilio/vmc-playground/sys/net80211/ieee80211_hwmp.c user/attilio/vmc-playground/sys/net80211/ieee80211_mesh.c user/attilio/vmc-playground/sys/net80211/ieee80211_output.c user/attilio/vmc-playground/sys/net80211/ieee80211_power.c user/attilio/vmc-playground/sys/net80211/ieee80211_proto.h user/attilio/vmc-playground/sys/net80211/ieee80211_superg.c user/attilio/vmc-playground/sys/net80211/ieee80211_var.h user/attilio/vmc-playground/sys/net80211/ieee80211_wds.c user/attilio/vmc-playground/sys/nfsclient/nfs_bio.c user/attilio/vmc-playground/sys/nfsclient/nfs_vnops.c user/attilio/vmc-playground/sys/nfsserver/nfs_serv.c user/attilio/vmc-playground/sys/ofed/drivers/infiniband/core/umem.c user/attilio/vmc-playground/sys/ofed/include/linux/linux_compat.c user/attilio/vmc-playground/sys/pc98/pc98/machdep.c user/attilio/vmc-playground/sys/powerpc/aim/machdep.c user/attilio/vmc-playground/sys/powerpc/aim/mmu_oea.c user/attilio/vmc-playground/sys/powerpc/aim/mmu_oea64.c user/attilio/vmc-playground/sys/powerpc/booke/machdep.c user/attilio/vmc-playground/sys/powerpc/booke/pmap.c user/attilio/vmc-playground/sys/security/mac/mac_process.c user/attilio/vmc-playground/sys/sparc64/conf/GENERIC user/attilio/vmc-playground/sys/sparc64/sparc64/machdep.c user/attilio/vmc-playground/sys/sparc64/sparc64/pmap.c user/attilio/vmc-playground/sys/sys/callout.h user/attilio/vmc-playground/sys/sys/systm.h user/attilio/vmc-playground/sys/ufs/ffs/ffs_rawread.c user/attilio/vmc-playground/sys/ufs/ffs/ffs_vnops.c user/attilio/vmc-playground/sys/vm/default_pager.c user/attilio/vmc-playground/sys/vm/device_pager.c user/attilio/vmc-playground/sys/vm/phys_pager.c user/attilio/vmc-playground/sys/vm/sg_pager.c user/attilio/vmc-playground/sys/vm/swap_pager.c user/attilio/vmc-playground/sys/vm/uma_core.c user/attilio/vmc-playground/sys/vm/vm_fault.c user/attilio/vmc-playground/sys/vm/vm_glue.c user/attilio/vmc-playground/sys/vm/vm_init.c user/attilio/vmc-playground/sys/vm/vm_kern.c user/attilio/vmc-playground/sys/vm/vm_map.c user/attilio/vmc-playground/sys/vm/vm_meter.c user/attilio/vmc-playground/sys/vm/vm_mmap.c user/attilio/vmc-playground/sys/vm/vm_object.c user/attilio/vmc-playground/sys/vm/vm_object.h user/attilio/vmc-playground/sys/vm/vm_page.c user/attilio/vmc-playground/sys/vm/vm_pageout.c user/attilio/vmc-playground/sys/vm/vm_pager.c user/attilio/vmc-playground/sys/vm/vm_pager.h user/attilio/vmc-playground/sys/vm/vm_reserv.c user/attilio/vmc-playground/sys/vm/vnode_pager.c user/attilio/vmc-playground/usr.bin/Makefile.arm user/attilio/vmc-playground/usr.bin/truss/extern.h user/attilio/vmc-playground/usr.bin/truss/main.c user/attilio/vmc-playground/usr.sbin/pkg/pkg.c Directory Properties: user/attilio/vmc-playground/ (props changed) user/attilio/vmc-playground/sbin/ (props changed) user/attilio/vmc-playground/sys/ (props changed) user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/ (props changed) user/attilio/vmc-playground/sys/conf/ (props changed) Modified: user/attilio/vmc-playground/UPDATING ============================================================================== --- user/attilio/vmc-playground/UPDATING Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/UPDATING Sat Mar 9 03:19:53 2013 (r248088) @@ -26,6 +26,10 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 10 disable the most expensive debugging functionality run "ln -s 'abort:false,junk:false' /etc/malloc.conf".) +20130308: + CTL_DISABLE has also been added to the sparc64 GENERIC (for further + information, see the respective 20130304 entry). + 20130304: Recent commits to callout(9) changed the size of struct callout, so the KBI is probably heavily disturbed. Also, some functions Modified: user/attilio/vmc-playground/sbin/geom/class/raid/graid.8 ============================================================================== --- user/attilio/vmc-playground/sbin/geom/class/raid/graid.8 Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sbin/geom/class/raid/graid.8 Sat Mar 9 03:19:53 2013 (r248088) @@ -305,6 +305,9 @@ Write errors are always considered as di Time to wait for missing array components on startup. .It Va kern.geom.raid. Ns Ar X Ns Va .enable : No 1 Enable taste for specific metadata or transformation module. +.It Va kern.geom.raid.legacy_aliases : No 0 +Enable geom raid emulation of /dev/ar%d devices from ataraid(4) +This should aid the upgrade of systems from legacy to modern releases. .El .Sh EXIT STATUS Exit status is 0 on success, and non-zero if the command fails. Modified: user/attilio/vmc-playground/sys/amd64/amd64/machdep.c ============================================================================== --- user/attilio/vmc-playground/sys/amd64/amd64/machdep.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/amd64/amd64/machdep.c Sat Mar 9 03:19:53 2013 (r248088) @@ -80,6 +80,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #ifdef SMP Modified: user/attilio/vmc-playground/sys/amd64/amd64/pmap.c ============================================================================== --- user/attilio/vmc-playground/sys/amd64/amd64/pmap.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/amd64/amd64/pmap.c Sat Mar 9 03:19:53 2013 (r248088) @@ -3556,7 +3556,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, va >= kmi.clean_eva, ("pmap_enter: managed mapping within the clean submap")); if ((m->oflags & (VPO_UNMANAGED | VPO_BUSY)) == 0) - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); pa = VM_PAGE_TO_PHYS(m); newpte = (pt_entry_t)(pa | PG_A | PG_V); if ((access & VM_PROT_WRITE) != 0) @@ -3823,7 +3823,7 @@ pmap_enter_object(pmap_t pmap, vm_offset vm_page_t m, mpte; vm_pindex_t diff, psize; - VM_OBJECT_LOCK_ASSERT(m_start->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m_start->object); psize = atop(end - start); mpte = NULL; m = m_start; @@ -4005,7 +4005,7 @@ pmap_object_init_pt(pmap_t pmap, vm_offs vm_page_t p, pdpg; int pat_mode; - VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(object); KASSERT(object->type == OBJT_DEVICE || object->type == OBJT_SG, ("pmap_object_init_pt: non-device object")); if ((addr & (NBPDR - 1)) == 0 && (size & (NBPDR - 1)) == 0) { @@ -4619,7 +4619,7 @@ pmap_is_modified(vm_page_t m) * concurrently set while the object is locked. Thus, if PGA_WRITEABLE * is clear, no PTEs can have PG_M set. */ - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); if ((m->oflags & VPO_BUSY) == 0 && (m->aflags & PGA_WRITEABLE) == 0) return (FALSE); @@ -4750,7 +4750,7 @@ pmap_remove_write(vm_page_t m) * another thread while the object is locked. Thus, if PGA_WRITEABLE * is clear, no page table entries need updating. */ - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); if ((m->oflags & VPO_BUSY) == 0 && (m->aflags & PGA_WRITEABLE) == 0) return; @@ -4894,7 +4894,7 @@ pmap_clear_modify(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_clear_modify: page %p is not managed", m)); - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); KASSERT((m->oflags & VPO_BUSY) == 0, ("pmap_clear_modify: page %p is busy", m)); Modified: user/attilio/vmc-playground/sys/arm/arm/cpufunc_asm_arm11x6.S ============================================================================== --- user/attilio/vmc-playground/sys/arm/arm/cpufunc_asm_arm11x6.S Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/arm/arm/cpufunc_asm_arm11x6.S Sat Mar 9 03:19:53 2013 (r248088) @@ -62,6 +62,8 @@ #include __FBSDID("$FreeBSD$"); + .cpu arm1136js + #if 0 #define Invalidate_I_cache(Rtmp1, Rtmp2) \ mcr p15, 0, Rtmp1, c7, c5, 0 /* Invalidate Entire I cache */ Modified: user/attilio/vmc-playground/sys/arm/arm/machdep.c ============================================================================== --- user/attilio/vmc-playground/sys/arm/arm/machdep.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/arm/arm/machdep.c Sat Mar 9 03:19:53 2013 (r248088) @@ -71,6 +71,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include Modified: user/attilio/vmc-playground/sys/arm/arm/pmap-v6.c ============================================================================== --- user/attilio/vmc-playground/sys/arm/arm/pmap-v6.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/arm/arm/pmap-v6.c Sat Mar 9 03:19:53 2013 (r248088) @@ -2212,7 +2212,7 @@ pmap_object_init_pt(pmap_t pmap, vm_offs vm_pindex_t pindex, vm_size_t size) { - VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(object); KASSERT(object->type == OBJT_DEVICE || object->type == OBJT_SG, ("pmap_object_init_pt: non-device object")); } @@ -3428,7 +3428,7 @@ pmap_clear_modify(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_clear_modify: page %p is not managed", m)); - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); KASSERT((m->oflags & VPO_BUSY) == 0, ("pmap_clear_modify: page %p is busy", m)); @@ -3475,7 +3475,7 @@ pmap_remove_write(vm_page_t m) * another thread while the object is locked. Thus, if PGA_WRITEABLE * is clear, no page table entries need updating. */ - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); if ((m->oflags & VPO_BUSY) != 0 || (m->aflags & PGA_WRITEABLE) != 0) pmap_clearbit(m, PVF_WRITE); Modified: user/attilio/vmc-playground/sys/arm/arm/pmap.c ============================================================================== --- user/attilio/vmc-playground/sys/arm/arm/pmap.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/arm/arm/pmap.c Sat Mar 9 03:19:53 2013 (r248088) @@ -3006,7 +3006,7 @@ pmap_object_init_pt(pmap_t pmap, vm_offs vm_pindex_t pindex, vm_size_t size) { - VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(object); KASSERT(object->type == OBJT_DEVICE || object->type == OBJT_SG, ("pmap_object_init_pt: non-device object")); } @@ -4461,7 +4461,7 @@ pmap_clear_modify(vm_page_t m) KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("pmap_clear_modify: page %p is not managed", m)); - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); KASSERT((m->oflags & VPO_BUSY) == 0, ("pmap_clear_modify: page %p is busy", m)); @@ -4523,7 +4523,7 @@ pmap_remove_write(vm_page_t m) * another thread while the object is locked. Thus, if PGA_WRITEABLE * is clear, no page table entries need updating. */ - VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(m->object); if ((m->oflags & VPO_BUSY) != 0 || (m->aflags & PGA_WRITEABLE) != 0) pmap_clearbit(m, PVF_WRITE); Copied: user/attilio/vmc-playground/sys/cddl/compat/opensolaris/kern/opensolaris_vm.c (from r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/kern/opensolaris_vm.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/attilio/vmc-playground/sys/cddl/compat/opensolaris/kern/opensolaris_vm.c Sat Mar 9 03:19:53 2013 (r248088, copy of r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/kern/opensolaris_vm.c) @@ -0,0 +1,68 @@ +/*- + * Copyright (c) 2013 EMC Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include +#include +#include +#include +#include + +const int zfs_vm_pagerret_bad = VM_PAGER_BAD; +const int zfs_vm_pagerret_error = VM_PAGER_ERROR; +const int zfs_vm_pagerret_ok = VM_PAGER_OK; + +void +zfs_vmobject_assert_wlocked(vm_object_t object) +{ + + /* + * This is not ideal because FILE/LINE used by assertions will not + * be too helpful, but it must be an hard function for + * compatibility reasons. + */ + VM_OBJECT_ASSERT_WLOCKED(object); +} + +void +zfs_vmobject_wlock(vm_object_t object) +{ + + VM_OBJECT_WLOCK(object); +} + +void +zfs_vmobject_wunlock(vm_object_t object) +{ + + VM_OBJECT_WUNLOCK(object); +} Copied: user/attilio/vmc-playground/sys/cddl/compat/opensolaris/sys/freebsd_rwlock.h (from r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/sys/freebsd_rwlock.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/attilio/vmc-playground/sys/cddl/compat/opensolaris/sys/freebsd_rwlock.h Sat Mar 9 03:19:53 2013 (r248088, copy of r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/sys/freebsd_rwlock.h) @@ -0,0 +1,34 @@ +/*- + * Copyright (c) 2013 EMC Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _OPENSOLARIS_SYS_FREEBSD_RWLOCK_H_ +#define _OPENSOLARIS_SYS_FREEBSD_RWLOCK_H_ + +#include_next + +#endif Copied: user/attilio/vmc-playground/sys/cddl/compat/opensolaris/sys/vm.h (from r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/sys/vm.h) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ user/attilio/vmc-playground/sys/cddl/compat/opensolaris/sys/vm.h Sat Mar 9 03:19:53 2013 (r248088, copy of r248087, user/attilio/vmcontention/sys/cddl/compat/opensolaris/sys/vm.h) @@ -0,0 +1,44 @@ +/*- + * Copyright (c) 2013 EMC Corp. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _OPENSOLARIS_SYS_VM_H_ +#define _OPENSOLARIS_SYS_VM_H_ + +#ifdef _KERNEL + +extern const int zfs_vm_pagerret_bad; +extern const int zfs_vm_pagerret_error; +extern const int zfs_vm_pagerret_ok; + +void zfs_vmobject_assert_wlocked(vm_object_t object); +void zfs_vmobject_wlock(vm_object_t object); +void zfs_vmobject_wunlock(vm_object_t object); + +#endif /* _KERNEL */ + +#endif /* _OPENSOLARIS_SYS_VM_H_ */ Modified: user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h ============================================================================== --- user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h Sat Mar 9 03:19:53 2013 (r248088) @@ -103,7 +103,6 @@ extern "C" { #include #include #include -#include #include #include /* There is clash. vm_map.h defines the two below and vdev_cache.c use them. */ Modified: user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c ============================================================================== --- user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Sat Mar 9 03:19:53 2013 (r248088) @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -329,7 +330,7 @@ page_busy(vnode_t *vp, int64_t start, in vm_page_t pp; obj = vp->v_object; - VM_OBJECT_LOCK_ASSERT(obj, MA_OWNED); + zfs_vmobject_assert_wlocked(obj); for (;;) { if ((pp = vm_page_lookup(obj, OFF_TO_IDX(start))) != NULL && @@ -377,7 +378,7 @@ page_hold(vnode_t *vp, int64_t start) vm_page_t pp; obj = vp->v_object; - VM_OBJECT_LOCK_ASSERT(obj, MA_OWNED); + zfs_vmobject_assert_wlocked(obj); for (;;) { if ((pp = vm_page_lookup(obj, OFF_TO_IDX(start))) != NULL && @@ -450,7 +451,7 @@ update_pages(vnode_t *vp, int64_t start, ASSERT(obj != NULL); off = start & PAGEOFFSET; - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); for (start &= PAGEMASK; len > 0; start += PAGESIZE) { vm_page_t pp; int nbytes = imin(PAGESIZE - off, len); @@ -467,23 +468,23 @@ update_pages(vnode_t *vp, int64_t start, ("zfs update_pages: unbusy page in putpages case")); KASSERT(!pmap_page_is_write_mapped(pp), ("zfs update_pages: writable page in putpages case")); - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); va = zfs_map_page(pp, &sf); (void) dmu_write(os, oid, start, nbytes, va, tx); zfs_unmap_page(sf); - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); vm_page_undirty(pp); } else if ((pp = page_busy(vp, start, off, nbytes)) != NULL) { - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); va = zfs_map_page(pp, &sf); (void) dmu_read(os, oid, start+off, nbytes, va+off, DMU_READ_PREFETCH);; zfs_unmap_page(sf); - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); page_unbusy(pp); } len -= nbytes; @@ -491,7 +492,7 @@ update_pages(vnode_t *vp, int64_t start, } if (segflg != UIO_NOCOPY) vm_object_pip_wakeupn(obj, 0); - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); } /* @@ -523,7 +524,7 @@ mappedread_sf(vnode_t *vp, int nbytes, u ASSERT(obj != NULL); ASSERT((uio->uio_loffset & PAGEOFFSET) == 0); - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); for (start = uio->uio_loffset; len > 0; start += PAGESIZE) { int bytes = MIN(PAGESIZE, len); @@ -531,14 +532,14 @@ mappedread_sf(vnode_t *vp, int nbytes, u VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_IGN_SBUSY); if (pp->valid == 0) { vm_page_io_start(pp); - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); va = zfs_map_page(pp, &sf); error = dmu_read(os, zp->z_id, start, bytes, va, DMU_READ_PREFETCH); if (bytes != PAGESIZE && error == 0) bzero(va + bytes, PAGESIZE - bytes); zfs_unmap_page(sf); - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); vm_page_io_finish(pp); vm_page_lock(pp); if (error) { @@ -555,7 +556,7 @@ mappedread_sf(vnode_t *vp, int nbytes, u uio->uio_offset += bytes; len -= bytes; } - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); return (error); } @@ -587,7 +588,7 @@ mappedread(vnode_t *vp, int nbytes, uio_ start = uio->uio_loffset; off = start & PAGEOFFSET; - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); for (start &= PAGEMASK; len > 0; start += PAGESIZE) { vm_page_t pp; uint64_t bytes = MIN(PAGESIZE - off, len); @@ -596,23 +597,23 @@ mappedread(vnode_t *vp, int nbytes, uio_ struct sf_buf *sf; caddr_t va; - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); va = zfs_map_page(pp, &sf); error = uiomove(va + off, bytes, UIO_READ, uio); zfs_unmap_page(sf); - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); page_unhold(pp); } else { - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); error = dmu_read_uio(os, zp->z_id, uio, bytes); - VM_OBJECT_LOCK(obj); + zfs_vmobject_wlock(obj); } len -= bytes; off = 0; if (error) break; } - VM_OBJECT_UNLOCK(obj); + zfs_vmobject_wunlock(obj); return (error); } @@ -5684,7 +5685,7 @@ zfs_getpages(struct vnode *vp, vm_page_t mfirst = m[reqstart]; mlast = m[reqstart + reqsize - 1]; - VM_OBJECT_LOCK(object); + zfs_vmobject_wlock(object); for (i = 0; i < reqstart; i++) { vm_page_lock(m[i]); @@ -5700,9 +5701,9 @@ zfs_getpages(struct vnode *vp, vm_page_t if (mreq->valid && reqsize == 1) { if (mreq->valid != VM_PAGE_BITS_ALL) vm_page_zero_invalid(mreq, TRUE); - VM_OBJECT_UNLOCK(object); + zfs_vmobject_wunlock(object); ZFS_EXIT(zfsvfs); - return (VM_PAGER_OK); + return (zfs_vm_pagerret_ok); } PCPU_INC(cnt.v_vnodein); @@ -5716,16 +5717,16 @@ zfs_getpages(struct vnode *vp, vm_page_t vm_page_unlock(m[i]); } } - VM_OBJECT_UNLOCK(object); + zfs_vmobject_wunlock(object); ZFS_EXIT(zfsvfs); - return (VM_PAGER_BAD); + return (zfs_vm_pagerret_bad); } lsize = PAGE_SIZE; if (IDX_TO_OFF(mlast->pindex) + lsize > object->un_pager.vnp.vnp_size) lsize = object->un_pager.vnp.vnp_size - IDX_TO_OFF(mlast->pindex); - VM_OBJECT_UNLOCK(object); + zfs_vmobject_wunlock(object); for (i = reqstart; i < reqstart + reqsize; i++) { size = PAGE_SIZE; @@ -5741,7 +5742,7 @@ zfs_getpages(struct vnode *vp, vm_page_t break; } - VM_OBJECT_LOCK(object); + zfs_vmobject_wlock(object); for (i = reqstart; i < reqstart + reqsize; i++) { if (!error) @@ -5751,11 +5752,11 @@ zfs_getpages(struct vnode *vp, vm_page_t vm_page_readahead_finish(m[i]); } - VM_OBJECT_UNLOCK(object); + zfs_vmobject_wunlock(object); ZFS_ACCESSTIME_STAMP(zfsvfs, zp); ZFS_EXIT(zfsvfs); - return (error ? VM_PAGER_ERROR : VM_PAGER_OK); + return (error ? zfs_vm_pagerret_error : zfs_vm_pagerret_ok); } static int Modified: user/attilio/vmc-playground/sys/compat/linprocfs/linprocfs.c ============================================================================== --- user/attilio/vmc-playground/sys/compat/linprocfs/linprocfs.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/compat/linprocfs/linprocfs.c Sat Mar 9 03:19:53 2013 (r248088) @@ -1031,9 +1031,9 @@ linprocfs_doprocmaps(PFS_FILL_ARGS) e_end = entry->end; obj = entry->object.vm_object; for (lobj = tobj = obj; tobj; tobj = tobj->backing_object) { - VM_OBJECT_LOCK(tobj); + VM_OBJECT_WLOCK(tobj); if (lobj != obj) - VM_OBJECT_UNLOCK(lobj); + VM_OBJECT_WUNLOCK(lobj); lobj = tobj; } last_timestamp = map->timestamp; @@ -1049,11 +1049,11 @@ linprocfs_doprocmaps(PFS_FILL_ARGS) else vp = NULL; if (lobj != obj) - VM_OBJECT_UNLOCK(lobj); + VM_OBJECT_WUNLOCK(lobj); flags = obj->flags; ref_count = obj->ref_count; shadow_count = obj->shadow_count; - VM_OBJECT_UNLOCK(obj); + VM_OBJECT_WUNLOCK(obj); if (vp) { vn_fullpath(td, vp, &name, &freename); vn_lock(vp, LK_SHARED | LK_RETRY); Modified: user/attilio/vmc-playground/sys/conf/files ============================================================================== --- user/attilio/vmc-playground/sys/conf/files Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/conf/files Sat Mar 9 03:19:53 2013 (r248088) @@ -157,6 +157,7 @@ cddl/compat/opensolaris/kern/opensolaris cddl/compat/opensolaris/kern/opensolaris_taskq.c optional zfs compile-with "${ZFS_C}" cddl/compat/opensolaris/kern/opensolaris_uio.c optional zfs compile-with "${ZFS_C}" cddl/compat/opensolaris/kern/opensolaris_vfs.c optional zfs compile-with "${ZFS_C}" +cddl/compat/opensolaris/kern/opensolaris_vm.c optional zfs compile-with "${ZFS_C}" cddl/compat/opensolaris/kern/opensolaris_zone.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/common/acl/acl_common.c optional zfs compile-with "${ZFS_C}" cddl/contrib/opensolaris/common/avl/avl.c optional zfs compile-with "${ZFS_C}" Modified: user/attilio/vmc-playground/sys/dev/agp/agp.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/agp/agp.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/agp/agp.c Sat Mar 9 03:19:53 2013 (r248088) @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -544,7 +545,7 @@ agp_generic_bind_memory(device_t dev, st * because vm_page_grab() may sleep and we can't hold a mutex * while sleeping. */ - VM_OBJECT_LOCK(mem->am_obj); + VM_OBJECT_WLOCK(mem->am_obj); for (i = 0; i < mem->am_size; i += PAGE_SIZE) { /* * Find a page from the object and wire it @@ -557,14 +558,14 @@ agp_generic_bind_memory(device_t dev, st VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_RETRY); AGP_DPF("found page pa=%#jx\n", (uintmax_t)VM_PAGE_TO_PHYS(m)); } - VM_OBJECT_UNLOCK(mem->am_obj); + VM_OBJECT_WUNLOCK(mem->am_obj); mtx_lock(&sc->as_lock); if (mem->am_is_bound) { device_printf(dev, "memory already bound\n"); error = EINVAL; - VM_OBJECT_LOCK(mem->am_obj); + VM_OBJECT_WLOCK(mem->am_obj); i = 0; goto bad; } @@ -573,7 +574,7 @@ agp_generic_bind_memory(device_t dev, st * Bind the individual pages and flush the chipset's * TLB. */ - VM_OBJECT_LOCK(mem->am_obj); + VM_OBJECT_WLOCK(mem->am_obj); for (i = 0; i < mem->am_size; i += PAGE_SIZE) { m = vm_page_lookup(mem->am_obj, OFF_TO_IDX(i)); @@ -601,7 +602,7 @@ agp_generic_bind_memory(device_t dev, st } vm_page_wakeup(m); } - VM_OBJECT_UNLOCK(mem->am_obj); + VM_OBJECT_WUNLOCK(mem->am_obj); /* * Flush the cpu cache since we are providing a new mapping @@ -622,7 +623,7 @@ agp_generic_bind_memory(device_t dev, st return 0; bad: mtx_unlock(&sc->as_lock); - VM_OBJECT_LOCK_ASSERT(mem->am_obj, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(mem->am_obj); for (k = 0; k < mem->am_size; k += PAGE_SIZE) { m = vm_page_lookup(mem->am_obj, OFF_TO_IDX(k)); if (k >= i) @@ -631,7 +632,7 @@ bad: vm_page_unwire(m, 0); vm_page_unlock(m); } - VM_OBJECT_UNLOCK(mem->am_obj); + VM_OBJECT_WUNLOCK(mem->am_obj); return error; } @@ -658,14 +659,14 @@ agp_generic_unbind_memory(device_t dev, */ for (i = 0; i < mem->am_size; i += AGP_PAGE_SIZE) AGP_UNBIND_PAGE(dev, mem->am_offset + i); - VM_OBJECT_LOCK(mem->am_obj); + VM_OBJECT_WLOCK(mem->am_obj); for (i = 0; i < mem->am_size; i += PAGE_SIZE) { m = vm_page_lookup(mem->am_obj, atop(i)); vm_page_lock(m); vm_page_unwire(m, 0); vm_page_unlock(m); } - VM_OBJECT_UNLOCK(mem->am_obj); + VM_OBJECT_WUNLOCK(mem->am_obj); agp_flush_cache(); AGP_FLUSH_TLB(dev); Modified: user/attilio/vmc-playground/sys/dev/agp/agp_i810.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/agp/agp_i810.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/agp/agp_i810.c Sat Mar 9 03:19:53 2013 (r248088) @@ -56,6 +56,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include @@ -1967,10 +1968,10 @@ agp_i810_alloc_memory(device_t dev, int * Allocate and wire down the page now so that we can * get its physical address. */ - VM_OBJECT_LOCK(mem->am_obj); + VM_OBJECT_WLOCK(mem->am_obj); m = vm_page_grab(mem->am_obj, 0, VM_ALLOC_NOBUSY | VM_ALLOC_WIRED | VM_ALLOC_ZERO | VM_ALLOC_RETRY); - VM_OBJECT_UNLOCK(mem->am_obj); + VM_OBJECT_WUNLOCK(mem->am_obj); mem->am_physical = VM_PAGE_TO_PHYS(m); } else { /* Our allocation is already nicely wired down for us. @@ -2005,12 +2006,12 @@ agp_i810_free_memory(device_t dev, struc /* * Unwire the page which we wired in alloc_memory. */ - VM_OBJECT_LOCK(mem->am_obj); + VM_OBJECT_WLOCK(mem->am_obj); m = vm_page_lookup(mem->am_obj, 0); vm_page_lock(m); vm_page_unwire(m, 0); vm_page_unlock(m); - VM_OBJECT_UNLOCK(mem->am_obj); + VM_OBJECT_WUNLOCK(mem->am_obj); } else { contigfree(sc->argb_cursor, mem->am_size, M_AGP); sc->argb_cursor = NULL; Modified: user/attilio/vmc-playground/sys/dev/drm/drmP.h ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm/drmP.h Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm/drmP.h Sat Mar 9 03:19:53 2013 (r248088) @@ -59,6 +59,7 @@ struct drm_file; #include #include #include +#include #include #include #include Modified: user/attilio/vmc-playground/sys/dev/drm2/drmP.h ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm2/drmP.h Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm2/drmP.h Sat Mar 9 03:19:53 2013 (r248088) @@ -58,6 +58,7 @@ struct drm_file; #include #include #include +#include #include #include #include Modified: user/attilio/vmc-playground/sys/dev/drm2/drm_fb_helper.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm2/drm_fb_helper.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm2/drm_fb_helper.c Sat Mar 9 03:19:53 2013 (r248088) @@ -555,8 +555,11 @@ static void drm_fb_helper_crtc_free(stru for (i = 0; i < helper->connector_count; i++) free(helper->connector_info[i], DRM_MEM_KMS); free(helper->connector_info, DRM_MEM_KMS); - for (i = 0; i < helper->crtc_count; i++) + for (i = 0; i < helper->crtc_count; i++) { free(helper->crtc_info[i].mode_set.connectors, DRM_MEM_KMS); + if (helper->crtc_info[i].mode_set.mode) + drm_mode_destroy(helper->dev, helper->crtc_info[i].mode_set.mode); + } free(helper->crtc_info, DRM_MEM_KMS); } Modified: user/attilio/vmc-playground/sys/dev/drm2/drm_global.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm2/drm_global.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm2/drm_global.c Sat Mar 9 03:19:53 2013 (r248088) @@ -104,6 +104,7 @@ void drm_global_item_unref(struct drm_gl MPASS(ref->object == item->object); if (--item->refcount == 0) { ref->release(ref); + free(item->object, M_DRM_GLOBAL); item->object = NULL; } sx_xunlock(&item->mutex); Modified: user/attilio/vmc-playground/sys/dev/drm2/i915/i915_gem.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm2/i915/i915_gem.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm2/i915/i915_gem.c Sat Mar 9 03:19:53 2013 (r248088) @@ -990,14 +990,14 @@ i915_gem_swap_io(struct drm_device *dev, vm_obj = obj->base.vm_obj; ret = 0; - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); vm_object_pip_add(vm_obj, 1); while (size > 0) { obj_pi = OFF_TO_IDX(offset); obj_po = offset & PAGE_MASK; m = i915_gem_wire_page(vm_obj, obj_pi); - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); sched_pin(); sf = sf_buf_alloc(m, SFB_CPUPRIVATE); @@ -1031,7 +1031,7 @@ i915_gem_swap_io(struct drm_device *dev, } sf_buf_free(sf); sched_unpin(); - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); if (rw == UIO_WRITE) vm_page_dirty(m); vm_page_reference(m); @@ -1044,7 +1044,7 @@ i915_gem_swap_io(struct drm_device *dev, break; } vm_object_pip_wakeup(vm_obj); - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); return (ret); } @@ -1357,7 +1357,7 @@ i915_gem_pager_fault(vm_object_t vm_obj, } else oldm = NULL; retry: - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); unlocked_vmobj: cause = ret = 0; m = NULL; @@ -1407,7 +1407,7 @@ unlocked_vmobj: list_move_tail(&obj->mm_list, &dev_priv->mm.inactive_list); obj->fault_mappable = true; - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); m = vm_phys_fictitious_to_vm_page(dev->agp->base + obj->gtt_offset + offset); if (m == NULL) { @@ -1452,7 +1452,7 @@ out: kern_yield(PRI_USER); goto unlocked_vmobj; } - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); vm_object_pip_wakeup(vm_obj); return (VM_PAGER_ERROR); } @@ -2208,12 +2208,12 @@ i915_gem_object_get_pages_gtt(struct drm obj->pages = malloc(page_count * sizeof(vm_page_t), DRM_I915_GEM, M_WAITOK); vm_obj = obj->base.vm_obj; - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); for (i = 0; i < page_count; i++) { if ((obj->pages[i] = i915_gem_wire_page(vm_obj, i)) == NULL) goto failed; } - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); if (i915_gem_object_needs_bit17_swizzle(obj)) i915_gem_object_do_bit_17_swizzle(obj); return (0); @@ -2226,7 +2226,7 @@ failed: vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); free(obj->pages, DRM_I915_GEM); obj->pages = NULL; return (-EIO); @@ -2272,7 +2272,7 @@ i915_gem_object_put_pages_gtt(struct drm if (obj->madv == I915_MADV_DONTNEED) obj->dirty = 0; page_count = obj->base.size / PAGE_SIZE; - VM_OBJECT_LOCK(obj->base.vm_obj); + VM_OBJECT_WLOCK(obj->base.vm_obj); #if GEM_PARANOID_CHECK_GTT i915_gem_assert_pages_not_mapped(obj->base.dev, obj->pages, page_count); #endif @@ -2287,7 +2287,7 @@ i915_gem_object_put_pages_gtt(struct drm vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } - VM_OBJECT_UNLOCK(obj->base.vm_obj); + VM_OBJECT_WUNLOCK(obj->base.vm_obj); obj->dirty = 0; free(obj->pages, DRM_I915_GEM); obj->pages = NULL; @@ -2309,7 +2309,7 @@ i915_gem_release_mmap(struct drm_i915_ge if (devobj != NULL) { page_count = OFF_TO_IDX(obj->base.size); - VM_OBJECT_LOCK(devobj); + VM_OBJECT_WLOCK(devobj); retry: for (i = 0; i < page_count; i++) { m = vm_page_lookup(devobj, i); @@ -2319,7 +2319,7 @@ retry: goto retry; cdev_pager_free_page(devobj, m); } - VM_OBJECT_UNLOCK(devobj); + VM_OBJECT_WUNLOCK(devobj); vm_object_deallocate(devobj); } @@ -2437,9 +2437,9 @@ i915_gem_object_truncate(struct drm_i915 vm_object_t vm_obj; vm_obj = obj->base.vm_obj; - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); vm_object_page_remove(vm_obj, 0, 0, false); - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); obj->madv = I915_MADV_PURGED_INTERNAL; } @@ -2488,7 +2488,7 @@ i915_gem_wire_page(vm_object_t object, v vm_page_t m; int rv; - VM_OBJECT_LOCK_ASSERT(object, MA_OWNED); + VM_OBJECT_ASSERT_WLOCKED(object); m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL | VM_ALLOC_RETRY); if (m->valid != VM_PAGE_BITS_ALL) { if (vm_pager_has_page(object, pindex, NULL, NULL)) { @@ -3567,13 +3567,13 @@ i915_gem_detach_phys_object(struct drm_d vaddr = obj->phys_obj->handle->vaddr; page_count = obj->base.size / PAGE_SIZE; - VM_OBJECT_LOCK(obj->base.vm_obj); + VM_OBJECT_WLOCK(obj->base.vm_obj); for (i = 0; i < page_count; i++) { m = i915_gem_wire_page(obj->base.vm_obj, i); if (m == NULL) continue; /* XXX */ - VM_OBJECT_UNLOCK(obj->base.vm_obj); + VM_OBJECT_WUNLOCK(obj->base.vm_obj); sf = sf_buf_alloc(m, 0); if (sf != NULL) { dst = (char *)sf_buf_kva(sf); @@ -3582,7 +3582,7 @@ i915_gem_detach_phys_object(struct drm_d } drm_clflush_pages(&m, 1); - VM_OBJECT_LOCK(obj->base.vm_obj); + VM_OBJECT_WLOCK(obj->base.vm_obj); vm_page_reference(m); vm_page_lock(m); vm_page_dirty(m); @@ -3590,7 +3590,7 @@ i915_gem_detach_phys_object(struct drm_d vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } - VM_OBJECT_UNLOCK(obj->base.vm_obj); + VM_OBJECT_WUNLOCK(obj->base.vm_obj); intel_gtt_chipset_flush(); obj->phys_obj->cur_obj = NULL; @@ -3632,7 +3632,7 @@ i915_gem_attach_phys_object(struct drm_d page_count = obj->base.size / PAGE_SIZE; - VM_OBJECT_LOCK(obj->base.vm_obj); + VM_OBJECT_WLOCK(obj->base.vm_obj); ret = 0; for (i = 0; i < page_count; i++) { m = i915_gem_wire_page(obj->base.vm_obj, i); @@ -3640,14 +3640,14 @@ i915_gem_attach_phys_object(struct drm_d ret = -EIO; break; } - VM_OBJECT_UNLOCK(obj->base.vm_obj); + VM_OBJECT_WUNLOCK(obj->base.vm_obj); sf = sf_buf_alloc(m, 0); src = (char *)sf_buf_kva(sf); dst = (char *)obj->phys_obj->handle->vaddr + IDX_TO_OFF(i); memcpy(dst, src, PAGE_SIZE); sf_buf_free(sf); - VM_OBJECT_LOCK(obj->base.vm_obj); + VM_OBJECT_WLOCK(obj->base.vm_obj); vm_page_reference(m); vm_page_lock(m); @@ -3655,7 +3655,7 @@ i915_gem_attach_phys_object(struct drm_d vm_page_unlock(m); atomic_add_long(&i915_gem_wired_pages_cnt, -1); } - VM_OBJECT_UNLOCK(obj->base.vm_obj); + VM_OBJECT_WUNLOCK(obj->base.vm_obj); return (0); } Modified: user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo.c Sat Mar 9 03:19:53 2013 (r248088) @@ -1400,7 +1400,6 @@ static void ttm_bo_global_kobj_release(s ttm_mem_unregister_shrink(glob->mem_glob, &glob->shrink); vm_page_free(glob->dummy_read_page); - free(glob, M_DRM_GLOBAL); } void ttm_bo_global_release(struct drm_global_reference *ref) Modified: user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo_vm.c ============================================================================== --- user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo_vm.c Sat Mar 9 02:51:51 2013 (r248087) +++ user/attilio/vmc-playground/sys/dev/drm2/ttm/ttm_bo_vm.c Sat Mar 9 03:19:53 2013 (r248088) @@ -118,7 +118,7 @@ ttm_bo_vm_fault(vm_object_t vm_obj, vm_o } else oldm = NULL; retry: - VM_OBJECT_UNLOCK(vm_obj); + VM_OBJECT_WUNLOCK(vm_obj); m = NULL; reserve: @@ -213,7 +213,7 @@ reserve: VM_MEMATTR_WRITE_BACK : ttm_io_prot(bo->mem.placement)); } - VM_OBJECT_LOCK(vm_obj); + VM_OBJECT_WLOCK(vm_obj); if ((m->flags & VPO_BUSY) != 0) { vm_page_sleep(m, "ttmpbs"); ttm_mem_io_unlock(man); *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***