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)