]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
dtrace: only sparc64 uses sdt_tab in pdata
authorKris Van Hees <kris.van.hees@oracle.com>
Wed, 8 Jul 2015 22:33:37 +0000 (18:33 -0400)
committerKris Van Hees <kris.van.hees@oracle.com>
Tue, 21 Jul 2015 06:51:25 +0000 (02:51 -0400)
This commit introduces pdata_init() and pdata_cleanup() to allow
an architecture to perform arch-dependent operations on the pdata
information prior to assigning it to the module, and right before
getting rid of it (at module unloading time).

Signed-off-by: Kris Van Hees <kris.van.hees@oracle.com>
Acked-by: Nick Alcock <nick.alcock@oracle.com>
dtrace/dtrace_dev.c
dtrace/dtrace_isa_sparc64.c
dtrace/dtrace_isa_x86_64.c
dtrace/include/dtrace/dtrace_impl.h

index 0a218d0418bb76fdbd6a8bc8e5675f57a94eaf0d..f512c3a30ef81d091b79ea8cf00b3274e1f7cae0 100644 (file)
@@ -1125,22 +1125,22 @@ static struct miscdevice helper_dev = {
 
 static void module_add_pdata(void *dmy, struct module *mp)
 {
-       dmy = mp->pdata;
-       mp->pdata = kmem_cache_alloc(dtrace_pdata_cachep,
-                                    GFP_KERNEL | __GFP_ZERO);
+       dtrace_module_t *pdata = kmem_cache_alloc(dtrace_pdata_cachep,
+                                                 GFP_KERNEL | __GFP_ZERO);
 
-       if (dmy)
-               PDATA(mp)->sdt_tab = dmy;
+       pdata_init(pdata, mp);
+       mp->pdata = pdata;
 }
 
 static void module_del_pdata(void *dmy, struct module *mp)
 {
-       if (!mp->pdata)
+       dtrace_module_t *pdata = mp->pdata;
+
+       if (!pdata)
                return;
 
-       dmy = PDATA(mp)->sdt_tab;
-       kmem_cache_free(dtrace_pdata_cachep, mp->pdata);
-       mp->pdata = dmy;
+       pdata_cleanup(pdata, mp);
+       kmem_cache_free(dtrace_pdata_cachep, pdata);
 }
 
 static void dtrace_module_loading(struct module *mp)
index 9176c417efa377137b8aa213dd99cac9e89377fb..6a6e0d98efa0f46bb0e683c2ae3f7105a60ab931 100644 (file)
@@ -209,3 +209,14 @@ ulong_t dtrace_getreg(struct task_struct *task, uint_t reg)
                return 0;
        }
 }
+
+void pdata_init(dtrace_module_t *pdata, struct module *mp)
+{
+       if (mp->pdata)
+               pdata->sdt_tab = mp->pdata;
+}
+
+void pdata_cleanup(dtrace_module_t *pdata, struct module *mp)
+{
+       mp->pdata = pdata->sdt_tab;
+}
index 192017123515054f355398c6de41adea55ffaa47..43b90a5b39361b1331257ca2cf70413ad86d5e3c 100644 (file)
@@ -226,3 +226,11 @@ ulong_t dtrace_getreg(struct task_struct *task, uint_t reg)
                return 0;
        }
 }
+
+void pdata_init(dtrace_module_t *pdata, struct module *mp)
+{
+}
+
+void pdata_cleanup(dtrace_module_t *pdata, struct module *mp)
+{
+}
index e681855cb6c50254cb8c409c2e6bd494f8e736cb..cd2c420681ad6d87a12503077f7447c48eca2cee 100644 (file)
@@ -905,6 +905,9 @@ extern void dtrace_copyoutstr(uintptr_t, uintptr_t, size_t,
                              volatile uint16_t *);
 extern uintptr_t dtrace_caller(int);
 
+extern void pdata_init(dtrace_module_t *, struct module *);
+extern void pdata_cleanup(dtrace_module_t *, struct module *);
+
 extern void debug_enter(char *);
 
 #endif /* _LINUX_DTRACE_IMPL_H */