x86, 386 removal: Remove CONFIG_X86_WP_WORKS_OK
authorH. Peter Anvin <hpa@linux.intel.com>
Wed, 28 Nov 2012 19:50:28 +0000 (11:50 -0800)
committerH. Peter Anvin <hpa@linux.intel.com>
Thu, 29 Nov 2012 21:23:03 +0000 (13:23 -0800)
All 486+ CPUs support WP in supervisor mode, so remove the fallback
386 support code.

Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Link: http://lkml.kernel.org/r/1354132230-21854-7-git-send-email-hpa@linux.intel.com
arch/x86/Kconfig.cpu
arch/x86/include/asm/uaccess.h
arch/x86/lib/usercopy_32.c
arch/x86/mm/init_32.c

index d3bdc18af1f0a4ce565632a157cd4ee7e880222c..159ee9c824c9cca1f9e3c5f05e79af207946eddd 100644 (file)
@@ -325,9 +325,6 @@ config X86_INVD_BUG
        def_bool y
        depends on M486
 
-config X86_WP_WORKS_OK
-       def_bool y
-
 config X86_POPAD_OK
        def_bool y
        depends on X86_32
index 7ccf8d131535965a1512db53d14a8fcb50593d78..1709801d18ecada506e5709a3dd81a879cb4bfc4 100644 (file)
@@ -237,8 +237,6 @@ extern void __put_user_2(void);
 extern void __put_user_4(void);
 extern void __put_user_8(void);
 
-#ifdef CONFIG_X86_WP_WORKS_OK
-
 /**
  * put_user: - Write a simple value into user space.
  * @x:   Value to copy to user space.
@@ -326,29 +324,6 @@ do {                                                                       \
        }                                                               \
 } while (0)
 
-#else
-
-#define __put_user_size(x, ptr, size, retval, errret)                  \
-do {                                                                   \
-       __typeof__(*(ptr))__pus_tmp = x;                                \
-       retval = 0;                                                     \
-                                                                       \
-       if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, size) != 0))    \
-               retval = errret;                                        \
-} while (0)
-
-#define put_user(x, ptr)                                       \
-({                                                             \
-       int __ret_pu;                                           \
-       __typeof__(*(ptr))__pus_tmp = x;                        \
-       __ret_pu = 0;                                           \
-       if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp,         \
-                                      sizeof(*(ptr))) != 0))   \
-               __ret_pu = -EFAULT;                             \
-       __ret_pu;                                               \
-})
-#endif
-
 #ifdef CONFIG_X86_32
 #define __get_user_asm_u64(x, ptr, retval, errret)     (x) = __get_user_bad()
 #define __get_user_asm_ex_u64(x, ptr)                  (x) = __get_user_bad()
@@ -543,29 +518,12 @@ struct __large_struct { unsigned long buf[100]; };
        (x) = (__force __typeof__(*(ptr)))__gue_val;                    \
 } while (0)
 
-#ifdef CONFIG_X86_WP_WORKS_OK
-
 #define put_user_try           uaccess_try
 #define put_user_catch(err)    uaccess_catch(err)
 
 #define put_user_ex(x, ptr)                                            \
        __put_user_size_ex((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
 
-#else /* !CONFIG_X86_WP_WORKS_OK */
-
-#define put_user_try           do {            \
-       int __uaccess_err = 0;
-
-#define put_user_catch(err)                    \
-       (err) |= __uaccess_err;                 \
-} while (0)
-
-#define put_user_ex(x, ptr)    do {            \
-       __uaccess_err |= __put_user(x, ptr);    \
-} while (0)
-
-#endif /* CONFIG_X86_WP_WORKS_OK */
-
 extern unsigned long
 copy_from_user_nmi(void *to, const void __user *from, unsigned long n);
 extern __must_check long
index 98f6d6b68f5a65eba60a2ff3401e69f03d50b58f..f0312d7464027e73f52505c892409cf0d96c9945 100644 (file)
@@ -570,63 +570,6 @@ do {                                                                       \
 unsigned long __copy_to_user_ll(void __user *to, const void *from,
                                unsigned long n)
 {
-#ifndef CONFIG_X86_WP_WORKS_OK
-       if (unlikely(boot_cpu_data.wp_works_ok == 0) &&
-                       ((unsigned long)to) < TASK_SIZE) {
-               /*
-                * When we are in an atomic section (see
-                * mm/filemap.c:file_read_actor), return the full
-                * length to take the slow path.
-                */
-               if (in_atomic())
-                       return n;
-
-               /*
-                * CPU does not honor the WP bit when writing
-                * from supervisory mode, and due to preemption or SMP,
-                * the page tables can change at any time.
-                * Do it manually.      Manfred <manfred@colorfullife.com>
-                */
-               while (n) {
-                       unsigned long offset = ((unsigned long)to)%PAGE_SIZE;
-                       unsigned long len = PAGE_SIZE - offset;
-                       int retval;
-                       struct page *pg;
-                       void *maddr;
-
-                       if (len > n)
-                               len = n;
-
-survive:
-                       down_read(&current->mm->mmap_sem);
-                       retval = get_user_pages(current, current->mm,
-                                       (unsigned long)to, 1, 1, 0, &pg, NULL);
-
-                       if (retval == -ENOMEM && is_global_init(current)) {
-                               up_read(&current->mm->mmap_sem);
-                               congestion_wait(BLK_RW_ASYNC, HZ/50);
-                               goto survive;
-                       }
-
-                       if (retval != 1) {
-                               up_read(&current->mm->mmap_sem);
-                               break;
-                       }
-
-                       maddr = kmap_atomic(pg);
-                       memcpy(maddr + offset, from, len);
-                       kunmap_atomic(maddr);
-                       set_page_dirty_lock(pg);
-                       put_page(pg);
-                       up_read(&current->mm->mmap_sem);
-
-                       from += len;
-                       to += len;
-                       n -= len;
-               }
-               return n;
-       }
-#endif
        stac();
        if (movsl_is_ok(to, from, n))
                __copy_user(to, from, n);
index 11a58001b4cef4c652721858c8e7f24ebbf22c6e..745d66b843c84241f1d849e865dc2796a00b6f1f 100644 (file)
@@ -715,10 +715,7 @@ static void __init test_wp_bit(void)
 
        if (!boot_cpu_data.wp_works_ok) {
                printk(KERN_CONT "No.\n");
-#ifdef CONFIG_X86_WP_WORKS_OK
-               panic(
-  "This kernel doesn't support CPU's with broken WP. Recompile it for a 386!");
-#endif
+               panic("Linux doesn't support CPUs with broken WP.");
        } else {
                printk(KERN_CONT "Ok.\n");
        }