# HG changeset patch # User Florian Pose # Date 1239186468 0 # Node ID 241a7511eee9ec663c9712f5735292ef927d53b6 # Parent 21b5343910c2d208718ae089c7b14727bd41ba15 Process working counter of phy_* commands. diff -r 21b5343910c2 -r 241a7511eee9 master/fsm_master.c --- a/master/fsm_master.c Wed Apr 08 10:15:28 2009 +0000 +++ b/master/fsm_master.c Wed Apr 08 10:27:48 2009 +0000 @@ -1031,22 +1031,27 @@ return; } - if (request->dir == EC_DIR_INPUT) { // read request - if (request->data) - kfree(request->data); - request->data = kmalloc(request->length, GFP_KERNEL); - if (!request->data) { - EC_ERR("Failed to allocate %u bytes of memory for phy request.\n", - request->length); - request->state = EC_INT_REQUEST_FAILURE; - wake_up(&master->phy_queue); - ec_fsm_master_restart(fsm); - return; + if (datagram->working_counter == 1) { + if (request->dir == EC_DIR_INPUT) { // read request + if (request->data) + kfree(request->data); + request->data = kmalloc(request->length, GFP_KERNEL); + if (!request->data) { + EC_ERR("Failed to allocate %u bytes of memory for phy request.\n", + request->length); + request->state = EC_INT_REQUEST_FAILURE; + wake_up(&master->phy_queue); + ec_fsm_master_restart(fsm); + return; + } + memcpy(request->data, datagram->data, request->length); } - memcpy(request->data, datagram->data, request->length); - } - - request->state = EC_INT_REQUEST_SUCCESS; + + request->state = EC_INT_REQUEST_SUCCESS; + } else { + request->state = EC_INT_REQUEST_FAILURE; + } + wake_up(&master->phy_queue); // check for another PHY request