From 674539bddc48f96e5c64e533ae92555e76a6e67f Mon Sep 17 00:00:00 2001 From: Con Kolivas <kernel@kolivas.org> Date: Sat, 25 May 2013 15:03:02 +1000 Subject: [PATCH] Make avalon_wait_write a bool function and check its return value. --- driver-avalon.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/driver-avalon.c b/driver-avalon.c index 23b94b4f..0875ca58 100644 --- a/driver-avalon.c +++ b/driver-avalon.c @@ -380,13 +380,17 @@ static void avalon_clear_readbuf(int fd) /* Wait until the avalon says it's ready to receive a write, or 2 seconds has * elapsed, whichever comes first. The status is updated by the ftdi device - * every 40ms. */ -static void avalon_wait_write(int fd) + * every 40ms. Returns true if the avalon is ready. */ +static bool avalon_wait_write(int fd) { int i = 0; + bool ret; - while (avalon_buffer_full(fd) && i++ < 40) - nmsleep(50); + do { + ret = avalon_buffer_full(fd); + } while (ret == true && i++ < 40); + + return !ret; } static void avalon_idle(struct cgpu_info *avalon, int fd) @@ -394,7 +398,10 @@ static void avalon_idle(struct cgpu_info *avalon, int fd) struct avalon_info *info = avalon->device_data; int i; - avalon_wait_write(fd); + if (!avalon_wait_write(fd)) { + applog(LOG_WARNING, "Avalon not ready for writes in avalon_idle"); + return; + } for (i = 0; i < info->miner_count; i++) { struct avalon_task at;