Commit f35e6551 authored by John Levon's avatar John Levon Committed by Linus Torvalds

[PATCH] oprofile - dcookies need to use u32

Make dcookies use a stable size regardless of whether we're
on a 32-bit or 64-bit platform.
parent b4d5af77
...@@ -118,13 +118,13 @@ void sync_stop(void) ...@@ -118,13 +118,13 @@ void sync_stop(void)
* because we cannot reach this code without at least one * because we cannot reach this code without at least one
* dcookie user still being registered (namely, the reader * dcookie user still being registered (namely, the reader
* of the event buffer). */ * of the event buffer). */
static inline unsigned long fast_get_dcookie(struct dentry * dentry, static inline u32 fast_get_dcookie(struct dentry * dentry,
struct vfsmount * vfsmnt) struct vfsmount * vfsmnt)
{ {
unsigned long cookie; u32 cookie;
if (dentry->d_cookie) if (dentry->d_cookie)
return (unsigned long)dentry; return (u32)dentry;
get_dcookie(dentry, vfsmnt, &cookie); get_dcookie(dentry, vfsmnt, &cookie);
return cookie; return cookie;
} }
...@@ -135,9 +135,9 @@ static inline unsigned long fast_get_dcookie(struct dentry * dentry, ...@@ -135,9 +135,9 @@ static inline unsigned long fast_get_dcookie(struct dentry * dentry,
* not strictly necessary but allows oprofile to associate * not strictly necessary but allows oprofile to associate
* shared-library samples with particular applications * shared-library samples with particular applications
*/ */
static unsigned long get_exec_dcookie(struct mm_struct * mm) static u32 get_exec_dcookie(struct mm_struct * mm)
{ {
unsigned long cookie = 0; u32 cookie = 0;
struct vm_area_struct * vma; struct vm_area_struct * vma;
if (!mm) if (!mm)
...@@ -163,9 +163,9 @@ static unsigned long get_exec_dcookie(struct mm_struct * mm) ...@@ -163,9 +163,9 @@ static unsigned long get_exec_dcookie(struct mm_struct * mm)
* sure to do this lookup before a mm->mmap modification happens so * sure to do this lookup before a mm->mmap modification happens so
* we don't lose track. * we don't lose track.
*/ */
static unsigned long lookup_dcookie(struct mm_struct * mm, unsigned long addr, off_t * offset) static u32 lookup_dcookie(struct mm_struct * mm, unsigned long addr, off_t * offset)
{ {
unsigned long cookie = 0; u32 cookie = 0;
struct vm_area_struct * vma; struct vm_area_struct * vma;
for (vma = find_vma(mm, addr); vma; vma = vma->vm_next) { for (vma = find_vma(mm, addr); vma; vma = vma->vm_next) {
...@@ -188,7 +188,7 @@ static unsigned long lookup_dcookie(struct mm_struct * mm, unsigned long addr, o ...@@ -188,7 +188,7 @@ static unsigned long lookup_dcookie(struct mm_struct * mm, unsigned long addr, o
} }
static unsigned long last_cookie = ~0UL; static u32 last_cookie = ~0UL;
static void add_cpu_switch(int i) static void add_cpu_switch(int i)
{ {
...@@ -199,7 +199,7 @@ static void add_cpu_switch(int i) ...@@ -199,7 +199,7 @@ static void add_cpu_switch(int i)
} }
static void add_ctx_switch(pid_t pid, unsigned long cookie) static void add_ctx_switch(pid_t pid, u32 cookie)
{ {
add_event_entry(ESCAPE_CODE); add_event_entry(ESCAPE_CODE);
add_event_entry(CTX_SWITCH_CODE); add_event_entry(CTX_SWITCH_CODE);
...@@ -208,7 +208,7 @@ static void add_ctx_switch(pid_t pid, unsigned long cookie) ...@@ -208,7 +208,7 @@ static void add_ctx_switch(pid_t pid, unsigned long cookie)
} }
static void add_cookie_switch(unsigned long cookie) static void add_cookie_switch(u32 cookie)
{ {
add_event_entry(ESCAPE_CODE); add_event_entry(ESCAPE_CODE);
add_event_entry(COOKIE_SWITCH_CODE); add_event_entry(COOKIE_SWITCH_CODE);
...@@ -225,7 +225,7 @@ static void add_sample_entry(unsigned long offset, unsigned long event) ...@@ -225,7 +225,7 @@ static void add_sample_entry(unsigned long offset, unsigned long event)
static void add_us_sample(struct mm_struct * mm, struct op_sample * s) static void add_us_sample(struct mm_struct * mm, struct op_sample * s)
{ {
unsigned long cookie; u32 cookie;
off_t offset; off_t offset;
cookie = lookup_dcookie(mm, s->eip, &offset); cookie = lookup_dcookie(mm, s->eip, &offset);
...@@ -317,7 +317,7 @@ static void sync_buffer(struct oprofile_cpu_buffer * cpu_buf) ...@@ -317,7 +317,7 @@ static void sync_buffer(struct oprofile_cpu_buffer * cpu_buf)
{ {
struct mm_struct * mm = 0; struct mm_struct * mm = 0;
struct task_struct * new; struct task_struct * new;
unsigned long cookie; u32 cookie;
int i; int i;
for (i=0; i < cpu_buf->pos; ++i) { for (i=0; i < cpu_buf->pos; ++i) {
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/dcookies.h>
#include <linux/notifier.h> #include <linux/notifier.h>
#include <linux/profile.h> #include <linux/profile.h>
#include <linux/oprofile.h> #include <linux/oprofile.h>
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* non-transitory that can be processed at a later date. * non-transitory that can be processed at a later date.
* This is done by locking the dentry/vfsmnt pair in the * This is done by locking the dentry/vfsmnt pair in the
* kernel until released by the tasks needing the persistent * kernel until released by the tasks needing the persistent
* objects. The tag is simply an unsigned long that refers * objects. The tag is simply an u32 that refers
* to the pair and can be looked up from userspace. * to the pair and can be looked up from userspace.
*/ */
...@@ -46,19 +46,19 @@ static inline int is_live(void) ...@@ -46,19 +46,19 @@ static inline int is_live(void)
/* The dentry is locked, its address will do for the cookie */ /* The dentry is locked, its address will do for the cookie */
static inline unsigned long dcookie_value(struct dcookie_struct * dcs) static inline u32 dcookie_value(struct dcookie_struct * dcs)
{ {
return (unsigned long)dcs->dentry; return (u32)dcs->dentry;
} }
static size_t dcookie_hash(unsigned long dcookie) static size_t dcookie_hash(u32 dcookie)
{ {
return (dcookie >> 2) & (hash_size - 1); return (dcookie >> 2) & (hash_size - 1);
} }
static struct dcookie_struct * find_dcookie(unsigned long dcookie) static struct dcookie_struct * find_dcookie(u32 dcookie)
{ {
struct dcookie_struct * found = 0; struct dcookie_struct * found = 0;
struct dcookie_struct * dcs; struct dcookie_struct * dcs;
...@@ -109,7 +109,7 @@ static struct dcookie_struct * alloc_dcookie(struct dentry * dentry, ...@@ -109,7 +109,7 @@ static struct dcookie_struct * alloc_dcookie(struct dentry * dentry,
* value for a dentry/vfsmnt pair. * value for a dentry/vfsmnt pair.
*/ */
int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt, int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
unsigned long * cookie) u32 * cookie)
{ {
int err = 0; int err = 0;
struct dcookie_struct * dcs; struct dcookie_struct * dcs;
...@@ -142,7 +142,7 @@ int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt, ...@@ -142,7 +142,7 @@ int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
/* And here is where the userspace process can look up the cookie value /* And here is where the userspace process can look up the cookie value
* to retrieve the path. * to retrieve the path.
*/ */
asmlinkage int sys_lookup_dcookie(unsigned long cookie, char * buf, size_t len) asmlinkage int sys_lookup_dcookie(u32 cookie, char * buf, size_t len)
{ {
char * kbuf; char * kbuf;
char * path; char * path;
......
...@@ -44,7 +44,7 @@ void dcookie_unregister(struct dcookie_user * user); ...@@ -44,7 +44,7 @@ void dcookie_unregister(struct dcookie_user * user);
* Returns 0 on success, with *cookie filled in * Returns 0 on success, with *cookie filled in
*/ */
int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt, int get_dcookie(struct dentry * dentry, struct vfsmount * vfsmnt,
unsigned long * cookie); u32 * cookie);
#else #else
...@@ -59,7 +59,7 @@ void dcookie_unregister(struct dcookie_user * user) ...@@ -59,7 +59,7 @@ void dcookie_unregister(struct dcookie_user * user)
} }
static inline int get_dcookie(struct dentry * dentry, static inline int get_dcookie(struct dentry * dentry,
struct vfsmount * vfsmnt, unsigned long * cookie) struct vfsmount * vfsmnt, u32 * cookie)
{ {
return -ENOSYS; return -ENOSYS;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment