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
168 dir = debugfs_lookup(attr->kp.symbol_name, fei_debugfs_dir); in fei_debugfs_remove_attr()
174 struct fei_attr *attr = container_of(kp, struct fei_attr, kp); in fei_kprobe_handler() local
177 regs_set_return_value(regs, attr->retval); in fei_kprobe_handler()
204 struct fei_attr *attr = list_entry(v, struct fei_attr, list); in fei_seq_show() local
206 seq_printf(m, "%ps\n", attr->kp.addr); in fei_seq_show()
222 static void fei_attr_remove(struct fei_attr *attr) in fei_attr_remove() argument
224 fei_debugfs_remove_attr(attr); in fei_attr_remove()
225 unregister_kprobe(&attr->kp); in fei_attr_remove()
226 list_del(&attr->list); in fei_attr_remove()
227 fei_attr_free(attr); in fei_attr_remove()
232 struct fei_attr *attr, *n; in fei_attr_remove_all() local
234 list_for_each_entry_safe(attr, n, &fei_attr_list, list) { in fei_attr_remove_all()
235 fei_attr_remove(attr); in fei_attr_remove_all()
242 struct fei_attr *attr; in fei_write() local
271 attr = fei_attr_lookup(sym + 1); in fei_write()
272 if (!attr) { in fei_write()
276 fei_attr_remove(attr); in fei_write()
294 attr = fei_attr_new(sym, addr); in fei_write()
295 if (!attr) { in fei_write()
300 ret = register_kprobe(&attr->kp); in fei_write()
302 fei_debugfs_add_attr(attr); in fei_write()
304 fei_attr_remove(attr); in fei_write()
306 list_add_tail(&attr->list, &fei_attr_list); in fei_write()