mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	mm: add RCU annotation to pte_offset_map(_lock)
RCU lock is taken by ___pte_offset_map() unless it returns NULL. Add this information to its inline callers to avoid sparse warning about context imbalance in pte_unmap(). Link: https://lkml.kernel.org/r/20241210000604.700710-1-oss@malat.biz Signed-off-by: Petr Malat <oss@malat.biz> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									42c4e4b20d
								
							
						
					
					
						commit
						31c5629920
					
				
					 2 changed files with 12 additions and 3 deletions
				
			
		|  | @ -3010,7 +3010,15 @@ static inline void pagetable_pte_dtor(struct ptdesc *ptdesc) | |||
| 	lruvec_stat_sub_folio(folio, NR_PAGETABLE); | ||||
| } | ||||
| 
 | ||||
| pte_t *__pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp); | ||||
| pte_t *___pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp); | ||||
| static inline pte_t *__pte_offset_map(pmd_t *pmd, unsigned long addr, | ||||
| 			pmd_t *pmdvalp) | ||||
| { | ||||
| 	pte_t *pte; | ||||
| 
 | ||||
| 	__cond_lock(RCU, pte = ___pte_offset_map(pmd, addr, pmdvalp)); | ||||
| 	return pte; | ||||
| } | ||||
| static inline pte_t *pte_offset_map(pmd_t *pmd, unsigned long addr) | ||||
| { | ||||
| 	return __pte_offset_map(pmd, addr, NULL); | ||||
|  | @ -3023,7 +3031,8 @@ static inline pte_t *pte_offset_map_lock(struct mm_struct *mm, pmd_t *pmd, | |||
| { | ||||
| 	pte_t *pte; | ||||
| 
 | ||||
| 	__cond_lock(*ptlp, pte = __pte_offset_map_lock(mm, pmd, addr, ptlp)); | ||||
| 	__cond_lock(RCU, __cond_lock(*ptlp, | ||||
| 			pte = __pte_offset_map_lock(mm, pmd, addr, ptlp))); | ||||
| 	return pte; | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -279,7 +279,7 @@ static unsigned long pmdp_get_lockless_start(void) { return 0; } | |||
| static void pmdp_get_lockless_end(unsigned long irqflags) { } | ||||
| #endif | ||||
| 
 | ||||
| pte_t *__pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp) | ||||
| pte_t *___pte_offset_map(pmd_t *pmd, unsigned long addr, pmd_t *pmdvalp) | ||||
| { | ||||
| 	unsigned long irqflags; | ||||
| 	pmd_t pmdval; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Petr Malat
						Petr Malat