PERFORCE change 119324 for review

Marko Zec zec at FreeBSD.org
Sun May 6 11:33:21 UTC 2007


http://perforce.freebsd.org/chv.cgi?CH=119324

Change 119324 by zec at zec_tca51 on 2007/05/06 11:32:18

	IFC

Affected files ...

.. //depot/projects/vimage/src/sys/amd64/amd64/local_apic.c#4 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/mptable_pci.c#4 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/msi.c#3 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/nexus.c#4 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/pmap.c#5 integrate
.. //depot/projects/vimage/src/sys/amd64/amd64/vm_machdep.c#2 integrate
.. //depot/projects/vimage/src/sys/amd64/include/intr_machdep.h#4 integrate
.. //depot/projects/vimage/src/sys/amd64/include/vmparam.h#3 integrate
.. //depot/projects/vimage/src/sys/amd64/pci/pci_bus.c#4 integrate
.. //depot/projects/vimage/src/sys/arm/include/vmparam.h#2 integrate
.. //depot/projects/vimage/src/sys/arm/xscale/i80321/ep80219_machdep.c#3 integrate
.. //depot/projects/vimage/src/sys/arm/xscale/i80321/iq31244_machdep.c#3 integrate
.. //depot/projects/vimage/src/sys/arm/xscale/ixp425/avila_machdep.c#4 integrate
.. //depot/projects/vimage/src/sys/boot/common/loader.8#3 integrate
.. //depot/projects/vimage/src/sys/cam/cam_xpt.c#6 integrate
.. //depot/projects/vimage/src/sys/cam/scsi/scsi_da.c#6 integrate
.. //depot/projects/vimage/src/sys/compat/freebsd32/freebsd32_misc.c#3 integrate
.. //depot/projects/vimage/src/sys/compat/linprocfs/linprocfs.c#8 integrate
.. //depot/projects/vimage/src/sys/compat/opensolaris/kern/opensolaris_kobj.c#2 integrate
.. //depot/projects/vimage/src/sys/compat/opensolaris/kern/opensolaris_misc.c#2 integrate
.. //depot/projects/vimage/src/sys/compat/opensolaris/kern/opensolaris_vfs.c#2 integrate
.. //depot/projects/vimage/src/sys/compat/opensolaris/sys/misc.h#2 integrate
.. //depot/projects/vimage/src/sys/compat/opensolaris/sys/sunddi.h#1 branch
.. //depot/projects/vimage/src/sys/compat/opensolaris/sys/types.h#2 integrate
.. //depot/projects/vimage/src/sys/compat/opensolaris/sys/vnode.h#2 integrate
.. //depot/projects/vimage/src/sys/conf/files#8 integrate
.. //depot/projects/vimage/src/sys/conf/kern.pre.mk#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/dnlc.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/gfs.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/arc.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/spa.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/spa_config.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/vdev.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/vdev_geom.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zap.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_acl.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_log.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zil.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zio.c#2 integrate
.. //depot/projects/vimage/src/sys/contrib/opensolaris/uts/common/fs/zfs/zvol.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/acpi_support/acpi_ibm.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/acpica/acpi.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/acpica/acpi_pcib_acpi.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/acpica/acpi_pcib_pci.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/ata/ata-disk.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/ata/atapi-cam.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/ath/if_ath.c#8 integrate
.. //depot/projects/vimage/src/sys/dev/bce/if_bce.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/bce/if_bcefw.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/bce/if_bcereg.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/bge/if_bge.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/bge/if_bgereg.h#6 integrate
.. //depot/projects/vimage/src/sys/dev/ciss/ciss.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/ciss/cissvar.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/cxgb/cxgb_main.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/cxgb/cxgb_sge.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/em/LICENSE#2 integrate
.. //depot/projects/vimage/src/sys/dev/em/README#2 integrate
.. //depot/projects/vimage/src/sys/dev/em/e1000_80003es2lan.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_80003es2lan.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82540.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82541.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82541.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82542.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82543.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82543.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82571.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82571.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82575.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_82575.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_api.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_api.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_defines.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_hw.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_ich8lan.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_ich8lan.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_mac.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_mac.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_manage.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_manage.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_nvm.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_nvm.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_osdep.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_phy.c#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_phy.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/e1000_regs.h#1 branch
.. //depot/projects/vimage/src/sys/dev/em/if_em.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/em/if_em.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/em/if_em_hw.c#2 delete
.. //depot/projects/vimage/src/sys/dev/em/if_em_hw.h#2 delete
.. //depot/projects/vimage/src/sys/dev/em/if_em_osdep.h#2 delete
.. //depot/projects/vimage/src/sys/dev/firewire/firewire.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/firewire.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/firewirereg.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/fwdev.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/fwohci.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/fwohcireg.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/if_fwip.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/sbp.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/firewire/sbp_targ.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/gem/if_gem.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/gem/if_gem_pci.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/gem/if_gemvar.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/hme/if_hme.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/ipmi/ipmi_smbios.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/isp/isp.c#7 integrate
.. //depot/projects/vimage/src/sys/dev/isp/isp_freebsd.c#7 integrate
.. //depot/projects/vimage/src/sys/dev/isp/isp_freebsd.h#5 integrate
.. //depot/projects/vimage/src/sys/dev/isp/isp_pci.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/isp/isp_sbus.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/isp/isp_tpublic.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/led/led.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/led/led.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/mii/brgphy.c#8 integrate
.. //depot/projects/vimage/src/sys/dev/mii/mii.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/mpt/mpt.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/mpt/mpt.h#5 integrate
.. //depot/projects/vimage/src/sys/dev/mpt/mpt_cam.c#7 integrate
.. //depot/projects/vimage/src/sys/dev/mpt/mpt_cam.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/mpt/mpt_pci.c#5 integrate
.. //depot/projects/vimage/src/sys/dev/mpt/mpt_raid.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/msk/if_msk.c#6 integrate
.. //depot/projects/vimage/src/sys/dev/msk/if_mskreg.h#3 integrate
.. //depot/projects/vimage/src/sys/dev/mxge/if_mxge.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pci.c#7 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pci_if.m#3 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pci_pci.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pci_private.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pcib_if.m#3 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pcib_private.h#5 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pcireg.h#5 integrate
.. //depot/projects/vimage/src/sys/dev/pci/pcivar.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/sound/pci/emu10kx.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/sound/pci/hda/hdac.c#8 integrate
.. //depot/projects/vimage/src/sys/dev/sound/pci/hda/hdac_private.h#4 integrate
.. //depot/projects/vimage/src/sys/dev/sound/pci/ich.c#5 integrate
.. //depot/projects/vimage/src/sys/dev/stge/if_stge.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/stge/if_stgereg.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/uart/uart_kbd_sun.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb/if_axe.c#3 integrate
.. //depot/projects/vimage/src/sys/dev/usb/if_axereg.h#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb/if_ural.c#4 integrate
.. //depot/projects/vimage/src/sys/dev/usb/uftdi.c#2 integrate
.. //depot/projects/vimage/src/sys/dev/usb/usbdevs#4 integrate
.. //depot/projects/vimage/src/sys/fs/devfs/devfs_devs.c#2 integrate
.. //depot/projects/vimage/src/sys/fs/devfs/devfs_vnops.c#4 integrate
.. //depot/projects/vimage/src/sys/fs/procfs/procfs_ioctl.c#3 integrate
.. //depot/projects/vimage/src/sys/fs/procfs/procfs_map.c#3 integrate
.. //depot/projects/vimage/src/sys/fs/pseudofs/pseudofs_vncache.c#5 integrate
.. //depot/projects/vimage/src/sys/geom/geom.h#2 integrate
.. //depot/projects/vimage/src/sys/geom/geom_dev.c#3 integrate
.. //depot/projects/vimage/src/sys/geom/geom_disk.c#3 integrate
.. //depot/projects/vimage/src/sys/geom/geom_disk.h#2 integrate
.. //depot/projects/vimage/src/sys/geom/geom_io.c#3 integrate
.. //depot/projects/vimage/src/sys/geom/geom_slice.c#2 integrate
.. //depot/projects/vimage/src/sys/geom/geom_subr.c#2 integrate
.. //depot/projects/vimage/src/sys/geom/part/g_part.c#2 integrate
.. //depot/projects/vimage/src/sys/geom/uzip/g_uzip.c#3 integrate
.. //depot/projects/vimage/src/sys/i386/i386/local_apic.c#4 integrate
.. //depot/projects/vimage/src/sys/i386/i386/mptable_pci.c#4 integrate
.. //depot/projects/vimage/src/sys/i386/i386/msi.c#3 integrate
.. //depot/projects/vimage/src/sys/i386/i386/nexus.c#4 integrate
.. //depot/projects/vimage/src/sys/i386/i386/pmap.c#5 integrate
.. //depot/projects/vimage/src/sys/i386/i386/sys_machdep.c#2 integrate
.. //depot/projects/vimage/src/sys/i386/i386/vm_machdep.c#3 integrate
.. //depot/projects/vimage/src/sys/i386/include/intr_machdep.h#4 integrate
.. //depot/projects/vimage/src/sys/i386/include/vmparam.h#3 integrate
.. //depot/projects/vimage/src/sys/i386/pci/pci_bus.c#4 integrate
.. //depot/projects/vimage/src/sys/ia64/ia64/machdep.c#4 integrate
.. //depot/projects/vimage/src/sys/ia64/include/vmparam.h#3 integrate
.. //depot/projects/vimage/src/sys/kern/kern_descrip.c#6 integrate
.. //depot/projects/vimage/src/sys/kern/kern_linker.c#7 integrate
.. //depot/projects/vimage/src/sys/kern/kern_time.c#3 integrate
.. //depot/projects/vimage/src/sys/kern/kern_uuid.c#5 integrate
.. //depot/projects/vimage/src/sys/kern/subr_rman.c#5 integrate
.. //depot/projects/vimage/src/sys/kern/sys_generic.c#4 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_debug.c#2 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_sockbuf.c#3 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_socket.c#10 integrate
.. //depot/projects/vimage/src/sys/kern/uipc_syscalls.c#8 integrate
.. //depot/projects/vimage/src/sys/kern/vfs_bio.c#4 integrate
.. //depot/projects/vimage/src/sys/kern/vfs_mount.c#5 integrate
.. //depot/projects/vimage/src/sys/kern/vfs_syscalls.c#5 integrate
.. //depot/projects/vimage/src/sys/modules/em/Makefile#2 integrate
.. //depot/projects/vimage/src/sys/modules/zfs/Makefile#2 integrate
.. //depot/projects/vimage/src/sys/net/ieee8023ad_lacp.c#2 integrate
.. //depot/projects/vimage/src/sys/net/if.h#2 integrate
.. //depot/projects/vimage/src/sys/net/if_lagg.c#2 integrate
.. //depot/projects/vimage/src/sys/net/if_lagg.h#2 integrate
.. //depot/projects/vimage/src/sys/net80211/ieee80211_amrr.c#2 integrate
.. //depot/projects/vimage/src/sys/netgraph/ng_l2tp.c#2 integrate
.. //depot/projects/vimage/src/sys/netgraph/ng_mppc.c#2 integrate
.. //depot/projects/vimage/src/sys/netinet/in_pcb.c#9 integrate
.. //depot/projects/vimage/src/sys/netinet/in_pcb.h#7 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_divert.c#4 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw.h#6 integrate
.. //depot/projects/vimage/src/sys/netinet/ip_fw2.c#13 integrate
.. //depot/projects/vimage/src/sys/netinet/libalias/alias_proxy.c#4 integrate
.. //depot/projects/vimage/src/sys/netinet/raw_ip.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp.h#3 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_auth.c#5 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_bsd_addr.c#5 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_constants.h#7 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_header.h#3 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_indata.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_indata.h#4 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_input.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_os_bsd.h#7 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_output.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_output.h#4 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_pcb.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_pcb.h#7 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_peeloff.c#6 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_structs.h#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_uio.h#6 integrate
.. //depot/projects/vimage/src/sys/netinet/sctp_usrreq.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctputil.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/sctputil.h#7 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_debug.c#2 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_input.c#10 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_subr.c#14 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_usrreq.c#8 integrate
.. //depot/projects/vimage/src/sys/netinet/tcp_var.h#8 integrate
.. //depot/projects/vimage/src/sys/netinet/udp_usrreq.c#9 edit
.. //depot/projects/vimage/src/sys/netinet6/in6_pcb.c#7 edit
.. //depot/projects/vimage/src/sys/netinet6/in6_src.c#7 integrate
.. //depot/projects/vimage/src/sys/netinet6/nd6.c#11 integrate
.. //depot/projects/vimage/src/sys/netinet6/nd6_nbr.c#6 integrate
.. //depot/projects/vimage/src/sys/netinet6/route6.c#4 integrate
.. //depot/projects/vimage/src/sys/netinet6/sctp6_usrreq.c#8 integrate
.. //depot/projects/vimage/src/sys/nfsclient/nfs_bio.c#2 integrate
.. //depot/projects/vimage/src/sys/nfsclient/nfs_lock.c#2 integrate
.. //depot/projects/vimage/src/sys/nfsclient/nfs_vnops.c#6 integrate
.. //depot/projects/vimage/src/sys/nfsserver/nfs_syscalls.c#4 integrate
.. //depot/projects/vimage/src/sys/pci/if_vr.c#4 integrate
.. //depot/projects/vimage/src/sys/pci/if_vrreg.h#3 integrate
.. //depot/projects/vimage/src/sys/powerpc/include/vmparam.h#2 integrate
.. //depot/projects/vimage/src/sys/security/audit/audit_ioctl.h#2 integrate
.. //depot/projects/vimage/src/sys/security/audit/audit_syscalls.c#5 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_audit.c#1 branch
.. //depot/projects/vimage/src/sys/security/mac/mac_framework.h#4 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_inet.c#5 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_net.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_pipe.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_policy.h#4 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_process.c#3 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_socket.c#3 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_system.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac/mac_vfs.c#5 integrate
.. //depot/projects/vimage/src/sys/security/mac_biba/mac_biba.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_bsdextended/mac_bsdextended.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_ifoff/mac_ifoff.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_lomac/mac_lomac.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_mls/mac_mls.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_partition/mac_partition.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_portacl/mac_portacl.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_seeotheruids/mac_seeotheruids.c#4 integrate
.. //depot/projects/vimage/src/sys/security/mac_stub/mac_stub.c#5 integrate
.. //depot/projects/vimage/src/sys/security/mac_test/mac_test.c#4 integrate
.. //depot/projects/vimage/src/sys/sparc64/include/vmparam.h#3 integrate
.. //depot/projects/vimage/src/sys/sparc64/sparc64/machdep.c#4 integrate
.. //depot/projects/vimage/src/sys/sparc64/sparc64/upa.c#3 integrate
.. //depot/projects/vimage/src/sys/sun4v/include/vmparam.h#3 integrate
.. //depot/projects/vimage/src/sys/sys/disk.h#2 integrate
.. //depot/projects/vimage/src/sys/sys/filedesc.h#3 integrate
.. //depot/projects/vimage/src/sys/sys/ioctl_compat.h#2 integrate
.. //depot/projects/vimage/src/sys/sys/mount.h#5 integrate
.. //depot/projects/vimage/src/sys/sys/param.h#5 integrate
.. //depot/projects/vimage/src/sys/sys/priv.h#4 integrate
.. //depot/projects/vimage/src/sys/sys/proc.h#10 integrate
.. //depot/projects/vimage/src/sys/sys/socketvar.h#5 integrate
.. //depot/projects/vimage/src/sys/ufs/ffs/ffs_softdep.c#4 integrate
.. //depot/projects/vimage/src/sys/vm/swap_pager.c#4 integrate
.. //depot/projects/vimage/src/sys/vm/vm_map.c#3 integrate
.. //depot/projects/vimage/src/sys/vm/vm_page.c#4 integrate
.. //depot/projects/vimage/src/sys/vm/vm_page.h#3 integrate

Differences ...

==== //depot/projects/vimage/src/sys/amd64/amd64/local_apic.c#4 (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/vimage/src/sys/amd64/amd64/mptable_pci.c#4 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/mptable_pci.c,v 1.7 2007/01/22 21:48:42 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/mptable_pci.c,v 1.8 2007/05/02 17:50:34 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -72,7 +72,7 @@
 	return (bus_generic_attach(dev));
 }
 
-/* Pass MSI alloc requests up to the nexus. */
+/* Pass MSI requests up to the nexus. */
 static int
 mptable_hostb_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
     int *irqs)
@@ -85,12 +85,22 @@
 }
 
 static int
-mptable_hostb_alloc_msix(device_t pcib, device_t dev, int index, int *irq)
+mptable_hostb_alloc_msix(device_t pcib, device_t dev, int *irq)
+{
+	device_t bus;
+
+	bus = device_get_parent(pcib);
+	return (PCIB_ALLOC_MSIX(device_get_parent(bus), dev, irq));
+}
+
+static int
+mptable_hostb_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr,
+    uint32_t *data)
 {
 	device_t bus;
 
 	bus = device_get_parent(pcib);
-	return (PCIB_ALLOC_MSIX(device_get_parent(bus), dev, index, irq));
+	return (PCIB_MAP_MSI(device_get_parent(bus), dev, irq, addr, data));
 }
 
 static device_method_t mptable_hostb_methods[] = {
@@ -120,8 +130,8 @@
 	DEVMETHOD(pcib_alloc_msi,	mptable_hostb_alloc_msi),
 	DEVMETHOD(pcib_release_msi,	pcib_release_msi),
 	DEVMETHOD(pcib_alloc_msix,	mptable_hostb_alloc_msix),
-	DEVMETHOD(pcib_remap_msix,	pcib_remap_msix),
 	DEVMETHOD(pcib_release_msix,	pcib_release_msix),
+	DEVMETHOD(pcib_map_msi,		mptable_hostb_map_msi),
 
 	{ 0, 0 }
 };
@@ -177,8 +187,8 @@
 	DEVMETHOD(pcib_alloc_msi,	pcib_alloc_msi),
 	DEVMETHOD(pcib_release_msi,	pcib_release_msi),
 	DEVMETHOD(pcib_alloc_msix,	pcib_alloc_msix),
-	DEVMETHOD(pcib_remap_msix,	pcib_remap_msix),
 	DEVMETHOD(pcib_release_msix,	pcib_release_msix),
+	DEVMETHOD(pcib_map_msi,		pcib_map_msi),
 
 	{0, 0}
 };

==== //depot/projects/vimage/src/sys/amd64/amd64/msi.c#3 (text+ko) ====

@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.4 2007/02/15 22:22:56 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.5 2007/05/02 17:50:34 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -99,21 +99,20 @@
  * assigned an ID by the system; however, a group will use the ID from
  * the first message.
  *
- * For MSI-X, each message is isolated, and msi_index indicates the
- * index of this message in the device's MSI-X table.
+ * For MSI-X, each message is isolated.
  */
 struct msi_intsrc {
 	struct intsrc msi_intsrc;
 	device_t msi_dev;		/* Owning device. (g) */
 	struct msi_intsrc *msi_first;	/* First source in group. */
 	u_int msi_irq;			/* IRQ cookie. */
-	u_int msi_index;		/* Index of this message. */
 	u_int msi_msix;			/* MSI-X message. */
 	u_int msi_vector:8;		/* IDT vector. */
 	u_int msi_cpu:8;		/* Local APIC ID. (g) */
 	u_int msi_count:8;		/* Messages in this group. (g) */
 };
 
+static struct msi_intsrc *msi_create_source(u_int irq);
 static void	msi_enable_source(struct intsrc *isrc);
 static void	msi_disable_source(struct intsrc *isrc, int eoi);
 static void	msi_eoi_source(struct intsrc *isrc);
@@ -123,16 +122,10 @@
 static int	msi_config_intr(struct intsrc *isrc, enum intr_trigger trig,
 		    enum intr_polarity pol);
 static void	msi_assign_cpu(struct intsrc *isrc, u_int apic_id);
-static void	msix_enable_intr(struct intsrc *isrc);
-static int	msix_source_pending(struct intsrc *isrc);
-static void	msix_assign_cpu(struct intsrc *isrc, u_int apic_id);
 
 struct pic msi_pic = { msi_enable_source, msi_disable_source, msi_eoi_source,
 		       msi_enable_intr, msi_vector, msi_source_pending,
 		       NULL, NULL, msi_config_intr, msi_assign_cpu };
-struct pic msix_pic = { msi_enable_source, msi_disable_source, msi_eoi_source,
-			msix_enable_intr, msi_vector, msix_source_pending,
-			NULL, NULL, msi_config_intr, msix_assign_cpu };
 
 static int msi_enabled;
 static struct sx msi_sx;
@@ -162,17 +155,6 @@
 {
 	struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
 
-	/*
-	 * Since we can only enable the entire group at once, go ahead and
-	 * enable the messages when the first message is given a handler.
-	 * Note that we assume all devices will register a handler for the
-	 * first message.
-	 */
-	if (msi->msi_index == 0) {
-		mtx_lock_spin(&icu_lock);
-		pci_enable_msi(msi->msi_dev, INTEL_ADDR(msi), INTEL_DATA(msi));
-		mtx_unlock_spin(&icu_lock);
-	}
 	apic_enable_vector(msi->msi_vector);
 }
 
@@ -206,51 +188,13 @@
 
 	msi->msi_cpu = apic_id;
 	if (bootverbose)
-		printf("msi: Assigning MSI IRQ %d to local APIC %u\n",
-		    msi->msi_irq, msi->msi_cpu);
-	mtx_lock_spin(&icu_lock);
+		printf("msi: Assigning %s IRQ %d to local APIC %u\n",
+		    msi->msi_msix ? "MSI-X" : "MSI", msi->msi_irq,
+		    msi->msi_cpu);	
 	if (isrc->is_enabled)
-		pci_enable_msi(msi->msi_dev, INTEL_ADDR(msi), INTEL_DATA(msi));
-	mtx_unlock_spin(&icu_lock);
+		pci_remap_msi_irq(msi->msi_dev, msi->msi_irq);
 }
 
-static void
-msix_enable_intr(struct intsrc *isrc)
-{
-	struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
-
-	mtx_lock_spin(&icu_lock);
-	pci_enable_msix(msi->msi_dev, msi->msi_index, INTEL_ADDR(msi),
-	    INTEL_DATA(msi));
-	pci_unmask_msix(msi->msi_dev, msi->msi_index);
-	mtx_unlock_spin(&icu_lock);
-	apic_enable_vector(msi->msi_vector);
-}
-
-static int
-msix_source_pending(struct intsrc *isrc)
-{
-	struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
-
-	return (pci_pending_msix(msi->msi_dev, msi->msi_index));
-}
-
-static void
-msix_assign_cpu(struct intsrc *isrc, u_int apic_id)
-{
-	struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
-
-	msi->msi_cpu = apic_id;
-	if (bootverbose)
-		printf("msi: Assigning MSI-X IRQ %d to local APIC %u\n",
-		    msi->msi_irq, msi->msi_cpu);
-	mtx_lock_spin(&icu_lock);
-	if (isrc->is_enabled)
-		pci_enable_msix(msi->msi_dev, msi->msi_index, INTEL_ADDR(msi),
-		    INTEL_DATA(msi));
-	mtx_unlock_spin(&icu_lock);
-}
-
 void
 msi_init(void)
 {
@@ -262,10 +206,21 @@
 
 	msi_enabled = 1;
 	intr_register_pic(&msi_pic);
-	intr_register_pic(&msix_pic);
 	sx_init(&msi_sx, "msi");
 }
 
+struct msi_intsrc *
+msi_create_source(u_int irq)
+{
+	struct msi_intsrc *msi;
+
+	msi = malloc(sizeof(struct msi_intsrc), M_MSI, M_WAITOK | M_ZERO);
+	msi->msi_intsrc.is_pic = &msi_pic;
+	msi->msi_irq = irq;
+	intr_register_source(&msi->msi_intsrc);
+	return (msi);
+}
+
 /*
  * Try to allocate 'count' interrupt sources with contiguous IDT values.  If
  * we allocate any new sources, then their IRQ values will be at the end of
@@ -317,14 +272,8 @@
 		*newcount = count - cnt;
 		for (j = 0; j < *newcount; j++) {
 
-			/* Create a new MSI source. */
-			msi = malloc(sizeof(struct msi_intsrc), M_MSI,
-			    M_WAITOK | M_ZERO);
-			msi->msi_intsrc.is_pic = &msi_pic;
-			msi->msi_irq = i + j;
-			intr_register_source(&msi->msi_intsrc);
-
-			/* Add it to our array. */
+			/* Create a new MSI source and add it to our array. */
+			msi_create_source(i + j);
 			irqs[cnt] = i + j;
 			cnt++;
 		}
@@ -344,13 +293,11 @@
 	fsrc = (struct msi_intsrc *)intr_lookup_source(irqs[0]);
 	for (i = 0; i < count; i++) {
 		msi = (struct msi_intsrc *)intr_lookup_source(irqs[i]);
-		msi->msi_intsrc.is_pic = &msi_pic;
 		msi->msi_dev = dev;
 		msi->msi_vector = vector + i;
 		if (bootverbose)
 			printf("msi: routing MSI IRQ %d to vector %u\n",
 			    msi->msi_irq, msi->msi_vector);
-		msi->msi_index = i;
 		msi->msi_first = fsrc;
 
 		/* XXX: Somewhat gross. */
@@ -395,8 +342,6 @@
 		sx_xunlock(&msi_sx);
 		return (EINVAL);
 	}
-	KASSERT(first->msi_index == 0, ("index mismatch"));
-
 	KASSERT(first->msi_dev != NULL, ("unowned group"));
 
 	/* Clear all the extra messages in the group. */
@@ -408,7 +353,6 @@
 		msi->msi_dev = NULL;
 		apic_free_vector(msi->msi_vector, msi->msi_irq);
 		msi->msi_vector = 0;
-		msi->msi_index = 0;
 	}
 
 	/* Clear out the first message. */
@@ -423,7 +367,44 @@
 }
 
 int
-msix_alloc(device_t dev, int index, int *irq, int *new)
+msi_map(int irq, uint64_t *addr, uint32_t *data)
+{
+	struct msi_intsrc *msi;
+
+	sx_slock(&msi_sx);
+	msi = (struct msi_intsrc *)intr_lookup_source(irq);
+	if (msi == NULL) {
+		sx_sunlock(&msi_sx);
+		return (ENOENT);
+	}
+
+	/* Make sure this message is allocated to a device. */
+	if (msi->msi_dev == NULL) {
+		sx_sunlock(&msi_sx);
+		return (ENXIO);
+	}
+
+	/*
+	 * If this message isn't an MSI-X message, make sure it's part
+	 * of a gruop, and switch to the first message in the
+	 * group.
+	 */
+	if (!msi->msi_msix) {
+		if (msi->msi_first == NULL) {
+			sx_sunlock(&msi_sx);
+			return (ENXIO);
+		}
+		msi = msi->msi_first;
+	}
+
+	*addr = INTEL_ADDR(msi);
+	*data = INTEL_DATA(msi);
+	sx_sunlock(&msi_sx);
+	return (0);
+}
+
+int
+msix_alloc(device_t dev, int *irq, int *new)
 {
 	struct msi_intsrc *msi;
 	int i, vector;
@@ -457,11 +438,7 @@
 
 		/* Create a new source. */
 		*new = 1;
-		msi = malloc(sizeof(struct msi_intsrc), M_MSI,
-		    M_WAITOK | M_ZERO);
-		msi->msi_intsrc.is_pic = &msix_pic;
-		msi->msi_irq = i;
-		intr_register_source(&msi->msi_intsrc);
+		msi = msi_create_source(i);
 	}
 
 	/* Allocate an IDT vector. */
@@ -471,10 +448,8 @@
 		    vector);
 
 	/* Setup source. */
-	msi->msi_intsrc.is_pic = &msix_pic;
 	msi->msi_dev = dev;
 	msi->msi_vector = vector;
-	msi->msi_index = index;
 	msi->msi_msix = 1;
 
 	/* XXX: Somewhat gross. */
@@ -486,30 +461,6 @@
 }
 
 int
-msix_remap(int index, int irq)
-{
-	struct msi_intsrc *msi;
-
-	sx_xlock(&msi_sx);
-	msi = (struct msi_intsrc *)intr_lookup_source(irq);
-	if (msi == NULL) {
-		sx_xunlock(&msi_sx);
-		return (ENOENT);
-	}
-
-	/* Make sure this is an MSI-X message. */
-	if (!msi->msi_msix) {
-		sx_xunlock(&msi_sx);
-		return (EINVAL);
-	}
-
-	KASSERT(msi->msi_dev != NULL, ("unowned message"));
-	msi->msi_index = index;
-	sx_xunlock(&msi_sx);
-	return (0);
-}
-
-int
 msix_release(int irq)
 {
 	struct msi_intsrc *msi;
@@ -533,7 +484,6 @@
 	msi->msi_dev = NULL;
 	apic_free_vector(msi->msi_vector, msi->msi_irq);
 	msi->msi_vector = 0;
-	msi->msi_index = 0;
 	msi->msi_msix = 0;
 
 	sx_xunlock(&msi_sx);

==== //depot/projects/vimage/src/sys/amd64/amd64/nexus.c#4 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/nexus.c,v 1.75 2007/03/21 15:36:38 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/nexus.c,v 1.76 2007/05/02 17:50:34 jhb Exp $");
 
 /*
  * This code implements a `root nexus' for Intel Architecture
@@ -108,9 +108,9 @@
 static void nexus_delete_resource(device_t, device_t, int, int);
 static	int nexus_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs);
 static	int nexus_release_msi(device_t pcib, device_t dev, int count, int *irqs);
-static	int nexus_alloc_msix(device_t pcib, device_t dev, int index, int *irq);
-static	int nexus_remap_msix(device_t pcib, device_t dev, int index, int irq);
+static	int nexus_alloc_msix(device_t pcib, device_t dev, int *irq);
 static	int nexus_release_msix(device_t pcib, device_t dev, int irq);
+static	int nexus_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data);
 
 static device_method_t nexus_methods[] = {
 	/* Device interface */
@@ -140,8 +140,8 @@
 	DEVMETHOD(pcib_alloc_msi,	nexus_alloc_msi),
 	DEVMETHOD(pcib_release_msi,	nexus_release_msi),
 	DEVMETHOD(pcib_alloc_msix,	nexus_alloc_msix),
-	DEVMETHOD(pcib_remap_msix,	nexus_remap_msix),
 	DEVMETHOD(pcib_release_msix,	nexus_release_msix),
+	DEVMETHOD(pcib_map_msi,		nexus_map_msi),
 
 	{ 0, 0 }
 };
@@ -504,24 +504,17 @@
 }
 
 static int
-nexus_alloc_msix(device_t pcib, device_t dev, int index, int *irq)
+nexus_alloc_msix(device_t pcib, device_t dev, int *irq)
 {
 	int error, new;
 
-	error = msix_alloc(dev, index, irq, &new);
+	error = msix_alloc(dev, irq, &new);
 	if (new)
 		rman_manage_region(&irq_rman, *irq, *irq);
 	return (error);
 }
 
 static int
-nexus_remap_msix(device_t pcib, device_t dev, int index, int irq)
-{
-
-	return (msix_remap(index, irq));
-}
-
-static int
 nexus_release_msix(device_t pcib, device_t dev, int irq)
 {
 
@@ -551,6 +544,13 @@
 	return (msi_release(irqs, count));
 }
 
+static int
+nexus_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data)
+{
+
+	return (msi_map(irq, addr, data));
+}
+
 /* Placeholder for system RAM. */
 static void
 ram_identify(driver_t *driver, device_t parent)

==== //depot/projects/vimage/src/sys/amd64/amd64/pmap.c#5 (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;

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list