mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 00:33:55 -06:00
spapr_events: add support for dedicated hotplug event source
Hotplug events were previously delivered using an EPOW interrupt and were queued by linux guests into a circular buffer. For traditional EPOW events like shutdown/resets, this isn't an issue, but for hotplug events there are cases where this buffer can be exhausted, resulting in the loss of hotplug events, resets, etc. Newer-style hotplug event are delivered using a dedicated event source. We enable this in supported guests by adding standard an additional event source in the guest device-tree via /event-sources, and, if the guest advertises support for the newer-style hotplug events, using the corresponding interrupt to signal the available of hotplug/unplug events. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
9f992cca93
commit
ffbb1705a3
4 changed files with 177 additions and 41 deletions
|
@ -13,6 +13,7 @@ struct sPAPRPHBState;
|
|||
struct sPAPRNVRAM;
|
||||
typedef struct sPAPRConfigureConnectorState sPAPRConfigureConnectorState;
|
||||
typedef struct sPAPREventLogEntry sPAPREventLogEntry;
|
||||
typedef struct sPAPREventSource sPAPREventSource;
|
||||
|
||||
#define HPTE64_V_HPTE_DIRTY 0x0000000000000040ULL
|
||||
#define SPAPR_ENTRY_POINT 0x100
|
||||
|
@ -77,9 +78,10 @@ struct sPAPRMachineState {
|
|||
sPAPROptionVector *ov5_cas; /* negotiated (via CAS) option vectors */
|
||||
bool cas_reboot;
|
||||
|
||||
uint32_t check_exception_irq;
|
||||
Notifier epow_notifier;
|
||||
QTAILQ_HEAD(, sPAPREventLogEntry) pending_events;
|
||||
bool use_hotplug_event_source;
|
||||
sPAPREventSource *event_sources;
|
||||
|
||||
/* Migration state */
|
||||
int htab_save_index;
|
||||
|
@ -584,7 +586,7 @@ struct sPAPREventLogEntry {
|
|||
};
|
||||
|
||||
void spapr_events_init(sPAPRMachineState *sm);
|
||||
void spapr_dt_events(void *fdt, uint32_t check_exception_irq);
|
||||
void spapr_dt_events(sPAPRMachineState *sm, void *fdt);
|
||||
int spapr_h_cas_compose_response(sPAPRMachineState *sm,
|
||||
target_ulong addr, target_ulong size,
|
||||
bool cpu_update,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue