PERFORCE change 65658 for review
John Baldwin
jhb at FreeBSD.org
Mon Nov 22 20:02:13 GMT 2004
http://perforce.freebsd.org/chv.cgi?CH=65658
Change 65658 by jhb at jhb_slimer on 2004/11/22 20:01:11
IFC @65655.
Affected files ...
.. //depot/projects/smpng/sys/alpha/alpha/genassym.c#18 integrate
.. //depot/projects/smpng/sys/alpha/alpha/machdep.c#73 integrate
.. //depot/projects/smpng/sys/alpha/alpha/mp_machdep.c#31 integrate
.. //depot/projects/smpng/sys/alpha/include/param.h#12 integrate
.. //depot/projects/smpng/sys/amd64/amd64/busdma_machdep.c#14 integrate
.. //depot/projects/smpng/sys/amd64/amd64/genassym.c#13 integrate
.. //depot/projects/smpng/sys/amd64/amd64/machdep.c#32 integrate
.. //depot/projects/smpng/sys/amd64/include/param.h#12 integrate
.. //depot/projects/smpng/sys/arm/arm/db_interface.c#3 integrate
.. //depot/projects/smpng/sys/arm/arm/db_trace.c#9 integrate
.. //depot/projects/smpng/sys/arm/arm/exception.S#4 integrate
.. //depot/projects/smpng/sys/arm/arm/genassym.c#4 integrate
.. //depot/projects/smpng/sys/arm/arm/swtch.S#5 integrate
.. //depot/projects/smpng/sys/arm/arm/trap.c#4 integrate
.. //depot/projects/smpng/sys/arm/arm/undefined.c#2 integrate
.. //depot/projects/smpng/sys/arm/arm/vm_machdep.c#7 integrate
.. //depot/projects/smpng/sys/arm/include/cpufunc.h#5 integrate
.. //depot/projects/smpng/sys/arm/include/db_machdep.h#3 integrate
.. //depot/projects/smpng/sys/arm/include/kdb.h#2 integrate
.. //depot/projects/smpng/sys/arm/include/param.h#7 integrate
.. //depot/projects/smpng/sys/arm/sa11x0/assabet_machdep.c#6 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/iq31244_machdep.c#4 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/std.i80321#2 integrate
.. //depot/projects/smpng/sys/arm/xscale/i80321/std.iq31244#2 integrate
.. //depot/projects/smpng/sys/boot/efi/loader/main.c#14 integrate
.. //depot/projects/smpng/sys/cam/cam_xpt.c#23 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_proto.h#13 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_syscall.h#13 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_syscalls.c#13 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/freebsd32_sysent.c#13 integrate
.. //depot/projects/smpng/sys/compat/freebsd32/syscalls.master#13 integrate
.. //depot/projects/smpng/sys/compat/pecoff/imgact_pecoff.c#21 integrate
.. //depot/projects/smpng/sys/conf/NOTES#86 integrate
.. //depot/projects/smpng/sys/conf/files#128 integrate
.. //depot/projects/smpng/sys/conf/files.sparc64#46 integrate
.. //depot/projects/smpng/sys/conf/kmod.mk#37 integrate
.. //depot/projects/smpng/sys/ddb/db_ps.c#30 integrate
.. //depot/projects/smpng/sys/ddb/db_run.c#8 integrate
.. //depot/projects/smpng/sys/dev/aac/aac.c#45 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.c#22 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic79xx.h#19 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic7xxx.c#22 integrate
.. //depot/projects/smpng/sys/dev/aic7xxx/aic_osm_lib.h#4 integrate
.. //depot/projects/smpng/sys/dev/bge/if_bge.c#50 integrate
.. //depot/projects/smpng/sys/dev/ed/if_ed.c#26 integrate
.. //depot/projects/smpng/sys/dev/fdc/fdc.c#15 integrate
.. //depot/projects/smpng/sys/dev/hme/if_hme.c#19 integrate
.. //depot/projects/smpng/sys/dev/hme/if_hme_pci.c#13 integrate
.. //depot/projects/smpng/sys/dev/hme/if_hme_sbus.c#11 integrate
.. //depot/projects/smpng/sys/dev/hme/if_hmevar.h#7 integrate
.. //depot/projects/smpng/sys/dev/ic/ns16550.h#5 integrate
.. //depot/projects/smpng/sys/dev/ic/sab82532.h#1 branch
.. //depot/projects/smpng/sys/dev/ic/z8530.h#1 branch
.. //depot/projects/smpng/sys/dev/mc146818/mc146818.c#1 branch
.. //depot/projects/smpng/sys/dev/mc146818/mc146818reg.h#3 integrate
.. //depot/projects/smpng/sys/dev/mc146818/mc146818var.h#1 branch
.. //depot/projects/smpng/sys/dev/uart/uart_bus_isa.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu.h#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_alpha.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_amd64.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_i386.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_ia64.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_pc98.c#6 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_cpu_sparc64.c#8 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_dev_i8251.c#3 delete
.. //depot/projects/smpng/sys/dev/uart/uart_dev_i8251.h#2 delete
.. //depot/projects/smpng/sys/dev/uart/uart_dev_ns8250.c#8 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_dev_ns8250.h#2 delete
.. //depot/projects/smpng/sys/dev/uart/uart_dev_sab82532.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_dev_sab82532.h#2 delete
.. //depot/projects/smpng/sys/dev/uart/uart_dev_z8530.c#5 integrate
.. //depot/projects/smpng/sys/dev/uart/uart_dev_z8530.h#2 delete
.. //depot/projects/smpng/sys/fs/fifofs/fifo_vnops.c#30 integrate
.. //depot/projects/smpng/sys/geom/uzip/g_uzip.c#4 integrate
.. //depot/projects/smpng/sys/i386/i386/busdma_machdep.c#32 integrate
.. //depot/projects/smpng/sys/i386/i386/genassym.c#30 integrate
.. //depot/projects/smpng/sys/i386/i386/locore.s#24 integrate
.. //depot/projects/smpng/sys/i386/i386/machdep.c#83 integrate
.. //depot/projects/smpng/sys/i386/include/param.h#15 integrate
.. //depot/projects/smpng/sys/i386/linux/linux_sysvec.c#40 integrate
.. //depot/projects/smpng/sys/ia64/ia64/genassym.c#26 integrate
.. //depot/projects/smpng/sys/ia64/ia64/machdep.c#88 integrate
.. //depot/projects/smpng/sys/ia64/ia64/pmap.c#65 integrate
.. //depot/projects/smpng/sys/ia64/include/param.h#14 integrate
.. //depot/projects/smpng/sys/ia64/include/pte.h#5 integrate
.. //depot/projects/smpng/sys/kern/imgact_aout.c#23 integrate
.. //depot/projects/smpng/sys/kern/init_main.c#51 integrate
.. //depot/projects/smpng/sys/kern/init_sysent.c#48 integrate
.. //depot/projects/smpng/sys/kern/kern_descrip.c#72 integrate
.. //depot/projects/smpng/sys/kern/kern_fork.c#88 integrate
.. //depot/projects/smpng/sys/kern/kern_kse.c#13 integrate
.. //depot/projects/smpng/sys/kern/kern_ntptime.c#15 integrate
.. //depot/projects/smpng/sys/kern/kern_proc.c#69 integrate
.. //depot/projects/smpng/sys/kern/kern_switch.c#51 integrate
.. //depot/projects/smpng/sys/kern/kern_thr.c#22 integrate
.. //depot/projects/smpng/sys/kern/kern_thread.c#74 integrate
.. //depot/projects/smpng/sys/kern/syscalls.c#48 integrate
.. //depot/projects/smpng/sys/kern/syscalls.master#49 integrate
.. //depot/projects/smpng/sys/kern/vfs_bio.c#71 integrate
.. //depot/projects/smpng/sys/kern/vfs_default.c#31 integrate
.. //depot/projects/smpng/sys/kern/vfs_mount.c#38 integrate
.. //depot/projects/smpng/sys/kern/vfs_vnops.c#54 integrate
.. //depot/projects/smpng/sys/modules/acpi/acpi_snc/Makefile#2 delete
.. //depot/projects/smpng/sys/modules/sio/Makefile#4 integrate
.. //depot/projects/smpng/sys/modules/uart/Makefile#7 integrate
.. //depot/projects/smpng/sys/net/if.h#22 integrate
.. //depot/projects/smpng/sys/netgraph/atm/sscop/ng_sscop_cust.h#3 integrate
.. //depot/projects/smpng/sys/netgraph/bluetooth/drivers/bt3c/ng_bt3c_pccard.c#7 integrate
.. //depot/projects/smpng/sys/netgraph/ng_one2many.c#10 integrate
.. //depot/projects/smpng/sys/netinet/in.c#23 integrate
.. //depot/projects/smpng/sys/netinet/ip_divert.c#42 integrate
.. //depot/projects/smpng/sys/netinet/tcp_fsm.h#4 integrate
.. //depot/projects/smpng/sys/netinet/tcp_input.c#62 integrate
.. //depot/projects/smpng/sys/nfsclient/nfs_bio.c#34 integrate
.. //depot/projects/smpng/sys/pc98/i386/machdep.c#74 integrate
.. //depot/projects/smpng/sys/pci/if_sf.c#32 integrate
.. //depot/projects/smpng/sys/pci/if_sfreg.h#5 integrate
.. //depot/projects/smpng/sys/pci/if_sk.c#38 integrate
.. //depot/projects/smpng/sys/powerpc/include/param.h#12 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/genassym.c#24 integrate
.. //depot/projects/smpng/sys/powerpc/powerpc/machdep.c#55 integrate
.. //depot/projects/smpng/sys/sparc64/conf/GENERIC#50 integrate
.. //depot/projects/smpng/sys/sparc64/conf/NOTES#12 integrate
.. //depot/projects/smpng/sys/sparc64/include/param.h#15 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/genassym.c#34 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/machdep.c#68 integrate
.. //depot/projects/smpng/sys/sparc64/sparc64/rtc.c#1 branch
.. //depot/projects/smpng/sys/sys/buf.h#33 integrate
.. //depot/projects/smpng/sys/sys/proc.h#134 integrate
.. //depot/projects/smpng/sys/sys/syscall.h#48 integrate
.. //depot/projects/smpng/sys/sys/syscall.mk#48 integrate
.. //depot/projects/smpng/sys/sys/sysproto.h#50 integrate
.. //depot/projects/smpng/sys/sys/systm.h#58 integrate
.. //depot/projects/smpng/sys/sys/user.h#21 integrate
.. //depot/projects/smpng/sys/ufs/ffs/ffs_vnops.c#36 integrate
.. //depot/projects/smpng/sys/vm/swap_pager.c#53 integrate
.. //depot/projects/smpng/sys/vm/vm_extern.h#26 integrate
.. //depot/projects/smpng/sys/vm/vm_glue.c#51 integrate
.. //depot/projects/smpng/sys/vm/vm_pageout.h#14 integrate
Differences ...
==== //depot/projects/smpng/sys/alpha/alpha/genassym.c#18 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/genassym.c,v 1.44 2004/04/05 21:00:49 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/genassym.c,v 1.45 2004/11/20 02:28:14 das Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -52,12 +52,12 @@
#include <sys/ktr.h>
#include <machine/frame.h>
#include <machine/chipset.h>
+#include <machine/pcb.h>
#include <sys/vmmeter.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
-#include <sys/user.h>
#include <net/if.h>
#include <netinet/in.h>
#include <nfs/nfsproto.h>
==== //depot/projects/smpng/sys/alpha/alpha/machdep.c#73 (text+ko) ====
@@ -88,7 +88,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/machdep.c,v 1.224 2004/11/05 19:16:43 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/machdep.c,v 1.225 2004/11/20 02:29:36 das Exp $");
#include "opt_compat.h"
#include "opt_ddb.h"
@@ -160,7 +160,6 @@
struct mtx icu_lock;
-struct user *proc0uarea;
vm_offset_t proc0kstack;
char machine[] = "alpha";
@@ -848,11 +847,9 @@
proc_linkup(&proc0, &ksegrp0, &thread0);
/*
- * Init mapping for u page(s) for proc 0
+ * Init mapping for kernel stack for proc 0
*/
- proc0uarea = (struct user *)pmap_steal_memory(UAREA_PAGES * PAGE_SIZE);
proc0kstack = pmap_steal_memory(KSTACK_PAGES * PAGE_SIZE);
- proc0.p_uarea = proc0uarea;
thread0.td_kstack = proc0kstack;
thread0.td_pcb = (struct pcb *)
(thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
@@ -861,7 +858,6 @@
* Setup the per-CPU data for the bootstrap cpu.
*/
{
- /* This is not a 'struct user' */
size_t sz = round_page(KSTACK_PAGES * PAGE_SIZE);
pcpup = (struct pcpu *) pmap_steal_memory(sz);
pcpu_init(pcpup, 0, sz);
==== //depot/projects/smpng/sys/alpha/alpha/mp_machdep.c#31 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/alpha/alpha/mp_machdep.c,v 1.53 2004/11/05 19:16:43 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/alpha/alpha/mp_machdep.c,v 1.54 2004/11/20 02:29:36 das Exp $");
#include "opt_kstack_pages.h"
@@ -233,7 +233,7 @@
if (bootverbose)
printf("smp_start_secondary: starting cpu %d\n", pal_id);
- sz = round_page((UAREA_PAGES + KSTACK_PAGES) * PAGE_SIZE);
+ sz = KSTACK_PAGES * PAGE_SIZE;
pcpu = malloc(sz, M_TEMP, M_NOWAIT);
if (!pcpu) {
printf("smp_start_secondary: can't allocate memory\n");
==== //depot/projects/smpng/sys/alpha/include/param.h#12 (text+ko) ====
@@ -1,4 +1,4 @@
-/* $FreeBSD: src/sys/alpha/include/param.h,v 1.36 2004/09/02 18:59:14 scottl Exp $ */
+/* $FreeBSD: src/sys/alpha/include/param.h,v 1.37 2004/11/20 02:29:49 das Exp $ */
/* From: NetBSD: param.h,v 1.20 1997/09/19 13:52:53 leo Exp */
/*
@@ -117,7 +117,6 @@
#define KSTACK_PAGES 2 /* pages of kstack (with pcb) */
#endif
#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */
-#define UAREA_PAGES 1 /* pages of u-area */
/*
==== //depot/projects/smpng/sys/amd64/amd64/busdma_machdep.c#14 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.60 2004/11/10 03:49:24 scottl Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/busdma_machdep.c,v 1.63 2004/11/21 06:28:09 scottl Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -40,7 +40,6 @@
#include <sys/mbuf.h>
#include <sys/uio.h>
#include <sys/sysctl.h>
-#include <sys/ktr.h>
#include <vm/vm.h>
#include <vm/vm_page.h>
@@ -87,6 +86,7 @@
struct bounce_zone {
STAILQ_ENTRY(bounce_zone) links;
STAILQ_HEAD(bp_list, bounce_page) bounce_page_list;
+ int total_bpages;
int free_bpages;
int reserved_bpages;
int active_bpages;
@@ -128,15 +128,14 @@
static struct bus_dmamap nobounce_dmamap;
static void init_bounce_pages(void *dummy);
-static struct bounce_zone * alloc_bounce_zone(bus_dma_tag_t dmat);
+static int alloc_bounce_zone(bus_dma_tag_t dmat);
static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages);
static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
int commit);
static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map,
vm_offset_t vaddr, bus_size_t size);
static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
-static __inline int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr,
- bus_size_t len);
+static __inline int run_filter(bus_dma_tag_t dmat, bus_addr_t paddr);
/*
* Return true if a match is made.
@@ -147,18 +146,15 @@
* to check for a match, if there is no filter callback then assume a match.
*/
static __inline int
-run_filter(bus_dma_tag_t dmat, bus_addr_t paddr, bus_size_t len)
+run_filter(bus_dma_tag_t dmat, bus_addr_t paddr)
{
- bus_size_t bndy;
int retval;
retval = 0;
- bndy = dmat->boundary;
do {
if (((paddr > dmat->lowaddr && paddr <= dmat->highaddr)
- || ((paddr & (dmat->alignment - 1)) != 0)
- || ((paddr & bndy) != ((paddr + len) & bndy)))
+ || ((paddr & (dmat->alignment - 1)) != 0))
&& (dmat->filter == NULL
|| (*dmat->filter)(dmat->filterarg, paddr) != 0))
retval = 1;
@@ -204,7 +200,8 @@
panic("driver error: busdma dflt_lock called");
}
-#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
+#define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3
+#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
/*
* Allocate a device specific dma_tag.
*/
@@ -278,11 +275,21 @@
if (newtag->parent != NULL)
atomic_add_int(&parent->ref_count, 1);
}
-
- if (newtag->lowaddr < ptoa((vm_paddr_t)Maxmem) &&
+
+ if (newtag->lowaddr < ptoa((vm_paddr_t)Maxmem)
+ || newtag->alignment > 1 || newtag->boundary > 0)
+ newtag->flags |= BUS_DMA_COULD_BOUNCE;
+
+ if (((newtag->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
(flags & BUS_DMA_ALLOCNOW) != 0) {
+ struct bounce_zone *bz;
+
/* Must bounce */
+ if ((error = alloc_bounce_zone(newtag)) != 0)
+ return (error);
+ bz = newtag->bounce_zone;
+
if (lowaddr > bounce_lowaddr) {
/*
* Go through the pool and kill any pages
@@ -291,10 +298,10 @@
panic("bus_dma_tag_create: page reallocation "
"not implemented");
}
- if (ptoa(total_bpages) < maxsize) {
+ if (ptoa(bz->total_bpages) < maxsize) {
int pages;
- pages = atop(maxsize) - total_bpages;
+ pages = atop(maxsize) - bz->total_bpages;
/* Add pages to our bounce pool */
if (alloc_bounce_pages(newtag, pages) < pages)
@@ -382,12 +389,16 @@
* exclusion region, a data alignment that is stricter than 1, and/or
* an active address boundary.
*/
- if (dmat->lowaddr < ptoa((vm_paddr_t)Maxmem)
- || dmat->alignment > 1 || dmat->boundary > 0) {
+ if (dmat->flags & BUS_DMA_COULD_BOUNCE) {
/* Must bounce */
int maxpages;
+ if (dmat->bounce_zone == NULL) {
+ if ((error = alloc_bounce_zone(dmat)) != 0)
+ return (error);
+ }
+
*mapp = (bus_dmamap_t)malloc(sizeof(**mapp), M_DEVBUF,
M_NOWAIT | M_ZERO);
if (*mapp == NULL) {
@@ -568,8 +579,7 @@
map = &nobounce_dmamap;
if ((map != &nobounce_dmamap && map->pagesneeded == 0)
- && (dmat->lowaddr < ptoa((vm_paddr_t)Maxmem)
- || dmat->boundary > 0 || dmat->alignment > 1)) {
+ && ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0)) {
vm_offset_t vendaddr;
CTR4(KTR_BUSDMA, "lowaddr= %d Maxmem= %d, boundary= %d, "
@@ -586,7 +596,7 @@
while (vaddr < vendaddr) {
paddr = pmap_kextract(vaddr);
- if (run_filter(dmat, paddr, 0) != 0) {
+ if (run_filter(dmat, paddr) != 0) {
needbounce = 1;
map->pagesneeded++;
}
@@ -647,7 +657,7 @@
sgsize = (baddr - curaddr);
}
- if (map->pagesneeded != 0 && run_filter(dmat, curaddr, sgsize))
+ if (map->pagesneeded != 0 && run_filter(dmat, curaddr))
curaddr = add_bounce_page(dmat, map, vaddr, sgsize);
/*
@@ -902,14 +912,24 @@
return (bz->sysctl_tree_top);
}
-static struct bounce_zone *
+static int
alloc_bounce_zone(bus_dma_tag_t dmat)
{
struct bounce_zone *bz;
+ /* Check to see if we already have a suitable zone */
+ STAILQ_FOREACH(bz, &bounce_zone_list, links) {
+ if ((dmat->alignment <= bz->alignment)
+ && (dmat->boundary <= bz->boundary)
+ && (dmat->lowaddr >= bz->lowaddr)) {
+ dmat->bounce_zone = bz;
+ return (0);
+ }
+ }
+
if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_DEVBUF,
M_NOWAIT | M_ZERO)) == NULL)
- return (NULL);
+ return (ENOMEM);
STAILQ_INIT(&bz->bounce_page_list);
bz->free_bpages = 0;
@@ -922,6 +942,7 @@
busdma_zonecount++;
snprintf(bz->lowaddrid, 18, "%#jx", (uintmax_t)bz->lowaddr);
STAILQ_INSERT_TAIL(&bounce_zone_list, bz, links);
+ dmat->bounce_zone = bz;
sysctl_ctx_init(&bz->sysctl_tree);
bz->sysctl_tree_top = SYSCTL_ADD_NODE(&bz->sysctl_tree,
@@ -929,11 +950,15 @@
CTLFLAG_RD, 0, "");
if (bz->sysctl_tree_top == NULL) {
sysctl_ctx_free(&bz->sysctl_tree);
- return (bz);
+ return (0); /* XXX error code? */
}
SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
+ "total_bpages", CTLFLAG_RD, &bz->total_bpages, 0,
+ "Totoal bounce pages");
+ SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
+ SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
"free_bpages", CTLFLAG_RD, &bz->free_bpages, 0,
"Free bounce pages");
SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
@@ -962,7 +987,7 @@
SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
"boundary", CTLFLAG_RD, &bz->boundary, 0, "");
- return (bz);
+ return (0);
}
static int
@@ -972,21 +997,6 @@
int count;
bz = dmat->bounce_zone;
- if (bz == NULL) {
- STAILQ_FOREACH(bz, &bounce_zone_list, links) {
- if ((dmat->alignment <= bz->alignment)
- && (dmat->boundary <= bz->boundary)
- && (dmat->lowaddr >= bz->lowaddr))
- break;
- }
-
- if (bz == NULL) {
- if ((bz = alloc_bounce_zone(dmat)) == NULL)
- return (ENOMEM);
- }
- dmat->bounce_zone = bz;
- }
-
count = 0;
while (numpages > 0) {
struct bounce_page *bpage;
@@ -1009,6 +1019,7 @@
mtx_lock(&bounce_lock);
STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links);
total_bpages++;
+ bz->total_bpages++;
bz->free_bpages++;
mtx_unlock(&bounce_lock);
count++;
==== //depot/projects/smpng/sys/amd64/amd64/genassym.c#13 (text+ko) ====
@@ -33,7 +33,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.154 2004/05/16 22:43:57 peter Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.155 2004/11/20 02:30:59 das Exp $");
#include "opt_compat.h"
#include "opt_kstack_pages.h"
@@ -50,14 +50,12 @@
#include <sys/socket.h>
#include <sys/resourcevar.h>
#include <sys/ucontext.h>
-#include <sys/user.h>
#include <machine/tss.h>
#include <sys/vmmeter.h>
#include <vm/vm.h>
#include <vm/vm_param.h>
#include <vm/pmap.h>
#include <vm/vm_map.h>
-#include <sys/user.h>
#include <sys/proc.h>
#include <net/if.h>
#include <netinet/in.h>
@@ -67,6 +65,7 @@
#include <nfsclient/nfsdiskless.h>
#include <machine/apicreg.h>
#include <machine/cpu.h>
+#include <machine/pcb.h>
#include <machine/sigframe.h>
#include <machine/proc.h>
#include <machine/specialreg.h>
@@ -76,7 +75,6 @@
ASSYM(VM_PMAP, offsetof(struct vmspace, vm_pmap));
ASSYM(PM_ACTIVE, offsetof(struct pmap, pm_active));
ASSYM(P_SFLAG, offsetof(struct proc, p_sflag));
-ASSYM(P_UAREA, offsetof(struct proc, p_uarea));
ASSYM(TD_FLAGS, offsetof(struct thread, td_flags));
ASSYM(TD_PCB, offsetof(struct thread, td_pcb));
@@ -88,7 +86,6 @@
ASSYM(V_TRAP, offsetof(struct vmmeter, v_trap));
ASSYM(V_SYSCALL, offsetof(struct vmmeter, v_syscall));
ASSYM(V_INTR, offsetof(struct vmmeter, v_intr));
-ASSYM(UAREA_PAGES, UAREA_PAGES);
ASSYM(KSTACK_PAGES, KSTACK_PAGES);
ASSYM(PAGE_SIZE, PAGE_SIZE);
ASSYM(NPTEPG, NPTEPG);
==== //depot/projects/smpng/sys/amd64/amd64/machdep.c#32 (text+ko) ====
@@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.622 2004/10/28 12:16:03 simokawa Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/machdep.c,v 1.623 2004/11/20 02:29:23 das Exp $");
#include "opt_atalk.h"
#include "opt_atpic.h"
@@ -1114,9 +1114,6 @@
#error "have you forgotten the isa device?";
#endif
- proc0.p_uarea = (struct user *)(physfree + KERNBASE);
- bzero(proc0.p_uarea, UAREA_PAGES * PAGE_SIZE);
- physfree += UAREA_PAGES * PAGE_SIZE;
thread0.td_kstack = physfree + KERNBASE;
bzero((void *)thread0.td_kstack, KSTACK_PAGES * PAGE_SIZE);
physfree += KSTACK_PAGES * PAGE_SIZE;
==== //depot/projects/smpng/sys/amd64/include/param.h#12 (text+ko) ====
@@ -36,7 +36,7 @@
* SUCH DAMAGE.
*
* @(#)param.h 8.1 (Berkeley) 6/10/93
- * $FreeBSD: src/sys/amd64/include/param.h,v 1.14 2004/09/02 18:59:14 scottl Exp $
+ * $FreeBSD: src/sys/amd64/include/param.h,v 1.15 2004/11/20 02:29:49 das Exp $
*/
/*
@@ -125,7 +125,6 @@
#define KSTACK_PAGES 4 /* pages of kstack (with pcb) */
#endif
#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */
-#define UAREA_PAGES 1 /* holds struct user WITHOUT PCB (see def.) */
/*
==== //depot/projects/smpng/sys/arm/arm/db_interface.c#3 (text+ko) ====
@@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/db_interface.c,v 1.2 2004/07/12 21:25:01 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/db_interface.c,v 1.3 2004/11/21 18:11:39 cognet Exp $");
#include "opt_ddb.h"
#include <sys/param.h>
@@ -43,6 +43,9 @@
#include <sys/reboot.h>
#include <sys/systm.h> /* just for boothowto */
#include <sys/exec.h>
+#ifdef KDB
+#include <sys/kdb.h>
+#endif
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -192,11 +195,6 @@
char *dst;
size_t loop;
- /* If any part is in kernel text, use db_write_text() */
- if (addr >= (vm_offset_t) btext && addr < (vm_offset_t) etext) {
- return (-1);
- }
-
dst = (char *)addr;
if (db_validate_address((u_int)dst)) {
db_printf("address %p is invalid\n", dst);
@@ -229,4 +227,93 @@
}
+static u_int
+db_fetch_reg(int reg)
+{
+
+ switch (reg) {
+ case 0:
+ return (kdb_frame->tf_r0);
+ case 1:
+ return (kdb_frame->tf_r1);
+ case 2:
+ return (kdb_frame->tf_r2);
+ case 3:
+ return (kdb_frame->tf_r3);
+ case 4:
+ return (kdb_frame->tf_r4);
+ case 5:
+ return (kdb_frame->tf_r5);
+ case 6:
+ return (kdb_frame->tf_r6);
+ case 7:
+ return (kdb_frame->tf_r7);
+ case 8:
+ return (kdb_frame->tf_r8);
+ case 9:
+ return (kdb_frame->tf_r9);
+ case 10:
+ return (kdb_frame->tf_r10);
+ case 11:
+ return (kdb_frame->tf_r11);
+ case 12:
+ return (kdb_frame->tf_r12);
+ case 13:
+ return (kdb_frame->tf_svc_sp);
+ case 14:
+ return (kdb_frame->tf_svc_lr);
+ case 15:
+ return (kdb_frame->tf_pc);
+ default:
+ panic("db_fetch_reg: botch");
+ }
+}
+
+u_int
+branch_taken(u_int insn, db_addr_t pc)
+{
+ u_int addr, nregs;
+
+ switch ((insn >> 24) & 0xf) {
+ case 0xa: /* b ... */
+ case 0xb: /* bl ... */
+ addr = ((insn << 2) & 0x03ffffff);
+ if (addr & 0x02000000)
+ addr |= 0xfc000000;
+ return (pc + 8 + addr);
+ case 0x7: /* ldr pc, [pc, reg, lsl #2] */
+ addr = db_fetch_reg(insn & 0xf);
+ addr = pc + 8 + (addr << 2);
+ db_read_bytes(addr, 4, (char *)&addr);
+ return (addr);
+ case 0x1: /* mov pc, reg */
+ addr = db_fetch_reg(insn & 0xf);
+ return (addr);
+ case 0x8: /* ldmxx reg, {..., pc} */
+ case 0x9:
+ addr = db_fetch_reg((insn >> 16) & 0xf);
+ nregs = (insn & 0x5555) + ((insn >> 1) & 0x5555);
+ nregs = (nregs & 0x3333) + ((nregs >> 2) & 0x3333);
+ nregs = (nregs + (nregs >> 4)) & 0x0f0f;
+ nregs = (nregs + (nregs >> 8)) & 0x001f;
+ switch ((insn >> 23) & 0x3) {
+ case 0x0: /* ldmda */
+ addr = addr - 0;
+ break;
+ case 0x1: /* ldmia */
+ addr = addr + 0 + ((nregs - 1) << 2);
+ break;
+ case 0x2: /* ldmdb */
+ addr = addr - 4;
+ break;
+ case 0x3: /* ldmib */
+ addr = addr + 4 + ((nregs - 1) << 2);
+ break;
+ }
+ db_read_bytes(addr, 4, (char *)&addr);
+ return (addr);
+ default:
+ panic("branch_taken: botch");
+ }
+}
==== //depot/projects/smpng/sys/arm/arm/db_trace.c#9 (text+ko) ====
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/db_trace.c,v 1.7 2004/11/01 22:15:13 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/db_trace.c,v 1.8 2004/11/21 19:41:27 cognet Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -87,53 +87,17 @@
#define FR_RFP (-3)
static void
-db_stack_trace_cmd(db_expr_t addr, int have_addr, db_expr_t count, char *modif)
+db_stack_trace_cmd(db_expr_t addr, db_expr_t count)
{
u_int32_t *frame, *lastframe;
c_db_sym_t sym;
- char c, *cp = modif;
const char *name;
db_expr_t value;
db_expr_t offset;
boolean_t kernel_only = TRUE;
- boolean_t trace_thread = FALSE;
int scp_offset, quit;
- if (kdb_frame == NULL && !have_addr)
- return;
- while (modif && ((c = *cp++) != 0)) {
- if (c == 'u')
- kernel_only = FALSE;
- if (c == 't')
- trace_thread = TRUE;
- }
-
- if (!have_addr)
- frame = (u_int32_t *)(kdb_frame->tf_r11);
- else {
- if (trace_thread) {
- struct proc *p;
- struct thread *td;
- pid_t pid = (pid_t)addr;
- LIST_FOREACH(p, &allproc, p_list) {
- if (p->p_pid == pid)
- break;
- }
-
- if (p == NULL) {
- db_printf("not found\n");
- return;
- }
- if (!(p->p_sflag & PS_INMEM)) {
- db_printf("swapped out\n");
- return;
- }
- td = FIRST_THREAD_IN_PROC(p);
- frame = (u_int32_t *)(td->td_pcb->un_32.pcb32_r11);
- db_printf("at %p\n", frame);
- } else
- frame = (u_int32_t *)(addr);
- }
+ frame = (u_int32_t *)addr;
lastframe = NULL;
scp_offset = -(get_pc_str_offset() >> 2);
@@ -152,8 +116,6 @@
*/
scp = frame[FR_SCP];
- db_printsym(scp, DB_STGY_PROC);
- db_printf("\n\t");
sym = db_search_symbol(scp, DB_STGY_ANY, &offset);
if (sym == C_DB_SYM_NULL) {
value = 0;
@@ -248,7 +210,7 @@
addr = (uint32_t)__builtin_frame_address(0);
else
addr = thr->td_pcb->un_32.pcb32_r11;
- db_stack_trace_cmd(addr, 1, -1, NULL);
+ db_stack_trace_cmd(addr, -1);
return (0);
}
==== //depot/projects/smpng/sys/arm/arm/exception.S#4 (text+ko) ====
@@ -51,7 +51,7 @@
#include <machine/asm.h>
#include <machine/armreg.h>
#include <machine/asmacros.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/exception.S,v 1.3 2004/09/23 22:05:39 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/exception.S,v 1.4 2004/11/20 16:52:30 cognet Exp $");
.text
.align 0
@@ -206,122 +206,6 @@
* look like direct entry from the vector.
*/
ASENTRY_NP(undefined_entry)
-#ifdef IPKDB
-/*
- * IPKDB must be hooked in at the earliest possible entry point.
- *
- */
-/*
- * Make room for all registers saving real r0-r7 and r15.
- * The remaining registers are updated later.
- */
- stmfd sp!, {r0,r1} /* psr & spsr */
- stmfd sp!, {lr} /* pc */
- stmfd sp!, {r0-r14} /* r0-r7, r8-r14 */
-/*
- * Get previous psr.
- */
- mrs r7, cpsr_all
- mrs r0, spsr_all
- str r0, [sp, #(16*4)]
-/*
- * Test for user mode.
- */
- tst r0, #0xf
- bne .Lprenotuser_push
- add r1, sp, #(8*4)
- stmia r1,{r8-r14}^ /* store user mode r8-r14*/
- b .Lgoipkdb
-/*
- * Switch to previous mode to get r8-r13.
- */
-.Lprenotuser_push:
- orr r0, r0, #(I32_bit) /* disable interrupts */
- msr cpsr_all, r0
- mov r1, r8
- mov r2, r9
- mov r3, r10
- mov r4, r11
- mov r5, r12
- mov r6, r13
- msr cpsr_all, r7 /* back to undefined mode */
- add r8, sp, #(8*4)
- stmia r8, {r1-r6} /* r8-r13 */
-/*
- * Now back to previous mode to get r14 and spsr.
- */
- msr cpsr_all, r0
- mov r1, r14
- mrs r2, spsr
- msr cpsr_all, r7 /* back to undefined mode */
- str r1, [sp, #(14*4)] /* r14 */
- str r2, [sp, #(17*4)] /* spsr */
-/*
- * Now to IPKDB.
- */
-.Lgoipkdb:
- mov r0, sp
- bl _C_LABEL(ipkdb_trap_glue)
- ldr r1, .Lipkdb_trap_return
- str r0,[r1]
-
-/*
- * Have to load all registers from the stack.
- *
- * Start with spsr and pc.
- */
- ldr r0, [sp, #(16*4)] /* spsr */
- ldr r1, [sp, #(15*4)] /* r15 */
- msr spsr_all, r0
- mov r14, r1
-/*
- * Test for user mode.
- */
- tst r0, #0xf
- bne .Lprenotuser_pull
- add r1, sp, #(8*4)
- ldmia r1, {r8-r14}^ /* load user mode r8-r14 */
- b .Lpull_r0r7
-.Lprenotuser_pull:
-/*
- * Now previous mode spsr and r14.
- */
- ldr r1, [sp, #(17*4)] /* spsr */
- ldr r2, [sp, #(14*4)] /* r14 */
- orr r0, r0, #(I32_bit)
- msr cpsr_all, r0 /* switch to previous mode */
- msr spsr_all, r1
- mov r14, r2
- msr cpsr_all, r7 /* back to undefined mode */
-/*
- * Now r8-r13.
- */
- add r8, sp, #(8*4)
- ldmia r8, {r1-r6} /* r8-r13 */
- msr cpsr_all, r0
- mov r8, r1
- mov r9, r2
- mov r10, r3
- mov r11, r4
- mov r12, r5
- mov r13, r6
- msr cpsr_all, r7
-.Lpull_r0r7:
-/*
- * Now the rest of the registers.
- */
- ldr r1,Lipkdb_trap_return
- ldr r0,[r1]
- tst r0,r0
- ldmfd sp!, {r0-r7} /* r0-r7 */
- add sp, sp, #(10*4) /* adjust sp */
-
-/*
- * Did IPKDB handle it?
- */
- movnes pc, lr /* return */
-
-#endif
stmfd sp!, {r0, r1}
ldr r0, Lundefined_handler_indirection
ldr r1, [sp], #0x0004
@@ -330,10 +214,6 @@
str r1, [r0, #0x0004]
ldmia r0, {r0, r1, pc}
-#ifdef IPKDB
-Lipkdb_trap_return:
- .word Lipkdb_trap_return_data
-#endif
Lundefined_handler_indirection:
.word Lundefined_handler_indirection_data
==== //depot/projects/smpng/sys/arm/arm/genassym.c#4 (text+ko) ====
@@ -26,12 +26,11 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/genassym.c,v 1.3 2004/11/12 21:49:05 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/genassym.c,v 1.4 2004/11/20 02:30:59 das Exp $");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/assym.h>
#include <sys/proc.h>
-#include <sys/user.h>
#include <sys/mbuf.h>
#include <sys/vmmeter.h>
#include <vm/vm.h>
@@ -42,6 +41,7 @@
#include <machine/cpu.h>
#include <machine/proc.h>
#include <machine/cpufunc.h>
+#include <machine/pcb.h>
#include <machine/pte.h>
#include <machine/intr.h>
#include <netinet/in.h>
@@ -94,7 +94,6 @@
ASSYM(TF_R0, offsetof(struct trapframe, tf_r0));
ASSYM(TF_R1, offsetof(struct trapframe, tf_r1));
ASSYM(TF_PC, offsetof(struct trapframe, tf_pc));
-ASSYM(P_UAREA, offsetof(struct proc, p_uarea));
ASSYM(P_PID, offsetof(struct proc, p_pid));
ASSYM(P_FLAG, offsetof(struct proc, p_flag));
@@ -105,7 +104,6 @@
#endif
ASSYM(TDF_ASTPENDING, TDF_ASTPENDING);
ASSYM(TDF_NEEDRESCHED, TDF_NEEDRESCHED);
-ASSYM(USER_SIZE, sizeof(struct user));
ASSYM(P_TRACED, P_TRACED);
ASSYM(P_SIGEVENT, P_SIGEVENT);
ASSYM(P_PROFIL, P_PROFIL);
==== //depot/projects/smpng/sys/arm/arm/swtch.S#5 (text+ko) ====
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list