From owner-p4-projects@FreeBSD.ORG Mon Sep 7 15:56:27 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 37D731065679; Mon, 7 Sep 2009 15:56:27 +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 EF390106566C for ; Mon, 7 Sep 2009 15:56:26 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id DBB658FC0A for ; Mon, 7 Sep 2009 15:56:26 +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 n87FuQVr076232 for ; Mon, 7 Sep 2009 15:56:26 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n87FuQOp076207 for perforce@freebsd.org; Mon, 7 Sep 2009 15:56:26 GMT (envelope-from hselasky@FreeBSD.org) Date: Mon, 7 Sep 2009 15:56:26 GMT Message-Id: <200909071556.n87FuQOp076207@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 168280 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: Mon, 07 Sep 2009 15:56:27 -0000 http://perforce.freebsd.org/chv.cgi?CH=168280 Change 168280 by hselasky@hselasky_laptop001 on 2009/09/07 15:55:49 IFC @ 168278 Affected files ... .. //depot/projects/usb/src/sys/amd64/amd64/elf_machdep.c#8 integrate .. //depot/projects/usb/src/sys/amd64/amd64/local_apic.c#20 integrate .. //depot/projects/usb/src/sys/amd64/amd64/pmap.c#29 integrate .. //depot/projects/usb/src/sys/arm/arm/vm_machdep.c#11 integrate .. //depot/projects/usb/src/sys/arm/conf/CAMBRIA#9 integrate .. //depot/projects/usb/src/sys/cam/ata/ata_all.c#2 integrate .. //depot/projects/usb/src/sys/cam/ata/ata_all.h#2 integrate .. //depot/projects/usb/src/sys/cam/ata/ata_da.c#3 integrate .. //depot/projects/usb/src/sys/cam/ata/ata_xpt.c#3 integrate .. //depot/projects/usb/src/sys/cam/cam_xpt.c#21 integrate .. //depot/projects/usb/src/sys/cam/cam_xpt_internal.h#2 integrate .. //depot/projects/usb/src/sys/cam/scsi/scsi_da.c#15 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#7 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.c#3 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c#3 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c#3 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dsl_dataset.c#3 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/sys/dnode.h#3 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vfsops.c#7 integrate .. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c#4 integrate .. //depot/projects/usb/src/sys/compat/ia32/ia32_sysvec.c#12 integrate .. //depot/projects/usb/src/sys/compat/linprocfs/linprocfs.c#23 integrate .. //depot/projects/usb/src/sys/compat/linux/linux_ioctl.c#18 integrate .. //depot/projects/usb/src/sys/conf/NOTES#45 integrate .. //depot/projects/usb/src/sys/conf/files#78 integrate .. //depot/projects/usb/src/sys/conf/files.amd64#23 integrate .. //depot/projects/usb/src/sys/conf/files.i386#28 integrate .. //depot/projects/usb/src/sys/conf/files.ia64#13 integrate .. //depot/projects/usb/src/sys/conf/files.powerpc#27 integrate .. //depot/projects/usb/src/sys/conf/files.sparc64#14 integrate .. //depot/projects/usb/src/sys/dev/ahci/ahci.c#2 integrate .. //depot/projects/usb/src/sys/dev/ahci/ahci.h#2 integrate .. //depot/projects/usb/src/sys/dev/ata/ata-disk.c#15 integrate .. //depot/projects/usb/src/sys/dev/ata/ata-dma.c#10 integrate .. //depot/projects/usb/src/sys/dev/ath/ath_hal/ah_regdomain.c#5 integrate .. //depot/projects/usb/src/sys/dev/ath/if_ath.c#31 integrate .. //depot/projects/usb/src/sys/dev/coretemp/coretemp.c#5 integrate .. //depot/projects/usb/src/sys/dev/cxgb/cxgb_main.c#22 integrate .. //depot/projects/usb/src/sys/dev/hwpmc/hwpmc_core.c#4 integrate .. //depot/projects/usb/src/sys/dev/hwpmc/pmc_events.h#6 integrate .. //depot/projects/usb/src/sys/dev/ixgbe/ixgbe.c#12 integrate .. //depot/projects/usb/src/sys/dev/mwl/if_mwl.c#5 integrate .. //depot/projects/usb/src/sys/dev/null/null.c#3 integrate .. //depot/projects/usb/src/sys/dev/pty/pty.c#2 integrate .. //depot/projects/usb/src/sys/dev/rp/rp_pci.c#3 integrate .. //depot/projects/usb/src/sys/dev/siis/siis.c#2 integrate .. //depot/projects/usb/src/sys/dev/sound/pci/hda/hdac.c#35 integrate .. //depot/projects/usb/src/sys/dev/sound/pci/hda/hdac_private.h#7 integrate .. //depot/projects/usb/src/sys/dev/sound/pci/hda/hdac_reg.h#2 integrate .. //depot/projects/usb/src/sys/dev/syscons/scterm-teken.c#7 integrate .. //depot/projects/usb/src/sys/dev/syscons/teken/Makefile#2 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/gensequences#2 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/sequences#4 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken.c#9 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken.h#7 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken_demo.c#5 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken_scs.h#2 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken_stress.c#3 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken_subr.h#5 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken_subr_compat.h#4 delete .. //depot/projects/usb/src/sys/dev/syscons/teken/teken_wcwidth.h#2 delete .. //depot/projects/usb/src/sys/dev/txp/if_txp.c#9 integrate .. //depot/projects/usb/src/sys/dev/usb/storage/umass.c#31 integrate .. //depot/projects/usb/src/sys/dev/usb/wlan/if_zyd.c#22 integrate .. //depot/projects/usb/src/sys/dev/xen/blkfront/blkfront.c#7 integrate .. //depot/projects/usb/src/sys/fs/pseudofs/pseudofs_vncache.c#9 integrate .. //depot/projects/usb/src/sys/fs/pseudofs/pseudofs_vnops.c#17 integrate .. //depot/projects/usb/src/sys/geom/geom_disk.c#10 integrate .. //depot/projects/usb/src/sys/geom/geom_io.c#11 integrate .. //depot/projects/usb/src/sys/geom/mirror/g_mirror_ctl.c#4 integrate .. //depot/projects/usb/src/sys/geom/multipath/g_multipath.c#3 integrate .. //depot/projects/usb/src/sys/geom/stripe/g_stripe.c#5 integrate .. //depot/projects/usb/src/sys/i386/i386/elf_machdep.c#9 integrate .. //depot/projects/usb/src/sys/i386/i386/local_apic.c#20 integrate .. //depot/projects/usb/src/sys/i386/i386/machdep.c#22 integrate .. //depot/projects/usb/src/sys/i386/i386/pmap.c#26 integrate .. //depot/projects/usb/src/sys/i386/include/pcpu.h#7 integrate .. //depot/projects/usb/src/sys/i386/include/pmap.h#14 integrate .. //depot/projects/usb/src/sys/i386/isa/vesa.c#5 integrate .. //depot/projects/usb/src/sys/i386/xen/locore.s#3 integrate .. //depot/projects/usb/src/sys/i386/xen/pmap.c#13 integrate .. //depot/projects/usb/src/sys/kern/imgact_elf.c#14 integrate .. //depot/projects/usb/src/sys/kern/kern_conf.c#19 integrate .. //depot/projects/usb/src/sys/kern/kern_exit.c#23 integrate .. //depot/projects/usb/src/sys/kern/kern_fork.c#20 integrate .. //depot/projects/usb/src/sys/kern/kern_jail.c#31 integrate .. //depot/projects/usb/src/sys/kern/kern_kthread.c#8 integrate .. //depot/projects/usb/src/sys/kern/kern_lock.c#18 integrate .. //depot/projects/usb/src/sys/kern/kern_proc.c#22 integrate .. //depot/projects/usb/src/sys/kern/kern_sx.c#18 integrate .. //depot/projects/usb/src/sys/kern/kern_thr.c#13 integrate .. //depot/projects/usb/src/sys/kern/kern_thread.c#16 integrate .. //depot/projects/usb/src/sys/kern/subr_bus.c#29 integrate .. //depot/projects/usb/src/sys/kern/subr_witness.c#21 integrate .. //depot/projects/usb/src/sys/kern/tty_pts.c#18 integrate .. //depot/projects/usb/src/sys/kern/vfs_syscalls.c#29 integrate .. //depot/projects/usb/src/sys/kern/vfs_vnops.c#22 integrate .. //depot/projects/usb/src/sys/modules/Makefile#42 integrate .. //depot/projects/usb/src/sys/net/flowtable.c#11 integrate .. //depot/projects/usb/src/sys/net/if.c#40 integrate .. //depot/projects/usb/src/sys/net/if_arp.h#2 integrate .. //depot/projects/usb/src/sys/net/if_llatbl.c#7 integrate .. //depot/projects/usb/src/sys/net/rtsock.c#32 integrate .. //depot/projects/usb/src/sys/net/vnet.c#5 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_dfs.c#5 integrate .. //depot/projects/usb/src/sys/net80211/ieee80211_sta.c#13 integrate .. //depot/projects/usb/src/sys/netinet/if_ether.c#28 integrate .. //depot/projects/usb/src/sys/netinet/in.c#35 integrate .. //depot/projects/usb/src/sys/netinet/ip_fastfwd.c#14 integrate .. //depot/projects/usb/src/sys/netinet/ip_output.c#28 integrate .. //depot/projects/usb/src/sys/netinet/sctp_bsd_addr.c#11 integrate .. //depot/projects/usb/src/sys/netinet6/icmp6.c#27 integrate .. //depot/projects/usb/src/sys/netinet6/in6.c#33 integrate .. //depot/projects/usb/src/sys/netinet6/in6_src.c#22 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_input.c#29 integrate .. //depot/projects/usb/src/sys/netinet6/ip6_output.c#20 integrate .. //depot/projects/usb/src/sys/netinet6/nd6_rtr.c#23 integrate .. //depot/projects/usb/src/sys/netipsec/ipsec.h#16 integrate .. //depot/projects/usb/src/sys/netipsec/key.c#25 integrate .. //depot/projects/usb/src/sys/opencrypto/cryptodev.c#8 integrate .. //depot/projects/usb/src/sys/sys/bus.h#10 integrate .. //depot/projects/usb/src/sys/sys/conf.h#20 integrate .. //depot/projects/usb/src/sys/sys/imgact_elf.h#7 integrate .. //depot/projects/usb/src/sys/sys/ioctl_compat.h#6 integrate .. //depot/projects/usb/src/sys/sys/proc.h#22 integrate .. //depot/projects/usb/src/sys/sys/tty.h#12 integrate .. //depot/projects/usb/src/sys/sys/ttycom.h#6 integrate .. //depot/projects/usb/src/sys/sys/types.h#8 integrate .. //depot/projects/usb/src/sys/teken/Makefile#1 branch .. //depot/projects/usb/src/sys/teken/gensequences#1 branch .. //depot/projects/usb/src/sys/teken/sequences#1 branch .. //depot/projects/usb/src/sys/teken/teken.c#1 branch .. //depot/projects/usb/src/sys/teken/teken.h#1 branch .. //depot/projects/usb/src/sys/teken/teken_demo.c#1 branch .. //depot/projects/usb/src/sys/teken/teken_scs.h#1 branch .. //depot/projects/usb/src/sys/teken/teken_stress.c#1 branch .. //depot/projects/usb/src/sys/teken/teken_subr.h#1 branch .. //depot/projects/usb/src/sys/teken/teken_subr_compat.h#1 branch .. //depot/projects/usb/src/sys/teken/teken_wcwidth.h#1 branch .. //depot/projects/usb/src/sys/ufs/ffs/ffs_softdep.c#15 integrate .. //depot/projects/usb/src/sys/ufs/ffs/ffs_vfsops.c#20 integrate .. //depot/projects/usb/src/sys/vm/device_pager.c#11 integrate .. //depot/projects/usb/src/sys/vm/sg_pager.c#2 integrate .. //depot/projects/usb/src/sys/vm/vm.h#8 integrate .. //depot/projects/usb/src/sys/vm/vm_extern.h#10 integrate .. //depot/projects/usb/src/sys/vm/vm_glue.c#10 integrate Differences ... ==== //depot/projects/usb/src/sys/amd64/amd64/elf_machdep.c#8 (text+ko) ==== @@ -24,7 +24,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/elf_machdep.c,v 1.31 2009/08/24 16:19:47 bz Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/elf_machdep.c,v 1.32 2009/08/30 14:38:17 bz Exp $"); #include #include @@ -118,7 +118,7 @@ .sysvec = &elf64_freebsd_sysvec, .interp_newpath = NULL, .brand_note = &elf64_kfreebsd_brandnote, - .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE + .flags = BI_CAN_EXEC_DYN | BI_BRAND_NOTE_MANDATORY }; SYSINIT(kelf64, SI_SUB_EXEC, SI_ORDER_ANY, ==== //depot/projects/usb/src/sys/amd64/amd64/local_apic.c#20 (text+ko) ==== @@ -32,7 +32,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.60 2009/08/14 21:05:08 jhb Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.61 2009/09/02 00:39:59 jhb Exp $"); #include "opt_hwpmc_hooks.h" #include "opt_kdtrace.h" @@ -990,18 +990,21 @@ * we don't lose an interrupt delivery race. */ td = curthread; - thread_lock(td); - if (sched_is_bound(td)) - panic("apic_free_vector: Thread already bound.\n"); - sched_bind(td, apic_cpuid(apic_id)); - thread_unlock(td); + if (!rebooting) { + thread_lock(td); + if (sched_is_bound(td)) + panic("apic_free_vector: Thread already bound.\n"); + sched_bind(td, apic_cpuid(apic_id)); + thread_unlock(td); + } mtx_lock_spin(&icu_lock); lapics[apic_id].la_ioint_irqs[vector - APIC_IO_INTS] = -1; mtx_unlock_spin(&icu_lock); - thread_lock(td); - sched_unbind(td); - thread_unlock(td); - + if (!rebooting) { + thread_lock(td); + sched_unbind(td); + thread_unlock(td); + } } /* Map an IDT vector (APIC) to an IRQ (interrupt source). */ ==== //depot/projects/usb/src/sys/amd64/amd64/pmap.c#29 (text+ko) ==== @@ -77,7 +77,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.668 2009/08/17 13:27:55 kib Exp $"); +__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.672 2009/09/02 16:47:10 jkim Exp $"); /* * Manages physical address maps. @@ -178,6 +178,8 @@ vm_offset_t kernel_vm_end = VM_MIN_KERNEL_ADDRESS; pt_entry_t pg_nx; +static int pat_works = 0; /* Is page attribute table sane? */ + SYSCTL_NODE(_vm, OID_AUTO, pmap, CTLFLAG_RD, 0, "VM/pmap parameters"); static int pg_ps_enabled = 1; @@ -590,20 +592,56 @@ pmap_init_pat(void) { uint64_t pat_msr; + char *sysenv; + static int pat_tested = 0; /* Bail if this CPU doesn't implement PAT. */ if (!(cpu_feature & CPUID_PAT)) panic("no PAT??"); /* - * Leave the indices 0-3 at the default of WB, WT, UC, and UC-. - * Program 4 and 5 as WP and WC. - * Leave 6 and 7 as UC and UC-. + * Some Apple Macs based on nVidia chipsets cannot enter ACPI mode + * via SMI# when we use upper 4 PAT entries for unknown reason. */ - pat_msr = rdmsr(MSR_PAT); - pat_msr &= ~(PAT_MASK(4) | PAT_MASK(5)); - pat_msr |= PAT_VALUE(4, PAT_WRITE_PROTECTED) | - PAT_VALUE(5, PAT_WRITE_COMBINING); + if (!pat_tested) { + pat_works = 1; + sysenv = getenv("smbios.system.product"); + if (sysenv != NULL) { + if (strncmp(sysenv, "MacBook5,1", 10) == 0 || + strncmp(sysenv, "MacBookPro5,5", 13) == 0 || + strncmp(sysenv, "Macmini3,1", 10) == 0) + pat_works = 0; + freeenv(sysenv); + } + pat_tested = 1; + } + + /* Initialize default PAT entries. */ + pat_msr = PAT_VALUE(0, PAT_WRITE_BACK) | + PAT_VALUE(1, PAT_WRITE_THROUGH) | + PAT_VALUE(2, PAT_UNCACHED) | + PAT_VALUE(3, PAT_UNCACHEABLE) | + PAT_VALUE(4, PAT_WRITE_BACK) | + PAT_VALUE(5, PAT_WRITE_THROUGH) | + PAT_VALUE(6, PAT_UNCACHED) | + PAT_VALUE(7, PAT_UNCACHEABLE); + + if (pat_works) { + /* + * Leave the indices 0-3 at the default of WB, WT, UC-, and UC. + * Program 4 and 5 as WP and WC. + * Leave 6 and 7 as UC- and UC. + */ + pat_msr &= ~(PAT_MASK(4) | PAT_MASK(5)); + pat_msr |= PAT_VALUE(4, PAT_WRITE_PROTECTED) | + PAT_VALUE(5, PAT_WRITE_COMBINING); + } else { + /* + * Just replace PAT Index 2 with WC instead of UC-. + */ + pat_msr &= ~PAT_MASK(2); + pat_msr |= PAT_VALUE(2, PAT_WRITE_COMBINING); + } wrmsr(MSR_PAT, pat_msr); } @@ -754,27 +792,48 @@ pat_flag = is_pde ? PG_PDE_PAT : PG_PTE_PAT; /* Map the caching mode to a PAT index. */ - switch (mode) { - case PAT_UNCACHEABLE: - pat_index = 3; - break; - case PAT_WRITE_THROUGH: - pat_index = 1; - break; - case PAT_WRITE_BACK: - pat_index = 0; - break; - case PAT_UNCACHED: - pat_index = 2; - break; - case PAT_WRITE_COMBINING: - pat_index = 5; - break; - case PAT_WRITE_PROTECTED: - pat_index = 4; - break; - default: - panic("Unknown caching mode %d\n", mode); + if (pat_works) { + switch (mode) { + case PAT_UNCACHEABLE: + pat_index = 3; + break; + case PAT_WRITE_THROUGH: + pat_index = 1; + break; + case PAT_WRITE_BACK: + pat_index = 0; + break; + case PAT_UNCACHED: + pat_index = 2; + break; + case PAT_WRITE_COMBINING: + pat_index = 5; + break; + case PAT_WRITE_PROTECTED: + pat_index = 4; + break; + default: + panic("Unknown caching mode %d\n", mode); + } + } else { + switch (mode) { + case PAT_UNCACHED: + case PAT_UNCACHEABLE: + case PAT_WRITE_PROTECTED: + pat_index = 3; + break; + case PAT_WRITE_THROUGH: + pat_index = 1; + break; + case PAT_WRITE_BACK: + pat_index = 0; + break; + case PAT_WRITE_COMBINING: + pat_index = 2; + break; + default: + panic("Unknown caching mode %d\n", mode); + } } /* Map the 3-bit index value into the PAT, PCD, and PWT bits. */ @@ -943,8 +1002,8 @@ * coherence domain. */ mfence(); - for (; eva < sva; eva += cpu_clflush_line_size) - clflush(eva); + for (; sva < eva; sva += cpu_clflush_line_size) + clflush(sva); mfence(); } else { @@ -4476,7 +4535,8 @@ if (base < DMAP_MIN_ADDRESS) return (EINVAL); - cache_bits_pde = cache_bits_pte = -1; + cache_bits_pde = pmap_cache_bits(mode, 1); + cache_bits_pte = pmap_cache_bits(mode, 0); changed = FALSE; /* @@ -4493,8 +4553,6 @@ * memory type, then we need not demote this page. Just * increment tmpva to the next 1GB page frame. */ - if (cache_bits_pde < 0) - cache_bits_pde = pmap_cache_bits(mode, 1); if ((*pdpe & PG_PDE_CACHE) == cache_bits_pde) { tmpva = trunc_1gpage(tmpva) + NBPDP; continue; @@ -4522,8 +4580,6 @@ * memory type, then we need not demote this page. Just * increment tmpva to the next 2MB page frame. */ - if (cache_bits_pde < 0) - cache_bits_pde = pmap_cache_bits(mode, 1); if ((*pde & PG_PDE_CACHE) == cache_bits_pde) { tmpva = trunc_2mpage(tmpva) + NBPDR; continue; @@ -4557,12 +4613,9 @@ for (tmpva = base; tmpva < base + size; ) { pdpe = pmap_pdpe(kernel_pmap, tmpva); if (*pdpe & PG_PS) { - if (cache_bits_pde < 0) - cache_bits_pde = pmap_cache_bits(mode, 1); if ((*pdpe & PG_PDE_CACHE) != cache_bits_pde) { pmap_pde_attr(pdpe, cache_bits_pde); - if (!changed) - changed = TRUE; + changed = TRUE; } if (tmpva >= VM_MIN_KERNEL_ADDRESS) { if (pa_start == pa_end) { @@ -4588,12 +4641,9 @@ } pde = pmap_pdpe_to_pde(pdpe, tmpva); if (*pde & PG_PS) { - if (cache_bits_pde < 0) - cache_bits_pde = pmap_cache_bits(mode, 1); if ((*pde & PG_PDE_CACHE) != cache_bits_pde) { pmap_pde_attr(pde, cache_bits_pde); - if (!changed) - changed = TRUE; + changed = TRUE; } if (tmpva >= VM_MIN_KERNEL_ADDRESS) { if (pa_start == pa_end) { @@ -4616,13 +4666,10 @@ } tmpva = trunc_2mpage(tmpva) + NBPDR; } else { - if (cache_bits_pte < 0) - cache_bits_pte = pmap_cache_bits(mode, 0); pte = pmap_pde_to_pte(pde, tmpva); if ((*pte & PG_PTE_CACHE) != cache_bits_pte) { pmap_pte_attr(pte, cache_bits_pte); - if (!changed) - changed = TRUE; + changed = TRUE; } if (tmpva >= VM_MIN_KERNEL_ADDRESS) { if (pa_start == pa_end) { ==== //depot/projects/usb/src/sys/arm/arm/vm_machdep.c#11 (text+ko) ==== @@ -41,7 +41,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.40 2009/07/20 07:53:07 raj Exp $"); +__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.43 2009/09/01 11:41:51 kib Exp $"); #include #include @@ -119,9 +119,6 @@ #ifdef __XSCALE__ #ifndef CPU_XSCALE_CORE3 pmap_use_minicache(td2->td_kstack, td2->td_kstack_pages * PAGE_SIZE); - if (td2->td_altkstack) - pmap_use_minicache(td2->td_altkstack, td2->td_altkstack_pages * - PAGE_SIZE); #endif #endif td2->td_pcb = pcb2; ==== //depot/projects/usb/src/sys/arm/conf/CAMBRIA#9 (text+ko) ==== @@ -16,7 +16,7 @@ # If you are in doubt as to the purpose or necessity of a line, check first # in NOTES. # -# $FreeBSD: src/sys/arm/conf/CAMBRIA,v 1.12 2009/07/17 18:35:45 rpaulo Exp $ +# $FreeBSD: src/sys/arm/conf/CAMBRIA,v 1.14 2009/08/27 17:55:44 sam Exp $ ident CAMBRIA ==== //depot/projects/usb/src/sys/cam/ata/ata_all.c#2 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/ata/ata_all.c,v 1.1 2009/07/10 08:18:08 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/ata/ata_all.c,v 1.2 2009/08/30 16:31:25 mav Exp $"); #include @@ -91,7 +91,7 @@ } void -ata_36bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features, +ata_28bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features, uint32_t lba, uint8_t sector_count) { bzero(&ataio->cmd, sizeof(ataio->cmd)); ==== //depot/projects/usb/src/sys/cam/ata/ata_all.h#2 (text+ko) ==== @@ -23,7 +23,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * $FreeBSD: src/sys/cam/ata/ata_all.h,v 1.1 2009/07/10 08:18:08 scottl Exp $ + * $FreeBSD: src/sys/cam/ata/ata_all.h,v 1.2 2009/08/30 16:31:25 mav Exp $ */ #ifndef CAM_ATA_ALL_H @@ -83,7 +83,7 @@ int ata_version(int ver); void ata_print_ident(struct ata_params *ident_data); -void ata_36bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features, +void ata_28bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint8_t features, uint32_t lba, uint8_t sector_count); void ata_48bit_cmd(struct ccb_ataio *ataio, uint8_t cmd, uint16_t features, uint64_t lba, uint16_t sector_count); ==== //depot/projects/usb/src/sys/cam/ata/ata_da.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/ata/ata_da.c,v 1.2 2009/07/17 21:48:08 mav Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/ata/ata_da.c,v 1.4 2009/08/30 16:31:25 mav Exp $"); #include @@ -287,7 +287,7 @@ if (softc->flags & ADA_FLAG_CAN_48BIT) ata_48bit_cmd(&ccb->ataio, ATA_FLUSHCACHE48, 0, 0, 0); else - ata_48bit_cmd(&ccb->ataio, ATA_FLUSHCACHE, 0, 0, 0); + ata_28bit_cmd(&ccb->ataio, ATA_FLUSHCACHE, 0, 0, 0); cam_periph_runccb(ccb, /*error_routine*/NULL, /*cam_flags*/0, /*sense_flags*/SF_RETRY_UA, softc->disk->d_devstat); @@ -411,7 +411,7 @@ ata_48bit_cmd(&ccb.ataio, ATA_WRITE_DMA48, 0, lba, count); } else { - ata_36bit_cmd(&ccb.ataio, ATA_WRITE_DMA, + ata_28bit_cmd(&ccb.ataio, ATA_WRITE_DMA, 0, lba, count); } xpt_polled_action(&ccb); @@ -441,7 +441,7 @@ if (softc->flags & ADA_FLAG_CAN_48BIT) ata_48bit_cmd(&ccb.ataio, ATA_FLUSHCACHE48, 0, 0, 0); else - ata_48bit_cmd(&ccb.ataio, ATA_FLUSHCACHE, 0, 0, 0); + ata_28bit_cmd(&ccb.ataio, ATA_FLUSHCACHE, 0, 0, 0); xpt_polled_action(&ccb); if ((ccb.ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) @@ -856,10 +856,10 @@ } } else { if (bp->bio_cmd == BIO_READ) { - ata_36bit_cmd(ataio, ATA_READ_DMA, + ata_28bit_cmd(ataio, ATA_READ_DMA, 0, lba, count); } else { - ata_36bit_cmd(ataio, ATA_WRITE_DMA, + ata_28bit_cmd(ataio, ATA_WRITE_DMA, 0, lba, count); } } @@ -878,7 +878,7 @@ if (softc->flags & ADA_FLAG_CAN_48BIT) ata_48bit_cmd(ataio, ATA_FLUSHCACHE48, 0, 0, 0); else - ata_48bit_cmd(ataio, ATA_FLUSHCACHE, 0, 0, 0); + ata_28bit_cmd(ataio, ATA_FLUSHCACHE, 0, 0, 0); break; } start_ccb->ccb_h.ccb_state = ADA_CCB_BUFFER_IO; @@ -1126,7 +1126,7 @@ if (softc->flags & ADA_FLAG_CAN_48BIT) ata_48bit_cmd(&ccb.ataio, ATA_FLUSHCACHE48, 0, 0, 0); else - ata_48bit_cmd(&ccb.ataio, ATA_FLUSHCACHE, 0, 0, 0); + ata_28bit_cmd(&ccb.ataio, ATA_FLUSHCACHE, 0, 0, 0); xpt_polled_action(&ccb); if ((ccb.ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) ==== //depot/projects/usb/src/sys/cam/ata/ata_xpt.c#3 (text+ko) ==== @@ -25,7 +25,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.4 2009/08/18 09:27:17 mav Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/ata/ata_xpt.c,v 1.5 2009/08/30 16:31:25 mav Exp $"); #include #include @@ -357,9 +357,9 @@ /*dxfer_len*/sizeof(struct ata_params), 30 * 1000); if (periph->path->device->protocol == PROTO_ATA) - ata_36bit_cmd(ataio, ATA_ATA_IDENTIFY, 0, 0, 0); + ata_28bit_cmd(ataio, ATA_ATA_IDENTIFY, 0, 0, 0); else - ata_36bit_cmd(ataio, ATA_ATAPI_IDENTIFY, 0, 0, 0); + ata_28bit_cmd(ataio, ATA_ATAPI_IDENTIFY, 0, 0, 0); break; } case PROBE_SETMODE: @@ -375,7 +375,7 @@ /*data_ptr*/NULL, /*dxfer_len*/0, 30 * 1000); - ata_36bit_cmd(ataio, ATA_SETFEATURES, ATA_SF_SETXFER, 0, + ata_28bit_cmd(ataio, ATA_SETFEATURES, ATA_SF_SETXFER, 0, ata_max_mode(ident_buf, ATA_UDMA6, ATA_UDMA6)); break; } ==== //depot/projects/usb/src/sys/cam/cam_xpt.c#21 (text+ko) ==== @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.218 2009/08/18 08:46:54 mav Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/cam_xpt.c,v 1.223 2009/09/06 19:06:50 mav Exp $"); #include #include @@ -1033,11 +1033,12 @@ * To ensure that this is printed in one piece, * mask out CAM interrupts. */ - printf("%s%d at %s%d bus %d target %d lun %d\n", + printf("%s%d at %s%d bus %d scbus%d target %d lun %d\n", periph->periph_name, periph->unit_number, path->bus->sim->sim_name, path->bus->sim->unit_number, path->bus->sim->bus_id, + path->bus->path_id, path->target->target_id, path->device->lun_id); printf("%s%d: ", periph->periph_name, periph->unit_number); @@ -2471,7 +2472,7 @@ path = start_ccb->ccb_h.path; cam_ccbq_insert_ccb(&path->device->ccbq, start_ccb); - if (path->device->qfrozen_cnt == 0) + if (path->device->ccbq.queue.qfrozen_cnt == 0) runq = xpt_schedule_dev_sendq(path->bus, path->device); else runq = 0; @@ -2930,7 +2931,7 @@ xpt_release_devq(crs->ccb_h.path, /*count*/1, /*run_queue*/TRUE); } - start_ccb->crs.qfrozen_cnt = dev->qfrozen_cnt; + start_ccb->crs.qfrozen_cnt = dev->ccbq.queue.qfrozen_cnt; start_ccb->ccb_h.status = CAM_REQ_CMP; break; } @@ -3226,7 +3227,7 @@ * If the device has been "frozen", don't attempt * to run it. */ - if (device->qfrozen_cnt > 0) { + if (device->ccbq.queue.qfrozen_cnt > 0) { continue; } @@ -3249,7 +3250,7 @@ * the device queue until we have a slot * available. */ - device->qfrozen_cnt++; + device->ccbq.queue.qfrozen_cnt++; STAILQ_INSERT_TAIL(&xsoftc.highpowerq, &work_ccb->ccb_h, xpt_links.stqe); @@ -3281,7 +3282,7 @@ * The client wants to freeze the queue * after this CCB is sent. */ - device->qfrozen_cnt++; + device->ccbq.queue.qfrozen_cnt++; } /* In Target mode, the peripheral driver knows best... */ @@ -4030,7 +4031,7 @@ mtx_assert(path->bus->sim->mtx, MA_OWNED); - path->device->qfrozen_cnt += count; + path->device->ccbq.queue.qfrozen_cnt += count; /* * Mark the last CCB in the queue as needing @@ -4048,7 +4049,7 @@ ccbh = TAILQ_LAST(&path->device->ccbq.active_ccbs, ccb_hdr_tailq); if (ccbh && ccbh->status == CAM_REQ_INPROG) ccbh->status = CAM_REQUEUE_REQ; - return (path->device->qfrozen_cnt); + return (path->device->ccbq.queue.qfrozen_cnt); } u_int32_t @@ -4092,11 +4093,12 @@ int rundevq; rundevq = 0; - if (dev->qfrozen_cnt > 0) { + if (dev->ccbq.queue.qfrozen_cnt > 0) { - count = (count > dev->qfrozen_cnt) ? dev->qfrozen_cnt : count; - dev->qfrozen_cnt -= count; - if (dev->qfrozen_cnt == 0) { + count = (count > dev->ccbq.queue.qfrozen_cnt) ? + dev->ccbq.queue.qfrozen_cnt : count; + dev->ccbq.queue.qfrozen_cnt -= count; + if (dev->ccbq.queue.qfrozen_cnt == 0) { /* * No longer need to wait for a successful @@ -4198,12 +4200,12 @@ mtx_lock(&cam_simq_lock); TAILQ_INSERT_TAIL(&cam_simq, sim, links); + mtx_unlock(&cam_simq_lock); sim->flags |= CAM_SIM_ON_DONEQ; - mtx_unlock(&cam_simq_lock); + if ((done_ccb->ccb_h.path->periph->flags & + CAM_PERIPH_POLLED) == 0) + swi_sched(cambio_ih, 0); } - if ((done_ccb->ccb_h.path->periph->flags & - CAM_PERIPH_POLLED) == 0) - swi_sched(cambio_ih, 0); break; default: panic("unknown periph type %d", @@ -4401,15 +4403,11 @@ SLIST_INIT(&device->periphs); device->generation = 0; device->owner = NULL; - device->qfrozen_cnt = 0; device->flags = CAM_DEV_UNCONFIGURED; device->tag_delay_count = 0; device->tag_saved_openings = 0; device->refcount = 1; - if (bus->sim->flags & CAM_SIM_MPSAFE) - callout_init_mtx(&device->callout, bus->sim->mtx, 0); - else - callout_init_mtx(&device->callout, &Giant, 0); + callout_init_mtx(&device->callout, bus->sim->mtx, 0); /* * Hold a reference to our parent target so it @@ -4604,7 +4602,7 @@ CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD)) !=CAM_REQ_CMP){ printf("xptconfigfunc: xpt_create_path failed with " - "status %#x for bus %d\n", status, bus->path_id); + "status %#x for scbus%d\n", status, bus->path_id); printf("xptconfigfunc: halting bus configuration\n"); xpt_free_ccb(work_ccb); busses_to_config--; @@ -4615,7 +4613,7 @@ work_ccb->ccb_h.func_code = XPT_PATH_INQ; xpt_action(work_ccb); if (work_ccb->ccb_h.status != CAM_REQ_CMP) { - printf("xptconfigfunc: CPI failed on bus %d " + printf("xptconfigfunc: CPI failed on scbus%d " "with status %d\n", bus->path_id, work_ccb->ccb_h.status); xpt_finishconfig(xpt_periph, work_ccb); @@ -4889,16 +4887,20 @@ mtx_lock(&cam_simq_lock); TAILQ_INIT(&queue); - TAILQ_CONCAT(&queue, &cam_simq, links); - mtx_unlock(&cam_simq_lock); + while (!TAILQ_EMPTY(&cam_simq)) { + TAILQ_CONCAT(&queue, &cam_simq, links); + mtx_unlock(&cam_simq_lock); - while ((sim = TAILQ_FIRST(&queue)) != NULL) { - TAILQ_REMOVE(&queue, sim, links); - CAM_SIM_LOCK(sim); - sim->flags &= ~CAM_SIM_ON_DONEQ; - camisr_runqueue(&sim->sim_doneq); - CAM_SIM_UNLOCK(sim); + while ((sim = TAILQ_FIRST(&queue)) != NULL) { + TAILQ_REMOVE(&queue, sim, links); + CAM_SIM_LOCK(sim); + sim->flags &= ~CAM_SIM_ON_DONEQ; + camisr_runqueue(&sim->sim_doneq); + CAM_SIM_UNLOCK(sim); + } + mtx_lock(&cam_simq_lock); } + mtx_unlock(&cam_simq_lock); } static void @@ -4969,7 +4971,7 @@ xpt_start_tags(ccb_h->path); if ((dev->ccbq.queue.entries > 0) - && (dev->qfrozen_cnt == 0) + && (dev->ccbq.queue.qfrozen_cnt == 0) && (device_is_send_queued(dev) == 0)) { runq = xpt_schedule_dev_sendq(ccb_h->path->bus, dev); ==== //depot/projects/usb/src/sys/cam/cam_xpt_internal.h#2 (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/cam/cam_xpt_internal.h,v 1.1 2009/07/10 08:18:08 scottl Exp $ + * $FreeBSD: src/sys/cam/cam_xpt_internal.h,v 1.2 2009/09/06 19:06:50 mav Exp $ */ #ifndef _CAM_CAM_XPT_INTERNAL_H @@ -106,7 +106,6 @@ u_int8_t queue_flags; /* Queue flags from the control page */ u_int8_t serial_num_len; u_int8_t *serial_num; - u_int32_t qfrozen_cnt; u_int32_t flags; #define CAM_DEV_UNCONFIGURED 0x01 #define CAM_DEV_REL_TIMEOUT_PENDING 0x02 ==== //depot/projects/usb/src/sys/cam/scsi/scsi_da.c#15 (text+ko) ==== @@ -27,7 +27,7 @@ */ #include -__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.236 2009/07/10 08:18:08 scottl Exp $"); +__FBSDID("$FreeBSD: src/sys/cam/scsi/scsi_da.c,v 1.238 2009/09/04 09:40:59 pjd Exp $"); #include @@ -554,6 +554,14 @@ { {T_DIRECT, SIP_MEDIA_REMOVABLE, "Netac", "OnlyDisk*", "2000"}, /*quirks*/ DA_Q_NO_SYNC_CACHE + }, + { + /* + * Sony Cyber-Shot DSC cameras + * PR: usb/137035 + */ + {T_DIRECT, SIP_MEDIA_REMOVABLE, "Sony", "Sony DSC", "*"}, + /*quirks*/ DA_Q_NO_SYNC_CACHE | DA_Q_NO_PREVENT } }; @@ -1258,6 +1266,8 @@ softc->disk->d_flags = 0; if ((softc->quirks & DA_Q_NO_SYNC_CACHE) == 0) softc->disk->d_flags |= DISKFLAG_CANFLUSHCACHE; + strlcpy(softc->disk->d_ident, cgd->serial_num, + MIN(sizeof(softc->disk->d_ident), cgd->serial_num_len + 1)); disk_create(softc->disk, DISK_VERSION); mtx_lock(periph->sim->mtx); ==== //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c#7 (text+ko) ==== @@ -3557,15 +3557,19 @@ #ifdef __i386__ if (prefetch_tunable_set == 0) { - printf("ZFS NOTICE: prefetch is disabled by default on i386" - " - add enable to tunable to change.\n" ); + printf("ZFS NOTICE: Prefetch is disabled by default on i386 " + "-- to enable,\n"); + printf(" add \"vfs.zfs.prefetch_disable=0\" " + "to /boot/loader.conf.\n"); zfs_prefetch_disable=1; } #else if ((((uint64_t)physmem * PAGESIZE) < (1ULL << 32)) && prefetch_tunable_set == 0) { - printf("ZFS NOTICE: system has less than 4GB and prefetch enable is not set" - "... disabling.\n"); + printf("ZFS NOTICE: Prefetch is disabled by default if less " + "than 4 GB of RAM is present;\n" + " to enable, add \"vfs.zfs.prefetch_disable=0\" " + "to /boot/loader.conf.\n"); zfs_prefetch_disable=1; } #endif ==== //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_send.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. */ @@ -864,10 +864,11 @@ /* currently allocated, want to be allocated */ dmu_tx_hold_bonus(tx, drro->drr_object); /* - * We may change blocksize, so need to - * hold_write + * We may change blocksize and delete old content, + * so need to hold_write and hold_free. */ dmu_tx_hold_write(tx, drro->drr_object, 0, 1); + dmu_tx_hold_free(tx, drro->drr_object, 0, DMU_OBJECT_END); err = dmu_tx_assign(tx, TXG_WAIT); if (err) { dmu_tx_abort(tx); ==== //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode.c#3 (text+ko) ==== @@ -415,7 +415,7 @@ dnode_reallocate(dnode_t *dn, dmu_object_type_t ot, int blocksize, dmu_object_type_t bonustype, int bonuslen, dmu_tx_t *tx) { - int i, old_nblkptr; + int i, nblkptr; dmu_buf_impl_t *db = NULL; ASSERT3U(blocksize, >=, SPA_MINBLOCKSIZE); @@ -445,6 +445,8 @@ dnode_free_range(dn, 0, -1ULL, tx); } + nblkptr = 1 + ((DN_MAX_BONUSLEN - bonuslen) >> SPA_BLKPTRSHIFT); + /* change blocksize */ rw_enter(&dn->dn_struct_rwlock, RW_WRITER); if (blocksize != dn->dn_datablksz && @@ -457,6 +459,8 @@ dnode_setdirty(dn, tx); dn->dn_next_bonuslen[tx->tx_txg&TXG_MASK] = bonuslen; dn->dn_next_blksz[tx->tx_txg&TXG_MASK] = blocksize; + if (dn->dn_nblkptr != nblkptr) + dn->dn_next_nblkptr[tx->tx_txg&TXG_MASK] = nblkptr; rw_exit(&dn->dn_struct_rwlock); if (db) dbuf_rele(db, FTAG); @@ -466,19 +470,15 @@ /* change bonus size and type */ mutex_enter(&dn->dn_mtx); - old_nblkptr = dn->dn_nblkptr; dn->dn_bonustype = bonustype; dn->dn_bonuslen = bonuslen; - dn->dn_nblkptr = 1 + ((DN_MAX_BONUSLEN - bonuslen) >> SPA_BLKPTRSHIFT); + dn->dn_nblkptr = nblkptr; dn->dn_checksum = ZIO_CHECKSUM_INHERIT; dn->dn_compress = ZIO_COMPRESS_INHERIT; ASSERT3U(dn->dn_nblkptr, <=, DN_MAX_NBLKPTR); - /* XXX - for now, we can't make nblkptr smaller */ - ASSERT3U(dn->dn_nblkptr, >=, old_nblkptr); - - /* fix up the bonus db_size if dn_nblkptr has changed */ - if (dn->dn_bonus && dn->dn_bonuslen != old_nblkptr) { + /* fix up the bonus db_size */ + if (dn->dn_bonus) { dn->dn_bonus->db.db_size = DN_MAX_BONUSLEN - (dn->dn_nblkptr-1) * sizeof (blkptr_t); ASSERT(dn->dn_bonuslen <= dn->dn_bonus->db.db_size); ==== //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dnode_sync.c#3 (text+ko) ==== @@ -19,12 +19,10 @@ * CDDL HEADER END */ /* >>> TRUNCATED FOR MAIL (1000 lines) <<<