[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 1/2] Introduce a new 'connected' xendev op called when Connected.
CC'ing Gerd. On Wed, 7 Jul 2010, John Haxby wrote: > Rename the existing xendev 'connect' op to 'initialised' and introduce > a new 'connected' op. This new op, if defined, is called when the > backend is connected. Note that since there is no state transition this > may be called more than once. > > Signed-off-by: John Haxby <john.haxby@xxxxxxxxxx> Acked-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx> > --- > hw/xen_backend.c | 39 +++++++++++++++++++++++++++++++++------ > hw/xen_backend.h | 3 ++- > hw/xen_console.c | 4 ++-- > hw/xenfb.c | 8 ++++---- > 4 files changed, 41 insertions(+), 13 deletions(-) > > diff --git a/hw/xen_backend.c b/hw/xen_backend.c > index 8c92739..afd0bf2 100644 > --- a/hw/xen_backend.c > +++ b/hw/xen_backend.c > @@ -401,13 +401,13 @@ static int xen_be_try_init(struct XenDevice *xendev) > } > > /* > - * Try to connect xendev. Depends on the frontend being ready > + * Try to initialise xendev. Depends on the frontend being ready > * for it (shared ring and evtchn info in xenstore, state being > * Initialised or Connected). > * > * Goes to Connected on success. > */ > -static int xen_be_try_connect(struct XenDevice *xendev) > +static int xen_be_try_initialise(struct XenDevice *xendev) > { > int rc = 0; > > @@ -421,10 +421,10 @@ static int xen_be_try_connect(struct XenDevice *xendev) > } > } > > - if (xendev->ops->connect) > - rc = xendev->ops->connect(xendev); > + if (xendev->ops->initialise) > + rc = xendev->ops->initialise(xendev); > if (rc != 0) { > - xen_be_printf(xendev, 0, "connect() failed\n"); > + xen_be_printf(xendev, 0, "initialise() failed\n"); > return rc; > } > > @@ -433,6 +433,28 @@ static int xen_be_try_connect(struct XenDevice *xendev) > } > > /* > + * Try to let xendev know that it is connected. Depends on the > + * frontend being Connected. Note that this may be called more > + * than once since the backend state is not modified. > + */ > +static void xen_be_try_connected(struct XenDevice *xendev) > +{ > + if (!xendev->ops->connected) > + return; > + > + if (xendev->fe_state != XenbusStateConnected) { > + if (xendev->ops->flags & DEVOPS_FLAG_IGNORE_STATE) { > + xen_be_printf(xendev, 2, "frontend not ready, ignoring\n"); > + } else { > + xen_be_printf(xendev, 2, "frontend not ready (yet)\n"); > + return; > + } > + } > + > + xendev->ops->connected(xendev); > +} > + > +/* > * Teardown connection. > * > * Goes to Closed when done. > @@ -484,7 +506,12 @@ void xen_be_check_state(struct XenDevice *xendev) > rc = xen_be_try_init(xendev); > break; > case XenbusStateInitWait: > - rc = xen_be_try_connect(xendev); > + rc = xen_be_try_initialise(xendev); > + break; > + case XenbusStateConnected: > + /* xendev->be_state doesn't change */ > + xen_be_try_connected(xendev); > + rc = -1; > break; > case XenbusStateClosed: > rc = xen_be_try_reset(xendev); > diff --git a/hw/xen_backend.h b/hw/xen_backend.h > index 672a857..7e89ef4 100644 > --- a/hw/xen_backend.h > +++ b/hw/xen_backend.h > @@ -19,7 +19,8 @@ struct XenDevOps { > uint32_t flags; > void (*alloc)(struct XenDevice *xendev); > int (*init)(struct XenDevice *xendev); > - int (*connect)(struct XenDevice *xendev); > + int (*initialise)(struct XenDevice *xendev); > + void (*connected)(struct XenDevice *xendev); > void (*event)(struct XenDevice *xendev); > void (*disconnect)(struct XenDevice *xendev); > int (*free)(struct XenDevice *xendev); > diff --git a/hw/xen_console.c b/hw/xen_console.c > index f1c2f8b..a4e97ca 100644 > --- a/hw/xen_console.c > +++ b/hw/xen_console.c > @@ -209,7 +209,7 @@ static int con_init(struct XenDevice *xendev) > return 0; > } > > -static int con_connect(struct XenDevice *xendev) > +static int con_initialise(struct XenDevice *xendev) > { > struct XenConsole *con = container_of(xendev, struct XenConsole, xendev); > int limit; > @@ -278,7 +278,7 @@ struct XenDevOps xen_console_ops = { > .size = sizeof(struct XenConsole), > .flags = DEVOPS_FLAG_IGNORE_STATE|DEVOPS_FLAG_NEED_GNTDEV, > .init = con_init, > - .connect = con_connect, > + .initialise = con_initialise, > .event = con_event, > .disconnect = con_disconnect, > }; > diff --git a/hw/xenfb.c b/hw/xenfb.c > index 97960ba..c96cfe6 100644 > --- a/hw/xenfb.c > +++ b/hw/xenfb.c > @@ -361,7 +361,7 @@ static int input_init(struct XenDevice *xendev) > return 0; > } > > -static int input_connect(struct XenDevice *xendev) > +static int input_initialise(struct XenDevice *xendev) > { > struct XenInput *in = container_of(xendev, struct XenInput, c.xendev); > int rc; > @@ -863,7 +863,7 @@ static int fb_init(struct XenDevice *xendev) > return 0; > } > > -static int fb_connect(struct XenDevice *xendev) > +static int fb_initialise(struct XenDevice *xendev) > { > struct XenFB *fb = container_of(xendev, struct XenFB, c.xendev); > struct xenfb_page *fb_page; > @@ -957,7 +957,7 @@ static void fb_event(struct XenDevice *xendev) > struct XenDevOps xen_kbdmouse_ops = { > .size = sizeof(struct XenInput), > .init = input_init, > - .connect = input_connect, > + .initialise = input_initialise, > .disconnect = input_disconnect, > .event = input_event, > }; > @@ -965,7 +965,7 @@ struct XenDevOps xen_kbdmouse_ops = { > struct XenDevOps xen_framebuffer_ops = { > .size = sizeof(struct XenFB), > .init = fb_init, > - .connect = fb_connect, > + .initialise = fb_initialise, > .disconnect = fb_disconnect, > .event = fb_event, > .frontend_changed = fb_frontend_changed, > -- > 1.7.1 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxxxxxxxx > http://lists.xensource.com/xen-devel > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |