return __pmd(pte_val(pte));
 }
 
-static inline pgprot_t mk_sect_prot(pgprot_t prot)
+static inline pgprot_t mk_pud_sect_prot(pgprot_t prot)
 {
-       return __pgprot(pgprot_val(prot) & ~PTE_TABLE_BIT);
+       return __pgprot((pgprot_val(prot) & ~PUD_TABLE_BIT) | PUD_TYPE_SECT);
+}
+
+static inline pgprot_t mk_pmd_sect_prot(pgprot_t prot)
+{
+       return __pgprot((pgprot_val(prot) & ~PMD_TABLE_BIT) | PMD_TYPE_SECT);
 }
 
 #ifdef CONFIG_NUMA_BALANCING
 
 
 int pud_set_huge(pud_t *pudp, phys_addr_t phys, pgprot_t prot)
 {
-       pgprot_t sect_prot = __pgprot(PUD_TYPE_SECT |
-                                       pgprot_val(mk_sect_prot(prot)));
-       pud_t new_pud = pfn_pud(__phys_to_pfn(phys), sect_prot);
+       pud_t new_pud = pfn_pud(__phys_to_pfn(phys), mk_pud_sect_prot(prot));
 
        /* Only allow permission changes for now */
        if (!pgattr_change_is_safe(READ_ONCE(pud_val(*pudp)),
 
 int pmd_set_huge(pmd_t *pmdp, phys_addr_t phys, pgprot_t prot)
 {
-       pgprot_t sect_prot = __pgprot(PMD_TYPE_SECT |
-                                       pgprot_val(mk_sect_prot(prot)));
-       pmd_t new_pmd = pfn_pmd(__phys_to_pfn(phys), sect_prot);
+       pmd_t new_pmd = pfn_pmd(__phys_to_pfn(phys), mk_pmd_sect_prot(prot));
 
        /* Only allow permission changes for now */
        if (!pgattr_change_is_safe(READ_ONCE(pmd_val(*pmdp)),