2531 * Find segment for current address
2532 * because current segment just got
2533 * split or concatenated
2534 */
2535 seg = as_segat(as, raddr);
2536 if (seg == NULL) {
2537 AS_LOCK_EXIT(as, &as->a_lock);
2538 return (ENOMEM);
2539 }
2540 } else {
2541 /*
2542 * Regular error
2543 */
2544 AS_LOCK_EXIT(as, &as->a_lock);
2545 return (error);
2546 }
2547 }
2548 break;
2549
2550 case MC_INHERIT_ZERO:
2551 if (seg->s_ops->inherit == NULL) {
2552 error = ENOTSUP;
2553 } else {
2554 error = segop_inherit(seg, raddr, ssize,
2555 SEGP_INH_ZERO);
2556 }
2557 if (error != 0) {
2558 AS_LOCK_EXIT(as, &as->a_lock);
2559 return (error);
2560 }
2561 break;
2562
2563 /*
2564 * Can't happen.
2565 */
2566 default:
2567 panic("as_ctl: bad operation %d", func);
2568 /*NOTREACHED*/
2569 }
2570
2571 rsize -= ssize;
2572 raddr += ssize;
2573 }
2574
2575 if (func == MC_LOCK)
2576 kmem_free(mlock_map, mlock_size * sizeof (ulong_t));
|
2531 * Find segment for current address
2532 * because current segment just got
2533 * split or concatenated
2534 */
2535 seg = as_segat(as, raddr);
2536 if (seg == NULL) {
2537 AS_LOCK_EXIT(as, &as->a_lock);
2538 return (ENOMEM);
2539 }
2540 } else {
2541 /*
2542 * Regular error
2543 */
2544 AS_LOCK_EXIT(as, &as->a_lock);
2545 return (error);
2546 }
2547 }
2548 break;
2549
2550 case MC_INHERIT_ZERO:
2551 error = segop_inherit(seg, raddr, ssize, SEGP_INH_ZERO);
2552 if (error != 0) {
2553 AS_LOCK_EXIT(as, &as->a_lock);
2554 return (error);
2555 }
2556 break;
2557
2558 /*
2559 * Can't happen.
2560 */
2561 default:
2562 panic("as_ctl: bad operation %d", func);
2563 /*NOTREACHED*/
2564 }
2565
2566 rsize -= ssize;
2567 raddr += ssize;
2568 }
2569
2570 if (func == MC_LOCK)
2571 kmem_free(mlock_map, mlock_size * sizeof (ulong_t));
|