2381 * Find segment for current address
2382 * because current segment just got
2383 * split or concatenated
2384 */
2385 seg = as_segat(as, raddr);
2386 if (seg == NULL) {
2387 AS_LOCK_EXIT(as, &as->a_lock);
2388 return (ENOMEM);
2389 }
2390 } else {
2391 /*
2392 * Regular error
2393 */
2394 AS_LOCK_EXIT(as, &as->a_lock);
2395 return (error);
2396 }
2397 }
2398 break;
2399
2400 case MC_INHERIT_ZERO:
2401 if (seg->s_ops->inherit == NULL) {
2402 error = ENOTSUP;
2403 } else {
2404 error = segop_inherit(seg, raddr, ssize,
2405 SEGP_INH_ZERO);
2406 }
2407 if (error != 0) {
2408 AS_LOCK_EXIT(as, &as->a_lock);
2409 return (error);
2410 }
2411 break;
2412
2413 /*
2414 * Can't happen.
2415 */
2416 default:
2417 panic("as_ctl: bad operation %d", func);
2418 /*NOTREACHED*/
2419 }
2420
2421 rsize -= ssize;
2422 raddr += ssize;
2423 }
2424
2425 if (func == MC_LOCK)
2426 kmem_free(mlock_map, mlock_size * sizeof (ulong_t));
|
2381 * Find segment for current address
2382 * because current segment just got
2383 * split or concatenated
2384 */
2385 seg = as_segat(as, raddr);
2386 if (seg == NULL) {
2387 AS_LOCK_EXIT(as, &as->a_lock);
2388 return (ENOMEM);
2389 }
2390 } else {
2391 /*
2392 * Regular error
2393 */
2394 AS_LOCK_EXIT(as, &as->a_lock);
2395 return (error);
2396 }
2397 }
2398 break;
2399
2400 case MC_INHERIT_ZERO:
2401 error = segop_inherit(seg, raddr, ssize, SEGP_INH_ZERO);
2402 if (error != 0) {
2403 AS_LOCK_EXIT(as, &as->a_lock);
2404 return (error);
2405 }
2406 break;
2407
2408 /*
2409 * Can't happen.
2410 */
2411 default:
2412 panic("as_ctl: bad operation %d", func);
2413 /*NOTREACHED*/
2414 }
2415
2416 rsize -= ssize;
2417 raddr += ssize;
2418 }
2419
2420 if (func == MC_LOCK)
2421 kmem_free(mlock_map, mlock_size * sizeof (ulong_t));
|