Building the Linux kernel with Clang and LLVM
 help / color / mirror / Atom feed
* [davidhildenbrand:device_private 9/22] mm/ksm.c:1276:28: error: passing 'pte_t *' to parameter of incompatible type 'pte_t'; dereference with *
@ 2025-02-05  8:47 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-02-05  8:47 UTC (permalink / raw)
  To: David Hildenbrand; +Cc: llvm, oe-kbuild-all

tree:   https://github.com/davidhildenbrand/linux device_private
head:   ddc42f5fd72394838fc2d280ff2486ccb7178b9a
commit: e06705cb196ddea990ddec54bffd90ebff1ea85c [9/22] mm/ksm: handle device-exclusive entries correctly in write_protect_page()
config: i386-buildonly-randconfig-006-20250205 (https://download.01.org/0day-ci/archive/20250205/202502051640.vYN3JWVM-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250205/202502051640.vYN3JWVM-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502051640.vYN3JWVM-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from mm/ksm.c:18:
   include/linux/mm_inline.h:47:41: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
      47 |         __mod_lruvec_state(lruvec, NR_LRU_BASE + lru, nr_pages);
         |                                    ~~~~~~~~~~~ ^ ~~~
   include/linux/mm_inline.h:49:22: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
      49 |                                 NR_ZONE_LRU_BASE + lru, nr_pages);
         |                                 ~~~~~~~~~~~~~~~~ ^ ~~~
>> mm/ksm.c:1276:28: error: passing 'pte_t *' to parameter of incompatible type 'pte_t'; dereference with *
    1276 |         if (unlikely(!pte_present(pvmw.pte))
         |                                   ^~~~~~~~
         |                                   *
   include/linux/compiler.h:77:42: note: expanded from macro 'unlikely'
      77 | # define unlikely(x)    __builtin_expect(!!(x), 0)
         |                                             ^
   arch/x86/include/asm/pgtable.h:1010:37: note: passing argument to parameter 'a' here
    1010 | static inline int pte_present(pte_t a)
         |                                     ^
>> mm/ksm.c:1277:3: error: expected ')'
    1277 |                 goto out_unlock;
         |                 ^
   mm/ksm.c:1276:5: note: to match this '('
    1276 |         if (unlikely(!pte_present(pvmw.pte))
         |            ^
   2 warnings and 2 errors generated.


vim +1276 mm/ksm.c

  1245	
  1246	static int write_protect_page(struct vm_area_struct *vma, struct folio *folio,
  1247				      pte_t *orig_pte)
  1248	{
  1249		struct mm_struct *mm = vma->vm_mm;
  1250		DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, 0, 0);
  1251		int swapped;
  1252		int err = -EFAULT;
  1253		struct mmu_notifier_range range;
  1254		bool anon_exclusive;
  1255		pte_t entry;
  1256	
  1257		if (WARN_ON_ONCE(folio_test_large(folio)))
  1258			return err;
  1259	
  1260		pvmw.address = page_address_in_vma(folio, folio_page(folio, 0), vma);
  1261		if (pvmw.address == -EFAULT)
  1262			goto out;
  1263	
  1264		mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm, pvmw.address,
  1265					pvmw.address + PAGE_SIZE);
  1266		mmu_notifier_invalidate_range_start(&range);
  1267	
  1268		if (!page_vma_mapped_walk(&pvmw))
  1269			goto out_mn;
  1270		if (WARN_ONCE(!pvmw.pte, "Unexpected PMD mapping?"))
  1271			goto out_unlock;
  1272		/*
  1273		 * Handle PFN swap entries, such as device-exclusive ones, that
  1274		 * actually map pages: give up just like the next folio_walk would.
  1275		 */
> 1276		if (unlikely(!pte_present(pvmw.pte))
> 1277			goto out_unlock;
  1278	
  1279		anon_exclusive = PageAnonExclusive(&folio->page);
  1280		entry = ptep_get(pvmw.pte);
  1281		if (pte_write(entry) || pte_dirty(entry) ||
  1282		    anon_exclusive || mm_tlb_flush_pending(mm)) {
  1283			swapped = folio_test_swapcache(folio);
  1284			flush_cache_page(vma, pvmw.address, folio_pfn(folio));
  1285			/*
  1286			 * Ok this is tricky, when get_user_pages_fast() run it doesn't
  1287			 * take any lock, therefore the check that we are going to make
  1288			 * with the pagecount against the mapcount is racy and
  1289			 * O_DIRECT can happen right after the check.
  1290			 * So we clear the pte and flush the tlb before the check
  1291			 * this assure us that no O_DIRECT can happen after the check
  1292			 * or in the middle of the check.
  1293			 *
  1294			 * No need to notify as we are downgrading page table to read
  1295			 * only not changing it to point to a new page.
  1296			 *
  1297			 * See Documentation/mm/mmu_notifier.rst
  1298			 */
  1299			entry = ptep_clear_flush(vma, pvmw.address, pvmw.pte);
  1300			/*
  1301			 * Check that no O_DIRECT or similar I/O is in progress on the
  1302			 * page
  1303			 */
  1304			if (folio_mapcount(folio) + 1 + swapped != folio_ref_count(folio)) {
  1305				set_pte_at(mm, pvmw.address, pvmw.pte, entry);
  1306				goto out_unlock;
  1307			}
  1308	
  1309			/* See folio_try_share_anon_rmap_pte(): clear PTE first. */
  1310			if (anon_exclusive &&
  1311			    folio_try_share_anon_rmap_pte(folio, &folio->page)) {
  1312				set_pte_at(mm, pvmw.address, pvmw.pte, entry);
  1313				goto out_unlock;
  1314			}
  1315	
  1316			if (pte_dirty(entry))
  1317				folio_mark_dirty(folio);
  1318			entry = pte_mkclean(entry);
  1319	
  1320			if (pte_write(entry))
  1321				entry = pte_wrprotect(entry);
  1322	
  1323			set_pte_at(mm, pvmw.address, pvmw.pte, entry);
  1324		}
  1325		*orig_pte = entry;
  1326		err = 0;
  1327	
  1328	out_unlock:
  1329		page_vma_mapped_walk_done(&pvmw);
  1330	out_mn:
  1331		mmu_notifier_invalidate_range_end(&range);
  1332	out:
  1333		return err;
  1334	}
  1335	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-02-05  8:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-05  8:47 [davidhildenbrand:device_private 9/22] mm/ksm.c:1276:28: error: passing 'pte_t *' to parameter of incompatible type 'pte_t'; dereference with * kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox