Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 6 Jul 2012 15:23:24 GMT
From:      John Baldwin <jhb@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 213982 for review
Message-ID:  <201207061523.q66FNOAH066175@skunkworks.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@213982?ac=10

Change 213982 by jhb@jhb_jhbbsd on 2012/07/06 15:23:03

	IFC @213981

Affected files ...

.. //depot/projects/smpng/share/man/man9/cd.9#2 integrate
.. //depot/projects/smpng/share/man/man9/disk.9#2 integrate
.. //depot/projects/smpng/share/man/man9/locking.9#8 integrate
.. //depot/projects/smpng/share/man/man9/rtalloc.9#4 integrate
.. //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#10 integrate
.. //depot/projects/smpng/sys/amd64/amd64/fpu.c#24 integrate
.. //depot/projects/smpng/sys/amd64/amd64/pmap.c#123 integrate
.. //depot/projects/smpng/sys/amd64/conf/GENERIC#102 integrate
.. //depot/projects/smpng/sys/amd64/include/cpufunc.h#27 integrate
.. //depot/projects/smpng/sys/amd64/include/elf.h#12 integrate
.. //depot/projects/smpng/sys/amd64/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/arm/at91/at91_machdep.c#11 integrate
.. //depot/projects/smpng/sys/arm/at91/at91_pmcvar.h#5 integrate
.. //depot/projects/smpng/sys/arm/at91/at91_twi.c#19 integrate
.. //depot/projects/smpng/sys/arm/at91/at91reg.h#4 integrate
.. //depot/projects/smpng/sys/arm/at91/at91sam9x25.c#1 branch
.. //depot/projects/smpng/sys/arm/at91/at91sam9x25reg.h#1 branch
.. //depot/projects/smpng/sys/arm/at91/board_sam9x25ek.c#1 branch
.. //depot/projects/smpng/sys/arm/at91/std.at91#7 integrate
.. //depot/projects/smpng/sys/arm/at91/std.at91sam9#5 integrate
.. //depot/projects/smpng/sys/arm/at91/std.atmel#1 branch
.. //depot/projects/smpng/sys/arm/at91/std.ethernut5#2 integrate
.. //depot/projects/smpng/sys/arm/at91/std.hl201#3 integrate
.. //depot/projects/smpng/sys/arm/at91/std.qila9g20#3 integrate
.. //depot/projects/smpng/sys/arm/at91/std.sam9g20ek#3 integrate
.. //depot/projects/smpng/sys/arm/at91/std.sam9x25ek#1 branch
.. //depot/projects/smpng/sys/arm/conf/ATMEL#1 branch
.. //depot/projects/smpng/sys/arm/conf/SAM9X25EK#1 branch
.. //depot/projects/smpng/sys/arm/conf/SAM9X25EK.hints#1 branch
.. //depot/projects/smpng/sys/arm/include/_stdint.h#5 integrate
.. //depot/projects/smpng/sys/arm/include/_types.h#12 integrate
.. //depot/projects/smpng/sys/arm/include/elf.h#13 integrate
.. //depot/projects/smpng/sys/arm/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/arm/mv/mv_machdep.c#18 integrate
.. //depot/projects/smpng/sys/arm/xscale/std.xscale#2 integrate
.. //depot/projects/smpng/sys/boot/userboot/libstand/Makefile#3 integrate
.. //depot/projects/smpng/sys/cam/cam_periph.c#48 integrate
.. //depot/projects/smpng/sys/cam/ctl/ctl.c#3 integrate
.. //depot/projects/smpng/sys/cam/ctl/ctl_backend.c#3 integrate
.. //depot/projects/smpng/sys/cam/ctl/ctl_frontend_cam_sim.c#2 integrate
.. //depot/projects/smpng/sys/cam/ctl/ctl_frontend_internal.c#3 integrate
.. //depot/projects/smpng/sys/cam/ctl/scsi_ctl.c#3 integrate
.. //depot/projects/smpng/sys/cam/scsi/scsi_all.c#38 integrate
.. //depot/projects/smpng/sys/cam/scsi/scsi_all.h#24 integrate
.. //depot/projects/smpng/sys/cam/scsi/scsi_cd.c#53 integrate
.. //depot/projects/smpng/sys/cam/scsi/scsi_da.c#105 integrate
.. //depot/projects/smpng/sys/cam/scsi/scsi_da.h#6 integrate
.. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/dtrace/dtrace.c#11 integrate
.. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c#13 integrate
.. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_scan.c#4 integrate
.. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zio_impl.h#4 integrate
.. //depot/projects/smpng/sys/cddl/contrib/opensolaris/uts/common/sys/dtrace.h#4 integrate
.. //depot/projects/smpng/sys/cddl/dev/dtrace/amd64/dis_tables.c#2 integrate
.. //depot/projects/smpng/sys/cddl/dev/dtrace/i386/dis_tables.c#2 integrate
.. //depot/projects/smpng/sys/compat/linux/linux_file.c#52 integrate
.. //depot/projects/smpng/sys/conf/files#279 integrate
.. //depot/projects/smpng/sys/conf/files.arm#23 integrate
.. //depot/projects/smpng/sys/conf/files.ia64#72 integrate
.. //depot/projects/smpng/sys/conf/files.mips#19 integrate
.. //depot/projects/smpng/sys/conf/files.powerpc#72 integrate
.. //depot/projects/smpng/sys/conf/files.sparc64#82 integrate
.. //depot/projects/smpng/sys/conf/kern.post.mk#73 integrate
.. //depot/projects/smpng/sys/conf/kmod.mk#86 integrate
.. //depot/projects/smpng/sys/conf/options#196 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/changes.txt#18 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/common/ahpredef.c#1 branch
.. //depot/projects/smpng/sys/contrib/dev/acpica/common/dmextern.c#9 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/common/dmrestag.c#9 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslcompile.c#18 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslerror.c#14 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslfiles.c#14 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/asllookup.c#14 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslmain.c#18 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslsupport.l#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/aslutils.c#15 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/compiler/dttemplate.c#6 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/debugger/dbdisply.c#3 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/debugger/dbexec.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/debugger/dbutils.c#3 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/disassembler/dmopcode.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/disassembler/dmwalk.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/dispatcher/dsfield.c#3 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/dispatcher/dsopcode.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/events/evgpe.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/events/evgpeutil.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/events/evxfgpe.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/executer/exconfig.c#2 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/components/utilities/utmisc.c#3 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/acdebug.h#11 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/acdisasm.h#12 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/acglobal.h#17 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/aclocal.h#17 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/acpixf.h#18 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/acpredef.h#8 integrate
.. //depot/projects/smpng/sys/contrib/dev/acpica/include/acutils.h#11 integrate
.. //depot/projects/smpng/sys/contrib/dev/iwn/iwlwifi-6000g2a-17.168.5.3.fw.uu#1 branch
.. //depot/projects/smpng/sys/contrib/dev/iwn/iwlwifi-6000g2b-18.168.6.1.fw.uu#1 branch
.. //depot/projects/smpng/sys/dev/acpi_support/acpi_asus_wmi.c#1 branch
.. //depot/projects/smpng/sys/dev/acpi_support/acpi_ibm.c#20 integrate
.. //depot/projects/smpng/sys/dev/acpica/acpi_cpu.c#60 integrate
.. //depot/projects/smpng/sys/dev/adb/adb_kbd.c#6 integrate
.. //depot/projects/smpng/sys/dev/agp/agp_i810.c#14 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.c#30 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx_osm.c#31 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic7xxx.c#29 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic7xxx_osm.c#24 integrate
.. //depot/projects/smpng/sys/dev/ath/ah_osdep.c#17 integrate
.. //depot/projects/smpng/sys/dev/ath/ah_osdep.h#8 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_dfs/null/dfs_null.c#6 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ah.h#18 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ah_debug.h#5 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ah_internal.h#20 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416.h#13 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_btcoex.c#1 branch
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_btcoex.h#1 branch
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_gpio.c#5 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_misc.c#11 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c#6 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar9002/ar9285.h#3 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar9002/ar9285_btcoex.c#1 branch
.. //depot/projects/smpng/sys/dev/ath/ath_hal/ar9003/ar9300_btcoex.h#1 branch
.. //depot/projects/smpng/sys/dev/ath/ath_rate/amrr/amrr.c#18 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_rate/onoe/onoe.c#18 integrate
.. //depot/projects/smpng/sys/dev/ath/ath_rate/sample/sample.c#21 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath.c#102 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath_ahb.c#4 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath_led.c#2 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath_rx.c#3 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath_rx.h#2 integrate
.. //depot/projects/smpng/sys/dev/ath/if_ath_rx_edma.c#1 branch
.. //depot/projects/smpng/sys/dev/ath/if_ath_rx_edma.h#1 branch
.. //depot/projects/smpng/sys/dev/ath/if_ath_tx.c#7 integrate
.. //depot/projects/smpng/sys/dev/ath/if_athdfs.h#4 integrate
.. //depot/projects/smpng/sys/dev/ath/if_athioctl.h#28 integrate
.. //depot/projects/smpng/sys/dev/ath/if_athvar.h#60 integrate
.. //depot/projects/smpng/sys/dev/atkbdc/atkbdc_isa.c#10 integrate
.. //depot/projects/smpng/sys/dev/cxgb/cxgb_adapter.h#27 integrate
.. //depot/projects/smpng/sys/dev/cxgb/cxgb_main.c#42 integrate
.. //depot/projects/smpng/sys/dev/cxgb/cxgb_sge.c#36 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/adapter.h#7 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/common/common.h#5 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/common/t4_hw.c#5 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/common/t4_msg.h#2 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/firmware/t4fw_cfg.txt#2 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/firmware/t4fw_cfg_uwire.txt#2 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/firmware/t4fw_interface.h#2 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/osdep.h#5 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/t4_l2t.c#4 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/t4_main.c#8 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/t4_sge.c#7 integrate
.. //depot/projects/smpng/sys/dev/cxgbe/tom/t4_cpl_io.c#2 integrate
.. //depot/projects/smpng/sys/dev/drm2/drmP.h#2 integrate
.. //depot/projects/smpng/sys/dev/drm2/drm_pciids.h#2 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_82541.c#9 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_82543.c#7 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_82571.c#11 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_82575.c#13 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_api.c#12 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_api.h#9 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_defines.h#12 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_hw.h#13 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_i210.c#1 branch
.. //depot/projects/smpng/sys/dev/e1000/e1000_i210.h#1 branch
.. //depot/projects/smpng/sys/dev/e1000/e1000_ich8lan.c#12 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_mac.c#11 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_mac.h#6 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_manage.c#7 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_manage.h#3 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_phy.c#12 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_phy.h#10 integrate
.. //depot/projects/smpng/sys/dev/e1000/e1000_regs.h#12 integrate
.. //depot/projects/smpng/sys/dev/e1000/if_em.c#31 integrate
.. //depot/projects/smpng/sys/dev/e1000/if_igb.c#37 integrate
.. //depot/projects/smpng/sys/dev/fdt/fdtbus.c#7 integrate
.. //depot/projects/smpng/sys/dev/fdt/simplebus.c#4 integrate
.. //depot/projects/smpng/sys/dev/filemon/filemon_wrapper.c#2 integrate
.. //depot/projects/smpng/sys/dev/firewire/sbp_targ.c#16 integrate
.. //depot/projects/smpng/sys/dev/isp/isp.c#70 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_freebsd.c#74 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_freebsd.h#53 integrate
.. //depot/projects/smpng/sys/dev/isp/isp_pci.c#69 integrate
.. //depot/projects/smpng/sys/dev/isp/ispmbox.h#32 integrate
.. //depot/projects/smpng/sys/dev/isp/ispvar.h#47 integrate
.. //depot/projects/smpng/sys/dev/iwn/if_iwn.c#28 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe.c#31 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_82598.c#11 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_82598.h#2 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_82599.c#8 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_api.c#11 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_api.h#12 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_common.c#12 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_common.h#10 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_osdep.h#9 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_phy.c#11 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_type.h#12 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_vf.c#3 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixgbe_x540.c#2 integrate
.. //depot/projects/smpng/sys/dev/ixgbe/ixv.c#5 integrate
.. //depot/projects/smpng/sys/dev/mfi/mfi.c#37 integrate
.. //depot/projects/smpng/sys/dev/mfi/mfi_tbolt.c#2 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_cnfg.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_hbd.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_history.txt#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_init.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_ioc.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_ra.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_raid.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_sas.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_targ.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_tool.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mpi/mpi2_type.h#3 integrate
.. //depot/projects/smpng/sys/dev/mps/mps.c#7 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_config.c#2 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_ioctl.h#4 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_mapping.c#2 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_mapping.h#2 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_sas.c#8 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_sas.h#2 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_sas_lsi.c#2 integrate
.. //depot/projects/smpng/sys/dev/mps/mps_user.c#5 integrate
.. //depot/projects/smpng/sys/dev/mps/mpsvar.h#6 integrate
.. //depot/projects/smpng/sys/dev/mpt/mpt_cam.c#41 integrate
.. //depot/projects/smpng/sys/dev/nand/nand.c#2 integrate
.. //depot/projects/smpng/sys/dev/nand/nandsim.c#2 integrate
.. //depot/projects/smpng/sys/dev/nand/nfc_fsl.c#1 branch
.. //depot/projects/smpng/sys/dev/nand/nfc_fsl.h#1 branch
.. //depot/projects/smpng/sys/dev/pccard/pccard.c#51 integrate
.. //depot/projects/smpng/sys/dev/pccard/pccardvarp.h#7 integrate
.. //depot/projects/smpng/sys/dev/pci/pci_pci.c#50 integrate
.. //depot/projects/smpng/sys/dev/re/if_re.c#95 integrate
.. //depot/projects/smpng/sys/dev/sio/sio.c#71 integrate
.. //depot/projects/smpng/sys/dev/sound/pci/hda/hdaa.c#3 integrate
.. //depot/projects/smpng/sys/dev/sound/pci/hda/hdaa_patches.c#2 integrate
.. //depot/projects/smpng/sys/dev/sound/pci/hdspe.c#2 integrate
.. //depot/projects/smpng/sys/dev/twa/tw_osl_cam.c#15 integrate
.. //depot/projects/smpng/sys/dev/usb/controller/ehci_pci.c#20 integrate
.. //depot/projects/smpng/sys/dev/usb/controller/ohci_pci.c#15 integrate
.. //depot/projects/smpng/sys/dev/usb/controller/xhci_pci.c#6 integrate
.. //depot/projects/smpng/sys/dev/usb/quirk/usb_quirk.c#25 integrate
.. //depot/projects/smpng/sys/dev/usb/serial/u3g.c#30 integrate
.. //depot/projects/smpng/sys/dev/usb/usbdevs#174 integrate
.. //depot/projects/smpng/sys/dev/virtio/balloon/virtio_balloon.h#3 integrate
.. //depot/projects/smpng/sys/dev/virtio/block/virtio_blk.h#3 integrate
.. //depot/projects/smpng/sys/dev/virtio/network/virtio_net.h#3 integrate
.. //depot/projects/smpng/sys/dev/virtio/virtio.h#3 integrate
.. //depot/projects/smpng/sys/dev/virtio/virtio_ring.h#4 integrate
.. //depot/projects/smpng/sys/dev/virtio/virtqueue.h#3 integrate
.. //depot/projects/smpng/sys/dev/xen/blkfront/blkfront.c#16 integrate
.. //depot/projects/smpng/sys/fs/devfs/devfs_vnops.c#98 integrate
.. //depot/projects/smpng/sys/fs/ext2fs/ext2_vfsops.c#7 integrate
.. //depot/projects/smpng/sys/fs/nfsclient/nfs_clbio.c#17 integrate
.. //depot/projects/smpng/sys/geom/eli/g_eli.c#38 integrate
.. //depot/projects/smpng/sys/geom/eli/g_eli.h#15 integrate
.. //depot/projects/smpng/sys/geom/eli/g_eli_ctl.c#14 integrate
.. //depot/projects/smpng/sys/geom/eli/g_eli_key.c#8 integrate
.. //depot/projects/smpng/sys/geom/eli/g_eli_key_cache.c#2 integrate
.. //depot/projects/smpng/sys/geom/gate/g_gate.c#24 integrate
.. //depot/projects/smpng/sys/geom/gate/g_gate.h#9 integrate
.. //depot/projects/smpng/sys/geom/geom.h#61 integrate
.. //depot/projects/smpng/sys/geom/geom_disk.c#65 integrate
.. //depot/projects/smpng/sys/geom/geom_disk.h#13 integrate
.. //depot/projects/smpng/sys/geom/geom_map.c#2 integrate
.. //depot/projects/smpng/sys/geom/geom_subr.c#66 integrate
.. //depot/projects/smpng/sys/geom/mirror/g_mirror.c#48 integrate
.. //depot/projects/smpng/sys/geom/mirror/g_mirror.h#17 integrate
.. //depot/projects/smpng/sys/i386/i386/elf_machdep.c#25 integrate
.. //depot/projects/smpng/sys/i386/i386/machdep.c#175 integrate
.. //depot/projects/smpng/sys/i386/i386/pmap.c#162 integrate
.. //depot/projects/smpng/sys/i386/i386/vm86.c#27 integrate
.. //depot/projects/smpng/sys/i386/include/elf.h#14 integrate
.. //depot/projects/smpng/sys/i386/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/i386/include/vmparam.h#20 integrate
.. //depot/projects/smpng/sys/ia64/include/_stdint.h#5 integrate
.. //depot/projects/smpng/sys/ia64/include/_types.h#12 integrate
.. //depot/projects/smpng/sys/ia64/include/elf.h#19 integrate
.. //depot/projects/smpng/sys/ia64/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/kern/imgact_aout.c#37 integrate
.. //depot/projects/smpng/sys/kern/imgact_elf.c#81 integrate
.. //depot/projects/smpng/sys/kern/imgact_gzip.c#18 integrate
.. //depot/projects/smpng/sys/kern/kern_descrip.c#142 integrate
.. //depot/projects/smpng/sys/kern/kern_exec.c#141 integrate
.. //depot/projects/smpng/sys/kern/kern_malloc.c#67 integrate
.. //depot/projects/smpng/sys/kern/kern_sharedpage.c#1 branch
.. //depot/projects/smpng/sys/kern/kern_tc.c#57 integrate
.. //depot/projects/smpng/sys/kern/subr_dummy_vdso_tc.c#1 branch
.. //depot/projects/smpng/sys/kern/subr_firmware.c#25 integrate
.. //depot/projects/smpng/sys/kern/subr_witness.c#191 integrate
.. //depot/projects/smpng/sys/kern/uipc_socket.c#148 integrate
.. //depot/projects/smpng/sys/kern/vfs_syscalls.c#169 integrate
.. //depot/projects/smpng/sys/kern/vfs_vnops.c#113 integrate
.. //depot/projects/smpng/sys/mips/cavium/uart_bus_octeonusart.c#5 integrate
.. //depot/projects/smpng/sys/mips/include/_stdint.h#6 integrate
.. //depot/projects/smpng/sys/mips/include/_types.h#8 integrate
.. //depot/projects/smpng/sys/mips/include/elf.h#9 integrate
.. //depot/projects/smpng/sys/mips/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/mips/mips/pmap.c#35 integrate
.. //depot/projects/smpng/sys/modules/Makefile#190 integrate
.. //depot/projects/smpng/sys/modules/acpi/Makefile#37 integrate
.. //depot/projects/smpng/sys/modules/acpi/acpi_asus_wmi/Makefile#1 branch
.. //depot/projects/smpng/sys/modules/ath/Makefile#16 integrate
.. //depot/projects/smpng/sys/modules/cxgbe/if_cxgbe/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/igb/Makefile#8 integrate
.. //depot/projects/smpng/sys/modules/nand/Makefile#1 branch
.. //depot/projects/smpng/sys/modules/rdma/krping/Makefile#3 integrate
.. //depot/projects/smpng/sys/modules/toecore/Makefile#2 integrate
.. //depot/projects/smpng/sys/net/flowtable.c#19 integrate
.. //depot/projects/smpng/sys/net/if.h#54 integrate
.. //depot/projects/smpng/sys/net/if_gif.c#62 integrate
.. //depot/projects/smpng/sys/net/if_lagg.c#26 integrate
.. //depot/projects/smpng/sys/net/route.h#41 integrate
.. //depot/projects/smpng/sys/net80211/_ieee80211.h#19 integrate
.. //depot/projects/smpng/sys/net80211/ieee80211_output.c#55 integrate
.. //depot/projects/smpng/sys/netinet/igmp.c#43 integrate
.. //depot/projects/smpng/sys/netinet/ip_input.c#121 integrate
.. //depot/projects/smpng/sys/netinet/ip_mroute.c#77 integrate
.. //depot/projects/smpng/sys/netinet/ip_mroute.h#18 integrate
.. //depot/projects/smpng/sys/netinet/ip_output.c#126 integrate
.. //depot/projects/smpng/sys/netinet/ipfw/ip_dummynet.c#17 integrate
.. //depot/projects/smpng/sys/netinet/ipfw/ip_fw_table.c#10 integrate
.. //depot/projects/smpng/sys/netinet/sctp_asconf.c#28 integrate
.. //depot/projects/smpng/sys/netinet/sctp_asconf.h#13 integrate
.. //depot/projects/smpng/sys/netinet/sctp_bsd_addr.c#25 integrate
.. //depot/projects/smpng/sys/netinet/sctp_bsd_addr.h#12 integrate
.. //depot/projects/smpng/sys/netinet/sctp_indata.c#44 integrate
.. //depot/projects/smpng/sys/netinet/sctp_indata.h#16 integrate
.. //depot/projects/smpng/sys/netinet/sctp_input.c#44 integrate
.. //depot/projects/smpng/sys/netinet/sctp_input.h#11 integrate
.. //depot/projects/smpng/sys/netinet/sctp_os_bsd.h#37 integrate
.. //depot/projects/smpng/sys/netinet/sctp_output.c#52 integrate
.. //depot/projects/smpng/sys/netinet/sctp_output.h#21 integrate
.. //depot/projects/smpng/sys/netinet/sctp_pcb.c#52 integrate
.. //depot/projects/smpng/sys/netinet/sctp_pcb.h#29 integrate
.. //depot/projects/smpng/sys/netinet/sctp_sysctl.c#27 integrate
.. //depot/projects/smpng/sys/netinet/sctp_sysctl.h#20 integrate
.. //depot/projects/smpng/sys/netinet/sctp_usrreq.c#46 integrate
.. //depot/projects/smpng/sys/netinet/sctputil.c#53 integrate
.. //depot/projects/smpng/sys/netinet/sctputil.h#27 integrate
.. //depot/projects/smpng/sys/netinet/tcp_hostcache.c#29 integrate
.. //depot/projects/smpng/sys/netinet6/in6.c#81 integrate
.. //depot/projects/smpng/sys/netinet6/in6_src.c#55 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_mroute.c#48 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_mroute.h#11 integrate
.. //depot/projects/smpng/sys/netinet6/ip6_output.c#79 integrate
.. //depot/projects/smpng/sys/netinet6/mld6.c#42 integrate
.. //depot/projects/smpng/sys/netinet6/nd6_nbr.c#48 integrate
.. //depot/projects/smpng/sys/netinet6/sctp6_usrreq.c#28 integrate
.. //depot/projects/smpng/sys/ofed/include/linux/workqueue.h#2 integrate
.. //depot/projects/smpng/sys/pc98/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/powerpc/aim/locore32.S#6 integrate
.. //depot/projects/smpng/sys/powerpc/aim/locore64.S#6 integrate
.. //depot/projects/smpng/sys/powerpc/aim/mmu_oea.c#26 integrate
.. //depot/projects/smpng/sys/powerpc/booke/machdep.c#27 integrate
.. //depot/projects/smpng/sys/powerpc/booke/pmap.c#29 integrate
.. //depot/projects/smpng/sys/powerpc/booke/trap.c#10 integrate
.. //depot/projects/smpng/sys/powerpc/booke/trap_subr.S#8 integrate
.. //depot/projects/smpng/sys/powerpc/conf/DEFAULTS#16 integrate
.. //depot/projects/smpng/sys/powerpc/conf/GENERIC#77 integrate
.. //depot/projects/smpng/sys/powerpc/conf/GENERIC64#11 integrate
.. //depot/projects/smpng/sys/powerpc/include/_stdint.h#6 integrate
.. //depot/projects/smpng/sys/powerpc/include/_types.h#10 integrate
.. //depot/projects/smpng/sys/powerpc/include/elf.h#14 integrate
.. //depot/projects/smpng/sys/powerpc/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/powerpc/mpc85xx/lbc.c#5 integrate
.. //depot/projects/smpng/sys/powerpc/mpc85xx/lbc.h#6 integrate
.. //depot/projects/smpng/sys/powerpc/mpc85xx/nexus.c#6 integrate
.. //depot/projects/smpng/sys/powerpc/powermac/hrowpic.c#18 integrate
.. //depot/projects/smpng/sys/sparc64/conf/GENERIC#114 integrate
.. //depot/projects/smpng/sys/sparc64/include/_stdint.h#5 integrate
.. //depot/projects/smpng/sys/sparc64/include/_types.h#10 integrate
.. //depot/projects/smpng/sys/sparc64/include/elf.h#18 integrate
.. //depot/projects/smpng/sys/sparc64/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/sparc64/sparc64/pmap.c#101 integrate
.. //depot/projects/smpng/sys/sys/_types.h#18 integrate
.. //depot/projects/smpng/sys/sys/file.h#38 integrate
.. //depot/projects/smpng/sys/sys/imgact_aout.h#13 integrate
.. //depot/projects/smpng/sys/sys/param.h#177 integrate
.. //depot/projects/smpng/sys/sys/proc.h#222 integrate
.. //depot/projects/smpng/sys/sys/stdint.h#6 integrate
.. //depot/projects/smpng/sys/sys/sysent.h#44 integrate
.. //depot/projects/smpng/sys/sys/vdso.h#1 branch
.. //depot/projects/smpng/sys/ufs/ffs/ffs_alloc.c#62 integrate
.. //depot/projects/smpng/sys/vm/uma_core.c#91 integrate
.. //depot/projects/smpng/sys/vm/vm_map.c#120 integrate
.. //depot/projects/smpng/sys/vm/vm_object.h#48 integrate
.. //depot/projects/smpng/sys/vm/vm_page.c#129 integrate
.. //depot/projects/smpng/sys/x86/include/_stdint.h#3 integrate
.. //depot/projects/smpng/sys/x86/include/_types.h#3 integrate
.. //depot/projects/smpng/sys/x86/include/vdso.h#1 branch
.. //depot/projects/smpng/sys/x86/x86/tsc.c#7 integrate

Differences ...

==== //depot/projects/smpng/share/man/man9/cd.9#2 (text+ko) ====

@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man9/cd.9,v 1.23 2005/02/13 22:25:19 ru Exp $
+.\" $FreeBSD: src/share/man/man9/cd.9,v 1.24 2012/07/01 19:40:51 schweikh Exp $
 .\"
 .Dd September 2, 2003
 .Dt CD 9
@@ -57,7 +57,7 @@
 The following is a list of quirks that the driver recognize.
 .Bl -tag -width CD_Q_BCD_TRACKS
 .It Dv CD_Q_NO_TOUCH
-This flag tell the driver not to probe the drive at attach time to see if
+This flag tells the driver not to probe the drive at attach time to see if
 there is a disk in the drive and find out what size it is.
 This flag is currently unimplemented in the CAM
 .Nm

==== //depot/projects/smpng/share/man/man9/disk.9#2 (text+ko) ====

@@ -25,7 +25,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
 .\" DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man9/disk.9,v 1.11 2009/02/22 13:38:16 trasz Exp $
+.\" $FreeBSD: src/share/man/man9/disk.9,v 1.12 2012/06/24 04:29:03 ken Exp $
 .\"
 .Dd February 18, 2004
 .Dt DISK 9
@@ -145,6 +145,16 @@
 .Xr dumpon 8 ,
 this function is invoked from a very restricted system state after a
 kernel panic to record a copy of the system RAM to the disk.
+.It Vt "disk_getattr_t *" Va d_getattr
+Optional: if this method is provided, it gives the disk driver the
+opportunity to override the default GEOM response to BIO_GETATTR requests.
+This function should return -1 if the attribute is not handled, 0 if the
+attribute is handled, or an errno to be passed to g_io_deliver().
+.It Vt "disk_gone_t *" Va d_gone
+Optional: if this method is provided, it will be called after disk_gone()
+is called, once GEOM has finished its cleanup process.
+Once this callback is called, it is safe for the disk driver to free all of
+its resources, as it will not be receiving further calls from GEOM.
 .El
 .Ss Mandatory Media Properties
 The following fields identify the size and granularity of the disk device.
@@ -180,7 +190,23 @@
 .Pa src/sys/geom/notes
 for details.
 .It Vt char Va d_ident[DISK_IDENT_SIZE]
-This field can and should be used to store disk's serial number.
+This field can and should be used to store disk's serial number if the
+d_getattr method described above isn't implemented, or if it does not
+support the GEOM::ident attribute.
+.It Vt char Va d_descr[DISK_IDENT_SIZE]
+This field can be used to store the disk vendor and product description.
+.It Vt uint16_t Va d_hba_vendor
+This field can be used to store the PCI vendor ID for the HBA connected to
+the disk.
+.It Vt uint16_t Va d_hba_device
+This field can be used to store the PCI device ID for the HBA connected to
+the disk.
+.It Vt uint16_t Va d_hba_subvendor
+This field can be used to store the PCI subvendor ID for the HBA connected to
+the disk.
+.It Vt uint16_t Va d_hba_subdevice
+This field can be used to store the PCI subdevice ID for the HBA connected to
+the disk.
 .El
 .Ss Driver Private Data
 This field may be used by the device driver to store a pointer to

==== //depot/projects/smpng/share/man/man9/locking.9#8 (text+ko) ====

@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man9/locking.9,v 1.30 2012/05/29 14:41:16 trasz Exp $
+.\" $FreeBSD: src/share/man/man9/locking.9,v 1.31 2012/06/27 01:13:37 julian Exp $
 .\"
 .Dd May 25, 2012
 .Dt LOCKING 9
@@ -37,11 +37,19 @@
 several different synchronization primitives to allow the developers
 to safely access and manipulate the many data types required.
 .Ss Mutexes
-Mutexes (also called "sleep mutexes") are the most commonly used
+Mutexes (also erroneously called "sleep mutexes") are the most commonly used
 synchronization primitive in the kernel.
-Thread acquires (locks) a mutex before accessing data shared with other
+A thread acquires (locks) a mutex before accessing data shared with other
 threads (including interrupt threads), and releases (unlocks) it afterwards.
-If the mutex cannot be acquired, the thread requesting it will sleep.
+If the mutex cannot be acquired, the thread requesting it will wait.
+Mutexes are by default adaptive, meaning that
+if the owner of a contended mutex is currently running on another CPU,
+then a thread attempting to acquire the mutex will briefly spin
+in the hope that the owner is only briefly holding it,
+and might release it shortly.
+If the owner does not do so, the waiting thread proceeds to yield the processor,
+allowing other threads to run.
+If the owner is not currently actually running then the spin step is skipped.
 Mutexes fully support priority propagation.
 .Pp
 See
@@ -49,9 +57,10 @@
 for details.
 .Ss Spin mutexes
 Spin mutexes are variation of basic mutexes; the main difference between
-the two is that spin mutexes never sleep - instead, they spin, waiting
-for the thread holding the lock, which runs on another CPU, to release it.
-Differently from ordinary mutex, spin mutexes disable interrupts when acquired.
+the two is that spin mutexes never yield the processor - instead, they spin,
+waiting for the thread holding the lock,
+(which must be running on another CPU), to release it.
+Spin mutexes disable interrupts while the held so as to not get pre-empted.
 Since disabling interrupts is expensive, they are also generally slower.
 Spin mutexes should be used only when necessary, e.g. to protect data shared
 with interrupt filter code (see
@@ -122,7 +131,7 @@
 They don't support priority propagation.
 They should be considered to be closely related to
 .Xr sleep 9 .
-In fact it could in some cases be
+They could in some cases be
 considered a conditional sleep.
 .Pp
 See
@@ -146,8 +155,8 @@
 .Fn cv_wait* ,
 functions.
 When a thread waits on a condition, the mutex
-is atomically released before the thread is blocked, then reacquired
-before the function call returns.
+is atomically released before the thread thread yields the processor,
+then reacquired before the function call returns.
 .Pp
 See
 .Xr condvar 9
@@ -255,14 +264,14 @@
 .Xr witness 4
 code.
 .Ss Bounded vs. unbounded sleep
-The following primitives perform bounded sleep: mutexes, pool mutexes,
-reader/writer locks and read-mostly locks.
+The following primitives perform bounded sleep:
+ mutexes, pool mutexes, reader/writer locks and read-mostly locks.
 .Pp
-The following primitives block (perform unbounded sleep): shared/exclusive locks,
-counting semaphores, condition variables, sleep/wakeup and lockmanager locks.
+The following primitives may perform an unbounded sleep:
+shared/exclusive locks, counting semaphores, condition variables, sleep/wakeup and lockmanager locks.
 .Pp
-It is an error to do any operation that could result in any kind of sleep while
-holding spin mutex.
+It is an error to do any operation that could result in yielding the processor
+while holding a spin mutex.
 .Pp
 As a general rule, it is an error to do any operation that could result
 in unbounded sleep while holding any primitive from the 'bounded sleep' group.
@@ -284,21 +293,22 @@
 the assumptions that were made before, all the way up the call graph to the
 place where the lock was acquired.
 .Pp
-It is an error to do any operation that could result in any kind of sleep when
-running inside an interrupt filter.
+It is an error to do any operation that could result in yielding of
+the processor when running inside an interrupt filter.
 .Pp
 It is an error to do any operation that could result in unbounded sleep when
 running inside an interrupt thread.
 .Ss Interaction table
 The following table shows what you can and can not do while holding
 one of the synchronization primitives discussed:
-.Bl -column ".Ic xxxxxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXX" -offset indent
-.It Em "You have: You want:" Ta spin mtx Ta mutex Ta sx Ta rwlock Ta rmlock Ta sleep
+.Bl -column ".Ic xxxxxxxxxxxxxxxx" ".Xr XXXXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXXX" ".Xr XXXXXX" -offset indent
+.It Em "       You want:" Ta spin-mtx Ta mutex Ta rwlock Ta rmlock Ta sx Ta sleep
+.It Em "You have:     " Ta ------ Ta ------ Ta ------ Ta ------ Ta ------ Ta ------
 .It spin mtx  Ta \&ok-1 Ta \&no Ta \&no Ta \&no Ta \&no Ta \&no-3
-.It mutex     Ta \&ok Ta \&ok-1 Ta \&no Ta \&ok Ta \&ok Ta \&no-3
-.It sx        Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok Ta \&ok Ta \&ok-4
-.It rwlock    Ta \&ok Ta \&ok Ta \&no Ta \&ok-2 Ta \&ok Ta \&no-3
-.It rmlock    Ta \&ok Ta \&ok Ta \&no-5 Ta \&ok Ta \&ok-2 Ta \&no-5
+.It mutex     Ta \&ok Ta \&ok-1 Ta \&ok Ta \&ok Ta \&no Ta \&no-3
+.It rwlock    Ta \&ok Ta \&ok Ta \&ok-2 Ta \&ok Ta \&no Ta \&no-3
+.It rmlock    Ta \&ok Ta \&ok Ta \&ok Ta \&ok-2 Ta \&no-5 Ta \&no-5
+.It sx        Ta \&ok Ta \&ok Ta \&ok Ta \&ok Ta \&no-2 Ta \&ok-4
 .El
 .Pp
 .Em *1

==== //depot/projects/smpng/share/man/man9/rtalloc.9#4 (text+ko) ====

@@ -26,9 +26,9 @@
 .\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man9/rtalloc.9,v 1.22 2011/12/14 14:52:50 glebius Exp $
+.\" $FreeBSD: src/share/man/man9/rtalloc.9,v 1.23 2012/07/04 07:42:12 glebius Exp $
 .\"
-.Dd December 14, 2011
+.Dd July 4, 2012
 .Dt RTALLOC 9
 .Os
 .Sh NAME
@@ -52,6 +52,7 @@
 .Fn RT_UNLOCK "struct rt_entry *rt"
 .Fn RT_ADDREF "struct rt_entry *rt"
 .Fn RT_REMREF "struct rt_entry *rt"
+.Fn RO_RTFREE "struct route *ro"
 .Ft void
 .Fn rtfree "struct rt_entry *rt"
 .Ft "struct rtentry *"
@@ -203,6 +204,14 @@
 .Fn RT_ADDREF .
 .Pp
 The
+.Fn RO_RTFREE
+macro is used to free route entry that is referenced by struct route.
+At certain circumstances the latter may not hold a reference on rtentry,
+and
+.Fn RO_RTFREE
+treats such routes correctly.
+.Pp
+The
 .Fn rtfree
 function does the actual free of the routing table entry, and shouldn't
 be called directly by facilities, that just perform routing table lookups.

==== //depot/projects/smpng/sys/amd64/amd64/db_disasm.c#10 (text+ko) ====

@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_disasm.c,v 1.32 2008/08/11 20:19:42 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/db_disasm.c,v 1.34 2012/07/06 14:25:59 jhb Exp $");
 
 /*
  * Instruction disassembler.

==== //depot/projects/smpng/sys/amd64/amd64/fpu.c#24 (text+ko) ====

@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/fpu.c,v 1.182 2012/05/17 17:30:16 kib Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/fpu.c,v 1.183 2012/07/05 18:19:35 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>

==== //depot/projects/smpng/sys/amd64/amd64/pmap.c#123 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.751 2012/06/21 16:37:36 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.764 2012/07/06 06:42:25 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -173,6 +173,31 @@
 #define	PHYS_TO_PV_LIST_LOCK(pa)	\
 			(&pv_list_locks[pa_index(pa) % NPV_LIST_LOCKS])
 
+#define	CHANGE_PV_LIST_LOCK_TO_PHYS(lockp, pa)	do {	\
+	struct rwlock **_lockp = (lockp);		\
+	struct rwlock *_new_lock;			\
+							\
+	_new_lock = PHYS_TO_PV_LIST_LOCK(pa);		\
+	if (_new_lock != *_lockp) {			\
+		if (*_lockp != NULL)			\
+			rw_wunlock(*_lockp);		\
+		*_lockp = _new_lock;			\
+		rw_wlock(*_lockp);			\
+	}						\
+} while (0)
+
+#define	CHANGE_PV_LIST_LOCK_TO_VM_PAGE(lockp, m)	\
+			CHANGE_PV_LIST_LOCK_TO_PHYS(lockp, VM_PAGE_TO_PHYS(m))
+
+#define	RELEASE_PV_LIST_LOCK(lockp)		do {	\
+	struct rwlock **_lockp = (lockp);		\
+							\
+	if (*_lockp != NULL) {				\
+		rw_wunlock(*_lockp);			\
+		*_lockp = NULL;				\
+	}						\
+} while (0)
+
 #define	VM_PAGE_TO_PV_LIST_LOCK(m)	\
 			PHYS_TO_PV_LIST_LOCK(VM_PAGE_TO_PHYS(m))
 
@@ -239,11 +264,17 @@
 
 static void	free_pv_chunk(struct pv_chunk *pc);
 static void	free_pv_entry(pmap_t pmap, pv_entry_t pv);
-static pv_entry_t get_pv_entry(pmap_t pmap, boolean_t try);
-static void	pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
+static pv_entry_t get_pv_entry(pmap_t pmap, struct rwlock **lockp);
+static int	popcnt_pc_map_elem(uint64_t elem);
+static vm_page_t reclaim_pv_chunk(pmap_t locked_pmap, struct rwlock **lockp);
+static void	reserve_pv_entries(pmap_t pmap, int needed,
+		    struct rwlock **lockp);
+static void	pmap_pv_demote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa,
+		    struct rwlock **lockp);
 static boolean_t pmap_pv_insert_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa,
 		    struct rwlock **lockp);
-static void	pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa);
+static void	pmap_pv_promote_pde(pmap_t pmap, vm_offset_t va, vm_paddr_t pa,
+		    struct rwlock **lockp);
 static void	pmap_pvh_free(struct md_page *pvh, pmap_t pmap, vm_offset_t va);
 static pv_entry_t pmap_pvh_remove(struct md_page *pvh, pmap_t pmap,
 		    vm_offset_t va);
@@ -251,6 +282,8 @@
 
 static int pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode);
 static boolean_t pmap_demote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va);
+static boolean_t pmap_demote_pde_locked(pmap_t pmap, pd_entry_t *pde,
+    vm_offset_t va, struct rwlock **lockp);
 static boolean_t pmap_demote_pdpe(pmap_t pmap, pdp_entry_t *pdpe,
     vm_offset_t va);
 static boolean_t pmap_enter_pde(pmap_t pmap, vm_offset_t va, vm_page_t m,
@@ -264,14 +297,16 @@
 static void pmap_kenter_attr(vm_offset_t va, vm_paddr_t pa, int mode);
 static vm_page_t pmap_lookup_pt_page(pmap_t pmap, vm_offset_t va);
 static void pmap_pde_attr(pd_entry_t *pde, int cache_bits);
-static void pmap_promote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va);
+static void pmap_promote_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t va,
+    struct rwlock **lockp);
 static boolean_t pmap_protect_pde(pmap_t pmap, pd_entry_t *pde, vm_offset_t sva,
     vm_prot_t prot);
 static void pmap_pte_attr(pt_entry_t *pte, int cache_bits);
 static int pmap_remove_pde(pmap_t pmap, pd_entry_t *pdq, vm_offset_t sva,
-		vm_page_t *free);
+		vm_page_t *free, struct rwlock **lockp);
 static int pmap_remove_pte(pmap_t pmap, pt_entry_t *ptq,
-		vm_offset_t sva, pd_entry_t ptepde, vm_page_t *free);
+		vm_offset_t sva, pd_entry_t ptepde, vm_page_t *free,
+		struct rwlock **lockp);
 static void pmap_remove_pt_page(pmap_t pmap, vm_page_t mpte);
 static void pmap_remove_page(pmap_t pmap, vm_offset_t va, pd_entry_t *pde,
     vm_page_t *free);
@@ -281,10 +316,13 @@
     pd_entry_t newpde);
 static void pmap_update_pde_invalidate(vm_offset_t va, pd_entry_t newpde);
 
-static vm_page_t pmap_allocpde(pmap_t pmap, vm_offset_t va, int flags);
-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,
+		struct rwlock **lockp);
+static vm_page_t pmap_allocpde(pmap_t pmap, vm_offset_t va,
+		struct rwlock **lockp);
+static vm_page_t pmap_allocpte(pmap_t pmap, vm_offset_t va,
+		struct rwlock **lockp);
 
-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,
                 vm_page_t* free);
 static int pmap_unuse_pt(pmap_t, vm_offset_t, pd_entry_t, vm_page_t *);
@@ -604,7 +642,7 @@
  	/*
 	 * Initialize the global pv list lock.
 	 */
-	rw_init(&pvh_global_lock, "pvh global");
+	rw_init(&pvh_global_lock, "pmap pv global");
 
 	/*
 	 * Reserve some special page table entries/VA space for temporary
@@ -772,13 +810,13 @@
 	/*
 	 * Initialize the pv chunk list mutex.
 	 */
-	mtx_init(&pv_chunks_mutex, "pv chunk list", NULL, MTX_DEF);
+	mtx_init(&pv_chunks_mutex, "pmap pv chunk list", NULL, MTX_DEF);
 
 	/*
 	 * Initialize the pool of pv list locks.
 	 */
 	for (i = 0; i < NPV_LIST_LOCKS; i++)
-		rw_init(&pv_list_locks[i], "pv list");
+		rw_init(&pv_list_locks[i], "pmap pv list");
 
 	/*
 	 * Calculate the size of the pv head table for superpages.
@@ -1662,8 +1700,10 @@
 }
 
 /*
- * this routine is called if the page table page is not
- * mapped correctly.
+ * This routine is called if the desired page table page does not exist.
+ *
+ * If page table page allocation fails, this routine may sleep before
+ * returning NULL.  It sleeps only if a lock pointer was given.
  *
  * Note: If a page allocation fails at page table level two or three,
  * one or two pages may be held during the wait, only to be released
@@ -1671,25 +1711,23 @@
  * race conditions.
  */
 static vm_page_t
-_pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, int flags)
+_pmap_allocpte(pmap_t pmap, vm_pindex_t ptepindex, struct rwlock **lockp)
 {
 	vm_page_t m, pdppg, pdpg;
 
-	KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT ||
-	    (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK,
-	    ("_pmap_allocpte: flags is neither M_NOWAIT nor M_WAITOK"));
+	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
 
-	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
 	/*
 	 * Allocate a page table page.
 	 */
 	if ((m = vm_page_alloc(NULL, ptepindex, VM_ALLOC_NOOBJ |
 	    VM_ALLOC_WIRED | VM_ALLOC_ZERO)) == NULL) {
-		if (flags & M_WAITOK) {
+		if (lockp != NULL) {
+			RELEASE_PV_LIST_LOCK(lockp);
 			PMAP_UNLOCK(pmap);
-			rw_wunlock(&pvh_global_lock);
+			rw_runlock(&pvh_global_lock);
 			VM_WAIT;
-			rw_wlock(&pvh_global_lock);
+			rw_rlock(&pvh_global_lock);
 			PMAP_LOCK(pmap);
 		}
 
@@ -1730,7 +1768,7 @@
 		if ((*pml4 & PG_V) == 0) {
 			/* Have to allocate a new pdp, recurse */
 			if (_pmap_allocpte(pmap, NUPDE + NUPDPE + pml4index,
-			    flags) == NULL) {
+			    lockp) == NULL) {
 				--m->wire_count;
 				atomic_subtract_int(&cnt.v_wire_count, 1);
 				vm_page_free_zero(m);
@@ -1763,7 +1801,7 @@
 		if ((*pml4 & PG_V) == 0) {
 			/* Have to allocate a new pd, recurse */
 			if (_pmap_allocpte(pmap, NUPDE + pdpindex,
-			    flags) == NULL) {
+			    lockp) == NULL) {
 				--m->wire_count;
 				atomic_subtract_int(&cnt.v_wire_count, 1);
 				vm_page_free_zero(m);
@@ -1777,7 +1815,7 @@
 			if ((*pdp & PG_V) == 0) {
 				/* Have to allocate a new pd, recurse */
 				if (_pmap_allocpte(pmap, NUPDE + pdpindex,
-				    flags) == NULL) {
+				    lockp) == NULL) {
 					--m->wire_count;
 					atomic_subtract_int(&cnt.v_wire_count,
 					    1);
@@ -1803,15 +1841,12 @@
 }
 
 static vm_page_t
-pmap_allocpde(pmap_t pmap, vm_offset_t va, int flags)
+pmap_allocpde(pmap_t pmap, vm_offset_t va, struct rwlock **lockp)
 {
 	vm_pindex_t pdpindex, ptepindex;
 	pdp_entry_t *pdpe;
 	vm_page_t pdpg;
 
-	KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT ||
-	    (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK,
-	    ("pmap_allocpde: flags is neither M_NOWAIT nor M_WAITOK"));
 retry:
 	pdpe = pmap_pdpe(pmap, va);
 	if (pdpe != NULL && (*pdpe & PG_V) != 0) {
@@ -1822,24 +1857,20 @@
 		/* Allocate a pd page. */
 		ptepindex = pmap_pde_pindex(va);
 		pdpindex = ptepindex >> NPDPEPGSHIFT;
-		pdpg = _pmap_allocpte(pmap, NUPDE + pdpindex, flags);
-		if (pdpg == NULL && (flags & M_WAITOK))
+		pdpg = _pmap_allocpte(pmap, NUPDE + pdpindex, lockp);
+		if (pdpg == NULL && lockp != NULL)
 			goto retry;
 	}
 	return (pdpg);
 }
 
 static vm_page_t
-pmap_allocpte(pmap_t pmap, vm_offset_t va, int flags)
+pmap_allocpte(pmap_t pmap, vm_offset_t va, struct rwlock **lockp)
 {
 	vm_pindex_t ptepindex;
 	pd_entry_t *pd;
 	vm_page_t m;
 
-	KASSERT((flags & (M_NOWAIT | M_WAITOK)) == M_NOWAIT ||
-	    (flags & (M_NOWAIT | M_WAITOK)) == M_WAITOK,
-	    ("pmap_allocpte: flags is neither M_NOWAIT nor M_WAITOK"));
-
 	/*
 	 * Calculate pagetable page index
 	 */
@@ -1855,7 +1886,7 @@
 	 * normal 4K page.
 	 */
 	if (pd != NULL && (*pd & (PG_PS | PG_V)) == (PG_PS | PG_V)) {
-		if (!pmap_demote_pde(pmap, pd, va)) {
+		if (!pmap_demote_pde_locked(pmap, pd, va, lockp)) {
 			/*
 			 * Invalidation of the 2MB page mapping may have caused
 			 * the deallocation of the underlying PD page.
@@ -1876,8 +1907,8 @@
 		 * Here if the pte page isn't mapped, or if it has been
 		 * deallocated.
 		 */
-		m = _pmap_allocpte(pmap, ptepindex, flags);
-		if (m == NULL && (flags & M_WAITOK))
+		m = _pmap_allocpte(pmap, ptepindex, lockp);
+		if (m == NULL && lockp != NULL)
 			goto retry;
 	}
 	return (m);
@@ -2071,14 +2102,16 @@
  * drastic measures to free some pages so we can allocate
  * another pv entry chunk.
  *
+ * Returns NULL if PV entries were reclaimed from the specified pmap.
+ *
  * We do not, however, unmap 2mpages because subsequent accesses will
  * allocate per-page pv entries until repromotion occurs, thereby
  * exacerbating the shortage of free pv entries.
  */
 static vm_page_t
-pmap_pv_reclaim(pmap_t locked_pmap)
+reclaim_pv_chunk(pmap_t locked_pmap, struct rwlock **lockp)
 {
-	struct pch newtail;
+	struct pch new_tail;
 	struct pv_chunk *pc;
 	struct md_page *pvh;
 	pd_entry_t *pde;
@@ -2090,13 +2123,16 @@
 	uint64_t inuse;
 	int bit, field, freed;
 	
-	rw_assert(&pvh_global_lock, RA_WLOCKED);
+	rw_assert(&pvh_global_lock, RA_LOCKED);
 	PMAP_LOCK_ASSERT(locked_pmap, MA_OWNED);
+	KASSERT(lockp != NULL, ("reclaim_pv_chunk: lockp is NULL"));
 	pmap = NULL;
 	free = m_pc = NULL;
-	TAILQ_INIT(&newtail);
+	TAILQ_INIT(&new_tail);
+	mtx_lock(&pv_chunks_mutex);
 	while ((pc = TAILQ_FIRST(&pv_chunks)) != NULL && free == NULL) {
 		TAILQ_REMOVE(&pv_chunks, pc, pc_lru);
+		mtx_unlock(&pv_chunks_mutex);
 		if (pmap != pc->pc_pmap) {
 			if (pmap != NULL) {
 				pmap_invalidate_all(pmap);
@@ -2105,11 +2141,14 @@
 			}
 			pmap = pc->pc_pmap;
 			/* Avoid deadlock and lock recursion. */
-			if (pmap > locked_pmap)
+			if (pmap > locked_pmap) {
+				RELEASE_PV_LIST_LOCK(lockp);
 				PMAP_LOCK(pmap);
-			else if (pmap != locked_pmap && !PMAP_TRYLOCK(pmap)) {
+			} else if (pmap != locked_pmap &&
+			    !PMAP_TRYLOCK(pmap)) {
 				pmap = NULL;
-				TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+				TAILQ_INSERT_TAIL(&new_tail, pc, pc_lru);
+				mtx_lock(&pv_chunks_mutex);
 				continue;
 			}
 		}
@@ -2138,6 +2177,7 @@
 					vm_page_dirty(m);
 				if ((tpte & PG_A) != 0)
 					vm_page_aflag_set(m, PGA_REFERENCED);
+				CHANGE_PV_LIST_LOCK_TO_VM_PAGE(lockp, m);
 				TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
 				if (TAILQ_EMPTY(&m->md.pv_list) &&
 				    (m->flags & PG_FICTITIOUS) == 0) {
@@ -2153,32 +2193,36 @@
 			}
 		}
 		if (freed == 0) {
-			TAILQ_INSERT_TAIL(&newtail, pc, pc_lru);
+			TAILQ_INSERT_TAIL(&new_tail, pc, pc_lru);
+			mtx_lock(&pv_chunks_mutex);

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207061523.q66FNOAH066175>