Lines Matching defs:lvp
299 * Free up the resources associated with lvp as well as lvp itself.
304 lib_va_free(struct lib_va *lvp)
306 int is_64bit = lvp->lv_flags & LV_ELF64;
307 ASSERT(lvp->lv_refcnt == 0);
309 if (lvp->lv_base_va != NULL) {
311 lvp->lv_base_va, lvp->lv_len);
318 kmem_free(lvp, sizeof (struct lib_va));
330 struct lib_va *lvp;
339 lvp = *tmp;
340 if (LIB_VA_MATCH_ID(lvp, vap)) {
341 if (LIB_VA_MATCH_TIME(lvp, vap)) {
342 ASSERT((lvp->lv_flags & LV_DEL) == 0);
343 lvp->lv_refcnt++;
350 del = lvp;
361 lvp = NULL;
369 return (lvp);
371 tmp = &lvp->lv_next;
394 struct lib_va *lvp;
403 lvp = kmem_alloc(sizeof (struct lib_va), KM_SLEEP);
417 kmem_free(lvp, sizeof (struct lib_va));
452 lvp->lv_base_va = base_va;
453 lvp->lv_len = len;
454 lvp->lv_align = align;
455 lvp->lv_nodeid = vap->va_nodeid;
456 lvp->lv_fsid = vap->va_fsid;
457 lvp->lv_ctime.tv_sec = vap->va_ctime.tv_sec;
458 lvp->lv_ctime.tv_nsec = vap->va_ctime.tv_nsec;
459 lvp->lv_mtime.tv_sec = vap->va_mtime.tv_sec;
460 lvp->lv_mtime.tv_nsec = vap->va_mtime.tv_nsec;
461 lvp->lv_next = NULL;
462 lvp->lv_refcnt = 1;
465 lvp->lv_num_segs = 0;
468 lvp->lv_flags = LV_ELF64;
471 lvp->lv_flags = LV_ELF32;
483 *tmp = lvp;
490 return (lvp);
494 * Release the hold on lvp which was acquired by lib_va_find or lib_va_add_hash.
495 * In addition, if this is the last hold and lvp is marked for deletion,
499 lib_va_release(struct lib_va *lvp)
504 ASSERT(lvp->lv_refcnt > 0);
506 index = LIB_VA_HASH(lvp->lv_nodeid);
508 if (--lvp->lv_refcnt == 0 && (lvp->lv_flags & LV_DEL)) {
513 ASSERT(lvp->lv_next == 0);
514 lib_va_free(lvp);
647 mmapobj_lookup_start_addr(struct lib_va *lvp)
658 ASSERT(lvp != NULL);
663 base = lvp->lv_base_va;
664 len = lvp->lv_len;
674 if (lvp->lv_flags & LV_ELF64) {
678 align = lvp->lv_align;
1538 struct lib_va *lvp = NULL;
1594 lvp = lib_va_find(&vattr);
1596 if (lvp != NULL) {
1599 start_addr = mmapobj_lookup_start_addr(lvp);
1601 lib_va_release(lvp);
1608 * of lvp hasn't finished setting it up but the rest
1611 loadable = lvp->lv_num_segs;
1612 len = lvp->lv_len;
1613 align = lvp->lv_align;
1631 ASSERT(lvp == NULL);
1635 if (lvp) {
1636 ASSERT(len == lvp->lv_len);
1637 ASSERT(align == lvp->lv_align);
1648 ASSERT(lvp == NULL);
1664 if (lvp) {
1665 lib_va_release(lvp);
1695 * At this point, if lvp is non-NULL, then above we
1699 * to call mmapobj_alloc_start_addr and know that lvp
1702 ASSERT(lvp ? use_lib_va == 0 : 1);
1703 start_addr = mmapobj_alloc_start_addr(&lvp, len,
1706 if (lvp) {
1707 lib_va_release(lvp);
1718 if (lvp != NULL && loadable > LIBVA_CACHED_SEGS && use_lib_va) {
1719 lvp->lv_num_segs = loadable;
1720 lib_va_release(lvp);
1721 lvp = NULL;
1754 /* If we have no more need for lvp let it go now */
1755 if (lvp != NULL && use_lib_va == 0) {
1756 lib_va_release(lvp);
1758 lvp = NULL;
1871 ASSERT(lvp == NULL);
1877 /* Finish up our business with lvp. */
1878 if (lvp) {
1880 if (lvp->lv_num_segs == 0 && loadable <= LIBVA_CACHED_SEGS) {
1881 bcopy(mrp, lvp->lv_mps,
1892 lvp->lv_num_segs = loadable;
1893 lib_va_release(lvp);
2290 struct lib_va *lvp;
2315 if (padding == 0 && (lvp = lib_va_find(&vattr)) != NULL) {
2320 lvp->lv_flags & LV_ELF64) ||
2322 lvp->lv_flags & LV_ELF32)) {
2323 lib_va_release(lvp);
2327 num_segs = lvp->lv_num_segs;
2330 lib_va_release(lvp);
2341 start_addr = mmapobj_lookup_start_addr(lvp);
2343 lib_va_release(lvp);
2347 bcopy(lvp->lv_mps, mrp,
2353 lib_va_release(lvp);
2363 lib_va_release(lvp);