From owner-p4-projects@FreeBSD.ORG Sun Aug 23 08:50:14 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 99A801065697; Sun, 23 Aug 2009 08:50:14 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 4509D1065695 for ; Sun, 23 Aug 2009 08:50:14 +0000 (UTC) (envelope-from zec@fer.hr) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 326EA8FC0A for ; Sun, 23 Aug 2009 08:50:14 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n7N8oERU040318 for ; Sun, 23 Aug 2009 08:50:14 GMT (envelope-from zec@fer.hr) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n7N8oDbr040316 for perforce@freebsd.org; Sun, 23 Aug 2009 08:50:13 GMT (envelope-from zec@fer.hr) Date: Sun, 23 Aug 2009 08:50:13 GMT Message-Id: <200908230850.n7N8oDbr040316@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to zec@fer.hr using -f From: Marko Zec To: Perforce Change Reviews Cc: Subject: PERFORCE change 167641 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 23 Aug 2009 08:50:14 -0000 http://perforce.freebsd.org/chv.cgi?CH=167641 Change 167641 by zec@zec_tpx32 on 2009/08/23 08:50:03 IFC @ 167626 Affected files ... .. //depot/projects/vimage-commit2/src/sys/amd64/amd64/local_apic.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/amd64/amd64/machdep.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/amd64/amd64/pmap.c#19 integrate .. //depot/projects/vimage-commit2/src/sys/amd64/include/apicvar.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/amd64/include/pmc_mdep.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/arm/at91/uart_dev_at91usart.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/boot/i386/gptboot/gptboot.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/cam/ata/ata_xpt.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/cam/cam_ccb.h#4 integrate .. //depot/projects/vimage-commit2/src/sys/cam/cam_xpt.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/kern/opensolaris_taskq.c#1 branch .. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/rpc/xdr.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/sys/taskq.h#2 delete .. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/sys/taskq_impl.h#2 delete .. //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/sys/vnode.h#8 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/common/nvpair/nvpair.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/vnode.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/os/taskq.c#3 delete .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/rpc/opensolaris_xdr.c#2 delete .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/rpc/opensolaris_xdr_array.c#2 delete .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/rpc/opensolaris_xdr_mem.c#2 delete .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/rpc/xdr.h#4 delete .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/sys/taskq.h#1 branch .. //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/conf/options#38 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/pf/net/pf.c#19 integrate .. //depot/projects/vimage-commit2/src/sys/contrib/pf/net/pfvar.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/aac/aac.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_battery.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_cpu.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_dock.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/acpica/acpi_thermal.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/adb/adb_bus.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/amdtemp/amdtemp.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/amr/amr.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/dev/ata/ata-all.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/dev/atkbdc/psm.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/bge/if_bge.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/dev/bktr/bktr_os.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/drm/drm_drv.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/dev/e1000/if_em.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/dev/e1000/if_igb.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/dev/hptrr/hptrr_osm_bsd.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/dev/hwpmc/hwpmc_core.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/hwpmc/hwpmc_piv.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/hwpmc/hwpmc_ppro.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/hwpmc/hwpmc_x86.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/ips/ips_pci.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/iscsi/initiator/isc_cam.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/dev/mfi/mfi.c#10 integrate .. //depot/projects/vimage-commit2/src/sys/dev/mfi/mfi_ioctl.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/mfi/mfireg.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/mii/e1000phy.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/dev/mlx/mlx.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/dev/mmc/mmc.c#11 integrate .. //depot/projects/vimage-commit2/src/sys/dev/pccbb/pccbb.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/ppbus/vpo.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/pst/pst-iop.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/rp/rp.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/sound/pci/hda/hdac.c#20 integrate .. //depot/projects/vimage-commit2/src/sys/dev/twe/twe.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/controller/usb_controller.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/input/ukbd.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/net/usb_ethernet.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_busdma.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_compat_linux.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_dev.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_handle_request.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_hub.c#17 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_process.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/usb_process.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/dev/usb/wlan/if_upgt.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/dev/xen/blkback/blkback.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/dev/xen/netback/netback.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/fs/nfsclient/nfs_clsubs.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/geom/part/g_part_gpt.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/i386/acpica/acpi_machdep.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/i386/bios/smapi.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/i386/bios/smbios.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/i386/bios/vpd.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/i386/i386/local_apic.c#14 integrate .. //depot/projects/vimage-commit2/src/sys/i386/i386/machdep.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/i386/include/apicvar.h#9 integrate .. //depot/projects/vimage-commit2/src/sys/i386/include/pmc_mdep.h#6 integrate .. //depot/projects/vimage-commit2/src/sys/i386/xen/mp_machdep.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/ia64/ia64/genassym.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/ia64/ia64/machdep.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/ia64/ia64/mp_machdep.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_lock.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_mutex.c#7 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_poll.c#21 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_rwlock.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/kern/kern_sx.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/kern/subr_bus.c#12 integrate .. //depot/projects/vimage-commit2/src/sys/kern/subr_sglist.c#2 integrate .. //depot/projects/vimage-commit2/src/sys/kern/subr_taskqueue.c#4 integrate .. //depot/projects/vimage-commit2/src/sys/kern/tty_pty.c#6 integrate .. //depot/projects/vimage-commit2/src/sys/kern/vfs_cache.c#22 integrate .. //depot/projects/vimage-commit2/src/sys/modules/zfs/Makefile#7 integrate .. //depot/projects/vimage-commit2/src/sys/net/flowtable.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/net/flowtable.h#10 integrate .. //depot/projects/vimage-commit2/src/sys/net/if.c#84 integrate .. //depot/projects/vimage-commit2/src/sys/net/if_var.h#37 integrate .. //depot/projects/vimage-commit2/src/sys/net/vnet.h#33 integrate .. //depot/projects/vimage-commit2/src/sys/net80211/ieee80211_input.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ip_carp.c#20 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ip_fw.h#30 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ip_output.c#37 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ipfw/ip_fw2.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/ipfw/ip_fw_pfil.c#5 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_indata.c#15 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_input.c#13 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_os_bsd.h#29 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_output.c#18 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_pcb.c#21 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctp_timer.c#11 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctputil.c#16 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/sctputil.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/netinet/tcp_timewait.c#32 integrate .. //depot/projects/vimage-commit2/src/sys/nfsclient/nfs_subs.c#8 integrate .. //depot/projects/vimage-commit2/src/sys/pc98/cbus/fdc.c#3 integrate .. //depot/projects/vimage-commit2/src/sys/sys/bus.h#5 integrate .. //depot/projects/vimage-commit2/src/sys/sys/lock.h#7 integrate .. //depot/projects/vimage-commit2/src/sys/sys/sglist.h#2 integrate .. //depot/projects/vimage-commit2/src/sys/sys/systm.h#12 integrate .. //depot/projects/vimage-commit2/src/sys/sys/taskqueue.h#3 integrate .. //depot/projects/vimage-commit2/src/sys/ufs/ffs/ffs_softdep.c#9 integrate .. //depot/projects/vimage-commit2/src/sys/xen/xenbus/xenbus_probe.c#8 integrate Differences ... ==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/local_apic.c#13 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.59 2009/08/13 17:09:45 attilio Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.60 2009/08/14 21:05:08 jhb Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" @@ -123,7 +123,7 @@ { 1, 1, 0, 1, APIC_LVT_DM_NMI, 0 }, /* LINT1: NMI */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_TIMER_INT }, /* Timer */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_ERROR_INT }, /* Error */ - { 1, 1, 0, 1, APIC_LVT_DM_NMI, 0 }, /* PMC */ + { 1, 1, 1, 1, APIC_LVT_DM_NMI, 0 }, /* PMC */ { 1, 1, 1, 1, APIC_LVT_DM_FIXED, APIC_THERMAL_INT }, /* Thermal */ }; @@ -305,11 +305,9 @@ lapic->lvt_lint0 = lvt_mode(la, LVT_LINT0, lapic->lvt_lint0); lapic->lvt_lint1 = lvt_mode(la, LVT_LINT1, lapic->lvt_lint1); -#ifdef HWPMC_HOOKS /* Program the PMC LVT entry if present. */ if (maxlvt >= LVT_PMC) lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); -#endif /* Program timer LVT and setup handler. */ lapic->lvt_timer = lvt_mode(la, LVT_TIMER, lapic->lvt_timer); @@ -332,6 +330,88 @@ intr_restore(eflags); } +void +lapic_reenable_pmc(void) +{ +#ifdef HWPMC_HOOKS + uint32_t value; + + value = lapic->lvt_pcint; + value &= ~APIC_LVT_M; + lapic->lvt_pcint = value; +#endif +} + +#ifdef HWPMC_HOOKS +static void +lapic_update_pmc(void *dummy) +{ + struct lapic *la; + + la = &lapics[lapic_id()]; + lapic->lvt_pcint = lvt_mode(la, LVT_PMC, lapic->lvt_pcint); +} +#endif + +int +lapic_enable_pmc(void) +{ +#ifdef HWPMC_HOOKS + u_int32_t maxlvt; + + /* Fail if the local APIC is not present. */ + if (lapic == NULL) + return (0); + + /* Fail if the PMC LVT is not present. */ + maxlvt = (lapic->version & APIC_VER_MAXLVT) >> MAXLVTSHIFT; + if (maxlvt < LVT_PMC) + return (0); + + lvts[LVT_PMC].lvt_masked = 0; + +#ifdef SMP + /* + * If hwpmc was loaded at boot time then the APs may not be + * started yet. In that case, don't forward the request to + * them as they will program the lvt when they start. + */ + if (smp_started) + smp_rendezvous(NULL, lapic_update_pmc, NULL, NULL); + else +#endif + lapic_update_pmc(NULL); + return (1); +#else + return (0); +#endif +} + +void +lapic_disable_pmc(void) +{ +#ifdef HWPMC_HOOKS + u_int32_t maxlvt; + + /* Fail if the local APIC is not present. */ + if (lapic == NULL) + return; + + /* Fail if the PMC LVT is not present. */ + maxlvt = (lapic->version & APIC_VER_MAXLVT) >> MAXLVTSHIFT; + if (maxlvt < LVT_PMC) + return; + + lvts[LVT_PMC].lvt_masked = 1; + +#ifdef SMP + /* The APs should always be started when hwpmc is unloaded. */ + KASSERT(mp_ncpus == 1 || smp_started, ("hwpmc unloaded too early")); +#endif + smp_rendezvous(NULL, lapic_update_pmc, NULL, NULL); +#endif +} + /* * Called by cpu_initclocks() on the BSP to setup the local APIC timer so * that it can drive hardclock, statclock, and profclock. This function ==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/machdep.c#16 (text+ko) ==== @@ -39,7 +39,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.707 2009/08/02 11:26:23 ed Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.709 2009/08/20 22:58:05 jkim Exp $"); #include "opt_atalk.h" #include "opt_atpic.h" @@ -217,6 +217,7 @@ strncmp(sysenv, "MacBook3,1", 10) == 0 || strncmp(sysenv, "MacBookPro1,1", 13) == 0 || strncmp(sysenv, "MacBookPro1,2", 13) == 0 || + strncmp(sysenv, "MacBookPro3,1", 13) == 0 || strncmp(sysenv, "Macmini1,1", 10) == 0) { if (bootverbose) printf("Disabling LEGACY_USB_EN bit on " @@ -235,19 +236,21 @@ #ifdef PERFMON perfmon_init(); #endif + realmem = Maxmem; + + /* + * Display physical memory if SMBIOS reports reasonable amount. + */ + memsize = 0; sysenv = getenv("smbios.memory.enabled"); if (sysenv != NULL) { - memsize = (uintmax_t)strtoul(sysenv, (char **)NULL, 10); + memsize = (uintmax_t)strtoul(sysenv, (char **)NULL, 10) << 10; freeenv(sysenv); - } else - memsize = 0; - if (memsize > 0) - printf("real memory = %ju (%ju MB)\n", memsize << 10, - memsize >> 10); - else - printf("real memory = %ju (%ju MB)\n", ptoa((uintmax_t)Maxmem), - ptoa((uintmax_t)Maxmem) / 1048576); - realmem = Maxmem; + } + if (memsize < ptoa((uintmax_t)cnt.v_free_count)) + memsize = ptoa((uintmax_t)Maxmem); + printf("real memory = %ju (%ju MB)\n", memsize, memsize >> 20); + /* * Display any holes after the first chunk of extended memory. */ ==== //depot/projects/vimage-commit2/src/sys/amd64/amd64/pmap.c#19 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.667 2009/07/24 13:50:29 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.668 2009/08/17 13:27:55 kib Exp $"); /* * Manages physical address maps. @@ -2261,6 +2261,8 @@ " in pmap %p", va, pmap); return (FALSE); } + if (va < VM_MAXUSER_ADDRESS) + pmap->pm_stats.resident_count++; } mptepa = VM_PAGE_TO_PHYS(mpte); firstpte = (pt_entry_t *)PHYS_TO_DMAP(mptepa); ==== //depot/projects/vimage-commit2/src/sys/amd64/include/apicvar.h#7 (text+ko) ==== @@ -26,7 +26,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.30 2009/08/13 17:09:45 attilio Exp $ + * $FreeBSD: src/sys/amd64/include/apicvar.h,v 1.31 2009/08/14 21:05:08 jhb Exp $ */ #ifndef _MACHINE_APICVAR_H_ @@ -201,7 +201,9 @@ int ioapic_set_smi(void *cookie, u_int pin); void lapic_create(u_int apic_id, int boot_cpu); void lapic_disable(void); +void lapic_disable_pmc(void); void lapic_dump(const char *str); +int lapic_enable_pmc(void); void lapic_eoi(void); u_int lapic_error(void); int lapic_id(void); @@ -212,6 +214,7 @@ int lapic_ipi_wait(int delay); void lapic_handle_intr(int vector, struct trapframe *frame); void lapic_handle_timer(struct trapframe *frame); +void lapic_reenable_pmc(void); void lapic_set_logical_id(u_int apic_id, u_int cluster, u_int cluster_id); int lapic_set_lvt_mask(u_int apic_id, u_int lvt, u_char masked); int lapic_set_lvt_mode(u_int apic_id, u_int lvt, u_int32_t mode); ==== //depot/projects/vimage-commit2/src/sys/amd64/include/pmc_mdep.h#6 (text+ko) ==== @@ -27,7 +27,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/include/pmc_mdep.h,v 1.8 2008/11/27 09:00:47 jkoshy Exp $ + * $FreeBSD: src/sys/amd64/include/pmc_mdep.h,v 1.9 2009/08/14 21:05:08 jhb Exp $ */ /* Machine dependent interfaces */ @@ -115,7 +115,6 @@ */ void start_exceptions(void), end_exceptions(void); -void pmc_x86_lapic_enable_pmc_interrupt(void); struct pmc_mdep *pmc_amd_initialize(void); void pmc_amd_finalize(struct pmc_mdep *_md); ==== //depot/projects/vimage-commit2/src/sys/arm/at91/uart_dev_at91usart.c#7 (text) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.19 2009/01/22 21:56:41 imp Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.20 2009/08/15 15:15:20 stas Exp $"); #include "opt_comconsole.h" @@ -307,6 +307,10 @@ int at91_usart_bus_probe(struct uart_softc *sc) { + + sc->sc_txfifosz = USART_BUFFER_SIZE; + sc->sc_rxfifosz = USART_BUFFER_SIZE; + sc->sc_hwiflow = 0; return (0); } @@ -344,10 +348,6 @@ atsc->flags |= HAS_TIMEOUT; WR4(&sc->sc_bas, USART_IDR, 0xffffffff); - sc->sc_txfifosz = USART_BUFFER_SIZE; - sc->sc_rxfifosz = USART_BUFFER_SIZE; - sc->sc_hwiflow = 0; - #ifndef SKYEYE_WORKAROUNDS /* * Allocate DMA tags and maps ==== //depot/projects/vimage-commit2/src/sys/boot/i386/gptboot/gptboot.c#3 (text+ko) ==== @@ -14,7 +14,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/boot/i386/gptboot/gptboot.c,v 1.88 2008/08/08 19:41:20 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/boot/i386/gptboot/gptboot.c,v 1.89 2009/08/17 15:19:03 jhay Exp $"); #include #include @@ -466,16 +466,13 @@ dsk.type = i; arg += 3; dsk.unit = *arg - '0'; - if (arg[1] != ',' || dsk.unit > 9) + if (arg[1] != 'p' || dsk.unit > 9) return -1; arg += 2; - dsk.part = -1; - if (arg[1] == ',') { - dsk.part = *arg - '0'; - if (dsk.part < 1 || dsk.part > 9) - return -1; - arg += 2; - } + dsk.part = *arg - '0'; + if (dsk.part < 1 || dsk.part > 9) + return -1; + arg++; if (arg[0] != ')') return -1; arg++; ==== //depot/projects/vimage-commit2/src/sys/cam/ata/ata_xpt.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.3 2009/07/13 21:21:30 mav Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.4 2009/08/18 09:27:17 mav Exp $"); #include #include @@ -370,10 +370,10 @@ cam_fill_ataio(ataio, 1, probedone, - /*flags*/CAM_DIR_IN, - MSG_SIMPLE_Q_TAG, - /*data_ptr*/(u_int8_t *)ident_buf, - /*dxfer_len*/sizeof(struct ata_params), + /*flags*/CAM_DIR_NONE, + 0, + /*data_ptr*/NULL, + /*dxfer_len*/0, 30 * 1000); ata_36bit_cmd(ataio, ATA_SETFEATURES, ATA_SF_SETXFER, 0, ata_max_mode(ident_buf, ATA_UDMA6, ATA_UDMA6)); ==== //depot/projects/vimage-commit2/src/sys/cam/cam_ccb.h#4 (text+ko) ==== @@ -25,7 +25,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/cam/cam_ccb.h,v 1.37 2009/08/01 01:04:26 mjacob Exp $ + * $FreeBSD: src/sys/cam/cam_ccb.h,v 1.38 2009/08/18 08:46:54 mav Exp $ */ #ifndef _CAM_CAM_CCB_H @@ -243,6 +243,7 @@ XPORT_ATA, /* AT Attachment */ XPORT_SAS, /* Serial Attached SCSI */ XPORT_SATA, /* Serial AT Attachment */ + XPORT_ISCSI, /* iSCSI */ } cam_xport; #define PROTO_VERSION_UNKNOWN (UINT_MAX - 1) ==== //depot/projects/vimage-commit2/src/sys/cam/cam_xpt.c#8 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.217 2009/08/01 01:04:26 mjacob Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.218 2009/08/18 08:46:54 mav Exp $"); #include #include @@ -3803,6 +3803,8 @@ case XPORT_SAS: case XPORT_FC: case XPORT_USB: + case XPORT_ISCSI: + case XPORT_PPB: new_bus->xport = scsi_get_xport(); break; case XPORT_ATA: ==== //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/rpc/xdr.h#2 (text+ko) ==== ==== //depot/projects/vimage-commit2/src/sys/cddl/compat/opensolaris/sys/vnode.h#8 (text+ko) ==== @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/vnode.h,v 1.12 2009/06/21 13:41:32 kib Exp $ + * $FreeBSD: src/sys/cddl/compat/opensolaris/sys/vnode.h,v 1.13 2009/08/17 09:48:34 pjd Exp $ */ #ifndef _OPENSOLARIS_SYS_VNODE_H_ @@ -75,7 +75,6 @@ #define VN_HOLD(v) vref(v) #define VN_RELE(v) vrele(v) #define VN_URELE(v) vput(v) -#define VN_RELE_ASYNC(v, tq) vn_rele_async(v, tq); #define VOP_REALVP(vp, vpp, ct) (*(vpp) = (vp), 0) ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/common/nvpair/nvpair.c#4 (text+ko) ==== @@ -2523,14 +2523,15 @@ { if (nvs->nvs_op == NVS_OP_ENCODE) { nvs_native_t *native = (nvs_native_t *)nvs->nvs_private; - nvlist_t *packed = (void *) + char *packed = (void *) (native->n_curr - nvp->nvp_size + NVP_VALOFF(nvp)); /* * Null out the pointer that is meaningless in the packed * structure. The address may not be aligned, so we have * to use bzero. */ - bzero(&packed->nvl_priv, sizeof (packed->nvl_priv)); + bzero(packed + offsetof(nvlist_t, nvl_priv), + sizeof(((nvlist_t *)NULL)->nvl_priv)); } return (nvs_embedded(nvs, EMBEDDED_NVL(nvp))); ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/vnode.c#3 (text+ko) ==== @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. + * Copyright 2009 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -36,12 +36,10 @@ * contributors. */ - -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include +#include #include /* Extensible attribute (xva) routines. */ @@ -74,15 +72,12 @@ return (xoap); } -static STAILQ_HEAD(, vnode) vn_rele_async_list; -static struct mtx vn_rele_async_lock; -static struct cv vn_rele_async_cv; -static int vn_rele_list_length; -static int vn_rele_async_thread_exit; +static void +vn_rele_inactive(vnode_t *vp) +{ -typedef struct { - struct vnode *stqe_next; -} vnode_link_t; + vrele(vp); +} /* * Like vn_rele() except if we are going to call VOP_INACTIVE() then do it @@ -95,117 +90,16 @@ * This is because taskqs throttle back allocation if too many are created. */ void -vn_rele_async(vnode_t *vp, taskq_t *taskq /* unused */) +vn_rele_async(vnode_t *vp, taskq_t *taskq) { - - KASSERT(vp != NULL, ("vrele: null vp")); - VFS_ASSERT_GIANT(vp->v_mount); + VERIFY(vp->v_count > 0); VI_LOCK(vp); - - if (vp->v_usecount > 1 || ((vp->v_iflag & VI_DOINGINACT) && - vp->v_usecount == 1)) { - vp->v_usecount--; - vdropl(vp); - return; - } - if (vp->v_usecount != 1) { -#ifdef DIAGNOSTIC - vprint("vrele: negative ref count", vp); -#endif + if (vp->v_count == 1 && !(vp->v_iflag & VI_DOINGINACT)) { VI_UNLOCK(vp); - panic("vrele: negative ref cnt"); - } - /* - * We are exiting - */ - if (vn_rele_async_thread_exit != 0) { - vrele(vp); + VERIFY(taskq_dispatch((taskq_t *)taskq, + (task_func_t *)vn_rele_inactive, vp, TQ_SLEEP) != 0); return; } - - mtx_lock(&vn_rele_async_lock); - - /* STAILQ_INSERT_TAIL */ - (*(vnode_link_t *)&vp->v_cstart).stqe_next = NULL; - *vn_rele_async_list.stqh_last = vp; - vn_rele_async_list.stqh_last = - &((vnode_link_t *)&vp->v_cstart)->stqe_next; - - /****************************************/ - vn_rele_list_length++; - if ((vn_rele_list_length % 100) == 0) - cv_signal(&vn_rele_async_cv); - mtx_unlock(&vn_rele_async_lock); - VI_UNLOCK(vp); -} - -static void -vn_rele_async_init(void *arg) -{ - - mtx_init(&vn_rele_async_lock, "valock", NULL, MTX_DEF); - STAILQ_INIT(&vn_rele_async_list); - - /* cv_init(&vn_rele_async_cv, "vacv"); */ - vn_rele_async_cv.cv_description = "vacv"; - vn_rele_async_cv.cv_waiters = 0; -} - -void -vn_rele_async_fini(void) -{ - - mtx_lock(&vn_rele_async_lock); - vn_rele_async_thread_exit = 1; - cv_signal(&vn_rele_async_cv); - while (vn_rele_async_thread_exit != 0) - cv_wait(&vn_rele_async_cv, &vn_rele_async_lock); - mtx_unlock(&vn_rele_async_lock); - mtx_destroy(&vn_rele_async_lock); + vp->v_usecount--; + vdropl(vp); } - - -static void -vn_rele_async_cleaner(void) -{ - STAILQ_HEAD(, vnode) vn_tmp_list; - struct vnode *curvnode; - - STAILQ_INIT(&vn_tmp_list); - mtx_lock(&vn_rele_async_lock); - while (vn_rele_async_thread_exit == 0) { - STAILQ_CONCAT(&vn_tmp_list, &vn_rele_async_list); - vn_rele_list_length = 0; - mtx_unlock(&vn_rele_async_lock); - - while (!STAILQ_EMPTY(&vn_tmp_list)) { - curvnode = STAILQ_FIRST(&vn_tmp_list); - - /* STAILQ_REMOVE_HEAD */ - STAILQ_FIRST(&vn_tmp_list) = - ((vnode_link_t *)&curvnode->v_cstart)->stqe_next; - if (STAILQ_FIRST(&vn_tmp_list) == NULL) - vn_tmp_list.stqh_last = &STAILQ_FIRST(&vn_tmp_list); - /***********************/ - vrele(curvnode); - } - mtx_lock(&vn_rele_async_lock); - if (vn_rele_list_length == 0) - cv_timedwait(&vn_rele_async_cv, &vn_rele_async_lock, - hz/10); - } - - vn_rele_async_thread_exit = 0; - cv_broadcast(&vn_rele_async_cv); - mtx_unlock(&vn_rele_async_lock); - thread_exit(); -} - -static struct proc *vn_rele_async_proc; -static struct kproc_desc up_kp = { - "vaclean", - vn_rele_async_cleaner, - &vn_rele_async_proc -}; -SYSINIT(vaclean, SI_SUB_KTHREAD_UPDATE, SI_ORDER_FIRST, kproc_start, &up_kp); -SYSINIT(vn_rele_async_setup, SI_SUB_VFS, SI_ORDER_FIRST, vn_rele_async_init, NULL); ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c#6 (text+ko) ==== @@ -1199,9 +1199,6 @@ void dmu_fini(void) { -#ifdef _KERNEL - vn_rele_async_fini(); -#endif arc_fini(); dnode_fini(); dbuf_fini(); ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_pool.c#3 (text+ko) ==== @@ -91,6 +91,9 @@ mutex_init(&dp->dp_lock, NULL, MUTEX_DEFAULT, NULL); mutex_init(&dp->dp_scrub_cancel_lock, NULL, MUTEX_DEFAULT, NULL); + dp->dp_vnrele_taskq = taskq_create("zfs_vn_rele_taskq", 1, minclsyspri, + 1, 4, 0); + return (dp); } @@ -228,6 +231,7 @@ rw_destroy(&dp->dp_config_rwlock); mutex_destroy(&dp->dp_lock); mutex_destroy(&dp->dp_scrub_cancel_lock); + taskq_destroy(dp->dp_vnrele_taskq); kmem_free(dp, sizeof (dsl_pool_t)); } @@ -611,3 +615,9 @@ dsl_dataset_rele(ds, FTAG); rw_exit(&dp->dp_config_rwlock); } + +taskq_t * +dsl_pool_vnrele_taskq(dsl_pool_t *dp) +{ + return (dp->dp_vnrele_taskq); +} ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dsl_pool.h#3 (text+ko) ==== @@ -57,6 +57,7 @@ struct dsl_dir *dp_mos_dir; struct dsl_dataset *dp_origin_snap; uint64_t dp_root_dir_obj; + struct taskq *dp_vnrele_taskq; /* No lock needed - sync context only */ blkptr_t dp_meta_rootbp; @@ -119,6 +120,8 @@ void dsl_pool_scrub_sync(dsl_pool_t *dp, dmu_tx_t *tx); void dsl_pool_scrub_restart(dsl_pool_t *dp); +taskq_t *dsl_pool_vnrele_taskq(dsl_pool_t *dp); + #ifdef __cplusplus } #endif ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/zfs_context.h#3 (text+ko) ==== @@ -49,6 +49,7 @@ #include #include #include +#include #include #include #include ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c#8 (text+ko) ==== @@ -1195,6 +1195,48 @@ return (error); } +static int +zfsctl_snapshot_vptocnp(struct vop_vptocnp_args *ap) +{ + zfsvfs_t *zfsvfs = ap->a_vp->v_vfsp->vfs_data; + vnode_t *dvp, *vp; + zfsctl_snapdir_t *sdp; + zfs_snapentry_t *sep; + int error; + + ASSERT(zfsvfs->z_ctldir != NULL); + error = zfsctl_root_lookup(zfsvfs->z_ctldir, "snapshot", &dvp, + NULL, 0, NULL, kcred, NULL, NULL, NULL); + if (error != 0) + return (error); + sdp = dvp->v_data; + + mutex_enter(&sdp->sd_lock); + sep = avl_first(&sdp->sd_snaps); + while (sep != NULL) { + vp = sep->se_root; + if (vp == ap->a_vp) + break; + sep = AVL_NEXT(&sdp->sd_snaps, sep); + } + if (sep == NULL) { + mutex_exit(&sdp->sd_lock); + error = ENOENT; + } else { + size_t len; + + len = strlen(sep->se_name); + *ap->a_buflen -= len; + bcopy(sep->se_name, ap->a_buf + *ap->a_buflen, len); + mutex_exit(&sdp->sd_lock); + vhold(dvp); + *ap->a_vpp = dvp; + } + VN_RELE(dvp); + + return (error); +} + /* * These VP's should never see the light of day. They should always * be covered. @@ -1206,6 +1248,7 @@ .vop_reclaim = zfsctl_common_reclaim, .vop_getattr = zfsctl_snapshot_getattr, .vop_fid = zfsctl_snapshot_fid, + .vop_vptocnp = zfsctl_snapshot_vptocnp, }; int ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#6 (text+ko) ==== @@ -3056,44 +3056,35 @@ destroy_dev(zfsdev); } -static struct task zfs_start_task; static struct root_hold_token *zfs_root_token; - uint_t zfs_fsyncer_key; extern uint_t rrw_tsd_key; -static void -zfs_start(void *context __unused, int pending __unused) -{ - - zfsdev_init(); - spa_init(FREAD | FWRITE); - zfs_init(); - zvol_init(); - - tsd_create(&zfs_fsyncer_key, NULL); - tsd_create(&rrw_tsd_key, NULL); - - printf("ZFS storage pool version " SPA_VERSION_STRING "\n"); - root_mount_rel(zfs_root_token); -} - static int zfs_modevent(module_t mod, int type, void *unused __unused) { - int error; + int error = 0; - error = EOPNOTSUPP; switch (type) { case MOD_LOAD: zfs_root_token = root_mount_hold("ZFS"); printf("WARNING: ZFS is considered to be an experimental " "feature in FreeBSD.\n"); - TASK_INIT(&zfs_start_task, 0, zfs_start, NULL); - taskqueue_enqueue(taskqueue_thread, &zfs_start_task); + mutex_init(&zfs_share_lock, NULL, MUTEX_DEFAULT, NULL); - error = 0; + + spa_init(FREAD | FWRITE); + zfs_init(); + zvol_init(); + + tsd_create(&zfs_fsyncer_key, NULL); + tsd_create(&rrw_tsd_key, NULL); + + printf("ZFS storage pool version " SPA_VERSION_STRING "\n"); + root_mount_rel(zfs_root_token); + + zfsdev_init(); break; case MOD_UNLOAD: if (spa_busy() || zfs_busy() || zvol_busy() || @@ -3101,14 +3092,19 @@ error = EBUSY; break; } + + zfsdev_fini(); zvol_fini(); zfs_fini(); spa_fini(); - zfsdev_fini(); + tsd_destroy(&zfs_fsyncer_key); tsd_destroy(&rrw_tsd_key); + mutex_destroy(&zfs_share_lock); - error = 0; + break; + default: + error = EOPNOTSUPP; break; } return (error); ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#6 (text+ko) ==== @@ -917,7 +917,7 @@ for (zp = list_head(&zfsvfs->z_all_znodes); zp != NULL; zp = list_next(&zfsvfs->z_all_znodes, zp)) if (zp->z_dbuf) { - ASSERT(ZTOV(zp)->v_count > 0); + ASSERT(ZTOV(zp)->v_count >= 0); zfs_znode_dmu_fini(zp); } mutex_exit(&zfsvfs->z_znodes_lock); ==== //depot/projects/vimage-commit2/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c#15 (text+ko) ==== @@ -924,6 +924,7 @@ zgd_t *zgd = (zgd_t *)vzgd; rl_t *rl = zgd->zgd_rl; vnode_t *vp = ZTOV(rl->r_zp); + objset_t *os = rl->r_zp->z_zfsvfs->z_os; int vfslocked; vfslocked = VFS_LOCK_GIANT(vp->v_vfsp); @@ -933,7 +934,7 @@ * Release the vnode asynchronously as we currently have the * txg stopped from syncing. */ - VN_RELE_ASYNC(vp, NULL); + VN_RELE_ASYNC(vp, dsl_pool_vnrele_taskq(dmu_objset_pool(os))); zil_add_block(zgd->zgd_zilog, zgd->zgd_bp); kmem_free(zgd, sizeof (zgd_t)); VFS_UNLOCK_GIANT(vfslocked); @@ -968,8 +969,8 @@ * Release the vnode asynchronously as we currently have the * txg stopped from syncing. */ - VN_RELE_ASYNC(ZTOV(zp), NULL); - + VN_RELE_ASYNC(ZTOV(zp), >>> TRUNCATED FOR MAIL (1000 lines) <<<