Print this page
use NULL getmemid segop as a shorthand for ENODEV
Instead of forcing every segment driver to implement a dummy function to
return (hopefully) ENODEV, handle NULL getmemid segop function pointer as
"return ENODEV" shorthand.


3505                 }
3506         }
3507         mutex_exit(&pidlock);
3508 }
3509 
3510 /*
3511  * return memory object ID
3512  */
3513 int
3514 as_getmemid(struct as *as, caddr_t addr, memid_t *memidp)
3515 {
3516         struct seg      *seg;
3517         int             sts;
3518 
3519         AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
3520         seg = as_segat(as, addr);
3521         if (seg == NULL) {
3522                 AS_LOCK_EXIT(as, &as->a_lock);
3523                 return (EFAULT);
3524         }
3525         /*
3526          * catch old drivers which may not support getmemid
3527          */
3528         if (seg->s_ops->getmemid == NULL) {
3529                 AS_LOCK_EXIT(as, &as->a_lock);
3530                 return (ENODEV);
3531         }
3532 
3533         sts = segop_getmemid(seg, addr, memidp);
3534 
3535         AS_LOCK_EXIT(as, &as->a_lock);
3536         return (sts);
3537 }


3505                 }
3506         }
3507         mutex_exit(&pidlock);
3508 }
3509 
3510 /*
3511  * return memory object ID
3512  */
3513 int
3514 as_getmemid(struct as *as, caddr_t addr, memid_t *memidp)
3515 {
3516         struct seg      *seg;
3517         int             sts;
3518 
3519         AS_LOCK_ENTER(as, &as->a_lock, RW_READER);
3520         seg = as_segat(as, addr);
3521         if (seg == NULL) {
3522                 AS_LOCK_EXIT(as, &as->a_lock);
3523                 return (EFAULT);
3524         }







3525 
3526         sts = segop_getmemid(seg, addr, memidp);
3527 
3528         AS_LOCK_EXIT(as, &as->a_lock);
3529         return (sts);
3530 }