Changeset 36565 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- Apr 5, 2011 4:08:06 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 71000
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/r0drv/solaris/vbi/i86pc/os/vbi.c
r36505 r36565 71 71 72 72 /* 73 * We have to use dl_lookup to find kflt_init() and thereby use kernel pages from 74 * the freelists if we no longer get user pages from freelist and cachelists. 75 */ 76 /* Introduced in v9 */ 77 static int use_kflt = 0; 78 page_t *vbi_page_get_fromlist(uint_t freelist, caddr_t virtAddr); 79 80 81 /* 73 82 * Workarounds for running on old versions of solaris with different cross call 74 83 * interfaces. If we find xc_init_cpu() in the kernel, then just use the defined … … 243 252 } 244 253 } 254 255 /* 256 * Use kernel page freelist flags to get pages from kernel page freelists 257 * while allocating physical pages, once the userpages are exhausted. 258 * snv_161+, see @bugref{5632}. 259 */ 260 if (kobj_getsymvalue("kflt_init", 1) != NULL) 261 { 262 use_kflt = 1; 263 } 264 245 265 246 266 /* … … 1305 1325 * we don't have the 'virtAddr' to which this memory may be mapped. 1306 1326 */ 1307 seg_t kernseg;1308 kernseg.s_as = &kas;1309 1327 caddr_t virtAddr = NULL; 1310 1328 for (int64_t i = 0; i < npages; i++, virtAddr += PAGESIZE) 1311 1329 { 1312 /* get a page from the freelist */ 1313 page_t *ppage = page_get_freelist(&vbipagevp, 0 /* offset */, &kernseg, virtAddr, 1314 PAGESIZE, 0 /* flags */, NULL /* local group */); 1330 /* get a page from the freelists */ 1331 page_t *ppage = vbi_page_get_fromlist(1 /* freelist */, virtAddr); 1315 1332 if (!ppage) 1316 1333 { 1317 /* try from the cachelist */ 1318 ppage = page_get_cachelist(&vbipagevp, 0 /* offset */, &kernseg, virtAddr, 1319 0 /* flags */, NULL /* local group */); 1334 /* try from the cachelists */ 1335 ppage = vbi_page_get_fromlist(2 /* cachelist */, virtAddr); 1320 1336 if (!ppage) 1321 1337 { … … 1413 1429 } 1414 1430 1431 1432 /* 1433 * This is revision 9 of the interface. 1434 */ 1435 page_t *vbi_page_get_fromlist(uint_t freelist, caddr_t virtAddr) 1436 { 1437 seg_t kernseg; 1438 kernseg.s_as = &kas; 1439 page_t *ppage = NULL; 1440 if (freelist == 1) 1441 { 1442 ppage = page_get_freelist(&vbipagevp, 0 /* offset */, &kernseg, virtAddr, 1443 PAGESIZE, 0 /* flags */, NULL /* local group */); 1444 if (!ppage) 1445 { 1446 if (use_kflt) 1447 { 1448 ppage = page_get_freelist(&vbipagevp, 0 /* offset */, &kernseg, virtAddr, 1449 PAGESIZE, 0x0200 /* PG_KFLT */, NULL /* local group */); 1450 } 1451 } 1452 } 1453 else 1454 { 1455 /* cachelist */ 1456 ppage = page_get_cachelist(&vbipagevp, 0 /* offset */, &kernseg, virtAddr, 1457 0 /* flags */, NULL /* local group */); 1458 if (!ppage) 1459 { 1460 if (use_kflt) 1461 { 1462 ppage = page_get_cachelist(&vbipagevp, 0 /* offset */, &kernseg, virtAddr, 1463 0x0200 /* PG_KFLT */, NULL /* local group */); 1464 } 1465 } 1466 } 1467 return ppage; 1468 } 1469 1470 1415 1471 /* 1416 1472 * As more functions are added, they should start with a comment indicating … … 1418 1474 * be increased. Also change vbi_modlmisc at the top of the file. 1419 1475 */ 1420 uint_t vbi_revision_level = 8;1421 1476 uint_t vbi_revision_level = 9; 1477
Note:
See TracChangeset
for help on using the changeset viewer.