mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-09-08 16:07:39 -06:00
xics: Explicitely call KVM ICS methods from the common code
The pre_save(), post_load() and synchronize_state() methods of the ICSStateClass type are really KVM only things. Make that obvious by dropping the indirections and directly calling the KVM functions instead. Signed-off-by: Greg Kurz <groug@kaod.org> Message-Id: <155023081817.1011724.14078777320394028836.stgit@bahia.lan> Reviewed-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
8c1ced677d
commit
d80b2ccfa7
3 changed files with 18 additions and 24 deletions
|
@ -58,7 +58,6 @@ void icp_pic_print_info(ICPState *icp, Monitor *mon)
|
||||||
|
|
||||||
void ics_pic_print_info(ICSState *ics, Monitor *mon)
|
void ics_pic_print_info(ICSState *ics, Monitor *mon)
|
||||||
{
|
{
|
||||||
ICSStateClass *icsc = ICS_BASE_GET_CLASS(ics);
|
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
monitor_printf(mon, "ICS %4x..%4x %p\n",
|
monitor_printf(mon, "ICS %4x..%4x %p\n",
|
||||||
|
@ -68,8 +67,8 @@ void ics_pic_print_info(ICSState *ics, Monitor *mon)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (icsc->synchronize_state) {
|
if (kvm_irqchip_in_kernel()) {
|
||||||
icsc->synchronize_state(ics);
|
ics_synchronize_state(ics);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < ics->nr_irqs; i++) {
|
for (i = 0; i < ics->nr_irqs; i++) {
|
||||||
|
@ -647,25 +646,23 @@ static void ics_base_instance_init(Object *obj)
|
||||||
ics->offset = XICS_IRQ_BASE;
|
ics->offset = XICS_IRQ_BASE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ics_base_dispatch_pre_save(void *opaque)
|
static int ics_base_pre_save(void *opaque)
|
||||||
{
|
{
|
||||||
ICSState *ics = opaque;
|
ICSState *ics = opaque;
|
||||||
ICSStateClass *info = ICS_BASE_GET_CLASS(ics);
|
|
||||||
|
|
||||||
if (info->pre_save) {
|
if (kvm_irqchip_in_kernel()) {
|
||||||
info->pre_save(ics);
|
ics_get_kvm_state(ics);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ics_base_dispatch_post_load(void *opaque, int version_id)
|
static int ics_base_post_load(void *opaque, int version_id)
|
||||||
{
|
{
|
||||||
ICSState *ics = opaque;
|
ICSState *ics = opaque;
|
||||||
ICSStateClass *info = ICS_BASE_GET_CLASS(ics);
|
|
||||||
|
|
||||||
if (info->post_load) {
|
if (kvm_irqchip_in_kernel()) {
|
||||||
return info->post_load(ics, version_id);
|
return ics_set_kvm_state(ics);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -689,8 +686,8 @@ static const VMStateDescription vmstate_ics_base = {
|
||||||
.name = "ics",
|
.name = "ics",
|
||||||
.version_id = 1,
|
.version_id = 1,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 1,
|
||||||
.pre_save = ics_base_dispatch_pre_save,
|
.pre_save = ics_base_pre_save,
|
||||||
.post_load = ics_base_dispatch_post_load,
|
.post_load = ics_base_post_load,
|
||||||
.fields = (VMStateField[]) {
|
.fields = (VMStateField[]) {
|
||||||
/* Sanity check */
|
/* Sanity check */
|
||||||
VMSTATE_UINT32_EQUAL(nr_irqs, ICSState, NULL),
|
VMSTATE_UINT32_EQUAL(nr_irqs, ICSState, NULL),
|
||||||
|
|
|
@ -155,7 +155,7 @@ void icp_kvm_realize(DeviceState *dev, Error **errp)
|
||||||
/*
|
/*
|
||||||
* ICS-KVM
|
* ICS-KVM
|
||||||
*/
|
*/
|
||||||
static void ics_get_kvm_state(ICSState *ics)
|
void ics_get_kvm_state(ICSState *ics)
|
||||||
{
|
{
|
||||||
uint64_t state;
|
uint64_t state;
|
||||||
int i;
|
int i;
|
||||||
|
@ -208,12 +208,12 @@ static void ics_get_kvm_state(ICSState *ics)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ics_synchronize_state(ICSState *ics)
|
void ics_synchronize_state(ICSState *ics)
|
||||||
{
|
{
|
||||||
ics_get_kvm_state(ics);
|
ics_get_kvm_state(ics);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ics_set_kvm_state(ICSState *ics, int version_id)
|
int ics_set_kvm_state(ICSState *ics)
|
||||||
{
|
{
|
||||||
uint64_t state;
|
uint64_t state;
|
||||||
int i;
|
int i;
|
||||||
|
@ -286,7 +286,7 @@ static void ics_kvm_reset(DeviceState *dev)
|
||||||
|
|
||||||
icsc->parent_reset(dev);
|
icsc->parent_reset(dev);
|
||||||
|
|
||||||
ics_set_kvm_state(ICS_KVM(dev), 1);
|
ics_set_kvm_state(ICS_KVM(dev));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ics_kvm_reset_handler(void *dev)
|
static void ics_kvm_reset_handler(void *dev)
|
||||||
|
@ -318,10 +318,6 @@ static void ics_kvm_class_init(ObjectClass *klass, void *data)
|
||||||
&icsc->parent_realize);
|
&icsc->parent_realize);
|
||||||
device_class_set_parent_reset(dc, ics_kvm_reset,
|
device_class_set_parent_reset(dc, ics_kvm_reset,
|
||||||
&icsc->parent_reset);
|
&icsc->parent_reset);
|
||||||
|
|
||||||
icsc->pre_save = ics_get_kvm_state;
|
|
||||||
icsc->post_load = ics_set_kvm_state;
|
|
||||||
icsc->synchronize_state = ics_synchronize_state;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const TypeInfo ics_kvm_info = {
|
static const TypeInfo ics_kvm_info = {
|
||||||
|
|
|
@ -109,12 +109,9 @@ struct ICSStateClass {
|
||||||
DeviceRealize parent_realize;
|
DeviceRealize parent_realize;
|
||||||
DeviceReset parent_reset;
|
DeviceReset parent_reset;
|
||||||
|
|
||||||
void (*pre_save)(ICSState *s);
|
|
||||||
int (*post_load)(ICSState *s, int version_id);
|
|
||||||
void (*reject)(ICSState *s, uint32_t irq);
|
void (*reject)(ICSState *s, uint32_t irq);
|
||||||
void (*resend)(ICSState *s);
|
void (*resend)(ICSState *s);
|
||||||
void (*eoi)(ICSState *s, uint32_t irq);
|
void (*eoi)(ICSState *s, uint32_t irq);
|
||||||
void (*synchronize_state)(ICSState *s);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ICSState {
|
struct ICSState {
|
||||||
|
@ -201,4 +198,8 @@ int icp_set_kvm_state(ICPState *icp);
|
||||||
void icp_synchronize_state(ICPState *icp);
|
void icp_synchronize_state(ICPState *icp);
|
||||||
void icp_kvm_realize(DeviceState *dev, Error **errp);
|
void icp_kvm_realize(DeviceState *dev, Error **errp);
|
||||||
|
|
||||||
|
void ics_get_kvm_state(ICSState *ics);
|
||||||
|
int ics_set_kvm_state(ICSState *ics);
|
||||||
|
void ics_synchronize_state(ICSState *ics);
|
||||||
|
|
||||||
#endif /* XICS_H */
|
#endif /* XICS_H */
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue