PERFORCE change 112480 for review

Paolo Pisati piso at FreeBSD.org
Thu Jan 4 06:34:17 PST 2007


http://perforce.freebsd.org/chv.cgi?CH=112480

Change 112480 by piso at piso_newluxor on 2007/01/04 14:33:55

	Throw away the old stuff and start from Marcel's latest version.

Affected files ...

.. //depot/projects/soc2006/intr_filter/powerpc/powerpc/intr_machdep.c#15 edit

Differences ...

==== //depot/projects/soc2006/intr_filter/powerpc/powerpc/intr_machdep.c#15 (text+ko) ====

@@ -66,13 +66,7 @@
 #include <sys/queue.h>
 #include <sys/bus.h>
 #include <sys/interrupt.h>
->>>> ORIGINAL intr_machdep.c#8
-==== THEIRS intr_machdep.c#9
 #include <sys/ktr.h>
-==== YOURS intr_machdep.c
-#include <sys/ktr.h>
-#include <sys/limits.h>
-<<<<
 #include <sys/lock.h>
 #include <sys/malloc.h>
 #include <sys/mutex.h>
@@ -89,65 +83,20 @@
 
 MALLOC_DEFINE(M_INTR, "intr", "interrupt handler data");
 
->>>> ORIGINAL intr_machdep.c#8
-static int	intr_initialized = 0;
-
-==== THEIRS intr_machdep.c#9
 struct ppc_intr {
 	struct intr_event *event;
 	long	*cntp;
 	int	cntidx;
 };
 
-==== YOURS intr_machdep.c
-<<<<
->>>> ORIGINAL intr_machdep.c#8
-static u_int		intr_nirq;
-static struct		ppc_intr_handler *intr_handlers;
-==== THEIRS intr_machdep.c#9
 static struct mtx ppc_intrs_lock;
 static struct ppc_intr **ppc_intrs;
 static u_int ppc_nintrs;
-==== YOURS intr_machdep.c
-static u_int		intr_nirq;
-static struct		ppc_intr_handler *intr_handlers = NULL;
-<<<<
 
 static int intrcnt_index;
 
-extern struct callout stray_callout_handle;
-
-void intr_callout_reset(void);
-
->>>> ORIGINAL intr_machdep.c#8
-extern int	extint, extsize;
-extern u_long	extint_call;
-
-static int 		intrcnt_index;
-static ih_func_t	intr_stray_handler;
-static ih_func_t	sched_ithd;
-
-static void		(*irq_enable)(uintptr_t);
-static void		(*irq_disable)(uintptr_t);
-
-static void intrcnt_setname(const char *name, int index);
-static void intrcnt_updatename(struct ppc_intr_handler *ih);
-==== THEIRS intr_machdep.c#9
 static void (*irq_enable)(uintptr_t);
-==== YOURS intr_machdep.c
-extern int	extint, extsize;
-extern u_long	extint_call;
-
-static int 		intrcnt_index;
-static ih_func_t	intr_stray_handler;
 
-static void		(*irq_enable)(uintptr_t);
-static void		(*irq_disable)(uintptr_t);
-
-static void intrcnt_setname(const char *name, int index);
-static void intrcnt_updatename(struct ppc_intr_handler *ih);
-<<<<
-
 static void
 intrcnt_setname(const char *name, int index)
 {
@@ -161,51 +110,18 @@
 {
 	uint32_t msr;
 
->>>> ORIGINAL intr_machdep.c#8
-	if (intr_initialized != 0)
-		panic("intr_init: interrupts intialized twice\n");
-==== THEIRS intr_machdep.c#9
 	if (ppc_intrs != NULL)
 		panic("intr_init: interrupts initialized twice\n");
-==== YOURS intr_machdep.c
-	if (intr_handlers != NULL)
-		panic("intr_init: interrupts intialized twice\n");
-<<<<
-
->>>> ORIGINAL intr_machdep.c#8
-	intr_initialized++;
 
-	intr_nirq = nirq;
-	intr_handlers = malloc(nirq * sizeof(struct ppc_intr_handler), M_INTR,
-==== THEIRS intr_machdep.c#9
 	ppc_nintrs = nirq;
 	ppc_intrs = malloc(nirq * sizeof(struct ppc_intr *), M_INTR,
-==== YOURS intr_machdep.c
-	intr_nirq = nirq;
-	intr_handlers = malloc(nirq * sizeof(struct ppc_intr_handler), M_INTR,
-<<<<
 	    M_NOWAIT|M_ZERO);
 	if (ppc_intrs == NULL)
 		panic("intr_init: unable to allocate interrupt handler array");
 
->>>> ORIGINAL intr_machdep.c#8
-	for (i = 0; i < nirq; i++) {
-		intr_handlers[i].ih_func = intr_stray_handler;
-		intr_handlers[i].ih_arg = &intr_handlers[i];
-		intr_handlers[i].ih_irq = i;
-		intr_handlers[i].ih_flags = 0;
-		/* mux all initial stray irqs onto same count... */
-		intr_handlers[i].ih_straycount = &intrcnt[0];
-	}
-==== THEIRS intr_machdep.c#9
 	mtx_init(&ppc_intrs_lock, "intr table", NULL, MTX_SPIN);
 
 	irq_enable = irq_e;
-==== YOURS intr_machdep.c
-	/* mux all initial stray irqs onto same count... */
-	for (i = 0; i < nirq; i++)
-		intr_handlers[i].ih_straycount = &intrcnt[0];
-<<<<
 
 	intrcnt_setname("???", 0);
 	intrcnt_index = 1;
@@ -213,66 +129,16 @@
 	msr = mfmsr();
 	mtmsr(msr & ~PSL_EE);
 	ext_intr_install(handler);
->>>> ORIGINAL intr_machdep.c#8
-
-	mtmsr(msr);
-
-	irq_enable = irq_e;
-	irq_disable = irq_d;
-
-	mtx_init(&intr_table_lock, "intr table", NULL, MTX_SPIN);
-}
-
-void
-intr_setup(u_int irq, ih_func_t *ihf, void *iha, u_int flags)
-{
-	u_int32_t	msr;
-
-	msr = mfmsr();
-	mtmsr(msr & ~PSL_EE);
-
-	intr_handlers[irq].ih_func = ihf;
-	intr_handlers[irq].ih_arg = iha;
-	intr_handlers[irq].ih_irq = irq;
-	intr_handlers[irq].ih_flags = flags;
-
-	mtmsr(msr);
-}
-
-==== THEIRS intr_machdep.c#9
-	mtmsr(msr);
-}
-
-==== YOURS intr_machdep.c
-
 	mtmsr(msr);
-
-	irq_enable = irq_e;
-	irq_disable = irq_d;
-
-	mtx_init(&intr_table_lock, "intr table", NULL, MTX_SPIN);
-	callout_init_mtx(&stray_callout_handle, &intr_table_lock, 0);
 }
 
-<<<<
 int
-inthand_add(const char *name, u_int irq, int (*filter)(void *), 
-    void (*handler)(void *), void *arg, int flags, void **cookiep)
+inthand_add(const char *name, u_int irq, void (*handler)(void *), void *arg,
+    int flags, void **cookiep)
 {
->>>> ORIGINAL intr_machdep.c#8
-	struct	ppc_intr_handler *ih;
-	struct	intr_event *event, *orphan;
-	int	error = 0;
-	int	created_event = 0;
-==== THEIRS intr_machdep.c#9
 	struct ppc_intr *i, *orphan;
 	u_int idx;
 	int error;
-==== YOURS intr_machdep.c
-	struct	ppc_intr_handler *ih;
-	struct	intr_event *event, *orphan;
-	int	error = 0;
-<<<<
 
 	/*
 	 * Work around a race where more than one CPU may be registering
@@ -287,7 +153,7 @@
 		if (i == NULL)
 			return (ENOMEM);
 		error = intr_event_create(&i->event, (void *)irq, 0,
-		    (void (*)(void *))irq_enable, NULL, "irq%d:", irq);
+		    (void (*)(void *))irq_enable, "irq%d:", irq);
 		if (error) {
 			free(i, M_INTR);
 			return (error);
@@ -299,19 +165,8 @@
 			i = ppc_intrs[irq];
 			mtx_unlock_spin(&ppc_intrs_lock);
 
->>>> ORIGINAL intr_machdep.c#8
-		if (ih->ih_event == NULL) {
-			ih->ih_event = event;
-			created_event++;
-			mtx_unlock_spin(&intr_table_lock);
-==== THEIRS intr_machdep.c#9
 			intr_event_destroy(orphan->event);
 			free(orphan, M_INTR);
-==== YOURS intr_machdep.c
-		if (ih->ih_event == NULL) {
-			ih->ih_event = event;
-			mtx_unlock_spin(&intr_table_lock);
-<<<<
 		} else {
 			ppc_intrs[irq] = i;
 			idx = intrcnt_index++;
@@ -323,44 +178,11 @@
 		}
 	}
 
->>>> ORIGINAL intr_machdep.c#8
-	/* XXX: Should probably fix support for multiple FAST. */
-	if (flags & INTR_FAST)
-		flags |= INTR_EXCL;
-	error = intr_event_add_handler(event, name, handler, arg,
-==== THEIRS intr_machdep.c#9
 	error = intr_event_add_handler(i->event, name, handler, arg,
-==== YOURS intr_machdep.c
-	error = intr_event_add_handler(event, name, filter, handler, arg,
-<<<<
 	    intr_priority(flags), flags, cookiep);
->>>> ORIGINAL intr_machdep.c#8
-
-	if ((flags & INTR_FAST) == 0 || error)
-		intr_setup(irq, sched_ithd, ih, flags);
-
-	if (error)
-		return (error);
-
-	if (flags & INTR_FAST)
-		intr_setup(irq, handler, arg, flags);
-
-	intrcnt_register(ih);
-
-	return (0);
-==== THEIRS intr_machdep.c#9
 	if (!error)
 		intrcnt_setname(i->event->ie_fullname, i->cntidx);
 	return (error);
-==== YOURS intr_machdep.c
-
-	if (error)
-		return (error);
-
-	intrcnt_register(ih);
-
-	return (0);
-<<<<
 }
 
 int
@@ -369,126 +191,24 @@
 
 	return (intr_event_remove_handler(cookie));
 }
->>>> ORIGINAL intr_machdep.c#8
-
-	if (error == 0) {
-		ih = &intr_handlers[irq];
-
-		mtx_lock_spin(&intr_table_lock);
-
-		if (ih->ih_event == NULL) {
-			intr_setup(irq, intr_stray_handler, ih, 0);
-		} else {
-			intr_setup(irq, sched_ithd, ih, 0);
-		}
-
-		mtx_unlock_spin(&intr_table_lock);
-	}
-
-	return (error);
-}
-==== THEIRS intr_machdep.c#9
-==== YOURS intr_machdep.c
-
-/* Stray detection MD code */
-static struct intr_event *
-walk_intr_ppc(void) 
-{
-	struct ppc_intr_handler *ppc;
-	static int i = 0;
-
-	for (; i < intr_nirq; ) {
-		int j = i++;
-		ppc = &intr_handlers[j];
-		if (ppc != NULL && ppc->ih_event != NULL)
-			return (ppc->ih_event);
-	}
-	i = 0;
-	return (NULL);
-}
 
 void
-intr_callout_reset(void)
-{
-	
-	mtx_lock_spin(&intr_table_lock);
-	callout_reset(&stray_callout_handle, hz, 
-		      &stray_detection, &walk_intr_ppc);
-	mtx_unlock_spin(&intr_table_lock);
-}
-<<<<
-
-void
 intr_handle(u_int irq)
 {
->>>> ORIGINAL intr_machdep.c#8
-	atomic_add_long(intr_handlers[irq].ih_count, 1);
-	intr_handlers[irq].ih_func(intr_handlers[irq].ih_arg);
-==== THEIRS intr_machdep.c#9
 	struct ppc_intr *i;
 	struct intr_event *ie;
 	struct intr_handler *ih;
 	int error, sched;
-==== YOURS intr_machdep.c
-	struct ppc_intr_handler *ppc_ih = &intr_handlers[irq];
-	struct intr_event *ie = ppc_ih->ih_event;
-	int res;
-<<<<
 
->>>> ORIGINAL intr_machdep.c#8
-	/* XXX wrong thing when using pre-emption ? */
-	if ((intr_handlers[irq].ih_flags & INTR_FAST) != 0)
-		irq_enable(irq);
-}
-==== THEIRS intr_machdep.c#9
 	i = ppc_intrs[irq];
 	if (i == NULL)
 		goto stray;
-==== YOURS intr_machdep.c
-	res = mi_handle_intr(ie, NULL, intr_eoi_src_stub,
-			     intr_disab_eoi_src_stub, NULL);
-	switch (res) {
-	case 0:
-		/* FALLTHROUGH */
-	case ECHILD:
-		atomic_add_long(ppc_ih->ih_count, 1);
-		break;
-	case EFAULT:
-		atomic_add_long(ppc_ih->ih_count, 1);
-		/* FALLTHROUGH */
-	case EINVAL:
-		intr_stray_handler(ppc_ih);
-		break;
-	default:
-		printf("Ouch! Return code from mi_handle_intr()"
-		       "not expected.\n");
-	}
-}
-<<<<
 
->>>> ORIGINAL intr_machdep.c#8
-static void
-intr_stray_handler(void *cookie)
-{
-	struct	ppc_intr_handler *ih;
-==== THEIRS intr_machdep.c#9
 	atomic_add_long(i->cntp, 1);
-==== YOURS intr_machdep.c
-static void
-intr_stray_handler(void *cookie)
-{
-	struct	ppc_intr_handler *ih = cookie;
-<<<<
 
->>>> ORIGINAL intr_machdep.c#8
-	ih = (struct ppc_intr_handler *)cookie;
-
-==== THEIRS intr_machdep.c#9
 	ie = i->event;
 	KASSERT(ie != NULL, ("%s: interrupt without an event", __func__));
 
-==== YOURS intr_machdep.c
-<<<<
 	if (TAILQ_EMPTY(&ie->ie_handlers))
 		goto stray;
 
@@ -509,21 +229,6 @@
 	}
 	critical_exit();
 
->>>> ORIGINAL intr_machdep.c#8
-static void
-sched_ithd(void *cookie)
-{
-	struct	ppc_intr_handler *ih;
-	int	error;
-
-	ih = (struct ppc_intr_handler *)cookie;
-
-	error = intr_event_schedule_thread(ih->ih_event);
-
-	if (error == EINVAL)
-		intr_stray_handler(ih);
-}
-==== THEIRS intr_machdep.c#9
 	if (sched) {
 		error = intr_event_schedule_thread(ie);
 		KASSERT(error == 0, ("%s: impossible stray interrupt",
@@ -542,5 +247,3 @@
 		}
 	}
 }
-==== YOURS intr_machdep.c
-<<<<


More information about the p4-projects mailing list