From: Michael Brown Date: Fri, 24 Jun 2011 15:51:31 +0000 (+0100) Subject: [hw] Eliminate polling while waiting for window to open X-Git-Tag: v1.20.1~2101 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3915b660fda1c670bf1d5a5def4f68cd1cfb3967;p=thirdparty%2Fipxe.git [hw] Eliminate polling while waiting for window to open Polling for the data-transfer window to become open is wasteful. We can eliminate the polling loop by using hw_step() as the handler for an xfer_window_changed() event. If the window is already open at the time of instantiation, then xfer_window_changed() may never be called. We can cover this case by using hw_step() as the step() method of a one-shot process. Since the signature for an xfer_window_changed() method is identical to the signature for a process step() method, the same function can be used for both. Signed-off-by: Michael Brown --- diff --git a/src/core/hw.c b/src/core/hw.c index e9c9ffc1d..91736a652 100644 --- a/src/core/hw.c +++ b/src/core/hw.c @@ -36,6 +36,7 @@ static void hw_step ( struct hw *hw ) { } static struct interface_operation hw_xfer_operations[] = { + INTF_OP ( xfer_window_changed, struct hw *, hw_step ), INTF_OP ( intf_close, struct hw *, hw_finished ), }; @@ -43,7 +44,7 @@ static struct interface_descriptor hw_xfer_desc = INTF_DESC ( struct hw, xfer, hw_xfer_operations ); static struct process_descriptor hw_process_desc = - PROC_DESC ( struct hw, process, hw_step ); + PROC_DESC_ONCE ( struct hw, process, hw_step ); static int hw_open ( struct interface *xfer, struct uri *uri __unused ) { struct hw *hw;