Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 May 2002 18:13:34 -0700 (PDT)
From:      Jake Burkholder <jake@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 11572 for review
Message-ID:  <200205200113.g4K1DY160929@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=11572

Change 11572 by jake@jake_sparc64 on 2002/05/19 18:13:24

	De-inline the tlb functions.  These were so big that gcc3.1
	refused to inline them anyway.

Affected files ...

... //depot/projects/sparc64/sys/conf/files.sparc64#35 edit
... //depot/projects/sparc64/sys/sparc64/include/tlb.h#35 edit
... //depot/projects/sparc64/sys/sparc64/sparc64/tlb.c#1 add

Differences ...

==== //depot/projects/sparc64/sys/conf/files.sparc64#35 (text+ko) ====

@@ -79,6 +79,7 @@
 sparc64/sparc64/sys_machdep.c	standard
 sparc64/sparc64/swtch.s		standard
 sparc64/sparc64/tick.c		standard
+sparc64/sparc64/tlb.c		standard
 sparc64/sparc64/trap.c		standard
 sparc64/sparc64/tsb.c		standard
 sparc64/sparc64/vm_machdep.c	standard

==== //depot/projects/sparc64/sys/sparc64/include/tlb.h#35 (text+ko) ====

@@ -83,106 +83,9 @@
 extern int kernel_tlb_slots;
 extern struct tte *kernel_ttes;
 
-/*
- * Some tlb operations must be atomic, so no interrupt or trap can be allowed
- * while they are in progress. Traps should not happen, but interrupts need to
- * be explicitely disabled. critical_enter() cannot be used here, since it only
- * disables soft interrupts.
- */
-
-static __inline void
-tlb_context_demap(struct pmap *pm)
-{
-	void *cookie;
-	u_long s;
-
-	/*
-	 * It is important that we are not interrupted or preempted while
-	 * doing the IPIs. The interrupted CPU may hold locks, and since
-	 * it will wait for the CPU that sent the IPI, this can lead
-	 * to a deadlock when an interrupt comes in on that CPU and it's
-	 * handler tries to grab one of that locks. This will only happen for
-	 * spin locks, but these IPI types are delivered even if normal
-	 * interrupts are disabled, so the lock critical section will not
-	 * protect the target processor from entering the IPI handler with
-	 * the lock held.
-	 */
-	critical_enter();
-	cookie = ipi_tlb_context_demap(pm);
-	if (pm->pm_active & PCPU_GET(cpumask)) {
-		KASSERT(pm->pm_context[PCPU_GET(cpuid)] != -1,
-		    ("tlb_context_demap: inactive pmap?"));
-		s = intr_disable();
-		stxa(TLB_DEMAP_PRIMARY | TLB_DEMAP_CONTEXT, ASI_DMMU_DEMAP, 0);
-		stxa(TLB_DEMAP_PRIMARY | TLB_DEMAP_CONTEXT, ASI_IMMU_DEMAP, 0);
-		membar(Sync);
-		intr_restore(s);
-	}
-	ipi_wait(cookie);
-	critical_exit();
-}
-
-static __inline void
-tlb_page_demap(u_int tlb, struct pmap *pm, vm_offset_t va)
-{
-	u_long flags;
-	void *cookie;
-	u_long s;
-
-	critical_enter();
-	cookie = ipi_tlb_page_demap(tlb, pm, va);
-	if (pm->pm_active & PCPU_GET(cpumask)) {
-		KASSERT(pm->pm_context[PCPU_GET(cpuid)] != -1,
-		    ("tlb_page_demap: inactive pmap?"));
-		if (pm == kernel_pmap)
-			flags = TLB_DEMAP_NUCLEUS | TLB_DEMAP_PAGE;
-		else
-			flags = TLB_DEMAP_PRIMARY | TLB_DEMAP_PAGE;
-	
-		s = intr_disable();
-		if (tlb & TLB_DTLB) {
-			stxa(TLB_DEMAP_VA(va) | flags, ASI_DMMU_DEMAP, 0);
-			membar(Sync);
-		}
-		if (tlb & TLB_ITLB) {
-			stxa(TLB_DEMAP_VA(va) | flags, ASI_IMMU_DEMAP, 0);
-			membar(Sync);
-		}
-		intr_restore(s);
-	}
-	ipi_wait(cookie);
-	critical_exit();
-}
-
-static __inline void
-tlb_range_demap(struct pmap *pm, vm_offset_t start, vm_offset_t end)
-{
-	vm_offset_t va;
-	void *cookie;
-	u_long flags;
-	u_long s;
-
-	critical_enter();
-	cookie = ipi_tlb_range_demap(pm, start, end);
-	if (pm->pm_active & PCPU_GET(cpumask)) {
-		KASSERT(pm->pm_context[PCPU_GET(cpuid)] != -1,
-		    ("tlb_range_demap: inactive pmap?"));
-		if (pm == kernel_pmap)
-			flags = TLB_DEMAP_NUCLEUS | TLB_DEMAP_PAGE;
-		else
-			flags = TLB_DEMAP_PRIMARY | TLB_DEMAP_PAGE;
-	
-		s = intr_disable();
-		for (va = start; va < end; va += PAGE_SIZE) {
-			stxa(TLB_DEMAP_VA(va) | flags, ASI_DMMU_DEMAP, 0);
-			stxa(TLB_DEMAP_VA(va) | flags, ASI_IMMU_DEMAP, 0);
-			membar(Sync);
-		}
-		intr_restore(s);
-	}
-	ipi_wait(cookie);
-	critical_exit();
-}
+void	tlb_context_demap(struct pmap *pm);
+void	tlb_page_demap(u_int tlb, struct pmap *pm, vm_offset_t va);
+void	tlb_range_demap(struct pmap *pm, vm_offset_t start, vm_offset_t end);
 
 #define	tlb_tte_demap(tte, pm) \
 	tlb_page_demap(TD_GET_TLB((tte).tte_data), pm, \

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200205200113.g4K1DY160929>