s390x/event-facility: Simplify sclp_get_event_facility_bus()

sclp_get_event_facility_bus() scans the whole machine to find a
TYPE_SCLP_EVENTS_BUS object. The SCLPDevice instance is now available
under the machine state, use it to simplify the lookup and adjust the
creation of the consoles.

Signed-off-by: Cédric Le Goater <clg@redhat.com>
Message-ID: <20240502131533.377719-3-clg@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
Cédric Le Goater 2024-05-02 15:15:32 +02:00 committed by Thomas Huth
parent b350f6c8ed
commit af4a3e32f3
3 changed files with 10 additions and 17 deletions

View File

@ -523,16 +523,7 @@ static void register_types(void)
type_init(register_types)
BusState *sclp_get_event_facility_bus(void)
BusState *sclp_get_event_facility_bus(SCLPEventFacility *ef)
{
Object *busobj;
SCLPEventsBus *sbus;
busobj = object_resolve_path_type("", TYPE_SCLP_EVENTS_BUS, NULL);
sbus = OBJECT_CHECK(SCLPEventsBus, busobj, TYPE_SCLP_EVENTS_BUS);
if (!sbus) {
return NULL;
}
return &sbus->qbus;
return BUS(&ef->sbus);
}

View File

@ -237,13 +237,15 @@ static void s390_create_virtio_net(BusState *bus, const char *name)
}
}
static void s390_create_sclpconsole(const char *type, Chardev *chardev)
static void s390_create_sclpconsole(SCLPDevice *sclp,
const char *type, Chardev *chardev)
{
BusState *ev_fac_bus = sclp_get_event_facility_bus();
SCLPEventFacility *ef = sclp->event_facility;
BusState *ev_fac_bus = sclp_get_event_facility_bus(ef);
DeviceState *dev;
dev = qdev_new(type);
object_property_add_child(OBJECT(ev_fac_bus->parent), type, OBJECT(dev));
object_property_add_child(OBJECT(ef), type, OBJECT(dev));
qdev_prop_set_chr(dev, "chardev", chardev);
qdev_realize_and_unref(dev, ev_fac_bus, &error_fatal);
}
@ -308,10 +310,10 @@ static void ccw_init(MachineState *machine)
/* init consoles */
if (serial_hd(0)) {
s390_create_sclpconsole("sclpconsole", serial_hd(0));
s390_create_sclpconsole(ms->sclp, "sclpconsole", serial_hd(0));
}
if (serial_hd(1)) {
s390_create_sclpconsole("sclplmconsole", serial_hd(1));
s390_create_sclpconsole(ms->sclp, "sclplmconsole", serial_hd(1));
}
/* init the TOD clock */

View File

@ -203,6 +203,6 @@ struct SCLPEventFacilityClass {
bool (*event_pending)(SCLPEventFacility *ef);
};
BusState *sclp_get_event_facility_bus(void);
BusState *sclp_get_event_facility_bus(SCLPEventFacility *ef);
#endif