diff -uNr linux-2.1.131/arch/alpha/kernel/alpha_ksyms.c linux-2.1.131_alpha_perf/arch/alpha/kernel/alpha_ksyms.c
--- linux-2.1.131/arch/alpha/kernel/alpha_ksyms.c	Fri Dec 11 13:21:07 1998
+++ linux-2.1.131_alpha_perf/arch/alpha/kernel/alpha_ksyms.c	Fri Dec 11 13:09:06 1998
@@ -52,6 +52,7 @@
 EXPORT_SYMBOL(enable_irq);
 EXPORT_SYMBOL(disable_irq);
 EXPORT_SYMBOL(screen_info);
+EXPORT_SYMBOL(perf_irq);
 
 /* platform dependent support */
 EXPORT_SYMBOL(_inb);
diff -uNr linux-2.1.131/arch/alpha/kernel/irq.c linux-2.1.131_alpha_perf/arch/alpha/kernel/irq.c
--- linux-2.1.131/arch/alpha/kernel/irq.c	Fri Dec 11 13:21:08 1998
+++ linux-2.1.131_alpha_perf/arch/alpha/kernel/irq.c	Fri Dec 11 13:09:06 1998
@@ -84,6 +84,15 @@
 	}
 }
 
+
+
+static void dummy_perf(unsigned long vector, struct pt_regs *regs)
+{
+        printk(KERN_CRIT "Performance counter interrupt!\n");
+}
+
+void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf;
+
 /*
  * Dispatch device interrupts.
  */
@@ -879,8 +888,8 @@
 		__restore_flags(flags);
 		return;
 	case 4:
-		printk("Performance counter interrupt\n");
-		break;
+		perf_irq(vector, &regs);
+		return;
 	default:
 		printk("Hardware intr %ld %lx? Huh?\n", type, vector);
 	}
diff -uNr linux-2.1.131/include/asm-alpha/irq.h linux-2.1.131_alpha_perf/include/asm-alpha/irq.h
--- linux-2.1.131/include/asm-alpha/irq.h	Fri Dec 11 13:21:09 1998
+++ linux-2.1.131_alpha_perf/include/asm-alpha/irq.h	Fri Dec 11 13:09:06 1998
@@ -93,4 +93,7 @@
 extern void disable_irq(unsigned int);
 extern void enable_irq(unsigned int);
 
+extern void (*perf_irq)(unsigned long, struct pt_regs *);
+
+
 #endif /* _ALPHA_IRQ_H */
diff -uNr linux-2.1.131/include/asm-alpha/system.h linux-2.1.131_alpha_perf/include/asm-alpha/system.h
--- linux-2.1.131/include/asm-alpha/system.h	Fri Dec 11 13:21:09 1998
+++ linux-2.1.131_alpha_perf/include/asm-alpha/system.h	Fri Dec 11 13:09:06 1998
@@ -116,6 +116,24 @@
 #define draina() \
 __asm__ __volatile__ ("call_pal %0 #draina" : : "i" (PAL_draina) : "memory")
 
+
+static inline unsigned long 
+wrperfmon(unsigned long perf_fun, unsigned long arg)
+{
+          register unsigned long __r0 __asm__("$0");
+	  register unsigned long __r16 __asm__("$16");
+	  register unsigned long __r17 __asm__("$17");
+	  __r16 = perf_fun;
+	  __r17 = arg;
+	  __asm__ __volatile__(
+		  "call_pal %1"
+		  : "=r"(__r0)
+		  : "i"(PAL_wrperfmon), "r"(__r16), "r"(__r17)
+		  : "$1", "$22", "$23", "$24", "$25", "$26");
+	  return __r0;
+}
+
+
 #define call_pal1(palno,arg)						\
 ({									\
 	register unsigned long __r0 __asm__("$0");			\
