PERFORCE change 167641 for review
Marko Zec
zec at FreeBSD.org
Sun Aug 23 08:50:14 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=167641
Change 167641 by zec at 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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <sys/cdefs.h>
-__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 <sys/param.h>
#include <sys/gpt.h>
@@ -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 <sys/cdefs.h>
-__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 <sys/param.h>
#include <sys/bus.h>
@@ -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 <sys/cdefs.h>
-__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 <sys/param.h>
#include <sys/bus.h>
@@ -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 <sys/types.h>
#include <sys/param.h>
#include <sys/proc.h>
+#include <sys/taskq.h>
#include <sys/vnode.h>
/* 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 <sys/conf.h>
#include <sys/mutex.h>
#include <sys/rwlock.h>
+#include <sys/kcondvar.h>
#include <sys/random.h>
#include <sys/byteorder.h>
#include <sys/systm.h>
==== //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) <<<
More information about the p4-projects
mailing list