Lines Matching +full:event +full:-

1 // SPDX-License-Identifier: GPL-2.0-or-later
15 #include <asm/ppc-pci.h>
21 * This pair of routines creates an event and queues it onto a
22 * work-queue, where a worker thread can drive recovery.
30 * eeh_event_handler - Dispatch EEH events.
31 * @dummy - unused
36 * of the interrupt handler, and re-dispatch them for processing
42 struct eeh_event *event; in eeh_event_handler() local
48 /* Fetch EEH event from the queue */ in eeh_event_handler()
50 event = NULL; in eeh_event_handler()
52 event = list_entry(eeh_eventlist.next, in eeh_event_handler()
54 list_del(&event->list); in eeh_event_handler()
57 if (!event) in eeh_event_handler()
60 /* We might have event without binding PE */ in eeh_event_handler()
61 if (event->pe) in eeh_event_handler()
62 eeh_handle_normal_event(event->pe); in eeh_event_handler()
66 kfree(event); in eeh_event_handler()
73 * eeh_event_init - Start kernel thread to handle EEH events
76 * EEH event.
95 * eeh_send_failure_event - Generate a PCI error event
99 * the actual event will be delivered in a normal context
105 struct eeh_event *event; in __eeh_send_failure_event() local
107 event = kzalloc(sizeof(*event), GFP_ATOMIC); in __eeh_send_failure_event()
108 if (!event) { in __eeh_send_failure_event()
109 pr_err("EEH: out of memory, event not handled\n"); in __eeh_send_failure_event()
110 return -ENOMEM; in __eeh_send_failure_event()
112 event->pe = pe; in __eeh_send_failure_event()
117 * while the PE is sitting in the event queue. in __eeh_send_failure_event()
123 * event handler thread. in __eeh_send_failure_event()
125 pe->trace_entries = stack_trace_save(pe->stack_trace, in __eeh_send_failure_event()
126 ARRAY_SIZE(pe->stack_trace), 0); in __eeh_send_failure_event()
134 list_add(&event->list, &eeh_eventlist); in __eeh_send_failure_event()
150 pr_err("EEH: Event dropped due to no_recover setting\n"); in eeh_send_failure_event()
158 * eeh_remove_event - Remove EEH event from the queue
159 * @pe: Event binding to the PE
160 * @force: Event will be removed unconditionally
170 struct eeh_event *event, *tmp; in eeh_remove_event() local
177 * With "force", the event with associated PE that in eeh_remove_event()
178 * have been isolated, the event won't be removed in eeh_remove_event()
179 * to avoid event lost. in eeh_remove_event()
182 list_for_each_entry_safe(event, tmp, &eeh_eventlist, list) { in eeh_remove_event()
183 if (!force && event->pe && in eeh_remove_event()
184 (event->pe->state & EEH_PE_ISOLATED)) in eeh_remove_event()
188 list_del(&event->list); in eeh_remove_event()
189 kfree(event); in eeh_remove_event()
190 } else if (pe->type & EEH_PE_PHB) { in eeh_remove_event()
191 if (event->pe && event->pe->phb == pe->phb) { in eeh_remove_event()
192 list_del(&event->list); in eeh_remove_event()
193 kfree(event); in eeh_remove_event()
195 } else if (event->pe == pe) { in eeh_remove_event()
196 list_del(&event->list); in eeh_remove_event()
197 kfree(event); in eeh_remove_event()