@@ -262,6 +262,14 @@ extern unsigned long __pgd_table_size;
262
262
263
263
#endif /* __real_pte */
264
264
265
+ static inline unsigned long pte_update (struct mm_struct * mm , unsigned long addr ,
266
+ pte_t * ptep , unsigned long clr ,
267
+ unsigned long set , int huge )
268
+ {
269
+ if (radix_enabled ())
270
+ return radix__pte_update (mm , addr , ptep , clr , set , huge );
271
+ return hash__pte_update (mm , addr , ptep , clr , set , huge );
272
+ }
265
273
/*
266
274
* For hash even if we have _PAGE_ACCESSED = 0, we do a pte_update.
267
275
* We currently remove entries from the hashtable regardless of whether
@@ -501,6 +509,39 @@ static inline bool check_pte_access(unsigned long access, unsigned long ptev)
501
509
502
510
return true;
503
511
}
512
+ /*
513
+ * Generic functions with hash/radix callbacks
514
+ */
515
+
516
+ static inline void __ptep_set_access_flags (pte_t * ptep , pte_t entry )
517
+ {
518
+ if (radix_enabled ())
519
+ return radix__ptep_set_access_flags (ptep , entry );
520
+ return hash__ptep_set_access_flags (ptep , entry );
521
+ }
522
+
523
+ #define __HAVE_ARCH_PTE_SAME
524
+ static inline int pte_same (pte_t pte_a , pte_t pte_b )
525
+ {
526
+ if (radix_enabled ())
527
+ return radix__pte_same (pte_a , pte_b );
528
+ return hash__pte_same (pte_a , pte_b );
529
+ }
530
+
531
+ static inline int pte_none (pte_t pte )
532
+ {
533
+ if (radix_enabled ())
534
+ return radix__pte_none (pte );
535
+ return hash__pte_none (pte );
536
+ }
537
+
538
+ static inline void __set_pte_at (struct mm_struct * mm , unsigned long addr ,
539
+ pte_t * ptep , pte_t pte , int percpu )
540
+ {
541
+ if (radix_enabled ())
542
+ return radix__set_pte_at (mm , addr , ptep , pte , percpu );
543
+ return hash__set_pte_at (mm , addr , ptep , pte , percpu );
544
+ }
504
545
505
546
#define _PAGE_CACHE_CTL (_PAGE_NON_IDEMPOTENT | _PAGE_TOLERANT)
506
547
@@ -555,6 +596,13 @@ static inline void pmd_clear(pmd_t *pmdp)
555
596
#define pmd_none (pmd ) (!pmd_val(pmd))
556
597
#define pmd_present (pmd ) (!pmd_none(pmd))
557
598
599
+ static inline int pmd_bad (pmd_t pmd )
600
+ {
601
+ if (radix_enabled ())
602
+ return radix__pmd_bad (pmd );
603
+ return hash__pmd_bad (pmd );
604
+ }
605
+
558
606
static inline void pud_set (pud_t * pudp , unsigned long val )
559
607
{
560
608
* pudp = __pud (val );
@@ -580,6 +628,15 @@ static inline pud_t pte_pud(pte_t pte)
580
628
return __pud (pte_val (pte ));
581
629
}
582
630
#define pud_write (pud ) pte_write(pud_pte(pud))
631
+
632
+ static inline int pud_bad (pud_t pud )
633
+ {
634
+ if (radix_enabled ())
635
+ return radix__pud_bad (pud );
636
+ return hash__pud_bad (pud );
637
+ }
638
+
639
+
583
640
#define pgd_write (pgd ) pte_write(pgd_pte(pgd))
584
641
static inline void pgd_set (pgd_t * pgdp , unsigned long val )
585
642
{
@@ -604,6 +661,13 @@ static inline pgd_t pte_pgd(pte_t pte)
604
661
return __pgd (pte_val (pte ));
605
662
}
606
663
664
+ static inline int pgd_bad (pgd_t pgd )
665
+ {
666
+ if (radix_enabled ())
667
+ return radix__pgd_bad (pgd );
668
+ return hash__pgd_bad (pgd );
669
+ }
670
+
607
671
extern struct page * pgd_page (pgd_t pgd );
608
672
609
673
/* Pointers in the page table tree are physical addresses */
0 commit comments