At this point, it is very clear that huge_pte_offset() should be renamed.
I'd suggest something like one of these:
__hugetlb_walk()
hugetlb_walk_raw()
We can.
Not only because that's an arch api for years (didn't want to touch more
arch code unless necessary), but also since we have hugetlb_walk() that'll
be the future interface not huge_pte_offset().
Actually it's good when that's the only thing people can find from its name
when they want to have a huge pgtable walk. :)
So totally makes sense to do so, but I don't strongly feel like doing it in
this patchset if you're okay with it.
+static inline pte_t *
+hugetlb_walk(struct vm_area_struct *vma, unsigned long addr, unsigned long sz)
+{
+#if defined(CONFIG_HUGETLB_PAGE) && \
+ defined(CONFIG_ARCH_WANT_HUGE_PMD_SHARE) && defined(CONFIG_LOCKDEP)
+ struct hugetlb_vma_lock *vma_lock = vma->vm_private_data;
+
+ /*
+ * If pmd sharing possible, locking needed to safely walk the
+ * hugetlb pgtables. More information can be found at the comment
+ * above huge_pte_offset() in the same file.
+ *
+ * NOTE: lockdep_is_held() is only defined with CONFIG_LOCKDEP.
+ */
+ if (__vma_shareable_flags_pmd(vma))
+ WARN_ON_ONCE(!lockdep_is_held(&vma_lock->rw_sema) &&
+ !lockdep_is_held(
+ &vma->vm_file->f_mapping->i_mmap_rwsem));
+#endif
+ return huge_pte_offset(vma->vm_mm, addr, sz);
+}
Let's please not slice up C functions with ifdefs. Instead, stick to the
standard approach of
#ifdef X
functionC()
{
...implementation
}
#else
functionC()
{
...simpler or shorter or stub implementation
}
Personally I like the slicing because it clearly tells what's the
difference with/without the macros defined.