Skip to content

Commit a5c2a89

Browse files
author
H. Peter Anvin
committed
x86, 386 removal: Remove CONFIG_X86_WP_WORKS_OK
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
1 parent 094ab1d commit a5c2a89

File tree

4 files changed

+1
-106
lines changed

4 files changed

+1
-106
lines changed

arch/x86/Kconfig.cpu

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,6 @@ config X86_INVD_BUG
325325
def_bool y
326326
depends on M486
327327

328-
config X86_WP_WORKS_OK
329-
def_bool y
330-
331328
config X86_POPAD_OK
332329
def_bool y
333330
depends on X86_32

arch/x86/include/asm/uaccess.h

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -237,8 +237,6 @@ extern void __put_user_2(void);
237237
extern void __put_user_4(void);
238238
extern void __put_user_8(void);
239239

240-
#ifdef CONFIG_X86_WP_WORKS_OK
241-
242240
/**
243241
* put_user: - Write a simple value into user space.
244242
* @x: Value to copy to user space.
@@ -326,29 +324,6 @@ do { \
326324
} \
327325
} while (0)
328326

329-
#else
330-
331-
#define __put_user_size(x, ptr, size, retval, errret) \
332-
do { \
333-
__typeof__(*(ptr))__pus_tmp = x; \
334-
retval = 0; \
335-
\
336-
if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, size) != 0)) \
337-
retval = errret; \
338-
} while (0)
339-
340-
#define put_user(x, ptr) \
341-
({ \
342-
int __ret_pu; \
343-
__typeof__(*(ptr))__pus_tmp = x; \
344-
__ret_pu = 0; \
345-
if (unlikely(__copy_to_user_ll(ptr, &__pus_tmp, \
346-
sizeof(*(ptr))) != 0)) \
347-
__ret_pu = -EFAULT; \
348-
__ret_pu; \
349-
})
350-
#endif
351-
352327
#ifdef CONFIG_X86_32
353328
#define __get_user_asm_u64(x, ptr, retval, errret) (x) = __get_user_bad()
354329
#define __get_user_asm_ex_u64(x, ptr) (x) = __get_user_bad()
@@ -543,29 +518,12 @@ struct __large_struct { unsigned long buf[100]; };
543518
(x) = (__force __typeof__(*(ptr)))__gue_val; \
544519
} while (0)
545520

546-
#ifdef CONFIG_X86_WP_WORKS_OK
547-
548521
#define put_user_try uaccess_try
549522
#define put_user_catch(err) uaccess_catch(err)
550523

551524
#define put_user_ex(x, ptr) \
552525
__put_user_size_ex((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
553526

554-
#else /* !CONFIG_X86_WP_WORKS_OK */
555-
556-
#define put_user_try do { \
557-
int __uaccess_err = 0;
558-
559-
#define put_user_catch(err) \
560-
(err) |= __uaccess_err; \
561-
} while (0)
562-
563-
#define put_user_ex(x, ptr) do { \
564-
__uaccess_err |= __put_user(x, ptr); \
565-
} while (0)
566-
567-
#endif /* CONFIG_X86_WP_WORKS_OK */
568-
569527
extern unsigned long
570528
copy_from_user_nmi(void *to, const void __user *from, unsigned long n);
571529
extern __must_check long

arch/x86/lib/usercopy_32.c

Lines changed: 0 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -570,63 +570,6 @@ do { \
570570
unsigned long __copy_to_user_ll(void __user *to, const void *from,
571571
unsigned long n)
572572
{
573-
#ifndef CONFIG_X86_WP_WORKS_OK
574-
if (unlikely(boot_cpu_data.wp_works_ok == 0) &&
575-
((unsigned long)to) < TASK_SIZE) {
576-
/*
577-
* When we are in an atomic section (see
578-
* mm/filemap.c:file_read_actor), return the full
579-
* length to take the slow path.
580-
*/
581-
if (in_atomic())
582-
return n;
583-
584-
/*
585-
* CPU does not honor the WP bit when writing
586-
* from supervisory mode, and due to preemption or SMP,
587-
* the page tables can change at any time.
588-
* Do it manually. Manfred <manfred@colorfullife.com>
589-
*/
590-
while (n) {
591-
unsigned long offset = ((unsigned long)to)%PAGE_SIZE;
592-
unsigned long len = PAGE_SIZE - offset;
593-
int retval;
594-
struct page *pg;
595-
void *maddr;
596-
597-
if (len > n)
598-
len = n;
599-
600-
survive:
601-
down_read(&current->mm->mmap_sem);
602-
retval = get_user_pages(current, current->mm,
603-
(unsigned long)to, 1, 1, 0, &pg, NULL);
604-
605-
if (retval == -ENOMEM && is_global_init(current)) {
606-
up_read(&current->mm->mmap_sem);
607-
congestion_wait(BLK_RW_ASYNC, HZ/50);
608-
goto survive;
609-
}
610-
611-
if (retval != 1) {
612-
up_read(&current->mm->mmap_sem);
613-
break;
614-
}
615-
616-
maddr = kmap_atomic(pg);
617-
memcpy(maddr + offset, from, len);
618-
kunmap_atomic(maddr);
619-
set_page_dirty_lock(pg);
620-
put_page(pg);
621-
up_read(&current->mm->mmap_sem);
622-
623-
from += len;
624-
to += len;
625-
n -= len;
626-
}
627-
return n;
628-
}
629-
#endif
630573
stac();
631574
if (movsl_is_ok(to, from, n))
632575
__copy_user(to, from, n);

arch/x86/mm/init_32.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -715,10 +715,7 @@ static void __init test_wp_bit(void)
715715

716716
if (!boot_cpu_data.wp_works_ok) {
717717
printk(KERN_CONT "No.\n");
718-
#ifdef CONFIG_X86_WP_WORKS_OK
719-
panic(
720-
"This kernel doesn't support CPU's with broken WP. Recompile it for a 386!");
721-
#endif
718+
panic("Linux doesn't support CPUs with broken WP.");
722719
} else {
723720
printk(KERN_CONT "Ok.\n");
724721
}

0 commit comments

Comments
 (0)