Changeset 100319 in vbox for trunk/src/VBox/Runtime/r0drv/linux
- Timestamp:
- Jun 28, 2023 10:43:26 AM (20 months ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/linux/memobj-r0drv-linux.c
r98867 r100319 609 609 * Use vmap - 2.4.22 and later. 610 610 */ 611 #if RTLNX_VER_MIN(2,4,22) 611 #if RTLNX_VER_MIN(2,4,22) && (defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86)) 612 612 pgprot_t fPg; 613 613 pgprot_val(fPg) = _PAGE_PRESENT | _PAGE_RW; … … 978 978 int rc; 979 979 980 #if (defined(RT_ARCH_AMD64) || defined( CONFIG_X86_PAE)) && defined(GFP_DMA32)980 #if (defined(RT_ARCH_AMD64) || defined(RT_ARCH_ARM64) || defined(CONFIG_X86_PAE)) && defined(GFP_DMA32) 981 981 /* ZONE_DMA32: 0-4GB */ 982 982 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA32, … … 984 984 if (RT_FAILURE(rc)) 985 985 #endif 986 #if def RT_ARCH_AMD64986 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_ARM64) 987 987 /* ZONE_DMA: 0-16MB */ 988 988 rc = rtR0MemObjLinuxAllocPages(&pMemLnx, RTR0MEMOBJTYPE_CONT, cb, PAGE_SIZE, GFP_DMA, … … 1145 1145 RTDECL(struct page *) rtR0MemObjLinuxVirtToPage(void *pv) 1146 1146 { 1147 #if defined(RT_ARCH_AMD64) || defined(RT_ARCH_X86) 1147 1148 unsigned long ulAddr = (unsigned long)pv; 1148 1149 unsigned long pfn; … … 1152 1153 { 1153 1154 pgd_t Global; 1154 # if RTLNX_VER_MIN(4,12,0)1155 # if RTLNX_VER_MIN(4,12,0) 1155 1156 p4d_t Four; 1156 # endif1157 # if RTLNX_VER_MIN(2,6,11)1157 # endif 1158 # if RTLNX_VER_MIN(2,6,11) 1158 1159 pud_t Upper; 1159 # endif1160 # endif 1160 1161 pmd_t Middle; 1161 1162 pte_t Entry; … … 1170 1171 if (RT_UNLIKELY(pgd_none(u.Global))) 1171 1172 return NULL; 1172 # if RTLNX_VER_MIN(2,6,11)1173 # if RTLNX_VER_MIN(4,12,0)1173 # if RTLNX_VER_MIN(2,6,11) 1174 # if RTLNX_VER_MIN(4,12,0) 1174 1175 u.Four = *p4d_offset(&u.Global, ulAddr); 1175 1176 if (RT_UNLIKELY(p4d_none(u.Four))) … … 1185 1186 } 1186 1187 u.Upper = *pud_offset(&u.Four, ulAddr); 1187 # else /* < 4.12 */1188 # else /* < 4.12 */ 1188 1189 u.Upper = *pud_offset(&u.Global, ulAddr); 1189 # endif /* < 4.12 */1190 # endif /* < 4.12 */ 1190 1191 if (RT_UNLIKELY(pud_none(u.Upper))) 1191 1192 return NULL; 1192 # if RTLNX_VER_MIN(2,6,25)1193 # if RTLNX_VER_MIN(2,6,25) 1193 1194 if (pud_large(u.Upper)) 1194 1195 { … … 1199 1200 return pfn_to_page(pfn); 1200 1201 } 1201 # endif1202 # endif 1202 1203 u.Middle = *pmd_offset(&u.Upper, ulAddr); 1203 # else /* < 2.6.11 */1204 # else /* < 2.6.11 */ 1204 1205 u.Middle = *pmd_offset(&u.Global, ulAddr); 1205 # endif /* < 2.6.11 */1206 # endif /* < 2.6.11 */ 1206 1207 if (RT_UNLIKELY(pmd_none(u.Middle))) 1207 1208 return NULL; 1208 # if RTLNX_VER_MIN(2,6,0)1209 # if RTLNX_VER_MIN(2,6,0) 1209 1210 if (pmd_large(u.Middle)) 1210 1211 { … … 1215 1216 return pfn_to_page(pfn); 1216 1217 } 1217 # endif1218 1219 # if RTLNX_VER_MIN(2,5,5) || defined(pte_offset_map) /* As usual, RHEL 3 had pte_offset_map earlier. */1218 # endif 1219 1220 # if RTLNX_VER_MIN(2,5,5) || defined(pte_offset_map) /* As usual, RHEL 3 had pte_offset_map earlier. */ 1220 1221 pEntry = pte_offset_map(&u.Middle, ulAddr); 1221 # else1222 # else 1222 1223 pEntry = pte_offset(&u.Middle, ulAddr); 1223 # endif1224 # endif 1224 1225 if (RT_UNLIKELY(!pEntry)) 1225 1226 return NULL; 1226 1227 u.Entry = *pEntry; 1227 # if RTLNX_VER_MIN(2,5,5) || defined(pte_offset_map)1228 # if RTLNX_VER_MIN(2,5,5) || defined(pte_offset_map) 1228 1229 pte_unmap(pEntry); 1229 # endif1230 # endif 1230 1231 1231 1232 if (RT_UNLIKELY(!pte_present(u.Entry))) 1232 1233 return NULL; 1233 1234 return pte_page(u.Entry); 1235 #else /* !defined(RT_ARCH_AMD64) && !defined(RT_ARCH_X86) */ 1236 return virt_to_page(pv); 1237 #endif 1234 1238 } 1235 1239 RT_EXPORT_SYMBOL(rtR0MemObjLinuxVirtToPage);
Note:
See TracChangeset
for help on using the changeset viewer.