Date: Fri, 27 Apr 2007 20:31:42 GMT From: Rui Paulo <rpaulo@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 118894 for review Message-ID: <200704272031.l3RKVgEN076852@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=118894 Change 118894 by rpaulo@rpaulo_epsilon on 2007/04/27 20:30:43 IFC Affected files ... .. //depot/projects/soc2007/rpaulo-macbook/amd64/amd64/local_apic.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/amd64/amd64/pmap.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/amd64/amd64/vm_machdep.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/amd64/include/vmparam.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/bsm/audit.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/bsm/audit_internal.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/bsm/audit_kevents.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/bsm/audit_record.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/cam/cam_periph.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/cam/cam_periph.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/cam/cam_xpt.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/cam/scsi/scsi_da.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/cam/scsi/scsi_pt.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/cam/scsi/scsi_sa.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/compat/linprocfs/linprocfs.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/compat/opensolaris/kern/opensolaris_misc.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/compat/opensolaris/kern/opensolaris_vfs.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/compat/opensolaris/sys/misc.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/compat/opensolaris/sys/sunddi.h#1 branch .. //depot/projects/soc2007/rpaulo-macbook/compat/opensolaris/sys/types.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/compat/opensolaris/sys/vnode.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/conf/files#3 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/dnlc.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/arc.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/spa.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/spa_config.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/vdev.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zap.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zil.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zio.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/contrib/opensolaris/uts/common/fs/zfs/zvol.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/acpi_support/acpi_ibm.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/acpica/acpi.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/aic7xxx/aic79xx.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/aic7xxx/aic79xx.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/aic7xxx/aic7xxx.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/aic7xxx/aic7xxx.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/aic7xxx/aic7xxx_inline.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/ata/ata-disk.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/ath/if_ath.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/cxgb/cxgb_main.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/cxgb/cxgb_sge.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/cxgb/sys/uipc_mvec.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/firewire/firewire.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/firewire/fwdev.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/led/led.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/led/led.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/msk/if_msk.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/msk/if_mskreg.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/mxge/if_mxge.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/pci/pci.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/pci/pcireg.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/sound/pci/envy24.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/sound/pci/envy24ht.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/dev/sound/pci/hda/hdac.c#2 edit .. //depot/projects/soc2007/rpaulo-macbook/dev/usb/if_ural.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/fs/devfs/devfs_devs.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/fs/devfs/devfs_vnops.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/fs/procfs/procfs_map.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/fs/pseudofs/pseudofs_vncache.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/geom/part/g_part.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/geom/uzip/g_uzip.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/i386/i386/local_apic.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/i386/i386/pmap.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/i386/i386/sys_machdep.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/i386/i386/vm_machdep.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/i386/include/vmparam.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/ia64/include/vmparam.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/kern_descrip.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/kern_linker.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/kern_malloc.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/kern_time.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/kern_uuid.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/sched_ule.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/uipc_syscalls.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/vfs_bio.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/kern/vfs_mount.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/modules/zfs/Makefile#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netgraph/ng_l2tp.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netgraph/ng_ppp.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_indata.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_indata.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_input.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_output.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_pcb.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_pcb.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_structs.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_uio.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctp_usrreq.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctputil.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/sctputil.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/tcp.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/tcp_input.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/tcp_output.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/tcp_syncache.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet/tcp_var.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet6/in6_pcb.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/netinet6/route6.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/nfsclient/nfs_bio.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/nfsclient/nfs_lock.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/nfsclient/nfs_vnops.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/nfsserver/nfs_syscalls.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/pci/if_vr.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/pci/if_vrreg.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/pci/intpm.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/powerpc/powerpc/nexus.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/audit/audit_syscalls.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_audit.c#1 branch .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_framework.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_inet.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_net.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_pipe.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_policy.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_process.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_socket.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_system.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac/mac_vfs.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_biba/mac_biba.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_bsdextended/mac_bsdextended.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_ifoff/mac_ifoff.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_lomac/mac_lomac.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_mls/mac_mls.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_partition/mac_partition.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_portacl/mac_portacl.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_seeotheruids/mac_seeotheruids.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_stub/mac_stub.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/security/mac_test/mac_test.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sparc64/include/vmparam.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sun4v/include/vmparam.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sys/ioctl_compat.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sys/mount.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sys/priv.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sys/proc.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/sys/socket.h#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/vm/swap_pager.c#2 integrate .. //depot/projects/soc2007/rpaulo-macbook/vm/vm_map.c#2 integrate Differences ... ==== //depot/projects/soc2007/rpaulo-macbook/amd64/amd64/local_apic.c#2 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.37 2007/03/20 21:53:30 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.38 2007/04/25 19:58:41 ariff Exp $"); #include "opt_hwpmc_hooks.h" @@ -326,6 +326,29 @@ /* XXX: Error and thermal LVTs */ + if (strcmp(cpu_vendor, "AuthenticAMD") == 0) { + /* + * Detect the presence of C1E capability mostly on latest + * dual-cores (or future) k8 family. This feature renders + * the local APIC timer dead, so we disable it by reading + * the Interrupt Pending Message register and clearing both + * C1eOnCmpHalt (bit 28) and SmiOnCmpHalt (bit 27). + * + * Reference: + * "BIOS and Kernel Developer's Guide for AMD NPT + * Family 0Fh Processors" + * #32559 revision 3.00 + */ + if ((cpu_id & 0x00000f00) == 0x00000f00 && + (cpu_id & 0x0fff0000) >= 0x00040000) { + uint64_t msr; + + msr = rdmsr(0xc0010055); + if (msr & 0x18000000) + wrmsr(0xc0010055, msr & ~0x18000000ULL); + } + } + intr_restore(eflags); } ==== //depot/projects/soc2007/rpaulo-macbook/amd64/amd64/pmap.c#2 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.582 2007/04/13 16:07:29 alc Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.584 2007/04/25 18:10:43 ups Exp $"); /* * Manages physical address maps. @@ -209,7 +209,7 @@ static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, vm_page_t mpte); static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, - vm_offset_t sva, pd_entry_t ptepde); + vm_offset_t sva, pd_entry_t ptepde, vm_page_t *free); static void pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde); static void pmap_remove_entry(struct pmap *pmap, vm_page_t m, vm_offset_t va); @@ -221,8 +221,9 @@ static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags); static vm_page_t _pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags); -static int _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m); -static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t); +static int _pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m, + vm_page_t* free); +static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t, vm_page_t *); static vm_offset_t pmap_kmem_choose(vm_offset_t addr); CTASSERT(1 << PDESHIFT == sizeof(pd_entry_t)); @@ -1065,24 +1066,36 @@ /*************************************************** * Page table page management routines..... ***************************************************/ +static PMAP_INLINE void +pmap_free_zero_pages(vm_page_t free) +{ + vm_page_t m; + while (free != NULL) { + m = free; + free = m->right; + vm_page_free_zero(m); + } +} + /* * This routine unholds page table pages, and if the hold count * drops to zero, then it decrements the wire count. */ static PMAP_INLINE int -pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m) +pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_page_t *free) { --m->wire_count; if (m->wire_count == 0) - return _pmap_unwire_pte_hold(pmap, va, m); + return _pmap_unwire_pte_hold(pmap, va, m, free); else return 0; } static int -_pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m) +_pmap_unwire_pte_hold(pmap_t pmap, vm_offset_t va, vm_page_t m, + vm_page_t *free) { vm_offset_t pteva; @@ -1114,14 +1127,14 @@ vm_page_t pdpg; pdpg = PHYS_TO_VM_PAGE(*pmap_pdpe(pmap, va) & PG_FRAME); - pmap_unwire_pte_hold(pmap, va, pdpg); + pmap_unwire_pte_hold(pmap, va, pdpg, free); } if (m->pindex >= NUPDE && m->pindex < (NUPDE + NUPDPE)) { /* We just released a PD, unhold the matching PDP */ vm_page_t pdppg; pdppg = PHYS_TO_VM_PAGE(*pmap_pml4e(pmap, va) & PG_FRAME); - pmap_unwire_pte_hold(pmap, va, pdppg); + pmap_unwire_pte_hold(pmap, va, pdppg, free); } /* @@ -1130,7 +1143,13 @@ */ pmap_invalidate_page(pmap, pteva); - vm_page_free_zero(m); + /* + * Put page on a list so that it is released after + * *ALL* TLB shootdown is done + */ + m->right = *free; + *free = m; + atomic_subtract_int(&cnt.v_wire_count, 1); return 1; } @@ -1140,7 +1159,7 @@ * conditionally free the page, and manage the hold/wire counts. */ static int -pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t ptepde) +pmap_unuse_pt(pmap_t pmap, vm_offset_t va, pd_entry_t ptepde, vm_page_t *free) { vm_page_t mpte; @@ -1148,7 +1167,7 @@ return 0; KASSERT(ptepde != 0, ("pmap_unuse_pt: ptepde != 0")); mpte = PHYS_TO_VM_PAGE(ptepde & PG_FRAME); - return pmap_unwire_pte_hold(pmap, va, mpte); + return pmap_unwire_pte_hold(pmap, va, mpte, free); } void @@ -1366,7 +1385,7 @@ { vm_pindex_t ptepindex; pd_entry_t *pd; - vm_page_t m; + vm_page_t m, free; KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT || (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK, @@ -1390,8 +1409,10 @@ *pd = 0; pd = 0; pmap->pm_stats.resident_count -= NBPDR / PAGE_SIZE; - pmap_unuse_pt(pmap, va, *pmap_pdpe(pmap, va)); + free = NULL; + pmap_unuse_pt(pmap, va, *pmap_pdpe(pmap, va), &free); pmap_invalidate_all(kernel_pmap); + pmap_free_zero_pages(free); } /* @@ -1609,7 +1630,7 @@ pt_entry_t *pte, tpte; pv_entry_t next_pv, pv; vm_offset_t va; - vm_page_t m; + vm_page_t m, free; TAILQ_FOREACH(m, &vpq->pl, pageq) { if (m->hold_count || m->busy) @@ -1635,12 +1656,14 @@ va, tpte)); vm_page_dirty(m); } + free = NULL; + pmap_unuse_pt(pmap, va, ptepde, &free); pmap_invalidate_page(pmap, va); + pmap_free_zero_pages(free); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); if (TAILQ_EMPTY(&m->md.pv_list)) vm_page_flag_clear(m, PG_WRITEABLE); m->md.pv_list_count--; - pmap_unuse_pt(pmap, va, ptepde); free_pv_entry(pmap, pv); if (pmap != locked_pmap) PMAP_UNLOCK(pmap); @@ -1833,7 +1856,8 @@ * pmap_remove_pte: do the things to unmap a page in a process */ static int -pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va, pd_entry_t ptepde) +pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq, vm_offset_t va, + pd_entry_t ptepde, vm_page_t *free) { pt_entry_t oldpte; vm_page_t m; @@ -1861,7 +1885,7 @@ vm_page_flag_set(m, PG_REFERENCED); pmap_remove_entry(pmap, m, va); } - return (pmap_unuse_pt(pmap, va, ptepde)); + return (pmap_unuse_pt(pmap, va, ptepde, free)); } /* @@ -1871,6 +1895,7 @@ pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde) { pt_entry_t *pte; + vm_page_t free = NULL; PMAP_LOCK_ASSERT(pmap, MA_OWNED); if ((*pde & PG_V) == 0) @@ -1878,8 +1903,9 @@ pte = pmap_pde_to_pte(pde, va); if ((*pte & PG_V) == 0) return; - pmap_remove_pte(pmap, pte, va, *pde); + pmap_remove_pte(pmap, pte, va, *pde, &free); pmap_invalidate_page(pmap, va); + pmap_free_zero_pages(free); } /* @@ -1896,6 +1922,7 @@ pdp_entry_t *pdpe; pd_entry_t ptpaddr, *pde; pt_entry_t *pte; + vm_page_t free = NULL; int anyvalid; /* @@ -1959,7 +1986,7 @@ if ((ptpaddr & PG_PS) != 0) { *pde = 0; pmap->pm_stats.resident_count -= NBPDR / PAGE_SIZE; - pmap_unuse_pt(pmap, sva, *pdpe); + pmap_unuse_pt(pmap, sva, *pdpe, &free); anyvalid = 1; continue; } @@ -1983,14 +2010,16 @@ */ if ((*pte & PG_G) == 0) anyvalid = 1; - if (pmap_remove_pte(pmap, pte, sva, ptpaddr)) + if (pmap_remove_pte(pmap, pte, sva, ptpaddr, &free)) break; } } out: - vm_page_unlock_queues(); - if (anyvalid) + if (anyvalid) { pmap_invalidate_all(pmap); + pmap_free_zero_pages(free); + } + vm_page_unlock_queues(); PMAP_UNLOCK(pmap); } @@ -2014,6 +2043,7 @@ pmap_t pmap; pt_entry_t *pte, tpte; pd_entry_t ptepde; + vm_page_t free; #if defined(PMAP_DIAGNOSTIC) /* @@ -2045,10 +2075,12 @@ pv->pv_va, tpte)); vm_page_dirty(m); } + free = NULL; + pmap_unuse_pt(pmap, pv->pv_va, ptepde, &free); pmap_invalidate_page(pmap, pv->pv_va); + pmap_free_zero_pages(free); TAILQ_REMOVE(&m->md.pv_list, pv, pv_list); m->md.pv_list_count--; - pmap_unuse_pt(pmap, pv->pv_va, ptepde); free_pv_entry(pmap, pv); PMAP_UNLOCK(pmap); } @@ -2161,9 +2193,9 @@ } } } - vm_page_unlock_queues(); if (anychanged) pmap_invalidate_all(pmap); + vm_page_unlock_queues(); PMAP_UNLOCK(pmap); } @@ -2413,6 +2445,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot, vm_page_t mpte) { + vm_page_t free; pt_entry_t *pte; vm_paddr_t pa; @@ -2471,7 +2504,7 @@ pte = vtopte(va); if (*pte) { if (mpte != NULL) { - pmap_unwire_pte_hold(pmap, va, mpte); + mpte->wire_count--; mpte = NULL; } return (mpte); @@ -2483,7 +2516,11 @@ if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0 && !pmap_try_insert_pv_entry(pmap, va, m)) { if (mpte != NULL) { - pmap_unwire_pte_hold(pmap, va, mpte); + free = NULL; + if (pmap_unwire_pte_hold(pmap, va, mpte, &free)) { + pmap_invalidate_page(pmap, va); + pmap_free_zero_pages(free); + } mpte = NULL; } return (mpte); @@ -2657,6 +2694,7 @@ pmap_copy(pmap_t dst_pmap, pmap_t src_pmap, vm_offset_t dst_addr, vm_size_t len, vm_offset_t src_addr) { + vm_page_t free; vm_offset_t addr; vm_offset_t end_addr = src_addr + len; vm_offset_t va_next; @@ -2716,7 +2754,7 @@ dst_pmap->pm_stats.resident_count += NBPDR / PAGE_SIZE; } else - pmap_unwire_pte_hold(dst_pmap, addr, dstmpde); + dstmpde->wire_count--; continue; } @@ -2753,9 +2791,15 @@ *dst_pte = ptetemp & ~(PG_W | PG_M | PG_A); dst_pmap->pm_stats.resident_count++; - } else - pmap_unwire_pte_hold(dst_pmap, addr, - dstmpte); + } else { + free = NULL; + if (pmap_unwire_pte_hold(dst_pmap, + addr, dstmpte, &free)) { + pmap_invalidate_page(dst_pmap, + addr); + pmap_free_zero_pages(free); + } + } if (dstmpte->wire_count >= srcmpte->wire_count) break; } @@ -2866,7 +2910,7 @@ pmap_remove_pages(pmap_t pmap) { pt_entry_t *pte, tpte; - vm_page_t m; + vm_page_t m, free = NULL; pv_entry_t pv; struct pv_chunk *pc, *npc; int field, idx; @@ -2939,7 +2983,7 @@ if (TAILQ_EMPTY(&m->md.pv_list)) vm_page_flag_clear(m, PG_WRITEABLE); pmap_unuse_pt(pmap, pv->pv_va, - *vtopde(pv->pv_va)); + *vtopde(pv->pv_va), &free); } } if (allfree) { @@ -2952,8 +2996,9 @@ vm_page_free(m); } } + pmap_invalidate_all(pmap); + pmap_free_zero_pages(free); vm_page_unlock_queues(); - pmap_invalidate_all(pmap); PMAP_UNLOCK(pmap); } ==== //depot/projects/soc2007/rpaulo-macbook/amd64/amd64/vm_machdep.c#2 (text+ko) ==== @@ -41,7 +41,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.252 2006/09/17 14:54:14 davidxu Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/vm_machdep.c,v 1.254 2007/04/24 21:17:45 jhb Exp $"); #include "opt_isa.h" #include "opt_cpu.h" @@ -457,6 +457,10 @@ static void cpu_reset_real() { + struct region_descriptor null_idt; + int b; + + disable_intr(); /* * Attempt to do a CPU reset via the keyboard controller, @@ -465,14 +469,44 @@ */ outb(IO_KBD + 4, 0xFE); DELAY(500000); /* wait 0.5 sec to see if that did it */ - printf("Keyboard reset did not work, attempting CPU shutdown\n"); + + /* + * Attempt to force a reset via the Reset Control register at + * I/O port 0xcf9. Bit 2 forces a system reset when it is + * written as 1. Bit 1 selects the type of reset to attempt: + * 0 selects a "soft" reset, and 1 selects a "hard" reset. We + * try to do a "soft" reset first, and then a "hard" reset. + */ + outb(0xcf9, 0x2); + outb(0xcf9, 0x6); + DELAY(500000); /* wait 0.5 sec to see if that did it */ + + /* + * Attempt to force a reset via the Fast A20 and Init register + * at I/O port 0x92. Bit 1 serves as an alternate A20 gate. + * Bit 0 asserts INIT# when set to 1. We are careful to only + * preserve bit 1 while setting bit 0. We also must clear bit + * 0 before setting it if it isn't already clear. + */ + b = inb(0x92); + if (b != 0xff) { + if ((b & 0x1) != 0) + outb(0x92, b & 0xfe); + outb(0x92, b | 0x1); + DELAY(500000); /* wait 0.5 sec to see if that did it */ + } + + printf("No known reset method worked, attempting CPU shutdown\n"); DELAY(1000000); /* wait 1 sec for printf to complete */ - /* Force a shutdown by unmapping entire address space. */ - bzero((caddr_t)PML4map, PAGE_SIZE); + /* Wipe the IDT. */ + null_idt.rd_limit = 0; + null_idt.rd_base = 0; + lidt(&null_idt); /* "good night, sweet prince .... <THUNK!>" */ - invltlb(); + breakpoint(); + /* NOTREACHED */ while(1); } ==== //depot/projects/soc2007/rpaulo-macbook/amd64/include/vmparam.h#2 (text+ko) ==== @@ -38,7 +38,7 @@ * SUCH DAMAGE. * * from: @(#)vmparam.h 5.9 (Berkeley) 5/12/91 - * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.45 2004/10/27 17:21:15 peter Exp $ + * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.46 2007/04/21 01:14:47 sepotvin Exp $ */ @@ -122,7 +122,8 @@ /* * How many physical pages per KVA page allocated. - * min(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), VM_KMEM_SIZE_MAX) + * min(max(max(VM_KMEM_SIZE, Physical memory/VM_KMEM_SIZE_SCALE), + * VM_KMEM_SIZE_MIN), VM_KMEM_SIZE_MAX) * is the total KVA space allocated for kmem_map. */ #ifndef VM_KMEM_SIZE_SCALE ==== //depot/projects/soc2007/rpaulo-macbook/bsm/audit.h#2 (text) ==== @@ -30,8 +30,8 @@ * * @APPLE_BSD_LICENSE_HEADER_END@ * - * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit.h#34 $ - * $FreeBSD: src/sys/bsm/audit.h,v 1.6 2006/09/21 07:27:02 rwatson Exp $ + * P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit.h#36 + * $FreeBSD: src/sys/bsm/audit.h,v 1.8 2007/04/17 12:27:08 rwatson Exp $ */ #ifndef _BSM_AUDIT_H ==== //depot/projects/soc2007/rpaulo-macbook/bsm/audit_internal.h#2 (text) ==== @@ -34,8 +34,8 @@ * * @APPLE_BSD_LICENSE_HEADER_END@ * - * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_internal.h#14 $ - * $FreeBSD: src/sys/bsm/audit_internal.h,v 1.5 2006/09/21 07:27:02 rwatson Exp $ + * P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_internal.h#16 + * $FreeBSD: src/sys/bsm/audit_internal.h,v 1.7 2007/04/17 12:27:08 rwatson Exp $ */ #ifndef _AUDIT_INTERNAL_H ==== //depot/projects/soc2007/rpaulo-macbook/bsm/audit_kevents.h#2 (text) ==== @@ -30,8 +30,8 @@ * * @APPLE_BSD_LICENSE_HEADER_END@ * - * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_kevents.h#29 $ - * $FreeBSD: src/sys/bsm/audit_kevents.h,v 1.9 2006/09/25 12:22:07 rwatson Exp $ + * P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_kevents.h#32 + * $FreeBSD: src/sys/bsm/audit_kevents.h,v 1.11 2007/04/17 12:27:08 rwatson Exp $ */ #ifndef _BSM_AUDIT_KEVENTS_H_ @@ -475,6 +475,28 @@ #define AUE_READDIR 43118 /* Linux. */ #define AUE_IOPL 43119 /* Linux. */ #define AUE_VM86 43120 /* Linux. */ +#define AUE_MAC_GET_PROC 43121 /* FreeBSD. */ +#define AUE_MAC_SET_PROC 43122 /* FreeBSD. */ +#define AUE_MAC_GET_FD 43123 /* FreeBSD. */ +#define AUE_MAC_GET_FILE 43124 /* FreeBSD. */ +#define AUE_MAC_SET_FD 43125 /* FreeBSD. */ +#define AUE_MAC_SET_FILE 43126 /* FreeBSD. */ +#define AUE_MAC_SYSCALL 43127 /* FreeBSD. */ +#define AUE_MAC_GET_PID 43128 /* FreeBSD. */ +#define AUE_MAC_GET_LINK 43129 /* FreeBSD. */ +#define AUE_MAC_SET_LINK 43130 /* FreeBSD. */ +#define AUE_MAC_EXECVE 43131 /* FreeBSD. */ +#define AUE_GETPATH_FROMFD 43132 /* FreeBSD. */ +#define AUE_GETPATH_FROMADDR 43133 /* FreeBSD. */ +#define AUE_MQ_OPEN 43134 /* FreeBSD. */ +#define AUE_MQ_SETATTR 43135 /* FreeBSD. */ +#define AUE_MQ_TIMEDRECEIVE 43136 /* FreeBSD. */ +#define AUE_MQ_TIMEDSEND 43137 /* FreeBSD. */ +#define AUE_MQ_NOTIFY 43138 /* FreeBSD. */ +#define AUE_MQ_UNLINK 43139 /* FreeBSD. */ +#define AUE_LISTEN 43140 /* FreeBSD/Darwin/Linux. */ +#define AUE_MLOCKALL 43141 /* FreeBSD. */ +#define AUE_MUNLOCKALL 43142 /* FreeBSD. */ /* * Darwin BSM uses a number of AUE_O_* definitions, which are aliased to the @@ -572,16 +594,13 @@ #define AUE_GETSOCKOPT AUE_NULL #define AUE_GTSOCKOPT AUE_GETSOCKOPT /* XXX: Typo in Darwin. */ #define AUE_ISSETUGID AUE_NULL -#define AUE_LISTEN AUE_NULL #define AUE_LSTATV AUE_NULL #define AUE_MADVISE AUE_NULL #define AUE_MINCORE AUE_NULL #define AUE_MKCOMPLEX AUE_NULL -#define AUE_MLOCKALL AUE_NULL #define AUE_MODWATCH AUE_NULL #define AUE_MSGCL AUE_NULL #define AUE_MSYNC AUE_NULL -#define AUE_MUNLOCKALL AUE_NULL #define AUE_PREAD AUE_NULL #define AUE_PWRITE AUE_NULL #define AUE_PREADV AUE_NULL ==== //depot/projects/soc2007/rpaulo-macbook/bsm/audit_record.h#2 (text) ==== @@ -30,8 +30,8 @@ * * @APPLE_BSD_LICENSE_HEADER_END@ * - * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_record.h#21 $ - * $FreeBSD: src/sys/bsm/audit_record.h,v 1.6 2006/09/21 07:27:02 rwatson Exp $ + * P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_record.h#24 + * $FreeBSD: src/sys/bsm/audit_record.h,v 1.9 2007/04/17 12:27:08 rwatson Exp $ */ #ifndef _BSM_AUDIT_RECORD_H_ @@ -86,6 +86,7 @@ /* XXXRW: Additional X11 tokens not defined? */ #define AUT_CMD 0x51 #define AUT_EXIT 0x52 +#define AUT_ZONENAME 0x60 /* XXXRW: OpenBSM AUT_HOST 0x70? */ #define AUT_ARG64 0x71 #define AUT_RETURN64 0x72 @@ -247,6 +248,8 @@ token_t *au_to_header32_tm(int rec_size, au_event_t e_type, au_emod_t e_mod, struct timeval tm); +token_t *au_to_header64_tm(int rec_size, au_event_t e_type, au_emod_t e_mod, + struct timeval tm); #if !defined(KERNEL) && !defined(_KERNEL) token_t *au_to_header(int rec_size, au_event_t e_type, au_emod_t e_mod); token_t *au_to_header32(int rec_size, au_event_t e_type, au_emod_t e_mod); @@ -329,6 +332,7 @@ token_t *au_to_text(char *text); token_t *au_to_kevent(struct kevent *kev); token_t *au_to_trailer(int rec_size); +token_t *au_to_zonename(char *zonename); __END_DECLS ==== //depot/projects/soc2007/rpaulo-macbook/cam/cam_periph.c#2 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.66 2007/04/16 19:42:23 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/cam_periph.c,v 1.68 2007/04/19 23:34:51 scottl Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -131,7 +131,6 @@ lun_id_t lun_id; cam_status status; u_int init_level; - int s; init_level = 0; /* @@ -200,7 +199,6 @@ if (status != CAM_REQ_CMP) goto failure; - s = splsoftcam(); cur_periph = TAILQ_FIRST(&(*p_drv)->units); while (cur_periph != NULL && cur_periph->unit_number < periph->unit_number) @@ -213,8 +211,6 @@ (*p_drv)->generation++; } - splx(s); - init_level++; status = periph_ctor(periph, arg); @@ -228,9 +224,7 @@ /* Initialized successfully */ break; case 3: - s = splsoftcam(); TAILQ_REMOVE(&(*p_drv)->units, periph, unit_links); - splx(s); xpt_remove_periph(periph); /* FALLTHROUGH */ case 2: @@ -258,24 +252,25 @@ { struct periph_driver **p_drv; struct cam_periph *periph; - int s; + xpt_lock_buses(); for (p_drv = periph_drivers; *p_drv != NULL; p_drv++) { if (name != NULL && (strcmp((*p_drv)->driver_name, name) != 0)) continue; - s = splsoftcam(); TAILQ_FOREACH(periph, &(*p_drv)->units, unit_links) { if (xpt_path_comp(periph->path, path) == 0) { - splx(s); + xpt_unlock_buses(); return(periph); } } - splx(s); - if (name != NULL) + if (name != NULL) { + xpt_unlock_buses(); return(NULL); + } } + xpt_unlock_buses(); return(NULL); } @@ -372,11 +367,9 @@ { struct cam_periph *periph; char *periph_name; - int s; int i, val, dunit, r; const char *dname, *strval; - s = splsoftcam(); periph_name = p_drv->driver_name; for (;;newunit++) { @@ -422,7 +415,6 @@ if (r != 0) break; } - splx(s); return (newunit); } @@ -480,8 +472,7 @@ /* * We only call this routine the first time a peripheral is - * invalidated. The oninvalidate() routine is always called at - * splsoftcam(). + * invalidated. */ if (((periph->flags & CAM_PERIPH_INVALID) == 0) && (periph->periph_oninval != NULL)) @@ -550,26 +541,6 @@ } /* - * Wait interruptibly for an exclusive lock. - */ -void -cam_periph_lock(struct cam_periph *periph) -{ - - mtx_lock(periph->sim->mtx); -} - -/* - * Unlock and wake up any waiters. - */ -void -cam_periph_unlock(struct cam_periph *periph) -{ - - mtx_unlock(periph->sim->mtx); -} - -/* * Map user virtual pointers into kernel virtual address space, so we can * access the memory. This won't work on physical pointers, for now it's * up to the caller to check for that. (XXX KDM -- should we do that here @@ -808,9 +779,7 @@ { struct mtx *mtx; struct cam_sim *sim; - int s; - s = splsoftcam(); sim = xpt_path_sim(ccb->ccb_h.path); if (sim->mtx == &Giant) mtx = NULL; @@ -819,8 +788,6 @@ if ((ccb->ccb_h.pinfo.index != CAM_UNQUEUED_INDEX) || ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG)) msleep(&ccb->ccb_h.cbfcnp, mtx, PRIBIO, "cbwait", 0); - - splx(s); } int @@ -1225,11 +1192,8 @@ { struct timeval delta; struct timeval duration_tv; - int s; - s = splclock(); microtime(&delta); - splx(s); timevalsub(&delta, event_time); duration_tv.tv_sec = duration_ms / 1000; duration_tv.tv_usec = (duration_ms % 1000) * 1000; ==== //depot/projects/soc2007/rpaulo-macbook/cam/cam_periph.h#2 (text+ko) ==== @@ -25,13 +25,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/cam/cam_periph.h,v 1.17 2007/04/15 08:49:09 scottl Exp $ + * $FreeBSD: src/sys/cam/cam_periph.h,v 1.18 2007/04/19 22:46:26 scottl Exp $ */ #ifndef _CAM_CAM_PERIPH_H #define _CAM_CAM_PERIPH_H 1 #include <sys/queue.h> +#include <cam/cam_sim.h> #ifdef _KERNEL @@ -138,8 +139,6 @@ char *name, cam_periph_type type, struct cam_path *, ac_callback_t *, ac_code, void *arg); struct cam_periph *cam_periph_find(struct cam_path *path, char *name); -void cam_periph_lock(struct cam_periph *periph); -void cam_periph_unlock(struct cam_periph *periph); cam_status cam_periph_acquire(struct cam_periph *periph); void cam_periph_release(struct cam_periph *periph); int cam_periph_hold(struct cam_periph *periph, int priority); @@ -177,5 +176,17 @@ int cam_periph_error(union ccb *ccb, cam_flags camflags, u_int32_t sense_flags, union ccb *save_ccb); +static __inline void +cam_periph_lock(struct cam_periph *periph) +{ + mtx_lock(periph->sim->mtx); +} + +static __inline void +cam_periph_unlock(struct cam_periph *periph) +{ + mtx_unlock(periph->sim->mtx); +} + #endif /* _KERNEL */ #endif /* _CAM_CAM_PERIPH_H */ >>> TRUNCATED FOR MAIL (1000 lines) <<<
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704272031.l3RKVgEN076852>