From: John Levon <levon@movementarian.org>
To: torvalds@transmeta.com, linux-kernel@vger.kernel.org
Subject: [PATCH 4/4] OProfile: fix init / exit routine
Date: Thu, 12 Jun 2003 03:02:33 +0100 [thread overview]
Message-ID: <10553833533873@movementarian.org> (raw)
In-Reply-To: <10553833522557@movementarian.org>
Ensure that the arch exit routines are always called when needed,
previously we could end up with a nasty crash if using oprofile.timer=1,
or the FS register failed.
diff -Naur -X dontdiff linux-cvs/drivers/oprofile/oprof.c linux-fixes/drivers/oprofile/oprof.c
--- linux-cvs/drivers/oprofile/oprof.c 2003-05-26 05:42:45.000000000 +0100
+++ linux-fixes/drivers/oprofile/oprof.c 2003-06-12 03:07:14.000000000 +0100
@@ -131,36 +131,33 @@
static int __init oprofile_init(void)
{
- int err = -ENODEV;
+ /* Architecture must fill in the interrupt ops and the
+ * logical CPU type, or we can fall back to the timer
+ * interrupt profiler.
+ */
+ int err = oprofile_arch_init(&oprofile_ops);
- if (!timer) {
- /* Architecture must fill in the interrupt ops and the
- * logical CPU type, or we can fall back to the timer
- * interrupt profiler.
- */
- err = oprofile_arch_init(&oprofile_ops);
- }
-
- if (err == -ENODEV) {
+ if (err == -ENODEV || timer) {
timer_init(&oprofile_ops);
err = 0;
- }
-
- if (err)
+ } else if (err) {
goto out;
+ }
if (!oprofile_ops->cpu_type) {
printk(KERN_ERR "oprofile: cpu_type not set !\n");
err = -EFAULT;
- goto out;
+ } else {
+ err = oprofilefs_register();
}
-
- err = oprofilefs_register();
- if (err)
- goto out;
+ if (err)
+ goto out_exit;
out:
return err;
+out_exit:
+ oprofile_arch_exit();
+ goto out;
}
diff -Naur -X dontdiff linux-cvs/include/linux/oprofile.h linux-fixes/include/linux/oprofile.h
--- linux-cvs/include/linux/oprofile.h 2003-04-05 05:12:09.000000000 +0100
+++ linux-fixes/include/linux/oprofile.h 2003-06-12 02:03:47.000000000 +0100
@@ -40,7 +40,9 @@
/**
* One-time initialisation. *ops must be set to a filled-in
- * operations structure.
+ * operations structure. This is called even in timer interrupt
+ * mode.
+ *
* Return 0 on success.
*/
int oprofile_arch_init(struct oprofile_operations ** ops);
prev parent reply other threads:[~2003-06-12 1:52 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-06-12 2:02 [PATCH 1/4] OProfile: Export task->tgid in the buffer John Levon
2003-06-12 2:02 ` [PATCH 2/4] OProfile: update Changes John Levon
2003-06-12 2:02 ` [PATCH 3/4] OProfile: remove useless code John Levon
2003-06-12 2:02 ` John Levon [this message]
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=10553833533873@movementarian.org \
--to=levon@movementarian.org \
--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.