x86: Further shrink ifdef sections in fault.c
PATCH 2/2 x86: Further shrink ifdef sections in fault.c
Move the vmalloc address tests from the if statement into vmalloc_fault. This allows 32 and 64 bit to share the same if block.
Signed-off-by Harvey Harrison <[email protected]>
--- arch/x86/mm/fault.c | 24 +++++++----------------- 1 files changed, 7 insertions(+), 17 deletions(-)
arch/x86/mm/fault.c +7 -17
@@ -468,6 +468,9 @@ static int vmalloc_fault(unsigned long address)pmd_t *pmd, *pmd_ref;pte_t *pte, *pte_ref; +if (!(address >=VMALLOC_START && address <VMALLOC_END )) +return -1 ; +/* Copy kernel mappings over when needed. This can also happen within a race in page table update. In the later case just flush. */
@@ -563,6 +566,9 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)*/ #ifdef CONFIG_X86_32 if (unlikely (address >=TASK_SIZE )) { +#else +if (unlikely (address >=TASK_SIZE64 )) { +#endif if (!(error_code & (PF_RSVD |PF_USER |PF_PROT )) &&vmalloc_fault (address) >=0 )return ;
@@ -573,6 +579,7 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code) goto bad_area_nosemaphore; } +#ifdef CONFIG_X86_32 /* It's safe to allow irq's after cr2 has been saved and the vmalloc fault has been handled. */ if (regs->flags & (X86_EFLAGS_IF |VM_MASK ))
@@ -585,23 +592,6 @@ void __kprobes do_page_fault(struct pt_regs *regs, unsigned long error_code)if (in_atomic () || !mm) goto bad_area_nosemaphore;#else /* CONFIG_X86_64 */ -if (unlikely (address >=TASK_SIZE64 )) { -/* -* Don't check for the module range here: its PML4 -* is always initialized because it's shared with the main -* kernel text. Only vmalloc may need PML4 syncups. -*/ -if (!(error_code & (PF_RSVD |PF_USER |PF_PROT )) && - ((address >=VMALLOC_START && address <VMALLOC_END ))) { -if (vmalloc_fault (address) >=0 ) -return ; - } -/* -* Don't take the mm semaphore here. If we fixup a prefetch -* fault we could otherwise deadlock. -*/ - goto bad_area_nosemaphore; - }if (likely (regs->flags &X86_EFLAGS_IF ))local_irq_enable ();
Signature · 1 line
1.5.4.rc4.1130.g9ad85
arch/x86/mm/fault.c static int vmalloc_fault(unsigned long address) · line 472
Quoted 2 lines · Harvey Harrison
arch/x86/mm/fault.c +2
-0+if (!(address >=VMALLOC_START && address <VMALLOC_END )) +return -1 ;
ah, this explains the weird chunk in your other patch.
Ingo