| From: David Hildenbrand <dahi@linux.vnet.ibm.com> |
| Date: Mon, 11 May 2015 17:52:08 +0200 |
| Subject: [PATCH] sched/preempt, futex: Update comments to clarify that preemption doesn't have to be disabled |
| |
| In general, non-atomic variants of user access functions must not sleep |
| if pagefaults are disabled. |
| |
| Let's update all relevant comments in uaccess code. This also reflects |
| the might_sleep() checks in might_fault(). |
| |
| [upstream commit 2f09b227eeed4b3a072fe818c82a4c773b778cde] |
| Signed-off-by: David Hildenbrand <dahi@linux.vnet.ibm.com> |
| --- |
| arch/avr32/include/asm/uaccess.h | 12 ++++++--- |
| arch/hexagon/include/asm/uaccess.h | 3 +- |
| arch/m32r/include/asm/uaccess.h | 30 +++++++++++++++------- |
| arch/microblaze/include/asm/uaccess.h | 6 +++- |
| arch/mips/include/asm/uaccess.h | 45 ++++++++++++++++++++++------------ |
| arch/s390/include/asm/uaccess.h | 15 +++++++---- |
| arch/score/include/asm/uaccess.h | 15 +++++++---- |
| arch/tile/include/asm/uaccess.h | 18 +++++++++---- |
| arch/x86/include/asm/uaccess.h | 15 +++++++---- |
| arch/x86/include/asm/uaccess_32.h | 6 +++- |
| arch/x86/lib/usercopy_32.c | 6 +++- |
| lib/strnlen_user.c | 6 +++- |
| 12 files changed, 118 insertions(+), 59 deletions(-) |
| |
| --- a/arch/avr32/include/asm/uaccess.h |
| +++ b/arch/avr32/include/asm/uaccess.h |
| @@ -97,7 +97,8 @@ static inline __kernel_size_t __copy_fro |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -116,7 +117,8 @@ static inline __kernel_size_t __copy_fro |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -136,7 +138,8 @@ static inline __kernel_size_t __copy_fro |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -158,7 +161,8 @@ static inline __kernel_size_t __copy_fro |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| --- a/arch/hexagon/include/asm/uaccess.h |
| +++ b/arch/hexagon/include/asm/uaccess.h |
| @@ -36,7 +36,8 @@ |
| * @addr: User space pointer to start of block to check |
| * @size: Size of block to check |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Checks if a pointer to a block of memory in user space is valid. |
| * |
| --- a/arch/m32r/include/asm/uaccess.h |
| +++ b/arch/m32r/include/asm/uaccess.h |
| @@ -91,7 +91,8 @@ static inline void set_fs(mm_segment_t s |
| * @addr: User space pointer to start of block to check |
| * @size: Size of block to check |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Checks if a pointer to a block of memory in user space is valid. |
| * |
| @@ -155,7 +156,8 @@ extern int fixup_exception(struct pt_reg |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -175,7 +177,8 @@ extern int fixup_exception(struct pt_reg |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -194,7 +197,8 @@ extern int fixup_exception(struct pt_reg |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -274,7 +278,8 @@ do { \ |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -568,7 +573,8 @@ unsigned long __generic_copy_from_user(v |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -588,7 +594,8 @@ unsigned long __generic_copy_from_user(v |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. |
| * |
| @@ -606,7 +613,8 @@ unsigned long __generic_copy_from_user(v |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -626,7 +634,8 @@ unsigned long __generic_copy_from_user(v |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. |
| * |
| @@ -677,7 +686,8 @@ unsigned long clear_user(void __user *me |
| * strlen_user: - Get the size of a string in user space. |
| * @str: The string to measure. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Get the size of a NUL-terminated string in user space. |
| * |
| --- a/arch/microblaze/include/asm/uaccess.h |
| +++ b/arch/microblaze/include/asm/uaccess.h |
| @@ -178,7 +178,8 @@ extern long __user_bad(void); |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -290,7 +291,8 @@ extern long __user_bad(void); |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| --- a/arch/mips/include/asm/uaccess.h |
| +++ b/arch/mips/include/asm/uaccess.h |
| @@ -103,7 +103,8 @@ extern u64 __ua_limit; |
| * @addr: User space pointer to start of block to check |
| * @size: Size of block to check |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Checks if a pointer to a block of memory in user space is valid. |
| * |
| @@ -138,7 +139,8 @@ extern u64 __ua_limit; |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -157,7 +159,8 @@ extern u64 __ua_limit; |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -177,7 +180,8 @@ extern u64 __ua_limit; |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -199,7 +203,8 @@ extern u64 __ua_limit; |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -498,7 +503,8 @@ extern void __put_user_unknown(void); |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -517,7 +523,8 @@ extern void __put_user_unknown(void); |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -537,7 +544,8 @@ extern void __put_user_unknown(void); |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -559,7 +567,8 @@ extern void __put_user_unknown(void); |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -815,7 +824,8 @@ extern size_t __copy_user(void *__to, co |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -888,7 +898,8 @@ extern size_t __copy_user_inatomic(void |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. |
| * |
| @@ -1075,7 +1086,8 @@ extern size_t __copy_in_user_eva(void *_ |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -1107,7 +1119,8 @@ extern size_t __copy_in_user_eva(void *_ |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. |
| * |
| @@ -1329,7 +1342,8 @@ strncpy_from_user(char *__to, const char |
| * strlen_user: - Get the size of a string in user space. |
| * @str: The string to measure. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Get the size of a NUL-terminated string in user space. |
| * |
| @@ -1398,7 +1412,8 @@ static inline long __strnlen_user(const |
| * strnlen_user: - Get the size of a string in user space. |
| * @str: The string to measure. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Get the size of a NUL-terminated string in user space. |
| * |
| --- a/arch/s390/include/asm/uaccess.h |
| +++ b/arch/s390/include/asm/uaccess.h |
| @@ -98,7 +98,8 @@ static inline unsigned long extable_fixu |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -118,7 +119,8 @@ unsigned long __must_check __copy_from_u |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -264,7 +266,8 @@ int __get_user_bad(void) __attribute__(( |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. |
| * |
| @@ -290,7 +293,8 @@ void copy_from_user_overflow(void) |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. |
| * |
| @@ -348,7 +352,8 @@ static inline unsigned long strnlen_user |
| * strlen_user: - Get the size of a string in user space. |
| * @str: The string to measure. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Get the size of a NUL-terminated string in user space. |
| * |
| --- a/arch/score/include/asm/uaccess.h |
| +++ b/arch/score/include/asm/uaccess.h |
| @@ -36,7 +36,8 @@ |
| * @addr: User space pointer to start of block to check |
| * @size: Size of block to check |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Checks if a pointer to a block of memory in user space is valid. |
| * |
| @@ -61,7 +62,8 @@ |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -79,7 +81,8 @@ |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -98,7 +101,8 @@ |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -119,7 +123,8 @@ |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| --- a/arch/tile/include/asm/uaccess.h |
| +++ b/arch/tile/include/asm/uaccess.h |
| @@ -78,7 +78,8 @@ int __range_ok(unsigned long addr, unsig |
| * @addr: User space pointer to start of block to check |
| * @size: Size of block to check |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Checks if a pointer to a block of memory in user space is valid. |
| * |
| @@ -192,7 +193,8 @@ extern int __get_user_bad(void) |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -274,7 +276,8 @@ extern int __put_user_bad(void) |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -330,7 +333,8 @@ extern int __put_user_bad(void) |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -366,7 +370,8 @@ copy_to_user(void __user *to, const void |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -437,7 +442,8 @@ static inline unsigned long __must_check |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to user space. Caller must check |
| * the specified blocks with access_ok() before calling this function. |
| --- a/arch/x86/include/asm/uaccess.h |
| +++ b/arch/x86/include/asm/uaccess.h |
| @@ -74,7 +74,8 @@ static inline bool __chk_range_not_ok(un |
| * @addr: User space pointer to start of block to check |
| * @size: Size of block to check |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Checks if a pointer to a block of memory in user space is valid. |
| * |
| @@ -145,7 +146,8 @@ extern int __get_user_bad(void); |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -240,7 +242,8 @@ extern void __put_user_8(void); |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| @@ -455,7 +458,8 @@ struct __large_struct { unsigned long bu |
| * @x: Variable to store result. |
| * @ptr: Source address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple variable from user space to kernel |
| * space. It supports simple types like char and int, but not larger |
| @@ -479,7 +483,8 @@ struct __large_struct { unsigned long bu |
| * @x: Value to copy to user space. |
| * @ptr: Destination address, in user space. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * This macro copies a single simple value from kernel space to user |
| * space. It supports simple types like char and int, but not larger |
| --- a/arch/x86/include/asm/uaccess_32.h |
| +++ b/arch/x86/include/asm/uaccess_32.h |
| @@ -70,7 +70,8 @@ static __always_inline unsigned long __m |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| @@ -117,7 +118,8 @@ static __always_inline unsigned long |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. Caller must check |
| * the specified block with access_ok() before calling this function. |
| --- a/arch/x86/lib/usercopy_32.c |
| +++ b/arch/x86/lib/usercopy_32.c |
| @@ -647,7 +647,8 @@ EXPORT_SYMBOL(__copy_from_user_ll_nocach |
| * @from: Source address, in kernel space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from kernel space to user space. |
| * |
| @@ -668,7 +669,8 @@ EXPORT_SYMBOL(_copy_to_user); |
| * @from: Source address, in user space. |
| * @n: Number of bytes to copy. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Copy data from user space to kernel space. |
| * |
| --- a/lib/strnlen_user.c |
| +++ b/lib/strnlen_user.c |
| @@ -85,7 +85,8 @@ static inline long do_strnlen_user(const |
| * @str: The string to measure. |
| * @count: Maximum count (including NUL character) |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Get the size of a NUL-terminated string in user space. |
| * |
| @@ -121,7 +122,8 @@ EXPORT_SYMBOL(strnlen_user); |
| * strlen_user: - Get the size of a user string INCLUDING final NUL. |
| * @str: The string to measure. |
| * |
| - * Context: User context only. This function may sleep. |
| + * Context: User context only. This function may sleep if pagefaults are |
| + * enabled. |
| * |
| * Get the size of a NUL-terminated string in user space. |
| * |