PERFORCE change 93436 for review
Kip Macy
kmacy at FreeBSD.org
Fri Mar 17 06:04:59 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=93436
Change 93436 by kmacy at kmacy_storage:sun4v_work on 2006/03/17 06:04:41
optimize tsb_clear_range use in pmap_invalidate_range
enable small mallocs from direct memory
reference pcpu structures through direct mappings
Affected files ...
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/include/vmparam.h#3 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/machdep.c#12 edit
.. //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#30 edit
Differences ...
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/include/vmparam.h#3 (text+ko) ====
@@ -145,7 +145,7 @@
#define VM_MIN_PROM_ADDRESS (0x00000000f0000000UL)
#define VM_MAX_PROM_ADDRESS (0x00000000ffffe000UL)
-#define VM_MIN_USER_ADDRESS (0x0000000000000000UL)
+#define VM_MIN_USER_ADDRESS (0x0000000000002000UL)
#define VM_MAX_USER_ADDRESS (0x000007fe00000000UL)
#define VM_MINUSER_ADDRESS (VM_MIN_USER_ADDRESS)
@@ -176,10 +176,7 @@
#ifndef VM_INITIAL_PAGEIN
#define VM_INITIAL_PAGEIN 16
#endif
-#if 0
-/* does silly things */
#define UMA_MD_SMALL_ALLOC
-#endif
extern vm_offset_t vm_max_kernel_address;
#endif /* !_MACHINE_VMPARAM_H_ */
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/machdep.c#12 (text+ko) ====
@@ -404,7 +404,13 @@
(thread0.td_kstack + KSTACK_PAGES * PAGE_SIZE) - 1;
pc->pc_curpcb = thread0.td_pcb;
-
+ /*
+ * Update PCPU_REG to point to direct address
+ * to support easy phys <-> virt translation in trap handler
+ */
+ pc = (struct pcpu *)TLB_PHYS_TO_DIRECT(vtophys(pc));
+ cpu_setregs(pc);
+
/*
* Initialize tunables.
*/
==== //depot/projects/kmacy_sun4v/src/sys/sun4v/sun4v/pmap.c#30 (text+ko) ====
@@ -139,6 +139,7 @@
* invalidate more than this
*/
#define MAX_INVALIDATES 32
+#define MAX_TSB_CLEARS 128
/*
* Allocate physical memory for use in pmap_bootstrap.
@@ -1068,7 +1069,11 @@
DPRINTF("pmap_invalidate_range(sva=%lx, eva=%lx)\n", sva, eva);
/* XXX SUN4V_FIXME - oversimplified logic */
- tsb_clear_range(&pmap->pm_tsb, sva, eva);
+ if ((((eva - sva) >> PAGE_SHIFT) < MAX_TSB_CLEARS) ||
+ (pmap->pm_context == 0))
+ tsb_clear_range(&pmap->pm_tsb, sva, eva);
+ else
+ tsb_clear(&pmap->pm_tsb);
if ((((eva - sva) >> PAGE_SHIFT) < MAX_INVALIDATES)) {
More information about the p4-projects
mailing list