}
void oprofile_add_pc(unsigned long pc, int is_kernel, unsigned long event)
-diff -Nurb linux-2.6.27-590/fs/bio.c linux-2.6.27-591/fs/bio.c
---- linux-2.6.27-590/fs/bio.c 2008-10-09 18:13:53.000000000 -0400
-+++ linux-2.6.27-591/fs/bio.c 2010-01-29 16:30:22.000000000 -0500
-@@ -27,6 +27,7 @@
- #include <linux/workqueue.h>
- #include <linux/blktrace_api.h>
- #include <scsi/sg.h> /* for struct sg_iovec */
-+#include <linux/arrays.h>
-
- static struct kmem_cache *bio_slab __read_mostly;
-
-@@ -44,6 +45,7 @@
- };
- #undef BV
-
-+
- /*
- * fs_bio_set is the bio_set containing bio and iovec memory pools used by
- * IO code that does not need private memory pools.
-@@ -1171,6 +1173,14 @@
- }
- }
-
-+struct event_spec {
-+ unsigned long pc;
-+ unsigned long dcookie;
-+ unsigned count;
-+ unsigned char reason;
-+};
-+
-+extern void (*rec_event)(void *,unsigned int);
- /**
- * bio_endio - end I/O on a bio
- * @bio: bio
-@@ -1192,6 +1202,24 @@
- else if (!test_bit(BIO_UPTODATE, &bio->bi_flags))
- error = -EIO;
-
-+#ifdef CONFIG_CHOPSTIX
-+ if (rec_event) {
-+ struct event event;
-+ struct event_spec espec;
-+ unsigned long eip;
-+
-+ espec.reason = 1;/*response */
-+
-+ eip = bio->bi_end_io;
-+ event.event_data=&espec;
-+ espec.pc=eip;
-+ event.event_type=3;
-+ /* index in the event array currently set up */
-+ /* make sure the counters are loaded in the order we want them to show up*/
-+ (*rec_event)(&event, bytes_done);
-+ }
-+#endif
-+
- if (bio->bi_end_io)
- bio->bi_end_io(bio, error);
- }
diff -Nurb linux-2.6.27-590/fs/exec.c linux-2.6.27-591/fs/exec.c
--- linux-2.6.27-590/fs/exec.c 2010-01-29 16:29:48.000000000 -0500
+++ linux-2.6.27-591/fs/exec.c 2010-01-29 16:45:48.000000000 -0500