Lines Matching +full:x +full:- +full:rc
1 // SPDX-License-Identifier: GPL-2.0-or-later
28 #define to_dump_obj(x) container_of(x, struct dump_obj, kobj) argument
37 #define to_dump_attr(x) container_of(x, struct dump_attribute, attr) argument
43 return sprintf(buf, "0x%x\n", dump_obj->id); in dump_id_show()
61 return sprintf(buf, "0x%x %s\n", dump_obj->type, in dump_type_show()
62 dump_type_to_string(dump_obj->type)); in dump_type_show()
69 return sprintf(buf, "ack - acknowledge dump\n"); in dump_ack_show()
77 int rc; in dump_send_ack() local
79 rc = opal_dump_ack(dump_id); in dump_send_ack()
80 if (rc) in dump_send_ack()
81 pr_warn("%s: Failed to send ack to Dump ID 0x%x (%d)\n", in dump_send_ack()
82 __func__, dump_id, rc); in dump_send_ack()
83 return rc; in dump_send_ack()
95 if (sysfs_remove_file_self(&dump_obj->kobj, &attr->attr)) { in dump_ack_store()
96 dump_send_ack(dump_obj->id); in dump_ack_store()
97 kobject_put(&dump_obj->kobj); in dump_ack_store()
117 return sprintf(buf, "1 - initiate Service Processor(FSP) dump\n"); in init_dump_show()
122 int rc; in dump_fips_init() local
124 rc = opal_dump_init(type); in dump_fips_init()
125 if (rc) in dump_fips_init()
127 __func__, rc); in dump_fips_init()
128 return rc; in dump_fips_init()
136 int rc; in init_dump_store() local
138 rc = dump_fips_init(DUMP_TYPE_FSP); in init_dump_store()
139 if (rc == OPAL_SUCCESS) in init_dump_store()
169 if (!attribute->show) in dump_attr_show()
170 return -EIO; in dump_attr_show()
172 return attribute->show(dump, attribute, buf); in dump_attr_show()
185 if (!attribute->store) in dump_attr_store()
186 return -EIO; in dump_attr_store()
188 return attribute->store(dump, attribute, buf, len); in dump_attr_store()
201 vfree(dump->buffer); in dump_release()
222 int rc; in dump_read_info() local
226 rc = opal_dump_info2(&id, &size, &type); in dump_read_info()
227 if (rc == OPAL_PARAMETER) in dump_read_info()
228 rc = opal_dump_info(&id, &size); in dump_read_info()
230 if (rc) { in dump_read_info()
232 __func__, rc); in dump_read_info()
233 return rc; in dump_read_info()
240 return rc; in dump_read_info()
247 int64_t rc; in dump_read_data() local
250 dump->buffer = vzalloc(PAGE_ALIGN(dump->size)); in dump_read_data()
251 if (!dump->buffer) { in dump_read_data()
253 rc = -ENOMEM; in dump_read_data()
258 list = opal_vmalloc_to_sg_list(dump->buffer, dump->size); in dump_read_data()
260 rc = -ENOMEM; in dump_read_data()
268 rc = OPAL_BUSY_EVENT; in dump_read_data()
269 while (rc == OPAL_BUSY || rc == OPAL_BUSY_EVENT) { in dump_read_data()
270 rc = opal_dump_read(dump->id, addr); in dump_read_data()
271 if (rc == OPAL_BUSY_EVENT) { in dump_read_data()
277 if (rc != OPAL_SUCCESS && rc != OPAL_PARTIAL) in dump_read_data()
278 pr_warn("%s: Extract dump failed for ID 0x%x\n", in dump_read_data()
279 __func__, dump->id); in dump_read_data()
285 return rc; in dump_read_data()
292 ssize_t rc; in dump_attr_read() local
296 if (!dump->buffer) { in dump_attr_read()
297 rc = dump_read_data(dump); in dump_attr_read()
299 if (rc != OPAL_SUCCESS && rc != OPAL_PARTIAL) { in dump_attr_read()
300 vfree(dump->buffer); in dump_attr_read()
301 dump->buffer = NULL; in dump_attr_read()
303 return -EIO; in dump_attr_read()
305 if (rc == OPAL_PARTIAL) { in dump_attr_read()
310 pr_info("%s: Platform dump partially read. ID = 0x%x\n", in dump_attr_read()
311 __func__, dump->id); in dump_attr_read()
312 return -EIO; in dump_attr_read()
316 memcpy(buffer, dump->buffer + pos, count); in dump_attr_read()
330 int rc; in create_dump_obj() local
336 dump->kobj.kset = dump_kset; in create_dump_obj()
338 kobject_init(&dump->kobj, &dump_ktype); in create_dump_obj()
340 sysfs_bin_attr_init(&dump->dump_attr); in create_dump_obj()
342 dump->dump_attr.attr.name = "dump"; in create_dump_obj()
343 dump->dump_attr.attr.mode = 0400; in create_dump_obj()
344 dump->dump_attr.size = size; in create_dump_obj()
345 dump->dump_attr.read = dump_attr_read; in create_dump_obj()
347 dump->id = id; in create_dump_obj()
348 dump->size = size; in create_dump_obj()
349 dump->type = type; in create_dump_obj()
351 rc = kobject_add(&dump->kobj, NULL, "0x%x-0x%x", type, id); in create_dump_obj()
352 if (rc) { in create_dump_obj()
353 kobject_put(&dump->kobj); in create_dump_obj()
362 * dump_ack_store->kobject_put() and kobject_uevent() which leads to a in create_dump_obj()
363 * use-after-free of a kernfs object resulting in a kernel crash. in create_dump_obj()
372 kobject_get(&dump->kobj); in create_dump_obj()
373 rc = sysfs_create_bin_file(&dump->kobj, &dump->dump_attr); in create_dump_obj()
374 if (rc == 0) { in create_dump_obj()
375 kobject_uevent(&dump->kobj, KOBJ_ADD); in create_dump_obj()
377 pr_info("%s: New platform dump. ID = 0x%x Size %u\n", in create_dump_obj()
378 __func__, dump->id, dump->size); in create_dump_obj()
381 kobject_put(&dump->kobj); in create_dump_obj()
385 kobject_put(&dump->kobj); in create_dump_obj()
391 int rc; in process_dump() local
396 rc = dump_read_info(&dump_id, &dump_size, &dump_type); in process_dump()
397 if (rc != OPAL_SUCCESS) in process_dump()
400 sprintf(name, "0x%x-0x%x", dump_type, dump_id); in process_dump()
420 int rc; in opal_platform_dump_init() local
433 rc = sysfs_create_group(&dump_kset->kobj, &initiate_attr_group); in opal_platform_dump_init()
434 if (rc) { in opal_platform_dump_init()
437 kobject_put(&dump_kset->kobj); in opal_platform_dump_init()
448 rc = request_threaded_irq(dump_irq, NULL, process_dump, in opal_platform_dump_init()
450 "opal-dump", NULL); in opal_platform_dump_init()
451 if (rc) { in opal_platform_dump_init()
453 __func__, rc); in opal_platform_dump_init()