Lines Matching refs:attr

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