drivers/acpi/apei/ghes.c
105
static inline bool is_hest_type_generic_v2(struct ghes *ghes)
drivers/acpi/apei/ghes.c
107
return ghes->generic->header.type == ACPI_HEST_TYPE_GENERIC_ERROR_V2;
drivers/acpi/apei/ghes.c
1140
static void __ghes_panic(struct ghes *ghes,
drivers/acpi/apei/ghes.c
1146
__ghes_print_estatus(KERN_EMERG, ghes->generic, estatus);
drivers/acpi/apei/ghes.c
1150
ghes_clear_estatus(ghes, estatus, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1158
static int ghes_proc(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1160
struct acpi_hest_generic_status *estatus = ghes->estatus;
drivers/acpi/apei/ghes.c
1164
rc = ghes_read_estatus(ghes, estatus, &buf_paddr, FIX_APEI_GHES_IRQ);
drivers/acpi/apei/ghes.c
1169
__ghes_panic(ghes, estatus, buf_paddr, FIX_APEI_GHES_IRQ);
drivers/acpi/apei/ghes.c
117
static inline bool is_hest_sync_notify(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1172
if (ghes_print_estatus(NULL, ghes->generic, estatus))
drivers/acpi/apei/ghes.c
1173
ghes_estatus_cache_add(ghes->generic, estatus);
drivers/acpi/apei/ghes.c
1175
ghes_do_proc(ghes, estatus);
drivers/acpi/apei/ghes.c
1178
ghes_clear_estatus(ghes, estatus, buf_paddr, FIX_APEI_GHES_IRQ);
drivers/acpi/apei/ghes.c
1183
static void ghes_add_timer(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1185
struct acpi_hest_generic *g = ghes->generic;
drivers/acpi/apei/ghes.c
119
u8 notify_type = ghes->generic->notify.type;
drivers/acpi/apei/ghes.c
1194
ghes->timer.expires = round_jiffies_relative(expire);
drivers/acpi/apei/ghes.c
1195
add_timer(&ghes->timer);
drivers/acpi/apei/ghes.c
1200
struct ghes *ghes = timer_container_of(ghes, t, timer);
drivers/acpi/apei/ghes.c
1204
ghes_proc(ghes);
drivers/acpi/apei/ghes.c
1206
if (!(ghes->flags & GHES_EXITING))
drivers/acpi/apei/ghes.c
1207
ghes_add_timer(ghes);
drivers/acpi/apei/ghes.c
1212
struct ghes *ghes = data;
drivers/acpi/apei/ghes.c
1217
rc = ghes_proc(ghes);
drivers/acpi/apei/ghes.c
1228
struct ghes *ghes;
drivers/acpi/apei/ghes.c
1233
list_for_each_entry_rcu(ghes, &ghes_hed, list) {
drivers/acpi/apei/ghes.c
1234
if (!ghes_proc(ghes))
drivers/acpi/apei/ghes.c
1282
ghes_do_proc(estatus_node->ghes, estatus);
drivers/acpi/apei/ghes.c
1319
static int ghes_in_nmi_queue_one_entry(struct ghes *ghes,
drivers/acpi/apei/ghes.c
1331
rc = __ghes_peek_estatus(ghes, &tmp_header, &buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1333
ghes_clear_estatus(ghes, &tmp_header, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1337
rc = __ghes_check_estatus(ghes, &tmp_header);
drivers/acpi/apei/ghes.c
1339
ghes_clear_estatus(ghes, &tmp_header, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1349
estatus_node->ghes = ghes;
drivers/acpi/apei/ghes.c
1350
estatus_node->generic = ghes->generic;
drivers/acpi/apei/ghes.c
1354
ghes_clear_estatus(ghes, estatus, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1362
__ghes_panic(ghes, estatus, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1365
ghes_clear_estatus(ghes, &tmp_header, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
1386
struct ghes *ghes;
drivers/acpi/apei/ghes.c
1389
list_for_each_entry_rcu(ghes, rcu_list, list) {
drivers/acpi/apei/ghes.c
1390
if (!ghes_in_nmi_queue_one_entry(ghes, fixmap_idx))
drivers/acpi/apei/ghes.c
1413
struct ghes *ghes;
drivers/acpi/apei/ghes.c
1416
list_for_each_entry_rcu(ghes, ghes_list, list) {
drivers/acpi/apei/ghes.c
1417
if (ghes->error_status_vaddr &&
drivers/acpi/apei/ghes.c
1418
readl(ghes->error_status_vaddr))
drivers/acpi/apei/ghes.c
1434
static int __maybe_unused ghes_map_error_status(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1436
struct acpi_hest_generic *g = ghes->generic;
drivers/acpi/apei/ghes.c
1444
ghes->error_status_vaddr =
drivers/acpi/apei/ghes.c
1445
acpi_os_ioremap(paddr, sizeof(ghes->estatus->block_status));
drivers/acpi/apei/ghes.c
1446
if (!ghes->error_status_vaddr)
drivers/acpi/apei/ghes.c
1458
static void __maybe_unused ghes_unmap_error_status(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1460
if (ghes->error_status_vaddr) {
drivers/acpi/apei/ghes.c
1461
iounmap(ghes->error_status_vaddr);
drivers/acpi/apei/ghes.c
1462
ghes->error_status_vaddr = NULL;
drivers/acpi/apei/ghes.c
1488
static int ghes_sea_add(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1492
rc = ghes_map_error_status(ghes);
drivers/acpi/apei/ghes.c
1497
list_add_rcu(&ghes->list, &ghes_sea);
drivers/acpi/apei/ghes.c
1503
static void ghes_sea_remove(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1506
list_del_rcu(&ghes->list);
drivers/acpi/apei/ghes.c
1508
ghes_unmap_error_status(ghes);
drivers/acpi/apei/ghes.c
1512
static inline int ghes_sea_add(struct ghes *ghes) { return -EINVAL; }
drivers/acpi/apei/ghes.c
1513
static inline void ghes_sea_remove(struct ghes *ghes) { }
drivers/acpi/apei/ghes.c
1545
static int ghes_nmi_add(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1549
rc = ghes_map_error_status(ghes);
drivers/acpi/apei/ghes.c
1556
list_add_rcu(&ghes->list, &ghes_nmi);
drivers/acpi/apei/ghes.c
1562
static void ghes_nmi_remove(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1565
list_del_rcu(&ghes->list);
drivers/acpi/apei/ghes.c
1570
ghes_unmap_error_status(ghes);
drivers/acpi/apei/ghes.c
1579
static inline int ghes_nmi_add(struct ghes *ghes) { return -EINVAL; }
drivers/acpi/apei/ghes.c
1580
static inline void ghes_nmi_remove(struct ghes *ghes) { }
drivers/acpi/apei/ghes.c
1588
static int __ghes_sdei_callback(struct ghes *ghes,
drivers/acpi/apei/ghes.c
1591
if (!ghes_in_nmi_queue_one_entry(ghes, fixmap_idx)) {
drivers/acpi/apei/ghes.c
1604
struct ghes *ghes = arg;
drivers/acpi/apei/ghes.c
1608
err = __ghes_sdei_callback(ghes, FIX_APEI_GHES_SDEI_NORMAL);
drivers/acpi/apei/ghes.c
1618
struct ghes *ghes = arg;
drivers/acpi/apei/ghes.c
1622
err = __ghes_sdei_callback(ghes, FIX_APEI_GHES_SDEI_CRITICAL);
drivers/acpi/apei/ghes.c
1628
static int apei_sdei_register_ghes(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1633
return sdei_register_ghes(ghes, ghes_sdei_normal_callback,
drivers/acpi/apei/ghes.c
1637
static int apei_sdei_unregister_ghes(struct ghes *ghes)
drivers/acpi/apei/ghes.c
1642
return sdei_unregister_ghes(ghes);
drivers/acpi/apei/ghes.c
1648
struct ghes *ghes = NULL;
drivers/acpi/apei/ghes.c
1704
ghes = ghes_new(generic);
drivers/acpi/apei/ghes.c
1705
if (IS_ERR(ghes)) {
drivers/acpi/apei/ghes.c
1706
rc = PTR_ERR(ghes);
drivers/acpi/apei/ghes.c
1707
ghes = NULL;
drivers/acpi/apei/ghes.c
1713
timer_setup(&ghes->timer, ghes_poll_func, 0);
drivers/acpi/apei/ghes.c
1714
ghes_add_timer(ghes);
drivers/acpi/apei/ghes.c
1718
rc = acpi_gsi_to_irq(generic->notify.vector, &ghes->irq);
drivers/acpi/apei/ghes.c
1724
rc = request_irq(ghes->irq, ghes_irq_func, IRQF_SHARED,
drivers/acpi/apei/ghes.c
1725
"GHES IRQ", ghes);
drivers/acpi/apei/ghes.c
1739
list_add_rcu(&ghes->list, &ghes_hed);
drivers/acpi/apei/ghes.c
1744
rc = ghes_sea_add(ghes);
drivers/acpi/apei/ghes.c
1749
rc = ghes_nmi_add(ghes);
drivers/acpi/apei/ghes.c
1754
rc = apei_sdei_register_ghes(ghes);
drivers/acpi/apei/ghes.c
1762
platform_set_drvdata(ghes_dev, ghes);
drivers/acpi/apei/ghes.c
1764
ghes->dev = &ghes_dev->dev;
drivers/acpi/apei/ghes.c
1767
list_add_tail(&ghes->elist, &ghes_devs);
drivers/acpi/apei/ghes.c
1772
ghes_proc(ghes);
drivers/acpi/apei/ghes.c
1778
if (ghes) {
drivers/acpi/apei/ghes.c
1779
ghes_fini(ghes);
drivers/acpi/apei/ghes.c
1780
kfree(ghes);
drivers/acpi/apei/ghes.c
1788
struct ghes *ghes;
drivers/acpi/apei/ghes.c
1791
ghes = platform_get_drvdata(ghes_dev);
drivers/acpi/apei/ghes.c
1792
generic = ghes->generic;
drivers/acpi/apei/ghes.c
1794
ghes->flags |= GHES_EXITING;
drivers/acpi/apei/ghes.c
1797
timer_shutdown_sync(&ghes->timer);
drivers/acpi/apei/ghes.c
1800
free_irq(ghes->irq, ghes);
drivers/acpi/apei/ghes.c
1807
list_del_rcu(&ghes->list);
drivers/acpi/apei/ghes.c
1815
ghes_sea_remove(ghes);
drivers/acpi/apei/ghes.c
1818
ghes_nmi_remove(ghes);
drivers/acpi/apei/ghes.c
1821
rc = apei_sdei_unregister_ghes(ghes);
drivers/acpi/apei/ghes.c
1837
ghes_fini(ghes);
drivers/acpi/apei/ghes.c
1840
list_del(&ghes->elist);
drivers/acpi/apei/ghes.c
1843
kfree(ghes);
drivers/acpi/apei/ghes.c
244
static int map_gen_v2(struct ghes *ghes)
drivers/acpi/apei/ghes.c
246
return apei_map_generic_address(&ghes->generic_v2->read_ack_register);
drivers/acpi/apei/ghes.c
249
static void unmap_gen_v2(struct ghes *ghes)
drivers/acpi/apei/ghes.c
251
apei_unmap_generic_address(&ghes->generic_v2->read_ack_register);
drivers/acpi/apei/ghes.c
269
static struct ghes *ghes_new(struct acpi_hest_generic *generic)
drivers/acpi/apei/ghes.c
271
struct ghes *ghes;
drivers/acpi/apei/ghes.c
275
ghes = kzalloc_obj(*ghes);
drivers/acpi/apei/ghes.c
276
if (!ghes)
drivers/acpi/apei/ghes.c
279
ghes->generic = generic;
drivers/acpi/apei/ghes.c
280
if (is_hest_type_generic_v2(ghes)) {
drivers/acpi/apei/ghes.c
281
rc = map_gen_v2(ghes);
drivers/acpi/apei/ghes.c
297
ghes->estatus = kmalloc(error_block_length, GFP_KERNEL);
drivers/acpi/apei/ghes.c
298
ghes->estatus_length = error_block_length;
drivers/acpi/apei/ghes.c
299
if (!ghes->estatus) {
drivers/acpi/apei/ghes.c
304
return ghes;
drivers/acpi/apei/ghes.c
309
if (is_hest_type_generic_v2(ghes))
drivers/acpi/apei/ghes.c
310
unmap_gen_v2(ghes);
drivers/acpi/apei/ghes.c
312
kfree(ghes);
drivers/acpi/apei/ghes.c
316
static void ghes_fini(struct ghes *ghes)
drivers/acpi/apei/ghes.c
318
kfree(ghes->estatus);
drivers/acpi/apei/ghes.c
319
apei_unmap_generic_address(&ghes->generic->error_status_address);
drivers/acpi/apei/ghes.c
320
if (is_hest_type_generic_v2(ghes))
drivers/acpi/apei/ghes.c
321
unmap_gen_v2(ghes);
drivers/acpi/apei/ghes.c
366
static int __ghes_check_estatus(struct ghes *ghes,
drivers/acpi/apei/ghes.c
370
u32 max_len = min(ghes->generic->error_block_length,
drivers/acpi/apei/ghes.c
371
ghes->estatus_length);
drivers/acpi/apei/ghes.c
392
static int __ghes_peek_estatus(struct ghes *ghes,
drivers/acpi/apei/ghes.c
396
struct acpi_hest_generic *g = ghes->generic;
drivers/acpi/apei/ghes.c
434
static int ghes_read_estatus(struct ghes *ghes,
drivers/acpi/apei/ghes.c
440
rc = __ghes_peek_estatus(ghes, estatus, buf_paddr, fixmap_idx);
drivers/acpi/apei/ghes.c
444
rc = __ghes_check_estatus(ghes, estatus);
drivers/acpi/apei/ghes.c
452
static void ghes_clear_estatus(struct ghes *ghes,
drivers/acpi/apei/ghes.c
469
if (is_hest_type_generic_v2(ghes))
drivers/acpi/apei/ghes.c
470
ghes_ack_error(ghes->generic_v2);
drivers/acpi/apei/ghes.c
894
static void ghes_do_proc(struct ghes *ghes,
drivers/acpi/apei/ghes.c
903
bool sync = is_hest_sync_notify(ghes);
drivers/acpi/apei/ghes.c
958
dev_err(ghes->dev,
drivers/acpi/apei/hest.c
112
struct acpi_hest_generic *ghes;
drivers/acpi/apei/hest.c
119
ghes = (struct acpi_hest_generic *)hest_hdr;
drivers/acpi/apei/hest.c
120
related_source_id = ghes->related_source_id;
drivers/edac/ghes_edac.c
508
static void ghes_edac_unregister(struct ghes *ghes)
drivers/edac/ghes_edac.c
544
struct ghes *g, *g_tmp;
drivers/edac/ghes_edac.c
565
struct ghes *g, *g_tmp;
drivers/firmware/arm_sdei.c
856
int sdei_register_ghes(struct ghes *ghes, sdei_event_callback *normal_cb,
drivers/firmware/arm_sdei.c
867
event_num = ghes->generic->notify.vector;
drivers/firmware/arm_sdei.c
886
err = sdei_event_register(event_num, cb, ghes);
drivers/firmware/arm_sdei.c
893
int sdei_unregister_ghes(struct ghes *ghes)
drivers/firmware/arm_sdei.c
897
u32 event_num = ghes->generic->notify.vector;
include/acpi/ghes.h
39
struct ghes *ghes;
include/linux/arm_sdei.h
41
int sdei_register_ghes(struct ghes *ghes, sdei_event_callback *normal_cb,
include/linux/arm_sdei.h
43
int sdei_unregister_ghes(struct ghes *ghes);