Re: [PATCH RFC 09/11] misc/sgi-gru: use ptep_get() for page-table reads
Pedro Falcato <[email protected]> Wed, 29 Jul 2026 13:36:58 +0100
| Newsgroups | gmane.comp.freedesktop.xorg.drivers.intel,gmane.linux.kernel,gmane.comp.video.dri.devel,gmane.linux.ports.parisc,gmane.comp.emulators.xen.devel,gmane.linux.kernel.mm,gmane.linux.file-systems,gmane.linux.kernel.cross-arch,gmane.linux.kernel.bpf,gmane.linux.kernel.perf.user |
|---|---|
| Message-ID | <[email protected]> |
On Mon, Jul 27, 2026 at 05:47:00PM +0100, Muhammad Usama Anjum wrote: > A leaf PMD is being read through ptep_get() by treating the PMD address > as PTE-sized table storage. ptep_get() now accepts hw_pte_t *, so update > the cast accordingly. > > pte_offset_kernel() also returns hw_pte_t *. Get pte_t value by calling > ptep_get(). > > Signed-off-by: Muhammad Usama Anjum <[email protected]> > --- > drivers/misc/sgi-gru/grufault.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/misc/sgi-gru/grufault.c b/drivers/misc/sgi-gru/grufault.c > index 3557d78ee47a2..ff89d34ad2aa4 100644 > --- a/drivers/misc/sgi-gru/grufault.c > +++ b/drivers/misc/sgi-gru/grufault.c > @@ -228,10 +228,10 @@ static int atomic_pte_lookup(struct vm_area_struct *vma, unsigned long vaddr, > goto err; > #ifdef CONFIG_X86_64 > if (unlikely(pmd_leaf(*pmdp))) > - pte = ptep_get((pte_t *)pmdp); > + pte = ptep_get((hw_pte_t *)pmdp); > else > #endif > - pte = *pte_offset_kernel(pmdp, vaddr); > + pte = ptep_get(pte_offset_kernel(pmdp, vaddr)); > > if (unlikely(!pte_present(pte) || > (write && (!pte_write(pte) || !pte_dirty(pte))))) This code is super, super broken. Can we remove this ASAP? For starters, we're using is_vm_hugetlb_page() to detect page shift, the code does not grab refs on the pages, uses pte_offset_kernel() on user page tables, does not handle PUD-level hugepages, does not handle PMD-level hugepages on !x86_64, does not hold page table locks nor check for pte table retraction, etc I don't think I need to go on. -- Pedro