[PATCH] misc: ti-st: add handling of the signal case

2015-01-19 Thread Nicholas Mc Guire
if(!wait_for_completion_interruptible_timeout(...))
only handles the timeout case - this patch adds handling the
signal case the same as timeout.

Signed-off-by: Nicholas Mc Guire 
---

Only the timeout case was being handled, the signal case
(-ERESTARTSYS) was treated just like the case of successful
completion, which is most likely not reasonable.

read_local_version() is called from download_firmware() where
it checks for !=0 return, so the error handling logic should be
preserved correctly.

download_firmware() is called from st_kim_start() which is
checking for !=0 return, so the error handling logic should be
preserved correctly

This patch was only compile tested for i368_defconfig + 
CONFIG_X86_32_NON_STANDARD=y CONFIG_STA2X11=y CONFIG_TI_ST=m

This patch is against 3.19.0-rc5 -next-20150119

 drivers/misc/ti-st/st_kim.c |   19 +++
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
index 7109d28..623071c 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
@@ -219,6 +219,7 @@ static long read_local_version(struct kim_data_s 
*kim_gdata, char *bts_scr_name)
 {
unsigned short version = 0, chip = 0, min_ver = 0, maj_ver = 0;
const char read_ver_cmd[] = { 0x01, 0x01, 0x10, 0x00 };
+   long timeout;
 
pr_debug("%s", __func__);
 
@@ -228,10 +229,11 @@ static long read_local_version(struct kim_data_s 
*kim_gdata, char *bts_scr_name)
return -EIO;
}
 
-   if (!wait_for_completion_interruptible_timeout(
-   _gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
-   pr_err(" waiting for ver info- timed out ");
-   return -ETIMEDOUT;
+   timeout = wait_for_completion_interruptible_timeout(
+   _gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME));
+   if (timeout <= 0) {
+   pr_err(" waiting for ver info- timed out or received signal");
+   return timeout ? -ERESTARTSYS : -ETIMEDOUT;
}
reinit_completion(_gdata->kim_rcvd);
/* the positions 12 & 13 in the response buffer provide with the
@@ -395,13 +397,14 @@ static long download_firmware(struct kim_data_s 
*kim_gdata)
break;
case ACTION_WAIT_EVENT:  /* wait */
pr_debug("W");
-   if (!wait_for_completion_interruptible_timeout(
+   err = wait_for_completion_interruptible_timeout(
_gdata->kim_rcvd,
-   msecs_to_jiffies(CMD_RESP_TIME))) {
-   pr_err("response timeout during fw download ");
+   msecs_to_jiffies(CMD_RESP_TIME));
+   if (err <= 0) {
+   pr_err("response timeout/signaled during fw 
download ");
/* timed out */
release_firmware(kim_gdata->fw_entry);
-   return -ETIMEDOUT;
+   return err ? -ERESTARTSYS : -ETIMEDOUT;
}
reinit_completion(_gdata->kim_rcvd);
break;
-- 
1.7.10.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] misc: ti-st: add handling of the signal case

2015-01-19 Thread Nicholas Mc Guire
if(!wait_for_completion_interruptible_timeout(...))
only handles the timeout case - this patch adds handling the
signal case the same as timeout.

Signed-off-by: Nicholas Mc Guire der.h...@hofr.at
---

Only the timeout case was being handled, the signal case
(-ERESTARTSYS) was treated just like the case of successful
completion, which is most likely not reasonable.

read_local_version() is called from download_firmware() where
it checks for !=0 return, so the error handling logic should be
preserved correctly.

download_firmware() is called from st_kim_start() which is
checking for !=0 return, so the error handling logic should be
preserved correctly

This patch was only compile tested for i368_defconfig + 
CONFIG_X86_32_NON_STANDARD=y CONFIG_STA2X11=y CONFIG_TI_ST=m

This patch is against 3.19.0-rc5 -next-20150119

 drivers/misc/ti-st/st_kim.c |   19 +++
 1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
index 7109d28..623071c 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
@@ -219,6 +219,7 @@ static long read_local_version(struct kim_data_s 
*kim_gdata, char *bts_scr_name)
 {
unsigned short version = 0, chip = 0, min_ver = 0, maj_ver = 0;
const char read_ver_cmd[] = { 0x01, 0x01, 0x10, 0x00 };
+   long timeout;
 
pr_debug(%s, __func__);
 
@@ -228,10 +229,11 @@ static long read_local_version(struct kim_data_s 
*kim_gdata, char *bts_scr_name)
return -EIO;
}
 
-   if (!wait_for_completion_interruptible_timeout(
-   kim_gdata-kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) {
-   pr_err( waiting for ver info- timed out );
-   return -ETIMEDOUT;
+   timeout = wait_for_completion_interruptible_timeout(
+   kim_gdata-kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME));
+   if (timeout = 0) {
+   pr_err( waiting for ver info- timed out or received signal);
+   return timeout ? -ERESTARTSYS : -ETIMEDOUT;
}
reinit_completion(kim_gdata-kim_rcvd);
/* the positions 12  13 in the response buffer provide with the
@@ -395,13 +397,14 @@ static long download_firmware(struct kim_data_s 
*kim_gdata)
break;
case ACTION_WAIT_EVENT:  /* wait */
pr_debug(W);
-   if (!wait_for_completion_interruptible_timeout(
+   err = wait_for_completion_interruptible_timeout(
kim_gdata-kim_rcvd,
-   msecs_to_jiffies(CMD_RESP_TIME))) {
-   pr_err(response timeout during fw download );
+   msecs_to_jiffies(CMD_RESP_TIME));
+   if (err = 0) {
+   pr_err(response timeout/signaled during fw 
download );
/* timed out */
release_firmware(kim_gdata-fw_entry);
-   return -ETIMEDOUT;
+   return err ? -ERESTARTSYS : -ETIMEDOUT;
}
reinit_completion(kim_gdata-kim_rcvd);
break;
-- 
1.7.10.4

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/