mirror of https://github.com/xemu-project/xemu.git
hw/xen: add get_frontend_path() method to XenDeviceClass
The primary Xen console is special. The guest's side is set up for it by the toolstack automatically and not by the standard PV init sequence. Accordingly, its *frontend* doesn't appear in …/device/console/0 either; instead it appears under …/console in the guest's XenStore node. To allow the Xen console driver to override the frontend path for the primary console, add a method to the XenDeviceClass which can be used instead of the standard xen_device_get_frontend_path() Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Reviewed-by: Paul Durrant <paul@xen.org>
This commit is contained in:
parent
d3256f88d9
commit
523b6b3aba
|
@ -711,8 +711,17 @@ static void xen_device_frontend_create(XenDevice *xendev, Error **errp)
|
|||
{
|
||||
ERRP_GUARD();
|
||||
XenBus *xenbus = XEN_BUS(qdev_get_parent_bus(DEVICE(xendev)));
|
||||
XenDeviceClass *xendev_class = XEN_DEVICE_GET_CLASS(xendev);
|
||||
|
||||
xendev->frontend_path = xen_device_get_frontend_path(xendev);
|
||||
if (xendev_class->get_frontend_path) {
|
||||
xendev->frontend_path = xendev_class->get_frontend_path(xendev, errp);
|
||||
if (!xendev->frontend_path) {
|
||||
error_prepend(errp, "failed to create frontend: ");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
xendev->frontend_path = xen_device_get_frontend_path(xendev);
|
||||
}
|
||||
|
||||
/*
|
||||
* The frontend area may have already been created by a legacy
|
||||
|
|
|
@ -33,6 +33,7 @@ struct XenDevice {
|
|||
};
|
||||
typedef struct XenDevice XenDevice;
|
||||
|
||||
typedef char *(*XenDeviceGetFrontendPath)(XenDevice *xendev, Error **errp);
|
||||
typedef char *(*XenDeviceGetName)(XenDevice *xendev, Error **errp);
|
||||
typedef void (*XenDeviceRealize)(XenDevice *xendev, Error **errp);
|
||||
typedef void (*XenDeviceFrontendChanged)(XenDevice *xendev,
|
||||
|
@ -46,6 +47,7 @@ struct XenDeviceClass {
|
|||
/*< public >*/
|
||||
const char *backend;
|
||||
const char *device;
|
||||
XenDeviceGetFrontendPath get_frontend_path;
|
||||
XenDeviceGetName get_name;
|
||||
XenDeviceRealize realize;
|
||||
XenDeviceFrontendChanged frontend_changed;
|
||||
|
|
Loading…
Reference in New Issue