forked from mirrors/linux
		
	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); | 	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) | static inline pte_t *pte_offset_map(pmd_t *pmd, unsigned long addr) | ||||||
| { | { | ||||||
| 	return __pte_offset_map(pmd, addr, NULL); | 	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; | 	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; | 	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) { } | static void pmdp_get_lockless_end(unsigned long irqflags) { } | ||||||
| #endif | #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; | 	unsigned long irqflags; | ||||||
| 	pmd_t pmdval; | 	pmd_t pmdval; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Petr Malat
						Petr Malat