Lines Matching refs:attr

58 	struct fei_attr *attr;  in fei_attr_new()  local
60 attr = kzalloc(sizeof(*attr), GFP_KERNEL); in fei_attr_new()
61 if (attr) { in fei_attr_new()
62 attr->kp.symbol_name = kstrdup(sym, GFP_KERNEL); in fei_attr_new()
63 if (!attr->kp.symbol_name) { in fei_attr_new()
64 kfree(attr); in fei_attr_new()
67 attr->kp.pre_handler = fei_kprobe_handler; in fei_attr_new()
68 attr->kp.post_handler = fei_post_handler; in fei_attr_new()
69 attr->retval = adjust_error_retval(addr, 0); in fei_attr_new()
70 INIT_LIST_HEAD(&attr->list); in fei_attr_new()
72 return attr; in fei_attr_new()
75 static void fei_attr_free(struct fei_attr *attr) in fei_attr_free() argument
77 if (attr) { in fei_attr_free()
78 kfree(attr->kp.symbol_name); in fei_attr_free()
79 kfree(attr); in fei_attr_free()
85 struct fei_attr *attr; in fei_attr_lookup() local
87 list_for_each_entry(attr, &fei_attr_list, list) { in fei_attr_lookup()
88 if (!strcmp(attr->kp.symbol_name, sym)) in fei_attr_lookup()
89 return attr; in fei_attr_lookup()
97 struct fei_attr *attr; in fei_attr_is_valid() local
99 list_for_each_entry(attr, &fei_attr_list, list) { in fei_attr_is_valid()
100 if (attr == _attr) in fei_attr_is_valid()
109 struct fei_attr *attr = data; in fei_retval_set() local
119 if (!fei_attr_is_valid(attr)) { in fei_retval_set()
124 if (attr->kp.addr) { in fei_retval_set()
125 if (adjust_error_retval((unsigned long)attr->kp.addr, in fei_retval_set()
130 attr->retval = val; in fei_retval_set()
139 struct fei_attr *attr = data; in fei_retval_get() local
144 if (!fei_attr_is_valid(attr)) in fei_retval_get()
147 *val = attr->retval; in fei_retval_get()
155 static void fei_debugfs_add_attr(struct fei_attr *attr) in fei_debugfs_add_attr() argument
159 dir = debugfs_create_dir(attr->kp.symbol_name, fei_debugfs_dir); in fei_debugfs_add_attr()
161 debugfs_create_file("retval", 0600, dir, attr, &fei_retval_ops); in fei_debugfs_add_attr()
164 static void fei_debugfs_remove_attr(struct fei_attr *attr) in fei_debugfs_remove_attr() argument
166 debugfs_lookup_and_remove(attr->kp.symbol_name, fei_debugfs_dir); in fei_debugfs_remove_attr()
171 struct fei_attr *attr = container_of(kp, struct fei_attr, kp); in fei_kprobe_handler() local
174 regs_set_return_value(regs, attr->retval); in fei_kprobe_handler()
201 struct fei_attr *attr = list_entry(v, struct fei_attr, list); in fei_seq_show() local
203 seq_printf(m, "%ps\n", attr->kp.addr); in fei_seq_show()
219 static void fei_attr_remove(struct fei_attr *attr) in fei_attr_remove() argument
221 fei_debugfs_remove_attr(attr); in fei_attr_remove()
222 unregister_kprobe(&attr->kp); in fei_attr_remove()
223 list_del(&attr->list); in fei_attr_remove()
224 fei_attr_free(attr); in fei_attr_remove()
229 struct fei_attr *attr, *n; in fei_attr_remove_all() local
231 list_for_each_entry_safe(attr, n, &fei_attr_list, list) { in fei_attr_remove_all()
232 fei_attr_remove(attr); in fei_attr_remove_all()
239 struct fei_attr *attr; in fei_write() local
264 attr = fei_attr_lookup(sym + 1); in fei_write()
265 if (!attr) { in fei_write()
269 fei_attr_remove(attr); in fei_write()
287 attr = fei_attr_new(sym, addr); in fei_write()
288 if (!attr) { in fei_write()
293 ret = register_kprobe(&attr->kp); in fei_write()
295 fei_attr_free(attr); in fei_write()
298 fei_debugfs_add_attr(attr); in fei_write()
299 list_add_tail(&attr->list, &fei_attr_list); in fei_write()