1383
1384 /*
1385 * Mark 'pfn' in the bitmap
1386 */
1387 void
1388 dump_page(pfn_t pfn)
1389 {
1390 pgcnt_t bitnum;
1391
1392 if ((bitnum = dump_pfn_to_bitnum(pfn)) != (pgcnt_t)-1) {
1393 if (!BT_TEST(dumpcfg.bitmap, bitnum)) {
1394 dumphdr->dump_npages++;
1395 BT_SET(dumpcfg.bitmap, bitnum);
1396 }
1397 }
1398 dump_timeleft = dump_timeout;
1399 }
1400
1401 /*
1402 * Dump the <as, va, pfn> information for a given address space.
1403 * SEGOP_DUMP() will call dump_addpage() for each page in the segment.
1404 */
1405 static void
1406 dump_as(struct as *as)
1407 {
1408 struct seg *seg;
1409
1410 AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
1411 for (seg = AS_SEGFIRST(as); seg; seg = AS_SEGNEXT(as, seg)) {
1412 if (seg->s_as != as)
1413 break;
1414 if (seg->s_ops == NULL)
1415 continue;
1416 SEGOP_DUMP(seg);
1417 }
1418 AS_LOCK_EXIT(as, &as->a_lock);
1419
1420 if (seg != NULL)
1421 cmn_err(CE_WARN, "invalid segment %p in address space %p",
1422 (void *)seg, (void *)as);
1423 }
1424
1425 static int
1426 dump_process(pid_t pid)
1427 {
1428 proc_t *p = sprlock(pid);
1429
1430 if (p == NULL)
1431 return (-1);
1432 if (p->p_as != &kas) {
1433 mutex_exit(&p->p_lock);
1434 dump_as(p->p_as);
1435 mutex_enter(&p->p_lock);
1436 }
|
1383
1384 /*
1385 * Mark 'pfn' in the bitmap
1386 */
1387 void
1388 dump_page(pfn_t pfn)
1389 {
1390 pgcnt_t bitnum;
1391
1392 if ((bitnum = dump_pfn_to_bitnum(pfn)) != (pgcnt_t)-1) {
1393 if (!BT_TEST(dumpcfg.bitmap, bitnum)) {
1394 dumphdr->dump_npages++;
1395 BT_SET(dumpcfg.bitmap, bitnum);
1396 }
1397 }
1398 dump_timeleft = dump_timeout;
1399 }
1400
1401 /*
1402 * Dump the <as, va, pfn> information for a given address space.
1403 * segop_dump() will call dump_addpage() for each page in the segment.
1404 */
1405 static void
1406 dump_as(struct as *as)
1407 {
1408 struct seg *seg;
1409
1410 AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
1411 for (seg = AS_SEGFIRST(as); seg; seg = AS_SEGNEXT(as, seg)) {
1412 if (seg->s_as != as)
1413 break;
1414 if (seg->s_ops == NULL)
1415 continue;
1416 segop_dump(seg);
1417 }
1418 AS_LOCK_EXIT(as, &as->a_lock);
1419
1420 if (seg != NULL)
1421 cmn_err(CE_WARN, "invalid segment %p in address space %p",
1422 (void *)seg, (void *)as);
1423 }
1424
1425 static int
1426 dump_process(pid_t pid)
1427 {
1428 proc_t *p = sprlock(pid);
1429
1430 if (p == NULL)
1431 return (-1);
1432 if (p->p_as != &kas) {
1433 mutex_exit(&p->p_lock);
1434 dump_as(p->p_as);
1435 mutex_enter(&p->p_lock);
1436 }
|