DEVMAP_DUP(9E)               Driver Entry Points              DEVMAP_DUP(9E)
NAME
       devmap_dup - device mapping duplication entry point
SYNOPSIS
       #include <sys/ddi.h>
       #include <sys/sunddi.h>        
int prefixdevmap_dup(
devmap_cookie_t dhp, 
void *pvtp,            
devmap_cookie_t new_dhp, 
void **new_pvtp);
INTERFACE LEVEL
       illumos DDI specific (illumos DDI).
ARGUMENTS
       dhp                    An opaque mapping handle that the system uses to
                    describe the mapping currently being duplicated.       
pvtp                    Driver private mapping data for the mapping currently
                    being duplicated.       
new_dhp                    An opaque data structure that the system uses to
                    describe the duplicated device mapping.       
new_pvtp                    A pointer to be filled in by device drivers with the
                    driver private mapping data for the duplicated device
                    mapping.
DESCRIPTION
       The system calls 
devmap_dup() when a device mapping is duplicated,
       such as during the execution of the 
fork(2) system call.  The system
       expects 
devmap_dup() to generate new driver private data for the new
       mapping, and to set 
new_pvtp to point to it. 
new_dhp is the handle of
       the new mapped object.
       A non-zero return value from 
devmap_dup() will cause a corresponding
       operation such as 
fork() to fail.
RETURN VALUES
       devmap_dup() returns the following values:       
0                   Successful completion.       
Non-zero                   An error occurred.
EXAMPLES
         static int
         xxdevmap_dup(devmap_cookie_t dhp, void *pvtp, \
             devmap_cookie_t new_dhp,
             void **new_pvtp)
         {
             struct xxpvtdata    *prvtdata;
             struct xxpvtdata    *p = (struct xxpvtdata *)pvtp;
             struct xx_softc     *softc = p->softc;
             mutex_enter(&softc->mutex);
             /* Allocate a new private data structure */
             prvtdata = kmem_alloc(sizeof (struct xxpvtdata), KM_SLEEP);
             /* Return the new data */
             prvtdata->off = p->off;
             prvtdata->len = p->len;
             prvtdata->ctx = p->ctx;
             prvtdata->dhp = new_dhp;
             prvtdata->softc = p->softc;
             *new_pvtp = prvtdata;
             mutex_exit(&softc->mutex);
             return (0);
         }
SEE ALSO
       fork(2), 
devmap_callback_ctl(9S)       Writing Device Drivers                                June 18, 2021                 DEVMAP_DUP(9E)