diff options
author | Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> | 2009-01-24 02:49:41 +0300 |
---|---|---|
committer | H. Peter Anvin <hpa@linux.intel.com> | 2009-01-24 04:17:36 +0300 |
commit | fe40c0af3cff3ea461cf25bddb979abc7279d4df (patch) | |
tree | be37f58bce212299476186147e44dbd486be34a1 /arch/x86/include/asm/thread_info.h | |
parent | cc86c9e0dc1a41451240b948bb39d46bb2536ae8 (diff) | |
download | linux-fe40c0af3cff3ea461cf25bddb979abc7279d4df.tar.xz |
x86: uaccess: introduce try and catch framework
Impact: introduce new uaccess exception handling framework
Introduce {get|put}_user_try and {get|put}_user_catch as new uaccess exception
handling framework.
{get|put}_user_try begins exception block and {get|put}_user_catch(err) ends
the block and gets err if an exception occured in {get|put}_user_ex() in the
block. The exception is stored thread_info->uaccess_err.
The example usage of this framework is below;
int func()
{
int err = 0;
get_user_try {
get_user_ex(...);
get_user_ex(...);
:
} get_user_catch(err);
return err;
}
Note: get_user_ex() is not clear the value when an exception occurs, it's
different from the behavior of __get_user(), but I think it doesn't matter.
Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/include/asm/thread_info.h')
-rw-r--r-- | arch/x86/include/asm/thread_info.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index 98789647baa9..3f90aeb456bc 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h @@ -40,6 +40,7 @@ struct thread_info { */ __u8 supervisor_stack[0]; #endif + int uaccess_err; }; #define INIT_THREAD_INFO(tsk) \ |