From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=46757 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OnUBd-0002jo-Q8 for qemu-devel@nongnu.org; Mon, 23 Aug 2010 06:23:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OnUBc-0004ZR-E1 for qemu-devel@nongnu.org; Mon, 23 Aug 2010 06:23:29 -0400 Received: from rcsinet10.oracle.com ([148.87.113.121]:30602) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OnUBc-0004ZF-7q for qemu-devel@nongnu.org; Mon, 23 Aug 2010 06:23:28 -0400 Message-ID: <4C724B9C.6070808@oracle.com> Date: Mon, 23 Aug 2010 11:21:16 +0100 From: John Haxby MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: Introduce a new 'connected' xendev op called when Connected. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefano Stabellini Cc: "qemu-devel@nongnu.org" Any reason why this (and its sister patch) were never picked up? jch On 27/07/10 15:54, Stefano Stabellini wrote: > Any comments? > > On Wed, 21 Jul 2010, Stefano Stabellini wrote: >> From: John Haxby >> >> Introduce a new 'connected' xendev op called when Connected. >> >> 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 >> Signed-off-by: Stefano Stabellini >> >> >> diff --git a/hw/xen_backend.c b/hw/xen_backend.c >> index a2e408f..b99055a 100644 >> --- a/hw/xen_backend.c >> +++ b/hw/xen_backend.c >> @@ -400,13 +400,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; >> >> @@ -420,10 +420,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; >> } >> >> @@ -432,6 +432,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. >> @@ -483,7 +505,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 cc25f9d..154922a 100644 >> --- a/hw/xen_backend.h >> +++ b/hw/xen_backend.h >> @@ -23,7 +23,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 d2261f4..258c003 100644 >> --- a/hw/xen_console.c >> +++ b/hw/xen_console.c >> @@ -202,7 +202,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; >> @@ -263,7 +263,7 @@ struct XenDevOps xen_console_ops = { >> .size = sizeof(struct XenConsole), >> .flags = DEVOPS_FLAG_IGNORE_STATE, >> .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 da5297b..b535d8c 100644 >> --- a/hw/xenfb.c >> +++ b/hw/xenfb.c >> @@ -359,7 +359,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; >> @@ -861,7 +861,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; >> @@ -955,7 +955,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, >> }; >> @@ -963,7 +963,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, >>