PERFORCE change 98405 for review
Warner Losh
imp at FreeBSD.org
Sat Jun 3 17:18:07 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=98405
Change 98405 by imp at imp_harmony on 2006/06/03 17:15:43
IFC @98404
Affected files ...
.. //depot/projects/arm/src/sys/amd64/amd64/busdma_machdep.c#9 integrate
.. //depot/projects/arm/src/sys/arm/arm/busdma_machdep.c#8 integrate
.. //depot/projects/arm/src/sys/arm/arm/pmap.c#17 integrate
.. //depot/projects/arm/src/sys/arm/include/cpuconf.h#3 integrate
.. //depot/projects/arm/src/sys/arm/include/cpufunc.h#4 integrate
.. //depot/projects/arm/src/sys/arm/include/pmap.h#9 integrate
.. //depot/projects/arm/src/sys/boot/i386/libi386/biosdisk.c#3 integrate
.. //depot/projects/arm/src/sys/compat/linprocfs/linprocfs.c#6 integrate
.. //depot/projects/arm/src/sys/dev/ahb/ahb.c#3 integrate
.. //depot/projects/arm/src/sys/dev/ath/if_ath.c#12 integrate
.. //depot/projects/arm/src/sys/dev/awi/awi.c#4 integrate
.. //depot/projects/arm/src/sys/dev/gem/if_gem.c#4 integrate
.. //depot/projects/arm/src/sys/dev/ipw/if_ipw.c#5 integrate
.. //depot/projects/arm/src/sys/dev/isp/isp_freebsd.h#9 integrate
.. //depot/projects/arm/src/sys/dev/iwi/if_iwi.c#7 integrate
.. //depot/projects/arm/src/sys/dev/lmc/if_lmc.h#3 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt.c#14 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt.h#13 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt_cam.c#16 integrate
.. //depot/projects/arm/src/sys/dev/mpt/mpt_pci.c#11 integrate
.. //depot/projects/arm/src/sys/dev/pccbb/pccbb.c#11 integrate
.. //depot/projects/arm/src/sys/dev/ral/rt2560.c#4 integrate
.. //depot/projects/arm/src/sys/dev/ral/rt2661.c#4 integrate
.. //depot/projects/arm/src/sys/dev/usb/if_ural.c#10 integrate
.. //depot/projects/arm/src/sys/dev/usb/ugen.c#3 integrate
.. //depot/projects/arm/src/sys/dev/wi/if_wi.c#5 integrate
.. //depot/projects/arm/src/sys/fs/msdosfs/msdosfs_vfsops.c#8 integrate
.. //depot/projects/arm/src/sys/fs/smbfs/smbfs_vnops.c#5 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_frw.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_fs_subr.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_iget.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_ioctl.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/FreeBSD/xfs_super.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_attr.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_bit.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_dfrag.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_dir2_trace.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_inode.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_iomap.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_trans.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_vfsops.c#2 integrate
.. //depot/projects/arm/src/sys/gnu/fs/xfs/xfs_vnodeops.c#2 integrate
.. //depot/projects/arm/src/sys/i386/i386/busdma_machdep.c#8 integrate
.. //depot/projects/arm/src/sys/i386/i386/initcpu.c#3 integrate
.. //depot/projects/arm/src/sys/i386/i386/machdep.c#13 integrate
.. //depot/projects/arm/src/sys/i386/i386/ptrace_machdep.c#3 integrate
.. //depot/projects/arm/src/sys/i386/include/md_var.h#4 integrate
.. //depot/projects/arm/src/sys/i386/include/npx.h#4 integrate
.. //depot/projects/arm/src/sys/i386/isa/npx.c#9 integrate
.. //depot/projects/arm/src/sys/ia64/conf/NOTES#4 integrate
.. //depot/projects/arm/src/sys/ia64/ia64/busdma_machdep.c#3 integrate
.. //depot/projects/arm/src/sys/kern/kern_event.c#7 integrate
.. //depot/projects/arm/src/sys/kern/kern_switch.c#5 integrate
.. //depot/projects/arm/src/sys/kern/vfs_aio.c#9 integrate
.. //depot/projects/arm/src/sys/kern/vfs_mount.c#16 integrate
.. //depot/projects/arm/src/sys/kern/vnode_if.src#6 integrate
.. //depot/projects/arm/src/sys/net/bpf.c#8 integrate
.. //depot/projects/arm/src/sys/net/bpf.h#3 integrate
.. //depot/projects/arm/src/sys/net/bpfdesc.h#4 integrate
.. //depot/projects/arm/src/sys/net/if.c#9 integrate
.. //depot/projects/arm/src/sys/net/if_disc.c#4 integrate
.. //depot/projects/arm/src/sys/net/if_faith.c#4 integrate
.. //depot/projects/arm/src/sys/net/if_fwsubr.c#4 integrate
.. //depot/projects/arm/src/sys/net/if_gif.c#5 integrate
.. //depot/projects/arm/src/sys/net/if_gre.c#6 integrate
.. //depot/projects/arm/src/sys/net/if_loop.c#5 integrate
.. //depot/projects/arm/src/sys/net/if_media.h#6 integrate
.. //depot/projects/arm/src/sys/net/if_sl.c#3 integrate
.. //depot/projects/arm/src/sys/net/if_stf.c#4 integrate
.. //depot/projects/arm/src/sys/net/if_tun.c#3 integrate
.. //depot/projects/arm/src/sys/net/raw_cb.c#3 integrate
.. //depot/projects/arm/src/sys/net/raw_usrreq.c#4 integrate
.. //depot/projects/arm/src/sys/net80211/ieee80211_input.c#8 integrate
.. //depot/projects/arm/src/sys/net80211/ieee80211_node.c#10 integrate
.. //depot/projects/arm/src/sys/netgraph/atm/uni/ng_uni_cust.h#2 integrate
.. //depot/projects/arm/src/sys/netgraph/ng_base.c#5 integrate
.. //depot/projects/arm/src/sys/netgraph/ng_iface.c#4 integrate
.. //depot/projects/arm/src/sys/netinet/in_pcb.c#9 integrate
.. //depot/projects/arm/src/sys/netinet/ip_carp.c#6 integrate
.. //depot/projects/arm/src/sys/netinet/ip_gre.c#5 integrate
.. //depot/projects/arm/src/sys/security/audit/audit_bsm_klib.c#3 integrate
.. //depot/projects/arm/src/sys/sys/elf_common.h#3 integrate
.. //depot/projects/arm/src/sys/ufs/ufs/ufs_vnops.c#6 integrate
.. //depot/projects/arm/src/sys/vm/vm_page.c#11 integrate
Differences ...
==== //depot/projects/arm/src/sys/amd64/amd64/busdma_machdep.c#9 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.75 2006/05/28 18:31:32 silby Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.77 2006/06/01 04:49:29 silby Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -498,7 +498,7 @@
* alignment guarantees of malloc need to be nailed down, and the
* code below should be rewritten to take that into account.
*
- * In the meantime, we'll panic if malloc gets it wrong.
+ * In the meantime, we'll warn the user if malloc gets it wrong.
*/
if ((dmat->maxsize <= PAGE_SIZE) &&
(dmat->alignment < dmat->maxsize) &&
@@ -520,7 +520,7 @@
__func__, dmat, dmat->flags, ENOMEM);
return (ENOMEM);
} else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) {
- panic("bus_dmamem_alloc failed to align memory properly.");
+ printf("bus_dmamem_alloc failed to align memory properly.");
}
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->flags, ENOMEM);
==== //depot/projects/arm/src/sys/arm/arm/busdma_machdep.c#8 (text+ko) ====
@@ -29,7 +29,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.25 2006/03/01 23:04:25 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/busdma_machdep.c,v 1.26 2006/05/31 15:50:33 cognet Exp $");
/*
* MacPPC bus dma support routines
@@ -806,13 +806,16 @@
if (op & BUS_DMASYNC_PREWRITE)
cpu_dcache_wb_range((vm_offset_t)buf, len);
- if (op & BUS_DMASYNC_POSTREAD) {
- if ((((vm_offset_t)buf | len) & arm_dcache_align_mask) == 0)
- cpu_dcache_inv_range((vm_offset_t)buf, len);
- else
- cpu_dcache_wbinv_range((vm_offset_t)buf, len);
-
+ if (op & BUS_DMASYNC_PREREAD) {
+ if ((vm_offset_t)buf & arm_dcache_align_mask)
+ cpu_dcache_wbinv_range((vm_offset_t)buf &
+ ~arm_dcache_align_mask, arm_dcache_align);
+ if (((vm_offset_t)buf + len) & arm_dcache_align_mask)
+ cpu_dcache_wbinv_range(((vm_offset_t)buf + len) &
+ ~arm_dcache_align_mask, arm_dcache_align);
}
+ if (op & BUS_DMASYNC_POSTREAD)
+ cpu_dcache_inv_range((vm_offset_t)buf, len);
}
void
@@ -823,7 +826,7 @@
int resid;
struct iovec *iov;
- if (!(op & (BUS_DMASYNC_PREWRITE | BUS_DMASYNC_POSTREAD)))
+ if (op == BUS_DMASYNC_POSTWRITE)
return;
if (map->flags & DMAMAP_COHERENT)
return;
==== //depot/projects/arm/src/sys/arm/arm/pmap.c#17 (text+ko) ====
@@ -147,7 +147,7 @@
#include "opt_vm.h"
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.49 2006/05/30 16:55:38 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.52 2006/06/01 01:31:07 alc Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
@@ -198,6 +198,8 @@
static void pmap_free_pv_entry (pv_entry_t);
static pv_entry_t pmap_get_pv_entry(void);
+static void pmap_enter_locked(pmap_t, vm_offset_t, vm_page_t,
+ vm_prot_t, boolean_t);
static void pmap_vac_me_harder(struct vm_page *, pmap_t,
vm_offset_t);
static void pmap_vac_me_kpmap(struct vm_page *, pmap_t,
@@ -230,6 +232,8 @@
static pt_entry_t *csrc_pte, *cdst_pte;
static vm_offset_t csrcp, cdstp;
+static struct mtx cmtx;
+
static void pmap_init_l1(struct l1_ttable *, pd_entry_t *);
/*
* These routines are called when the CPU type is identified to set up
@@ -913,20 +917,38 @@
l1idx = L1_IDX(va);
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
if ((l2 = pm->pm_l2[L2_IDX(l1idx)]) == NULL) {
/*
* No mapping at this address, as there is
* no entry in the L1 table.
* Need to allocate a new l2_dtable.
*/
+again_l2table:
+ vm_page_unlock_queues();
if ((l2 = pmap_alloc_l2_dtable()) == NULL) {
+ vm_page_lock_queues();
return (NULL);
}
- bzero(l2, sizeof(*l2));
- /*
- * Link it into the parent pmap
- */
- pm->pm_l2[L2_IDX(l1idx)] = l2;
+ vm_page_lock_queues();
+ if (pm->pm_l2[L2_IDX(l1idx)] != NULL) {
+ vm_page_unlock_queues();
+ uma_zfree(l2table_zone, l2);
+ vm_page_lock_queues();
+ l2 = pm->pm_l2[L2_IDX(l1idx)];
+ if (l2 == NULL)
+ goto again_l2table;
+ /*
+ * Someone already allocated the l2_dtable while
+ * we were doing the same.
+ */
+ } else {
+ bzero(l2, sizeof(*l2));
+ /*
+ * Link it into the parent pmap
+ */
+ pm->pm_l2[L2_IDX(l1idx)] = l2;
+ }
}
l2b = &l2->l2_bucket[L2_BUCKET(l1idx)];
@@ -941,7 +963,19 @@
* No L2 page table has been allocated. Chances are, this
* is because we just allocated the l2_dtable, above.
*/
+again_ptep:
+ vm_page_unlock_queues();
ptep = (void*)uma_zalloc(l2zone, M_NOWAIT);
+ vm_page_lock_queues();
+ if (l2b->l2b_kva != 0) {
+ /* We lost the race. */
+ vm_page_unlock_queues();
+ uma_zfree(l2zone, ptep);
+ vm_page_lock_queues();
+ if (l2b->l2b_kva == 0)
+ goto again_ptep;
+ return (l2b);
+ }
l2b->l2b_phys = vtophys(ptep);
if (ptep == NULL) {
/*
@@ -2541,6 +2575,7 @@
virtual_end = lastaddr;
kernel_vm_end = pmap_curmaxkvaddr;
arm_nocache_startaddr = lastaddr;
+ mtx_init(&cmtx, "TMP mappings mtx", NULL, MTX_DEF);
#ifdef ARM_USE_SMALL_ALLOC
mtx_init(&smallalloc_mtx, "Small alloc page list", NULL, MTX_DEF);
@@ -3310,6 +3345,19 @@
pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
boolean_t wired)
{
+
+ vm_page_lock_queues();
+ pmap_enter_locked(pmap, va, m, prot, wired);
+ vm_page_unlock_queues();
+}
+
+/*
+ * The page queues and pmap must be locked.
+ */
+static void
+pmap_enter_locked(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
+ boolean_t wired)
+{
struct l2_bucket *l2b = NULL;
struct vm_page *opg;
struct pv_entry *pve = NULL;
@@ -3318,7 +3366,7 @@
u_int oflags;
vm_paddr_t pa;
- vm_page_lock_queues();
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
if (va == vector_page) {
pa = systempage.pv_pa;
m = NULL;
@@ -3435,9 +3483,11 @@
simple_lock(&opg->mdpage.pvh_slock);
#endif
pve = pmap_remove_pv(opg, pmap, va);
- if (m && (m->flags & (PG_UNMANAGED | PG_FICTITIOUS)) && pve)
+ if (m && (m->flags & (PG_UNMANAGED | PG_FICTITIOUS)) &&
+ pve)
pmap_free_pv_entry(pve);
- else if (!pve)
+ else if (!pve &&
+ !(m->flags & (PG_UNMANAGED | PG_FICTITIOUS)))
pve = pmap_get_pv_entry();
KASSERT(pve != NULL, ("No pv"));
#if 0
@@ -3532,7 +3582,6 @@
if (m)
pmap_vac_me_harder(m, pmap, va);
}
- vm_page_unlock_queues();
}
/*
@@ -3549,15 +3598,9 @@
vm_page_t mpte)
{
- vm_page_busy(m);
- vm_page_unlock_queues();
- VM_OBJECT_UNLOCK(m->object);
- mtx_lock(&Giant);
- pmap_enter(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE), FALSE);
- mtx_unlock(&Giant);
- VM_OBJECT_LOCK(m->object);
- vm_page_lock_queues();
- vm_page_wakeup(m);
+ mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+ pmap_enter_locked(pmap, va, m, prot & (VM_PROT_READ | VM_PROT_EXECUTE),
+ FALSE);
return (NULL);
}
@@ -4009,6 +4052,7 @@
return;
+ mtx_lock(&cmtx);
/*
* Hook in the page, zero it, and purge the cache for that
* zeroed page. Invalidate the TLB as needed.
@@ -4022,6 +4066,7 @@
bzero((void *)(cdstp + off), size);
else
bzero_page(cdstp);
+ mtx_unlock(&cmtx);
cpu_dcache_wbinv_range(cdstp, PAGE_SIZE);
}
#endif /* (ARM_MMU_GENERIC + ARM_MMU_SA1) != 0 */
@@ -4034,6 +4079,7 @@
if (_arm_bzero &&
_arm_bzero((void *)(phys + off), size, IS_PHYSICAL) == 0)
return;
+ mtx_lock(&cmtx);
/*
* Hook in the page, zero it, and purge the cache for that
* zeroed page. Invalidate the TLB as needed.
@@ -4048,6 +4094,7 @@
bzero((void *)(cdstp + off), size);
else
bzero_page(cdstp);
+ mtx_unlock(&cmtx);
xscale_cache_clean_minidata();
}
@@ -4270,6 +4317,7 @@
* the cache for the appropriate page. Invalidate the TLB
* as required.
*/
+ mtx_lock(&cmtx);
*csrc_pte = L2_S_PROTO | src |
L2_S_PROT(PTE_KERNEL, VM_PROT_READ) | pte_l2_s_cache_mode;
PTE_SYNC(csrc_pte);
@@ -4280,6 +4328,7 @@
cpu_tlb_flushD_SE(cdstp);
cpu_cpwait();
bcopy_page(csrcp, cdstp);
+ mtx_unlock(&cmtx);
cpu_dcache_inv_range(csrcp, PAGE_SIZE);
#if 0
mtx_lock(&src_pg->md.pvh_mtx);
@@ -4321,6 +4370,7 @@
* the cache for the appropriate page. Invalidate the TLB
* as required.
*/
+ mtx_lock(&cmtx);
*csrc_pte = L2_S_PROTO | src |
L2_S_PROT(PTE_KERNEL, VM_PROT_READ) |
L2_C | L2_XSCALE_T_TEX(TEX_XSCALE_X); /* mini-data */
@@ -4333,6 +4383,7 @@
cpu_tlb_flushD_SE(cdstp);
cpu_cpwait();
bcopy_page(csrcp, cdstp);
+ mtx_unlock(&cmtx);
xscale_cache_clean_minidata();
}
#endif /* ARM_MMU_XSCALE == 1 */
==== //depot/projects/arm/src/sys/arm/include/cpuconf.h#3 (text+ko) ====
@@ -34,7 +34,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
- * $FreeBSD: src/sys/arm/include/cpuconf.h,v 1.5 2005/05/26 16:05:22 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpuconf.h,v 1.7 2006/06/02 09:39:06 cognet Exp $
*
*/
@@ -57,22 +57,22 @@
*/
#if (defined(CPU_ARM7TDMI) || defined(CPU_ARM8) || defined(CPU_ARM9) || \
- defined(CPU_ARM10) || defined(CPU_SA110) || defined(CPU_SA1100) || \
- defined(CPU_SA1110) || defined(CPU_IXP12X0) || defined(CPU_XSCALE_IXP425))
+ defined(CPU_SA110) || defined(CPU_SA1100) || defined(CPU_SA1110) || \
+ defined(CPU_IXP12X0) || defined(CPU_XSCALE_IXP425))
#define ARM_ARCH_4 1
#else
#define ARM_ARCH_4 0
#endif
#if (defined(CPU_XSCALE_80200) || defined(CPU_XSCALE_80321) || \
- defined(CPU_XSCALE_PXA2X0))
+ defined(CPU_XSCALE_PXA2X0)) || defined(CPU_ARM10)
#define ARM_ARCH_5 1
#else
#define ARM_ARCH_5 0
#endif
#define ARM_NARCH (ARM_ARCH_4 + ARM_ARCH_5)
-#if ARM_NARCH == 0 && !defined(KLD_MODULE)
+#if ARM_NARCH == 0 && !defined(KLD_MODULE) && defined(_KERNEL)
#error ARM_NARCH is 0
#endif
@@ -120,7 +120,7 @@
#define ARM_NMMUS (ARM_MMU_MEMC + ARM_MMU_GENERIC + \
ARM_MMU_SA1 + ARM_MMU_XSCALE)
-#if ARM_NMMUS == 0 && !defined(KLD_MODULE)
+#if ARM_NMMUS == 0 && !defined(KLD_MODULE) && defined(_KERNEL)
#error ARM_NMMUS is 0
#endif
==== //depot/projects/arm/src/sys/arm/include/cpufunc.h#4 (text+ko) ====
@@ -38,7 +38,7 @@
*
* Prototypes for cpu, mmu and tlb related functions.
*
- * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.7 2005/06/03 19:49:53 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/cpufunc.h,v 1.8 2006/06/01 16:17:44 cognet Exp $
*/
#ifndef _MACHINE_CPUFUNC_H_
@@ -460,7 +460,7 @@
(mask) & (I32_bit | F32_bit)))
#define enable_interrupts(mask) \
- (__set_cpsr_c((mask | F32_bit) & (I32_bit | F32_bit), 0))
+ (__set_cpsr_c((mask) & (I32_bit | F32_bit), 0))
#define restore_interrupts(old_cpsr) \
(__set_cpsr_c((I32_bit | F32_bit), (old_cpsr) & (I32_bit | F32_bit)))
==== //depot/projects/arm/src/sys/arm/include/pmap.h#9 (text+ko) ====
@@ -44,14 +44,14 @@
* from: @(#)pmap.h 7.4 (Berkeley) 5/12/91
* from: FreeBSD: src/sys/i386/include/pmap.h,v 1.70 2000/11/30
*
- * $FreeBSD: src/sys/arm/include/pmap.h,v 1.17 2006/05/13 23:41:15 cognet Exp $
+ * $FreeBSD: src/sys/arm/include/pmap.h,v 1.18 2006/05/31 11:57:37 cognet Exp $
*/
#ifndef _MACHINE_PMAP_H_
#define _MACHINE_PMAP_H_
#include <machine/pte.h>
-
+#include <machine/cpuconf.h>
/*
* Pte related macros
*/
==== //depot/projects/arm/src/sys/boot/i386/libi386/biosdisk.c#3 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biosdisk.c,v 1.46 2005/12/19 09:00:11 sobomax Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/i386/libi386/biosdisk.c,v 1.47 2006/05/31 09:05:49 iedowse Exp $");
/*
* BIOS disk device handling.
@@ -1037,9 +1037,6 @@
*/
if (bbuf != NULL)
bcopy(p, breg, x * BIOSDISK_SECSIZE);
- p += (x * BIOSDISK_SECSIZE);
- dblk += x;
- resid -= x;
/* Loop retrying the operation a couple of times. The BIOS may also retry. */
for (retry = 0; retry < 3; retry++) {
@@ -1103,6 +1100,9 @@
if (result) {
return(-1);
}
+ p += (x * BIOSDISK_SECSIZE);
+ dblk += x;
+ resid -= x;
}
/* hexdump(dest, (blks * BIOSDISK_SECSIZE)); */
==== //depot/projects/arm/src/sys/compat/linprocfs/linprocfs.c#6 (text+ko) ====
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.93 2006/05/12 05:04:40 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linprocfs/linprocfs.c,v 1.94 2006/06/02 13:01:25 des Exp $");
#include <sys/param.h>
#include <sys/queue.h>
@@ -222,9 +222,9 @@
default:
class = 0;
break;
-#else
+#else /* __amd64__ */
default:
- class = 6;
+ class = 15;
break;
#endif
}
==== //depot/projects/arm/src/sys/dev/ahb/ahb.c#3 (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/dev/ahb/ahb.c,v 1.34 2005/05/29 04:42:17 nyan Exp $
+ * $FreeBSD: src/sys/dev/ahb/ahb.c,v 1.35 2006/05/31 14:33:23 mjacob Exp $
*/
#include <sys/param.h>
@@ -526,7 +526,7 @@
}
ahb->num_ecbs = MIN(ahb->num_ecbs,
- ahb->ha_inq_data->scsi_data.reserved[1]);
+ ahb->ha_inq_data->scsi_data.spc2_flags);
printf("ahb%ld: %.8s %s SCSI Adapter, FW Rev. %.4s, ID=%d, %d ECBs\n",
ahb->unit, ahb->ha_inq_data->scsi_data.product,
(ahb->ha_inq_data->scsi_data.flags & 0x4) ? "Differential"
==== //depot/projects/arm/src/sys/dev/ath/if_ath.c#12 (text+ko) ====
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.144 2006/05/08 20:11:09 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ath/if_ath.c,v 1.146 2006/06/02 23:14:38 sam Exp $");
/*
* Driver for the Atheros Wireless LAN controller.
@@ -2905,7 +2905,7 @@
* pass decrypt+mic errors but others may be
* interesting (e.g. crc).
*/
- if (sc->sc_drvbpf != NULL &&
+ if (bpf_peers_present(sc->sc_drvbpf) &&
(ds->ds_rxstat.rs_status & sc->sc_monpass)) {
bus_dmamap_sync(sc->sc_dmat, bf->bf_dmamap,
BUS_DMASYNC_POSTREAD);
@@ -2936,7 +2936,8 @@
sc->sc_stats.ast_ant_rx[ds->ds_rxstat.rs_antenna]++;
- if (sc->sc_drvbpf != NULL && !ath_rx_tap(sc, m, ds, tsf, nf)) {
+ if (bpf_peers_present(sc->sc_drvbpf) &&
+ !ath_rx_tap(sc, m, ds, tsf, nf)) {
m_freem(m); /* XXX reclaim */
goto rx_next;
}
@@ -3634,9 +3635,9 @@
ieee80211_dump_pkt(mtod(m0, caddr_t), m0->m_len,
sc->sc_hwmap[txrate].ieeerate, -1);
- if (ic->ic_rawbpf)
+ if (bpf_peers_present(ic->ic_rawbpf))
bpf_mtap(ic->ic_rawbpf, m0);
- if (sc->sc_drvbpf) {
+ if (bpf_peers_present(sc->sc_drvbpf)) {
u_int64_t tsf = ath_hal_gettsf64(ah);
sc->sc_tx_th.wt_tsf = htole64(tsf);
==== //depot/projects/arm/src/sys/dev/awi/awi.c#4 (text+ko) ====
@@ -89,7 +89,7 @@
__KERNEL_RCSID(0, "$NetBSD: awi.c,v 1.62 2004/01/16 14:13:15 onoe Exp $");
#endif
#ifdef __FreeBSD__
-__FBSDID("$FreeBSD: src/sys/dev/awi/awi.c,v 1.42 2005/08/13 00:30:26 sam Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/awi/awi.c,v 1.43 2006/06/02 23:14:39 sam Exp $");
#endif
#include "opt_inet.h"
@@ -796,8 +796,7 @@
}
IFQ_DEQUEUE(&ifp->if_snd, m0);
#if NBPFILTER > 0
- if (ifp->if_bpf)
- bpf_mtap(ifp->if_bpf, m0);
+ BPF_MTAP(ifp, m0);
#endif
if ((ifp->if_flags & IFF_LINK0) || sc->sc_adhoc_ap)
m0 = awi_ether_encap(sc, m0);
@@ -839,7 +838,7 @@
ifp->if_opackets++;
}
#if NBPFILTER > 0
- if (ic->ic_rawbpf)
+ if (bpf_peers_present(ic->ic_rawbpf))
bpf_mtap(ic->ic_rawbpf, m0);
#endif
if (dowep) {
==== //depot/projects/arm/src/sys/dev/gem/if_gem.c#4 (text+ko) ====
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/gem/if_gem.c,v 1.37 2005/12/05 11:58:32 ru Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/gem/if_gem.c,v 1.38 2006/06/02 23:14:39 sam Exp $");
/*
* Driver for Sun GEM ethernet controllers.
@@ -1205,8 +1205,7 @@
bus_space_write_4(sc->sc_bustag, sc->sc_h, GEM_TX_KICK,
sc->sc_txnext);
- if (ifp->if_bpf != NULL)
- bpf_mtap(ifp->if_bpf, m0);
+ BPF_MTAP(ifp, m0);
} while (1);
if (txmfail == -1 || sc->sc_txfree == 0) {
==== //depot/projects/arm/src/sys/dev/ipw/if_ipw.c#5 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/ipw/if_ipw.c,v 1.19 2006/05/16 14:36:27 phk Exp $ */
+/* $FreeBSD: src/sys/dev/ipw/if_ipw.c,v 1.21 2006/06/02 23:14:39 sam Exp $ */
/*-
* Copyright (c) 2004-2006
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/ipw/if_ipw.c,v 1.19 2006/05/16 14:36:27 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/ipw/if_ipw.c,v 1.21 2006/06/02 23:14:39 sam Exp $");
/*-
* Intel(R) PRO/Wireless 2100 MiniPCI driver
@@ -1054,7 +1054,7 @@
m->m_pkthdr.rcvif = ifp;
m->m_pkthdr.len = m->m_len = le32toh(status->len);
- if (sc->sc_drvbpf != NULL) {
+ if (bpf_peers_present(sc->sc_drvbpf)) {
struct ipw_rx_radiotap_header *tap = &sc->sc_rxtap;
tap->wr_flags = 0;
@@ -1328,7 +1328,7 @@
wh = mtod(m0, struct ieee80211_frame *);
}
- if (sc->sc_drvbpf != NULL) {
+ if (bpf_peers_present(sc->sc_drvbpf)) {
struct ipw_tx_radiotap_header *tap = &sc->sc_txtap;
tap->wt_flags = 0;
@@ -1495,7 +1495,7 @@
continue;
}
- if (ic->ic_rawbpf != NULL)
+ if (bpf_peers_present(ic->ic_rawbpf))
bpf_mtap(ic->ic_rawbpf, m0);
if (ipw_tx_start(ifp, m0, ni) != 0) {
==== //depot/projects/arm/src/sys/dev/isp/isp_freebsd.h#9 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.89 2006/05/22 06:48:40 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/isp/isp_freebsd.h,v 1.90 2006/06/03 07:19:44 mjacob Exp $ */
/*-
* Qlogic ISP SCSI Host Adapter FreeBSD Wrapper Definitions
*
@@ -49,6 +49,9 @@
#include <sys/bus.h>
#include <machine/bus.h>
+#if __FreeBSD_version < 500000
+#include <machine/clock.h>
+#endif
#include <machine/cpu.h>
#include <cam/cam.h>
==== //depot/projects/arm/src/sys/dev/iwi/if_iwi.c#7 (text+ko) ====
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/iwi/if_iwi.c,v 1.36 2006/05/16 14:36:27 phk Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/iwi/if_iwi.c,v 1.38 2006/06/02 23:14:39 sam Exp $");
/*-
* Intel(R) PRO/Wireless 2200BG/2225BG/2915ABG driver
@@ -1300,7 +1300,7 @@
m_adj(m, sizeof (struct iwi_hdr) + sizeof (struct iwi_frame));
- if (sc->sc_drvbpf != NULL) {
+ if (bpf_peers_present(sc->sc_drvbpf)) {
struct iwi_rx_radiotap_header *tap = &sc->sc_rxtap;
tap->wr_flags = 0;
@@ -1829,7 +1829,7 @@
wh = mtod(m0, struct ieee80211_frame *);
}
- if (sc->sc_drvbpf != NULL) {
+ if (bpf_peers_present(sc->sc_drvbpf)) {
struct iwi_tx_radiotap_header *tap = &sc->sc_txtap;
tap->wt_flags = 0;
@@ -1984,7 +1984,7 @@
continue;
}
- if (ic->ic_rawbpf != NULL)
+ if (bpf_peers_present(ic->ic_rawbpf))
bpf_mtap(ic->ic_rawbpf, m0);
if (iwi_tx_start(ifp, m0, ni, ac) != 0) {
==== //depot/projects/arm/src/sys/dev/lmc/if_lmc.h#3 (text+ko) ====
@@ -1,5 +1,5 @@
/*
- * $FreeBSD: src/sys/dev/lmc/if_lmc.h,v 1.2 2005/12/05 11:58:33 ru Exp $
+ * $FreeBSD: src/sys/dev/lmc/if_lmc.h,v 1.3 2006/06/02 23:14:39 sam Exp $
*
* Copyright (c) 2002-2004 David Boggs. (boggs at boggs.palo-alto.ca.us)
* All rights reserved.
@@ -1242,7 +1242,7 @@
# define DMA_LOAD(map, addr, size) bus_dmamap_load(ring->tag, map, addr, size, fbsd_dmamap_load, ring, 0)
# if (NBPFILTER != 0)
# if (__FreeBSD_version >= 500000)
-# define LMC_BPF_MTAP(mbuf) if (sc->ifp->if_bpf) bpf_mtap(sc->ifp->if_bpf, mbuf)
+# define LMC_BPF_MTAP(mbuf) BPF_MTAP(sc->ifp, mbuf)
# else /* FreeBSD-4 */
# define LMC_BPF_MTAP(mbuf) if (sc->ifp->if_bpf) bpf_mtap(sc->ifp, mbuf)
# endif
==== //depot/projects/arm/src/sys/dev/mpt/mpt.c#14 (text+ko) ====
@@ -96,7 +96,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt.c,v 1.30 2006/05/29 20:34:28 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt.c,v 1.31 2006/06/02 18:50:38 mjacob Exp $");
#include <dev/mpt/mpt.h>
#include <dev/mpt/mpt_cam.h> /* XXX For static handler registration */
@@ -2438,12 +2438,15 @@
if (pfp.PortType == MPI_PORTFACTS_PORTTYPE_FC) {
mpt->is_fc = 1;
mpt->is_sas = 0;
+ mpt->is_spi = 0;
} else if (pfp.PortType == MPI_PORTFACTS_PORTTYPE_SAS) {
mpt->is_fc = 0;
mpt->is_sas = 1;
+ mpt->is_spi = 0;
} else {
mpt->is_fc = 0;
mpt->is_sas = 0;
+ mpt->is_spi = 1;
}
mpt->mpt_ini_id = pfp.PortSCSIID;
mpt->mpt_max_devices = pfp.MaxDevices;
==== //depot/projects/arm/src/sys/dev/mpt/mpt.h#13 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/dev/mpt/mpt.h,v 1.22 2006/05/29 20:34:28 mjacob Exp $ */
+/* $FreeBSD: src/sys/dev/mpt/mpt.h,v 1.24 2006/06/02 19:23:12 mjacob Exp $ */
/*-
* Generic defines for LSI '909 FC adapters.
* FreeBSD Version.
@@ -126,6 +126,7 @@
#if __FreeBSD_version < 500000
#include <machine/bus.h>
+#include <machine/clock.h>
#endif
#include <sys/rman.h>
@@ -502,8 +503,8 @@
shutdwn_raid : 1,
shutdwn_recovery: 1,
outofbeer : 1,
- : 1,
disabled : 1,
+ is_spi : 1,
is_sas : 1,
is_fc : 1;
@@ -540,6 +541,10 @@
CONFIG_PAGE_SCSI_DEVICE_1 _dev_page1[16];
uint16_t _tag_enable;
uint16_t _disc_enable;
+ struct {
+ uint8_t inqdata[39];
+ uint8_t state;
+ } _dv[16];
} spi;
#define mpt_port_page0 cfg.spi._port_page0
#define mpt_port_page1 cfg.spi._port_page1
@@ -548,6 +553,10 @@
#define mpt_dev_page1 cfg.spi._dev_page1
#define mpt_tag_enable cfg.spi._tag_enable
#define mpt_disc_enable cfg.spi._disc_enable
+#define mpt_dv cfg.spi._dv
+# define DV_STATE_0 0
+# define DV_STATE_1 1
+# define DV_STATE_DONE 0xff
struct mpi_fc_cfg {
CONFIG_PAGE_FC_PORT_0 _port_page0;
#define mpt_fcport_page0 cfg.fc._port_page0
@@ -665,7 +674,7 @@
uint8_t *fw_image;
bus_dma_tag_t fw_dmat; /* DMA tag for firmware image */
bus_dmamap_t fw_dmap; /* DMA map for firmware image */
- bus_addr_t fw_phys; /* BusAddr of request memory */
+ bus_addr_t fw_phys; /* BusAddr of firmware image */
/* Shutdown Event Handler. */
eventhandler_tag eh;
==== //depot/projects/arm/src/sys/dev/mpt/mpt_cam.c#16 (text+ko) ====
@@ -94,7 +94,7 @@
* OWNER OR CONTRIBUTOR IS ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_cam.c,v 1.21 2006/05/29 20:34:28 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/mpt/mpt_cam.c,v 1.22 2006/06/02 18:50:38 mjacob Exp $");
#include <dev/mpt/mpt.h>
#include <dev/mpt/mpt_cam.h>
@@ -599,13 +599,13 @@
if (rv) {
mpt_prt(mpt, "failed to read SPI Port Page 2\n");
} else {
- mpt_lprt(mpt, MPT_PRT_DEBUG,
- "SPI Port Page 2: Flags %x Settings %x\n",
+ mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
+ "Port Page 2: Flags %x Settings %x\n",
mpt->mpt_port_page2.PortFlags,
mpt->mpt_port_page2.PortSettings);
for (i = 0; i < 16; i++) {
- mpt_lprt(mpt, MPT_PRT_DEBUG,
- "SPI Port Page 2 Tgt %d: timo %x SF %x Flags %x\n",
+ mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
+ " Port Page 2 Tgt %d: timo %x SF %x Flags %x\n",
i, mpt->mpt_port_page2.DeviceSettings[i].Timeout,
mpt->mpt_port_page2.DeviceSettings[i].SyncFactor,
mpt->mpt_port_page2.DeviceSettings[i].DeviceFlags);
@@ -621,9 +621,9 @@
"cannot read SPI Target %d Device Page 0\n", i);
continue;
}
- mpt_lprt(mpt, MPT_PRT_DEBUG,
- "SPI Tgt %d Page 0: NParms %x Information %x", i,
- mpt->mpt_dev_page0[i].NegotiatedParameters,
+ mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
+ "target %d page 0: Negotiated Params %x Information %x\n",
+ i, mpt->mpt_dev_page0[i].NegotiatedParameters,
mpt->mpt_dev_page0[i].Information);
rv = mpt_read_cur_cfg_page(mpt, i,
@@ -634,9 +634,9 @@
"cannot read SPI Target %d Device Page 1\n", i);
continue;
}
- mpt_lprt(mpt, MPT_PRT_DEBUG,
- "SPI Tgt %d Page 1: RParms %x Configuration %x\n", i,
- mpt->mpt_dev_page1[i].RequestedParameters,
+ mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
+ "target %d page 1: Requested Params %x Configuration %x\n",
+ i, mpt->mpt_dev_page1[i].RequestedParameters,
mpt->mpt_dev_page1[i].Configuration);
}
return (0);
@@ -693,16 +693,20 @@
MPI_SCSIPORTPAGE2_PORT_MASK_NEGO_MASTER_SETTINGS;
j = mpt->mpt_port_page2.PortFlags &
MPI_SCSIPORTPAGE2_PORT_FLAGS_DV_MASK;
- if (i == MPI_SCSIPORTPAGE2_PORT_ALL_MASTER_SETTINGS &&
- j == MPI_SCSIPORTPAGE2_PORT_FLAGS_OFF_DV) {
+ if (i == MPI_SCSIPORTPAGE2_PORT_ALL_MASTER_SETTINGS /* &&
+ j == MPI_SCSIPORTPAGE2_PORT_FLAGS_OFF_DV */) {
mpt_lprt(mpt, MPT_PRT_NEGOTIATION,
"honoring BIOS transfer negotiations\n");
- return (0);
- }
- for (i = 0; i < 16; i++) {
- mpt->mpt_dev_page1[i].RequestedParameters = 0;
- mpt->mpt_dev_page1[i].Configuration = 0;
- (void) mpt_update_spi_config(mpt, i);
+ for (i = 0; i < 16; i++) {
+ mpt->mpt_dv[i].state = DV_STATE_DONE;
+ }
+ } else {
+ for (i = 0; i < 16; i++) {
+ mpt->mpt_dev_page1[i].RequestedParameters = 0;
+ mpt->mpt_dev_page1[i].Configuration = 0;
+ (void) mpt_update_spi_config(mpt, i);
+ mpt->mpt_dv[i].state = DV_STATE_0;
+ }
}
return (0);
}
@@ -724,7 +728,7 @@
if (mpt_set_initial_config_sas(mpt)) {
return (EIO);
}
- } else {
+ } else if (mpt->is_spi) {
if (mpt_read_config_info_spi(mpt)) {
return (EIO);
}
@@ -873,10 +877,17 @@
break;
}
}
+
+ if (error == 0 && ((uint32_t)nseg) >= mpt->max_seg_cnt) {
+ error = EFBIG;
+ mpt_prt(mpt, "segment count %d too large (max %u)\n",
+ nseg, mpt->max_seg_cnt);
+ }
+
bad:
if (error != 0) {
if (error != EFBIG && error != ENOMEM) {
- mpt_prt(mpt, "mpt_execute_req: err %d\n", error);
+ mpt_prt(mpt, "mpt_execute_req_a64: err %d\n", error);
}
if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) {
cam_status status;
@@ -1275,12 +1286,8 @@
bad:
if (error != 0) {
- if (hdrp->Function == MPI_FUNCTION_TARGET_ASSIST) {
- request_t *cmd_req =
- MPT_TAG_2_REQ(mpt, ccb->csio.tag_id);
- MPT_TGT_STATE(mpt, cmd_req)->state = TGT_STATE_IN_CAM;
- MPT_TGT_STATE(mpt, cmd_req)->ccb = NULL;
- MPT_TGT_STATE(mpt, cmd_req)->req = NULL;
+ if (error != EFBIG && error != ENOMEM) {
+ mpt_prt(mpt, "mpt_execute_req: err %d\n", error);
}
if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) {
cam_status status;
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list