All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mikael Pettersson <mikpe@csd.uu.se>
To: torvalds@transmeta.com
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH] performance counters 3.1 for 2.5.45 [4/4]: kernel changes
Date: Fri, 1 Nov 2002 00:10:45 +0100 (MET)	[thread overview]
Message-ID: <200210312310.AAA07615@kim.it.uu.se> (raw)

This is part 4 of 4 of perfctr-3.1 for the 2.5.45 kernel:
kernel changes to integrate the low and high-level drivers.

/Mikael

 CREDITS                              |    1 +
 MAINTAINERS                          |    6 ++++++
 arch/i386/Kconfig                    |    1 +
 arch/i386/kernel/entry.S             |   11 +++++++++++
 arch/i386/kernel/i8259.c             |    3 +++
 arch/i386/kernel/process.c           |    9 +++++++++
 arch/i386/mach-generic/irq_vectors.h |    5 +++--
 drivers/Makefile                     |    1 +
 include/asm-i386/apic.h              |    3 +++
 include/asm-i386/processor.h         |    2 ++
 include/asm-i386/unistd.h            |    1 +
 kernel/timer.c                       |    2 ++
 12 files changed, 43 insertions(+), 2 deletions(-)

diff -uN linux-2.5.45/CREDITS linux-2.5.45.perfctr-3.1/CREDITS
--- linux-2.5.45/CREDITS	Thu Oct 31 11:07:29 2002
+++ linux-2.5.45.perfctr-3.1/CREDITS	Thu Oct 31 23:26:02 2002
@@ -2402,6 +2402,7 @@
 E: mikpe@csd.uu.se
 W: http://www.csd.uu.se/~mikpe/
 D: Miscellaneous fixes
+D: Performance-monitoring counters driver
 
 N: Reed H. Petty
 E: rhp@draper.net
diff -uN linux-2.5.45/MAINTAINERS linux-2.5.45.perfctr-3.1/MAINTAINERS
--- linux-2.5.45/MAINTAINERS	Thu Oct 31 11:07:29 2002
+++ linux-2.5.45.perfctr-3.1/MAINTAINERS	Thu Oct 31 23:26:02 2002
@@ -1292,6 +1292,12 @@
 L:	linux-net@vger.kernel.org
 S:	Maintained
 
+PERFORMANCE-MONITORING COUNTERS DRIVER
+P:	Mikael Pettersson
+M:	mikpe@csd.uu.se
+W:	http://www.csd.uu.se/~mikpe/linux/perfctr/
+S:	Maintained
+
 PNP SUPPORT
 P:	Adam Belay
 M:	ambx1@neo.rr.com
diff -uN linux-2.5.45/arch/i386/Kconfig linux-2.5.45.perfctr-3.1/arch/i386/Kconfig
--- linux-2.5.45/arch/i386/Kconfig	Thu Oct 31 11:07:31 2002
+++ linux-2.5.45.perfctr-3.1/arch/i386/Kconfig	Thu Oct 31 23:26:03 2002
@@ -1513,6 +1513,7 @@
 
 source "arch/i386/oprofile/Kconfig"
 
+source "drivers/perfctr/Kconfig"
 
 menu "Kernel hacking"
 
diff -uN linux-2.5.45/arch/i386/kernel/entry.S linux-2.5.45.perfctr-3.1/arch/i386/kernel/entry.S
--- linux-2.5.45/arch/i386/kernel/entry.S	Thu Oct 31 11:07:31 2002
+++ linux-2.5.45.perfctr-3.1/arch/i386/kernel/entry.S	Thu Oct 31 23:26:03 2002
@@ -347,6 +347,16 @@
 /* The include is where all of the SMP etc. interrupts come from */
 #include "entry_arch.h"
 
+#if defined(CONFIG_X86_LOCAL_APIC) && defined(CONFIG_PERFCTR)
+ENTRY(perfctr_interrupt)
+	pushl $LOCAL_PERFCTR_VECTOR-256
+	SAVE_ALL
+	pushl %esp
+	call do_perfctr_interrupt
+	addl $4, %esp
+	jmp ret_from_intr
+#endif
+
 ENTRY(divide_error)
 	pushl $0			# no error code
 	pushl $do_divide_error
@@ -740,6 +750,7 @@
 	.long sys_epoll_create
 	.long sys_epoll_ctl	/* 255 */
 	.long sys_epoll_wait
+	.long sys_vperfctr
 
 
 	.rept NR_syscalls-(.-sys_call_table)/4
diff -uN linux-2.5.45/arch/i386/kernel/i8259.c linux-2.5.45.perfctr-3.1/arch/i386/kernel/i8259.c
--- linux-2.5.45/arch/i386/kernel/i8259.c	Sat Sep 28 11:40:03 2002
+++ linux-2.5.45.perfctr-3.1/arch/i386/kernel/i8259.c	Thu Oct 31 23:26:03 2002
@@ -22,6 +22,7 @@
 #include <asm/desc.h>
 #include <asm/apic.h>
 #include <asm/arch_hooks.h>
+#include <asm/perfctr.h>
 
 #include <linux/irq.h>
 
@@ -389,6 +390,8 @@
 	 * the architecture specific gates */
 	intr_init_hook();
 
+	perfctr_vector_init();
+
 	/*
 	 * Set the clock to HZ Hz, we already have a valid
 	 * vector now:
diff -uN linux-2.5.45/arch/i386/kernel/process.c linux-2.5.45.perfctr-3.1/arch/i386/kernel/process.c
--- linux-2.5.45/arch/i386/kernel/process.c	Sat Oct 12 13:44:40 2002
+++ linux-2.5.45.perfctr-3.1/arch/i386/kernel/process.c	Thu Oct 31 23:26:03 2002
@@ -32,6 +32,7 @@
 #include <linux/delay.h>
 #include <linux/reboot.h>
 #include <linux/init.h>
+#include <linux/vperfctr.h>
 #include <linux/mc146818rtc.h>
 #include <linux/module.h>
 
@@ -240,6 +241,7 @@
 		kfree(tsk->thread.ts_io_bitmap);
 		tsk->thread.ts_io_bitmap = NULL;
 	}
+	vperfctr_exit_thread(&tsk->thread);
 }
 
 void flush_thread(void)
@@ -299,6 +301,8 @@
 	unlazy_fpu(tsk);
 	struct_cpy(&p->thread.i387, &tsk->thread.i387);
 
+	vperfctr_copy_thread(&p->thread);
+
 	if (unlikely(NULL != tsk->thread.ts_io_bitmap)) {
 		p->thread.ts_io_bitmap = kmalloc(IO_BITMAP_BYTES, GFP_KERNEL);
 		if (!p->thread.ts_io_bitmap)
@@ -413,6 +417,8 @@
 
 	/* never put a printk in __switch_to... printk() calls wake_up*() indirectly */
 
+	vperfctr_suspend_thread(prev);
+
 	unlazy_fpu(prev_p);
 
 	/*
@@ -475,6 +481,8 @@
 			 */
 			tss->bitmap = INVALID_IO_BITMAP_OFFSET;
 	}
+
+	vperfctr_resume_thread(next);
 }
 
 asmlinkage int sys_fork(struct pt_regs regs)
@@ -685,3 +693,4 @@
 	return 0;
 }
 
+cond_syscall(sys_vperfctr)
diff -uN linux-2.5.45/arch/i386/mach-generic/irq_vectors.h linux-2.5.45.perfctr-3.1/arch/i386/mach-generic/irq_vectors.h
--- linux-2.5.45/arch/i386/mach-generic/irq_vectors.h	Sat Sep 21 18:15:16 2002
+++ linux-2.5.45.perfctr-3.1/arch/i386/mach-generic/irq_vectors.h	Thu Oct 31 23:26:03 2002
@@ -56,14 +56,15 @@
  * sources per level' errata.
  */
 #define LOCAL_TIMER_VECTOR	0xef
+#define LOCAL_PERFCTR_VECTOR	0xee
 
 /*
- * First APIC vector available to drivers: (vectors 0x30-0xee)
+ * First APIC vector available to drivers: (vectors 0x30-0xed)
  * we start at 0x31 to spread out vectors evenly between priority
  * levels. (0x80 is the syscall vector)
  */
 #define FIRST_DEVICE_VECTOR	0x31
-#define FIRST_SYSTEM_VECTOR	0xef
+#define FIRST_SYSTEM_VECTOR	0xee
 
 #define TIMER_IRQ 0
 
diff -uN linux-2.5.45/drivers/Makefile linux-2.5.45.perfctr-3.1/drivers/Makefile
--- linux-2.5.45/drivers/Makefile	Wed Oct 16 18:30:58 2002
+++ linux-2.5.45.perfctr-3.1/drivers/Makefile	Thu Oct 31 23:26:03 2002
@@ -41,5 +41,6 @@
 obj-$(CONFIG_BT)		+= bluetooth/
 obj-$(CONFIG_HOTPLUG_PCI)	+= hotplug/
 obj-$(CONFIG_ISDN_BOOL)		+= isdn/
+obj-$(CONFIG_PERFCTR)		+= perfctr/
 
 include $(TOPDIR)/Rules.make
diff -uN linux-2.5.45/include/asm-i386/apic.h linux-2.5.45.perfctr-3.1/include/asm-i386/apic.h
--- linux-2.5.45/include/asm-i386/apic.h	Sun Oct 20 18:51:08 2002
+++ linux-2.5.45.perfctr-3.1/include/asm-i386/apic.h	Thu Oct 31 23:26:03 2002
@@ -96,6 +96,9 @@
 #define NMI_LOCAL_APIC	2
 #define NMI_INVALID	3
 
+extern struct pm_dev *nmi_pmdev;
+extern unsigned int nmi_perfctr_msr;
+
 #endif /* CONFIG_X86_LOCAL_APIC */
 
 #endif /* __ASM_APIC_H */
diff -uN linux-2.5.45/include/asm-i386/processor.h linux-2.5.45.perfctr-3.1/include/asm-i386/processor.h
--- linux-2.5.45/include/asm-i386/processor.h	Sat Oct 12 13:44:43 2002
+++ linux-2.5.45.perfctr-3.1/include/asm-i386/processor.h	Thu Oct 31 23:26:03 2002
@@ -383,6 +383,8 @@
 	unsigned long		v86flags, v86mask, saved_esp0;
 /* IO permissions */
 	unsigned long	*ts_io_bitmap;
+/* performance counters */
+	struct vperfctr *vperfctr;
 };
 
 #define INIT_THREAD  {						\
diff -uN linux-2.5.45/include/asm-i386/unistd.h linux-2.5.45.perfctr-3.1/include/asm-i386/unistd.h
--- linux-2.5.45/include/asm-i386/unistd.h	Thu Oct 31 11:07:58 2002
+++ linux-2.5.45.perfctr-3.1/include/asm-i386/unistd.h	Thu Oct 31 23:26:03 2002
@@ -261,6 +261,7 @@
 #define __NR_sys_epoll_create	254
 #define __NR_sys_epoll_ctl	255
 #define __NR_sys_epoll_wait	256
+#define __NR_vperfctr		257
   
 
 /* user-visible error numbers are in the range -1 - -124: see <asm-i386/errno.h> */
diff -uN linux-2.5.45/kernel/timer.c linux-2.5.45.perfctr-3.1/kernel/timer.c
--- linux-2.5.45/kernel/timer.c	Thu Oct 31 11:08:00 2002
+++ linux-2.5.45.perfctr-3.1/kernel/timer.c	Thu Oct 31 23:26:03 2002
@@ -25,6 +25,7 @@
 #include <linux/init.h>
 #include <linux/mm.h>
 #include <linux/notifier.h>
+#include <linux/vperfctr.h>
 
 #include <asm/uaccess.h>
 
@@ -667,6 +668,7 @@
 	do_process_times(p, user, system);
 	do_it_virt(p, user);
 	do_it_prof(p);
+	vperfctr_sample_thread(&p->thread);
 }	
 
 /*

             reply	other threads:[~2002-10-31 23:06 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-10-31 23:10 Mikael Pettersson [this message]
2002-11-04 20:12 ` [PATCH] performance counters 3.1 for 2.5.45 [4/4]: kernel changes Stephen Hemminger
2002-11-04 20:31   ` Mikael Pettersson
2002-11-04 20:56     ` Stephen Hemminger

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200210312310.AAA07615@kim.it.uu.se \
    --to=mikpe@csd.uu.se \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@transmeta.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.