diff options
| -rw-r--r-- | arch/x86/Kconfig.cpu | 13 | ||||
| -rw-r--r-- | arch/x86/Makefile | 9 | ||||
| -rw-r--r-- | arch/x86/boot/compressed/misc.c | 4 | ||||
| -rw-r--r-- | arch/x86/entry/entry_64.S | 2 | ||||
| -rw-r--r-- | arch/x86/entry/vdso/vdso32/vclock_gettime.c | 2 | ||||
| -rw-r--r-- | arch/x86/entry/vsyscall/vsyscall_64.c | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/barrier.h | 30 | ||||
| -rw-r--r-- | arch/x86/include/asm/io.h | 15 | ||||
| -rw-r--r-- | arch/x86/kernel/idt.c | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/pci-nommu.c | 19 | ||||
| -rw-r--r-- | arch/x86/kernel/traps.c | 15 | ||||
| -rw-r--r-- | arch/x86/platform/efi/efi_64.c | 2 | ||||
| -rw-r--r-- | arch/x86/um/asm/barrier.h | 4 | ||||
| -rw-r--r-- | tools/testing/selftests/x86/ptrace_syscall.c | 8 |
14 files changed, 30 insertions, 97 deletions
diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 8b8d2297d486..638411f22267 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu | |||
| @@ -315,19 +315,6 @@ config X86_L1_CACHE_SHIFT | |||
| 315 | default "4" if MELAN || M486 || MGEODEGX1 | 315 | default "4" if MELAN || M486 || MGEODEGX1 |
| 316 | default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX | 316 | default "5" if MWINCHIP3D || MWINCHIPC6 || MCRUSOE || MEFFICEON || MCYRIXIII || MK6 || MPENTIUMIII || MPENTIUMII || M686 || M586MMX || M586TSC || M586 || MVIAC3_2 || MGEODE_LX |
| 317 | 317 | ||
| 318 | config X86_PPRO_FENCE | ||
| 319 | bool "PentiumPro memory ordering errata workaround" | ||
| 320 | depends on M686 || M586MMX || M586TSC || M586 || M486 || MGEODEGX1 | ||
| 321 | ---help--- | ||
| 322 | Old PentiumPro multiprocessor systems had errata that could cause | ||
| 323 | memory operations to violate the x86 ordering standard in rare cases. | ||
| 324 | Enabling this option will attempt to work around some (but not all) | ||
| 325 | occurrences of this problem, at the cost of much heavier spinlock and | ||
| 326 | memory barrier operations. | ||
| 327 | |||
| 328 | If unsure, say n here. Even distro kernels should think twice before | ||
| 329 | enabling this: there are few systems, and an unlikely bug. | ||
| 330 | |||
| 331 | config X86_F00F_BUG | 318 | config X86_F00F_BUG |
| 332 | def_bool y | 319 | def_bool y |
| 333 | depends on M586MMX || M586TSC || M586 || M486 | 320 | depends on M586MMX || M586TSC || M586 || M486 |
diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 498c1b812300..1c4d012550ec 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile | |||
| @@ -223,6 +223,15 @@ KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) $(asinstr) $(avx_instr) | |||
| 223 | 223 | ||
| 224 | LDFLAGS := -m elf_$(UTS_MACHINE) | 224 | LDFLAGS := -m elf_$(UTS_MACHINE) |
| 225 | 225 | ||
| 226 | # | ||
| 227 | # The 64-bit kernel must be aligned to 2MB. Pass -z max-page-size=0x200000 to | ||
| 228 | # the linker to force 2MB page size regardless of the default page size used | ||
| 229 | # by the linker. | ||
| 230 | # | ||
| 231 | ifdef CONFIG_X86_64 | ||
| 232 | LDFLAGS += $(call ld-option, -z max-page-size=0x200000) | ||
| 233 | endif | ||
| 234 | |||
| 226 | # Speed up the build | 235 | # Speed up the build |
| 227 | KBUILD_CFLAGS += -pipe | 236 | KBUILD_CFLAGS += -pipe |
| 228 | # Workaround for a gcc prelease that unfortunately was shipped in a suse release | 237 | # Workaround for a gcc prelease that unfortunately was shipped in a suse release |
diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c index 98761a1576ce..252fee320816 100644 --- a/arch/x86/boot/compressed/misc.c +++ b/arch/x86/boot/compressed/misc.c | |||
| @@ -309,6 +309,10 @@ static void parse_elf(void *output) | |||
| 309 | 309 | ||
| 310 | switch (phdr->p_type) { | 310 | switch (phdr->p_type) { |
| 311 | case PT_LOAD: | 311 | case PT_LOAD: |
| 312 | #ifdef CONFIG_X86_64 | ||
| 313 | if ((phdr->p_align % 0x200000) != 0) | ||
| 314 | error("Alignment of LOAD segment isn't multiple of 2MB"); | ||
| 315 | #endif | ||
| 312 | #ifdef CONFIG_RELOCATABLE | 316 | #ifdef CONFIG_RELOCATABLE |
| 313 | dest = output; | 317 | dest = output; |
| 314 | dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR); | 318 | dest += (phdr->p_paddr - LOAD_PHYSICAL_ADDR); |
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index 805f52703ee3..18ed349b4f83 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S | |||
| @@ -1138,7 +1138,7 @@ apicinterrupt3 HYPERV_REENLIGHTENMENT_VECTOR \ | |||
| 1138 | #endif /* CONFIG_HYPERV */ | 1138 | #endif /* CONFIG_HYPERV */ |
| 1139 | 1139 | ||
| 1140 | idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK | 1140 | idtentry debug do_debug has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK |
| 1141 | idtentry int3 do_int3 has_error_code=0 paranoid=1 shift_ist=DEBUG_STACK | 1141 | idtentry int3 do_int3 has_error_code=0 |
| 1142 | idtentry stack_segment do_stack_segment has_error_code=1 | 1142 | idtentry stack_segment do_stack_segment has_error_code=1 |
| 1143 | 1143 | ||
| 1144 | #ifdef CONFIG_XEN | 1144 | #ifdef CONFIG_XEN |
diff --git a/arch/x86/entry/vdso/vdso32/vclock_gettime.c b/arch/x86/entry/vdso/vdso32/vclock_gettime.c index 7780bbfb06ef..9242b28418d5 100644 --- a/arch/x86/entry/vdso/vdso32/vclock_gettime.c +++ b/arch/x86/entry/vdso/vdso32/vclock_gettime.c | |||
| @@ -5,8 +5,6 @@ | |||
| 5 | #undef CONFIG_OPTIMIZE_INLINING | 5 | #undef CONFIG_OPTIMIZE_INLINING |
| 6 | #endif | 6 | #endif |
| 7 | 7 | ||
| 8 | #undef CONFIG_X86_PPRO_FENCE | ||
| 9 | |||
| 10 | #ifdef CONFIG_X86_64 | 8 | #ifdef CONFIG_X86_64 |
| 11 | 9 | ||
| 12 | /* | 10 | /* |
diff --git a/arch/x86/entry/vsyscall/vsyscall_64.c b/arch/x86/entry/vsyscall/vsyscall_64.c index 8560ef68a9d6..317be365bce3 100644 --- a/arch/x86/entry/vsyscall/vsyscall_64.c +++ b/arch/x86/entry/vsyscall/vsyscall_64.c | |||
| @@ -347,7 +347,7 @@ void __init set_vsyscall_pgtable_user_bits(pgd_t *root) | |||
| 347 | set_pgd(pgd, __pgd(pgd_val(*pgd) | _PAGE_USER)); | 347 | set_pgd(pgd, __pgd(pgd_val(*pgd) | _PAGE_USER)); |
| 348 | p4d = p4d_offset(pgd, VSYSCALL_ADDR); | 348 | p4d = p4d_offset(pgd, VSYSCALL_ADDR); |
| 349 | #if CONFIG_PGTABLE_LEVELS >= 5 | 349 | #if CONFIG_PGTABLE_LEVELS >= 5 |
| 350 | p4d->p4d |= _PAGE_USER; | 350 | set_p4d(p4d, __p4d(p4d_val(*p4d) | _PAGE_USER)); |
| 351 | #endif | 351 | #endif |
| 352 | pud = pud_offset(p4d, VSYSCALL_ADDR); | 352 | pud = pud_offset(p4d, VSYSCALL_ADDR); |
| 353 | set_pud(pud, __pud(pud_val(*pud) | _PAGE_USER)); | 353 | set_pud(pud, __pud(pud_val(*pud) | _PAGE_USER)); |
diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h index e1259f043ae9..042b5e892ed1 100644 --- a/arch/x86/include/asm/barrier.h +++ b/arch/x86/include/asm/barrier.h | |||
| @@ -52,11 +52,7 @@ static inline unsigned long array_index_mask_nospec(unsigned long index, | |||
| 52 | #define barrier_nospec() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \ | 52 | #define barrier_nospec() alternative_2("", "mfence", X86_FEATURE_MFENCE_RDTSC, \ |
| 53 | "lfence", X86_FEATURE_LFENCE_RDTSC) | 53 | "lfence", X86_FEATURE_LFENCE_RDTSC) |
| 54 | 54 | ||
| 55 | #ifdef CONFIG_X86_PPRO_FENCE | ||
| 56 | #define dma_rmb() rmb() | ||
| 57 | #else | ||
| 58 | #define dma_rmb() barrier() | 55 | #define dma_rmb() barrier() |
| 59 | #endif | ||
| 60 | #define dma_wmb() barrier() | 56 | #define dma_wmb() barrier() |
| 61 | 57 | ||
| 62 | #ifdef CONFIG_X86_32 | 58 | #ifdef CONFIG_X86_32 |
| @@ -68,30 +64,6 @@ static inline unsigned long array_index_mask_nospec(unsigned long index, | |||
| 68 | #define __smp_wmb() barrier() | 64 | #define __smp_wmb() barrier() |
| 69 | #define __smp_store_mb(var, value) do { (void)xchg(&var, value); } while (0) | 65 | #define __smp_store_mb(var, value) do { (void)xchg(&var, value); } while (0) |
| 70 | 66 | ||
| 71 | #if defined(CONFIG_X86_PPRO_FENCE) | ||
| 72 | |||
| 73 | /* | ||
| 74 | * For this option x86 doesn't have a strong TSO memory | ||
| 75 | * model and we should fall back to full barriers. | ||
| 76 | */ | ||
| 77 | |||
| 78 | #define __smp_store_release(p, v) \ | ||
| 79 | do { \ | ||
| 80 | compiletime_assert_atomic_type(*p); \ | ||
| 81 | __smp_mb(); \ | ||
| 82 | WRITE_ONCE(*p, v); \ | ||
| 83 | } while (0) | ||
| 84 | |||
| 85 | #define __smp_load_acquire(p) \ | ||
| 86 | ({ \ | ||
| 87 | typeof(*p) ___p1 = READ_ONCE(*p); \ | ||
| 88 | compiletime_assert_atomic_type(*p); \ | ||
| 89 | __smp_mb(); \ | ||
| 90 | ___p1; \ | ||
| 91 | }) | ||
| 92 | |||
| 93 | #else /* regular x86 TSO memory ordering */ | ||
| 94 | |||
| 95 | #define __smp_store_release(p, v) \ | 67 | #define __smp_store_release(p, v) \ |
| 96 | do { \ | 68 | do { \ |
| 97 | compiletime_assert_atomic_type(*p); \ | 69 | compiletime_assert_atomic_type(*p); \ |
| @@ -107,8 +79,6 @@ do { \ | |||
| 107 | ___p1; \ | 79 | ___p1; \ |
| 108 | }) | 80 | }) |
| 109 | 81 | ||
| 110 | #endif | ||
| 111 | |||
| 112 | /* Atomic operations are already serializing on x86 */ | 82 | /* Atomic operations are already serializing on x86 */ |
| 113 | #define __smp_mb__before_atomic() barrier() | 83 | #define __smp_mb__before_atomic() barrier() |
| 114 | #define __smp_mb__after_atomic() barrier() | 84 | #define __smp_mb__after_atomic() barrier() |
diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index 95e948627fd0..f6e5b9375d8c 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h | |||
| @@ -232,21 +232,6 @@ extern void set_iounmap_nonlazy(void); | |||
| 232 | */ | 232 | */ |
| 233 | #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) | 233 | #define __ISA_IO_base ((char __iomem *)(PAGE_OFFSET)) |
| 234 | 234 | ||
| 235 | /* | ||
| 236 | * Cache management | ||
| 237 | * | ||
| 238 | * This needed for two cases | ||
| 239 | * 1. Out of order aware processors | ||
| 240 | * 2. Accidentally out of order processors (PPro errata #51) | ||
| 241 | */ | ||
| 242 | |||
| 243 | static inline void flush_write_buffers(void) | ||
| 244 | { | ||
| 245 | #if defined(CONFIG_X86_PPRO_FENCE) | ||
| 246 | asm volatile("lock; addl $0,0(%%esp)": : :"memory"); | ||
| 247 | #endif | ||
| 248 | } | ||
| 249 | |||
| 250 | #endif /* __KERNEL__ */ | 235 | #endif /* __KERNEL__ */ |
| 251 | 236 | ||
| 252 | extern void native_io_delay(void); | 237 | extern void native_io_delay(void); |
diff --git a/arch/x86/kernel/idt.c b/arch/x86/kernel/idt.c index 56d99be3706a..50bee5fe1140 100644 --- a/arch/x86/kernel/idt.c +++ b/arch/x86/kernel/idt.c | |||
| @@ -160,7 +160,6 @@ static const __initconst struct idt_data early_pf_idts[] = { | |||
| 160 | */ | 160 | */ |
| 161 | static const __initconst struct idt_data dbg_idts[] = { | 161 | static const __initconst struct idt_data dbg_idts[] = { |
| 162 | INTG(X86_TRAP_DB, debug), | 162 | INTG(X86_TRAP_DB, debug), |
| 163 | INTG(X86_TRAP_BP, int3), | ||
| 164 | }; | 163 | }; |
| 165 | #endif | 164 | #endif |
| 166 | 165 | ||
| @@ -183,7 +182,6 @@ gate_desc debug_idt_table[IDT_ENTRIES] __page_aligned_bss; | |||
| 183 | static const __initconst struct idt_data ist_idts[] = { | 182 | static const __initconst struct idt_data ist_idts[] = { |
| 184 | ISTG(X86_TRAP_DB, debug, DEBUG_STACK), | 183 | ISTG(X86_TRAP_DB, debug, DEBUG_STACK), |
| 185 | ISTG(X86_TRAP_NMI, nmi, NMI_STACK), | 184 | ISTG(X86_TRAP_NMI, nmi, NMI_STACK), |
| 186 | SISTG(X86_TRAP_BP, int3, DEBUG_STACK), | ||
| 187 | ISTG(X86_TRAP_DF, double_fault, DOUBLEFAULT_STACK), | 185 | ISTG(X86_TRAP_DF, double_fault, DOUBLEFAULT_STACK), |
| 188 | #ifdef CONFIG_X86_MCE | 186 | #ifdef CONFIG_X86_MCE |
| 189 | ISTG(X86_TRAP_MC, &machine_check, MCE_STACK), | 187 | ISTG(X86_TRAP_MC, &machine_check, MCE_STACK), |
diff --git a/arch/x86/kernel/pci-nommu.c b/arch/x86/kernel/pci-nommu.c index 618285e475c6..ac7ea3a8242f 100644 --- a/arch/x86/kernel/pci-nommu.c +++ b/arch/x86/kernel/pci-nommu.c | |||
| @@ -37,7 +37,6 @@ static dma_addr_t nommu_map_page(struct device *dev, struct page *page, | |||
| 37 | WARN_ON(size == 0); | 37 | WARN_ON(size == 0); |
| 38 | if (!check_addr("map_single", dev, bus, size)) | 38 | if (!check_addr("map_single", dev, bus, size)) |
| 39 | return NOMMU_MAPPING_ERROR; | 39 | return NOMMU_MAPPING_ERROR; |
| 40 | flush_write_buffers(); | ||
| 41 | return bus; | 40 | return bus; |
| 42 | } | 41 | } |
| 43 | 42 | ||
| @@ -72,25 +71,9 @@ static int nommu_map_sg(struct device *hwdev, struct scatterlist *sg, | |||
| 72 | return 0; | 71 | return 0; |
| 73 | s->dma_length = s->length; | 72 | s->dma_length = s->length; |
| 74 | } | 73 | } |
| 75 | flush_write_buffers(); | ||
| 76 | return nents; | 74 | return nents; |
| 77 | } | 75 | } |
| 78 | 76 | ||
| 79 | static void nommu_sync_single_for_device(struct device *dev, | ||
| 80 | dma_addr_t addr, size_t size, | ||
| 81 | enum dma_data_direction dir) | ||
| 82 | { | ||
| 83 | flush_write_buffers(); | ||
| 84 | } | ||
| 85 | |||
| 86 | |||
| 87 | static void nommu_sync_sg_for_device(struct device *dev, | ||
| 88 | struct scatterlist *sg, int nelems, | ||
| 89 | enum dma_data_direction dir) | ||
| 90 | { | ||
| 91 | flush_write_buffers(); | ||
| 92 | } | ||
| 93 | |||
| 94 | static int nommu_mapping_error(struct device *dev, dma_addr_t dma_addr) | 77 | static int nommu_mapping_error(struct device *dev, dma_addr_t dma_addr) |
| 95 | { | 78 | { |
| 96 | return dma_addr == NOMMU_MAPPING_ERROR; | 79 | return dma_addr == NOMMU_MAPPING_ERROR; |
| @@ -101,8 +84,6 @@ const struct dma_map_ops nommu_dma_ops = { | |||
| 101 | .free = dma_generic_free_coherent, | 84 | .free = dma_generic_free_coherent, |
| 102 | .map_sg = nommu_map_sg, | 85 | .map_sg = nommu_map_sg, |
| 103 | .map_page = nommu_map_page, | 86 | .map_page = nommu_map_page, |
| 104 | .sync_single_for_device = nommu_sync_single_for_device, | ||
| 105 | .sync_sg_for_device = nommu_sync_sg_for_device, | ||
| 106 | .is_phys = 1, | 87 | .is_phys = 1, |
| 107 | .mapping_error = nommu_mapping_error, | 88 | .mapping_error = nommu_mapping_error, |
| 108 | .dma_supported = x86_dma_supported, | 89 | .dma_supported = x86_dma_supported, |
diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index 3d9b2308e7fa..03f3d7695dac 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c | |||
| @@ -577,7 +577,6 @@ do_general_protection(struct pt_regs *regs, long error_code) | |||
| 577 | } | 577 | } |
| 578 | NOKPROBE_SYMBOL(do_general_protection); | 578 | NOKPROBE_SYMBOL(do_general_protection); |
| 579 | 579 | ||
| 580 | /* May run on IST stack. */ | ||
| 581 | dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code) | 580 | dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code) |
| 582 | { | 581 | { |
| 583 | #ifdef CONFIG_DYNAMIC_FTRACE | 582 | #ifdef CONFIG_DYNAMIC_FTRACE |
| @@ -592,6 +591,13 @@ dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code) | |||
| 592 | if (poke_int3_handler(regs)) | 591 | if (poke_int3_handler(regs)) |
| 593 | return; | 592 | return; |
| 594 | 593 | ||
| 594 | /* | ||
| 595 | * Use ist_enter despite the fact that we don't use an IST stack. | ||
| 596 | * We can be called from a kprobe in non-CONTEXT_KERNEL kernel | ||
| 597 | * mode or even during context tracking state changes. | ||
| 598 | * | ||
| 599 | * This means that we can't schedule. That's okay. | ||
| 600 | */ | ||
| 595 | ist_enter(regs); | 601 | ist_enter(regs); |
| 596 | RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU"); | 602 | RCU_LOCKDEP_WARN(!rcu_is_watching(), "entry code didn't wake RCU"); |
| 597 | #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP | 603 | #ifdef CONFIG_KGDB_LOW_LEVEL_TRAP |
| @@ -609,15 +615,10 @@ dotraplinkage void notrace do_int3(struct pt_regs *regs, long error_code) | |||
| 609 | SIGTRAP) == NOTIFY_STOP) | 615 | SIGTRAP) == NOTIFY_STOP) |
| 610 | goto exit; | 616 | goto exit; |
| 611 | 617 | ||
| 612 | /* | ||
| 613 | * Let others (NMI) know that the debug stack is in use | ||
| 614 | * as we may switch to the interrupt stack. | ||
| 615 | */ | ||
| 616 | debug_stack_usage_inc(); | ||
| 617 | cond_local_irq_enable(regs); | 618 | cond_local_irq_enable(regs); |
| 618 | do_trap(X86_TRAP_BP, SIGTRAP, "int3", regs, error_code, NULL); | 619 | do_trap(X86_TRAP_BP, SIGTRAP, "int3", regs, error_code, NULL); |
| 619 | cond_local_irq_disable(regs); | 620 | cond_local_irq_disable(regs); |
| 620 | debug_stack_usage_dec(); | 621 | |
| 621 | exit: | 622 | exit: |
| 622 | ist_exit(regs); | 623 | ist_exit(regs); |
| 623 | } | 624 | } |
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c index c310a8284358..f9cfbc0d1f33 100644 --- a/arch/x86/platform/efi/efi_64.c +++ b/arch/x86/platform/efi/efi_64.c | |||
| @@ -227,7 +227,7 @@ int __init efi_alloc_page_tables(void) | |||
| 227 | if (!pud) { | 227 | if (!pud) { |
| 228 | if (CONFIG_PGTABLE_LEVELS > 4) | 228 | if (CONFIG_PGTABLE_LEVELS > 4) |
| 229 | free_page((unsigned long) pgd_page_vaddr(*pgd)); | 229 | free_page((unsigned long) pgd_page_vaddr(*pgd)); |
| 230 | free_page((unsigned long)efi_pgd); | 230 | free_pages((unsigned long)efi_pgd, PGD_ALLOCATION_ORDER); |
| 231 | return -ENOMEM; | 231 | return -ENOMEM; |
| 232 | } | 232 | } |
| 233 | 233 | ||
diff --git a/arch/x86/um/asm/barrier.h b/arch/x86/um/asm/barrier.h index b7d73400ea29..f31e5d903161 100644 --- a/arch/x86/um/asm/barrier.h +++ b/arch/x86/um/asm/barrier.h | |||
| @@ -30,11 +30,7 @@ | |||
| 30 | 30 | ||
| 31 | #endif /* CONFIG_X86_32 */ | 31 | #endif /* CONFIG_X86_32 */ |
| 32 | 32 | ||
| 33 | #ifdef CONFIG_X86_PPRO_FENCE | ||
| 34 | #define dma_rmb() rmb() | ||
| 35 | #else /* CONFIG_X86_PPRO_FENCE */ | ||
| 36 | #define dma_rmb() barrier() | 33 | #define dma_rmb() barrier() |
| 37 | #endif /* CONFIG_X86_PPRO_FENCE */ | ||
| 38 | #define dma_wmb() barrier() | 34 | #define dma_wmb() barrier() |
| 39 | 35 | ||
| 40 | #include <asm-generic/barrier.h> | 36 | #include <asm-generic/barrier.h> |
diff --git a/tools/testing/selftests/x86/ptrace_syscall.c b/tools/testing/selftests/x86/ptrace_syscall.c index 1ae1c5a7392e..6f22238f3217 100644 --- a/tools/testing/selftests/x86/ptrace_syscall.c +++ b/tools/testing/selftests/x86/ptrace_syscall.c | |||
| @@ -183,8 +183,10 @@ static void test_ptrace_syscall_restart(void) | |||
| 183 | if (ptrace(PTRACE_TRACEME, 0, 0, 0) != 0) | 183 | if (ptrace(PTRACE_TRACEME, 0, 0, 0) != 0) |
| 184 | err(1, "PTRACE_TRACEME"); | 184 | err(1, "PTRACE_TRACEME"); |
| 185 | 185 | ||
| 186 | pid_t pid = getpid(), tid = syscall(SYS_gettid); | ||
| 187 | |||
| 186 | printf("\tChild will make one syscall\n"); | 188 | printf("\tChild will make one syscall\n"); |
| 187 | raise(SIGSTOP); | 189 | syscall(SYS_tgkill, pid, tid, SIGSTOP); |
| 188 | 190 | ||
| 189 | syscall(SYS_gettid, 10, 11, 12, 13, 14, 15); | 191 | syscall(SYS_gettid, 10, 11, 12, 13, 14, 15); |
| 190 | _exit(0); | 192 | _exit(0); |
| @@ -301,9 +303,11 @@ static void test_restart_under_ptrace(void) | |||
| 301 | if (ptrace(PTRACE_TRACEME, 0, 0, 0) != 0) | 303 | if (ptrace(PTRACE_TRACEME, 0, 0, 0) != 0) |
| 302 | err(1, "PTRACE_TRACEME"); | 304 | err(1, "PTRACE_TRACEME"); |
| 303 | 305 | ||
| 306 | pid_t pid = getpid(), tid = syscall(SYS_gettid); | ||
| 307 | |||
| 304 | printf("\tChild will take a nap until signaled\n"); | 308 | printf("\tChild will take a nap until signaled\n"); |
| 305 | setsigign(SIGUSR1, SA_RESTART); | 309 | setsigign(SIGUSR1, SA_RESTART); |
| 306 | raise(SIGSTOP); | 310 | syscall(SYS_tgkill, pid, tid, SIGSTOP); |
| 307 | 311 | ||
| 308 | syscall(SYS_pause, 0, 0, 0, 0, 0, 0); | 312 | syscall(SYS_pause, 0, 0, 0, 0, 0, 0); |
| 309 | _exit(0); | 313 | _exit(0); |
