Re: [PATCH] x86/mm: Drop usage of __flush_tlb_all() in kernel_physical_mapping_init()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 2018-11-19 at 15:43 -0800, Dave Hansen wrote:
+AD4- On 11/19/18 3:19 PM, Dan Williams wrote:
+AD4- +AD4- Andy wondered why a path that can sleep was using +AF8AXw-flush+AF8-tlb+AF8-all()
+AD4- +AD4- +AFs-1+AF0-
+AD4- +AD4- and Dave confirmed the expectation for TLB flush is for modifying /
+AD4- +AD4- invalidating existing pte entries, but not initial population +AFs-2+AF0-.
+AD4- 
+AD4- I +AF8-think+AF8- this is OK.
+AD4- 
+AD4- But, could we sprinkle a few WARN+AF8-ON+AF8-ONCE(p+ACoAXw-present()) calls in
+AD4- there
+AD4- to help us sleep at night?

Well, I'm having nightmares now because my naive patch to sprinkle some
WARN+AF8-ON+AF8-ONCE() calls is leading to my VM live locking at boot... no
backtrace. If I revert the patch below and just go with the
+AF8AXw-flush+AF8-tlb+AF8-all() removal it seems fine.

I'm going to set this aside for a bit, but if anyone has any thoughts
in the meantime I'd appreciate it.

---

diff --git a/arch/x86/mm/init+AF8-64.c b/arch/x86/mm/init+AF8-64.c
index de95db8ac52f..ecdf917def4c 100644
--- a/arch/x86/mm/init+AF8-64.c
+-+-+- b/arch/x86/mm/init+AF8-64.c
+AEAAQA- -432,6 +-432,7 +AEAAQA- phys+AF8-pte+AF8-init(pte+AF8-t +ACo-pte+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 					     E820+AF8-TYPE+AF8-RAM) +ACYAJg-
 			    +ACE-e820+AF8AXw-mapped+AF8-any(paddr +ACY- PAGE+AF8-MASK, paddr+AF8-next,
 					     E820+AF8-TYPE+AF8-RESERVED+AF8-KERN))
+-				WARN+AF8-ON+AF8-ONCE(pte+AF8-present(+ACo-pte))+ADs-
 				set+AF8-pte(pte, +AF8AXw-pte(0))+ADs-
 			continue+ADs-
 		+AH0-
+AEAAQA- -452,6 +-453,7 +AEAAQA- phys+AF8-pte+AF8-init(pte+AF8-t +ACo-pte+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 			pr+AF8-info(+ACI-   pte+AD0AJQ-p addr+AD0AJQ-lx pte+AD0AJQ-016lx+AFw-n+ACI-, pte, paddr,
 				pfn+AF8-pte(paddr +AD4APg- PAGE+AF8-SHIFT, PAGE+AF8-KERNEL).pte)+ADs-
 		pages+-+-+ADs-
+-		WARN+AF8-ON+AF8-ONCE(pte+AF8-present(+ACo-pte))+ADs-
 		set+AF8-pte(pte, pfn+AF8-pte(paddr +AD4APg- PAGE+AF8-SHIFT, prot))+ADs-
 		paddr+AF8-last +AD0- (paddr +ACY- PAGE+AF8-MASK) +- PAGE+AF8-SIZE+ADs-
 	+AH0-
+AEAAQA- -487,6 +-489,7 +AEAAQA- phys+AF8-pmd+AF8-init(pmd+AF8-t +ACo-pmd+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 					     E820+AF8-TYPE+AF8-RAM) +ACYAJg-
 			    +ACE-e820+AF8AXw-mapped+AF8-any(paddr +ACY- PMD+AF8-MASK, paddr+AF8-next,
 					     E820+AF8-TYPE+AF8-RESERVED+AF8-KERN))
+-				WARN+AF8-ON+AF8-ONCE(pmd+AF8-present(+ACo-pmd))+ADs-
 				set+AF8-pmd(pmd, +AF8AXw-pmd(0))+ADs-
 			continue+ADs-
 		+AH0-
+AEAAQA- -524,6 +-527,7 +AEAAQA- phys+AF8-pmd+AF8-init(pmd+AF8-t +ACo-pmd+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 		if (page+AF8-size+AF8-mask +ACY- (1+ADwAPA-PG+AF8-LEVEL+AF8-2M)) +AHs-
 			pages+-+-+ADs-
 			spin+AF8-lock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
+-			WARN+AF8-ON+AF8-ONCE(pmd+AF8-present(+ACo-pmd))+ADs-
 			set+AF8-pte((pte+AF8-t +ACo-)pmd,
 				pfn+AF8-pte((paddr +ACY- PMD+AF8-MASK) +AD4APg- PAGE+AF8-SHIFT,
 					+AF8AXw-pgprot(pgprot+AF8-val(prot) +AHw- +AF8-PAGE+AF8-PSE)))+ADs-
+AEAAQA- -536,6 +-540,7 +AEAAQA- phys+AF8-pmd+AF8-init(pmd+AF8-t +ACo-pmd+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 		paddr+AF8-last +AD0- phys+AF8-pte+AF8-init(pte, paddr, paddr+AF8-end, new+AF8-prot)+ADs-
 
 		spin+AF8-lock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
+-		WARN+AF8-ON+AF8-ONCE(pmd+AF8-present(+ACo-pmd))+ADs-
 		pmd+AF8-populate+AF8-kernel(+ACY-init+AF8-mm, pmd, pte)+ADs-
 		spin+AF8-unlock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
 	+AH0-
+AEAAQA- -573,6 +-578,7 +AEAAQA- phys+AF8-pud+AF8-init(pud+AF8-t +ACo-pud+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 					     E820+AF8-TYPE+AF8-RAM) +ACYAJg-
 			    +ACE-e820+AF8AXw-mapped+AF8-any(paddr +ACY- PUD+AF8-MASK, paddr+AF8-next,
 					     E820+AF8-TYPE+AF8-RESERVED+AF8-KERN))
+-				WARN+AF8-ON+AF8-ONCE(pud+AF8-present(+ACo-pud))+ADs-
 				set+AF8-pud(pud, +AF8AXw-pud(0))+ADs-
 			continue+ADs-
 		+AH0-
+AEAAQA- -610,6 +-616,7 +AEAAQA- phys+AF8-pud+AF8-init(pud+AF8-t +ACo-pud+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 		if (page+AF8-size+AF8-mask +ACY- (1+ADwAPA-PG+AF8-LEVEL+AF8-1G)) +AHs-
 			pages+-+-+ADs-
 			spin+AF8-lock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
+-			WARN+AF8-ON+AF8-ONCE(pud+AF8-present(+ACo-pud))+ADs-
 			set+AF8-pte((pte+AF8-t +ACo-)pud,
 				pfn+AF8-pte((paddr +ACY- PUD+AF8-MASK) +AD4APg- PAGE+AF8-SHIFT,
 					PAGE+AF8-KERNEL+AF8-LARGE))+ADs-
+AEAAQA- -623,6 +-630,7 +AEAAQA- phys+AF8-pud+AF8-init(pud+AF8-t +ACo-pud+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 					   page+AF8-size+AF8-mask, prot)+ADs-
 
 		spin+AF8-lock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
+-		WARN+AF8-ON+AF8-ONCE(pud+AF8-present(+ACo-pud))+ADs-
 		pud+AF8-populate(+ACY-init+AF8-mm, pud, pmd)+ADs-
 		spin+AF8-unlock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
 	+AH0-
+AEAAQA- -657,6 +-665,7 +AEAAQA- phys+AF8-p4d+AF8-init(p4d+AF8-t +ACo-p4d+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 					     E820+AF8-TYPE+AF8-RAM) +ACYAJg-
 			    +ACE-e820+AF8AXw-mapped+AF8-any(paddr +ACY- P4D+AF8-MASK, paddr+AF8-next,
 					     E820+AF8-TYPE+AF8-RESERVED+AF8-KERN))
+-				WARN+AF8-ON+AF8-ONCE(p4d+AF8-present(+ACo-p4d))+ADs-
 				set+AF8-p4d(p4d, +AF8AXw-p4d(0))+ADs-
 			continue+ADs-
 		+AH0-
+AEAAQA- -674,6 +-683,7 +AEAAQA- phys+AF8-p4d+AF8-init(p4d+AF8-t +ACo-p4d+AF8-page, unsigned long paddr, unsigned long paddr+AF8-end,
 					   page+AF8-size+AF8-mask)+ADs-
 
 		spin+AF8-lock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
+-		WARN+AF8-ON+AF8-ONCE(p4d+AF8-present(+ACo-p4d))+ADs-
 		p4d+AF8-populate(+ACY-init+AF8-mm, p4d, pud)+ADs-
 		spin+AF8-unlock(+ACY-init+AF8-mm.page+AF8-table+AF8-lock)+ADs-
 	+AH0-



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux