Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=314c98d589b9da40af42cfe7213eff04c74caea3
Commit:     314c98d589b9da40af42cfe7213eff04c74caea3
Parent:     06039e90b90af4029184d577b3c66e59f6039a9e
Author:     Michael Hennerich <[EMAIL PROTECTED]>
AuthorDate: Tue Jul 24 18:03:45 2007 +0800
Committer:  Bryan Wu <[EMAIL PROTECTED]>
CommitDate: Tue Jul 24 18:03:45 2007 +0800

    Blackfin arch: add missing gpio error handling to make sure we roll back 
requests in case one fails
    
    Signed-off-by: Michael Hennerich <[EMAIL PROTECTED]>
    Signed-off-by: Bryan Wu <[EMAIL PROTECTED]>
---
 arch/blackfin/kernel/bfin_gpio.c |   10 ++++++++--
 arch/blackfin/mach-bf548/gpio.c  |   11 +++++++++--
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c
index b818a8d..979cf79 100644
--- a/arch/blackfin/kernel/bfin_gpio.c
+++ b/arch/blackfin/kernel/bfin_gpio.c
@@ -711,9 +711,15 @@ int peripheral_request_list(unsigned short per[], const 
char *label)
        int ret;
 
        for (cnt = 0; per[cnt] != 0; cnt++) {
+
                ret = peripheral_request(per[cnt], label);
-               if (ret < 0)
-                       return ret;
+
+               if (ret < 0) {
+                       for ( ; cnt > 0; cnt--) {
+                               peripheral_free(per[cnt - 1]);
+                       }
+               return ret;
+               }
        }
 
        return 0;
diff --git a/arch/blackfin/mach-bf548/gpio.c b/arch/blackfin/mach-bf548/gpio.c
index c073ab3..f3b9dea 100644
--- a/arch/blackfin/mach-bf548/gpio.c
+++ b/arch/blackfin/mach-bf548/gpio.c
@@ -212,11 +212,18 @@ int peripheral_request_list(unsigned short per[], const 
char *label)
        int ret;
 
        for (cnt = 0; per[cnt] != 0; cnt++) {
+
                ret = peripheral_request(per[cnt], label);
-               if (ret < 0)
-                       return ret;
+
+               if (ret < 0) {
+                       for ( ; cnt > 0; cnt--) {
+                               peripheral_free(per[cnt - 1]);
+                       }
+               return ret;
+               }
        }
 
+
        return 0;
 }
 EXPORT_SYMBOL(peripheral_request_list);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to