本文整理汇总了C++中cmn_err函数的典型用法代码示例。如果您正苦于以下问题:C++ cmn_err函数的具体用法?C++ cmn_err怎么用?C++ cmn_err使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cmn_err函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: _init
/* Loadable module configuration entry points */
int
_init(void)
{
cmn_err(CE_NOTE, "Inside _init");
return(mod_install(&ml));
}
开发者ID:brightsoftdev,项目名称:DeeploveProgram,代码行数:7,代码来源:dummy.c
示例2: t_kopen
//.........这里部分代码省略.........
* there is no fd pointing at it. However, since I could
* call closef if there is an error and closef requires
* the fp read locked, I will acquire the read lock here
* and make sure I release it before I leave this routine.
*/
fp->f_vnode = vp;
mutex_exit(&fp->f_tlock);
madefp = 1;
} else {
vp = fp->f_vnode;
}
if (vp->v_stream == NULL) {
if (madefp)
(void) closef(fp);
KTLILOG(1, "t_kopen: not a streams device\n", 0);
return (ENOSTR);
}
/*
* allocate a new transport structure
*/
ntiptr = kmem_alloc(TIUSERSZ, KM_SLEEP);
ntiptr->fp = fp;
ntiptr->flags = madefp ? MADE_FP : 0;
KTLILOG(2, "t_kopen: vp %x, ", vp);
KTLILOG(2, "stp %x\n", vp->v_stream);
/*
* see if TIMOD is already pushed
*/
error = strioctl(vp, I_FIND, (intptr_t)"timod", 0, K_TO_K, cr, &retval);
if (error) {
kmem_free(ntiptr, TIUSERSZ);
if (madefp)
(void) closef(fp);
KTLILOG(1, "t_kopen: strioctl(I_FIND, timod): %d\n", error);
return (error);
}
if (retval == 0) {
tryagain:
error = strioctl(vp, I_PUSH, (intptr_t)"timod", 0, K_TO_K, cr,
&retval);
if (error) {
switch (error) {
case ENOSPC:
case EAGAIN:
case ENOSR:
/*
* This probably means the master file
* should be tuned.
*/
cmn_err(CE_WARN,
"t_kopen: I_PUSH of timod failed, error %d\n",
error);
(void) delay(hz);
error = 0;
goto tryagain;
default:
kmem_free(ntiptr, TIUSERSZ);
if (madefp)
(void) closef(fp);
KTLILOG(1, "t_kopen: I_PUSH (timod): %d",
error);
return (error);
}
}
}
inforeq.PRIM_type = T_INFO_REQ;
strioc.ic_cmd = TI_GETINFO;
strioc.ic_timout = 0;
strioc.ic_dp = (char *)&inforeq;
strioc.ic_len = (int)sizeof (struct T_info_req);
error = strdoioctl(vp->v_stream, &strioc, FNATIVE, K_TO_K, cr, &retval);
if (error) {
kmem_free(ntiptr, TIUSERSZ);
if (madefp)
(void) closef(fp);
KTLILOG(1, "t_kopen: strdoioctl(T_INFO_REQ): %d\n", error);
return (error);
}
if (retval) {
if ((retval & 0xff) == TSYSERR)
error = (retval >> 8) & 0xff;
else
error = t_tlitosyserr(retval & 0xff);
kmem_free(ntiptr, TIUSERSZ);
if (madefp)
(void) closef(fp);
KTLILOG(1, "t_kopen: strdoioctl(T_INFO_REQ): retval: 0x%x\n",
retval);
return (error);
}
开发者ID:andreiw,项目名称:polaris,代码行数:101,代码来源:t_kopen.c
示例3: dm2s_mbox_init
/*
* dm2s_mbox_init - Mailbox specific initialization.
*/
static int
dm2s_mbox_init(dm2s_t *dm2sp)
{
int ret;
clock_t tout;
ASSERT(MUTEX_HELD(&dm2sp->ms_lock));
dm2sp->ms_target = DM2S_TARGET_ID;
dm2sp->ms_key = DSCP_KEY;
dm2sp->ms_state &= ~DM2S_MB_INITED;
/* Iterate until mailbox gets connected */
while (!(dm2sp->ms_state & DM2S_MB_CONN)) {
DPRINTF(DBG_MBOX, ("dm2s_mbox_init: calling mb_init\n"));
ret = scf_mb_init(dm2sp->ms_target, dm2sp->ms_key,
dm2s_event_handler, (void *)dm2sp);
DPRINTF(DBG_MBOX, ("dm2s_mbox_init: mb_init ret=%d\n", ret));
if (ret != 0) {
DPRINTF(DBG_MBOX,
("dm2s_mbox_init: failed ret =%d\n", ret));
DTRACE_PROBE1(dm2s_mbox_fail, int, ret);
} else {
dm2sp->ms_state |= DM2S_MB_INITED;
/* Block until the mailbox is ready to communicate. */
while (!(dm2sp->ms_state &
(DM2S_MB_CONN | DM2S_MB_DISC))) {
if (cv_wait_sig(&dm2sp->ms_wait,
&dm2sp->ms_lock) <= 0) {
/* interrupted */
ret = EINTR;
break;
}
}
}
if ((ret != 0) || (dm2sp->ms_state & DM2S_MB_DISC)) {
if (dm2sp->ms_state & DM2S_MB_INITED) {
(void) scf_mb_fini(dm2sp->ms_target,
dm2sp->ms_key);
}
if (dm2sp->ms_state & DM2S_MB_DISC) {
DPRINTF(DBG_WARN,
("dm2s_mbox_init: mbox DISC_ERROR\n"));
DTRACE_PROBE1(dm2s_mbox_fail,
int, DM2S_MB_DISC);
}
dm2sp->ms_state &= ~(DM2S_MB_INITED | DM2S_MB_DISC |
DM2S_MB_CONN);
if (ret == EINTR) {
return (ret);
}
/*
* If there was failure, then wait for
* DM2S_MB_TOUT secs and retry again.
*/
DPRINTF(DBG_MBOX, ("dm2s_mbox_init: waiting...\n"));
tout = ddi_get_lbolt() + drv_usectohz(DM2S_MB_TOUT);
ret = cv_timedwait_sig(&dm2sp->ms_wait,
&dm2sp->ms_lock, tout);
if (ret == 0) {
/* if interrupted, return immediately. */
DPRINTF(DBG_MBOX,
("dm2s_mbox_init: interrupted\n"));
return (EINTR);
}
}
}
/*
* Obtain the max size of a single message.
* NOTE: There is no mechanism to update the
* upperlayers dynamically, so we expect this
* size to be atleast the default MTU size.
*/
ret = scf_mb_ctrl(dm2sp->ms_target, dm2sp->ms_key,
SCF_MBOP_MAXMSGSIZE, &dm2sp->ms_mtu);
if ((ret == 0) && (dm2sp->ms_mtu < DM2S_DEF_MTU)) {
cmn_err(CE_WARN, "Max message size expected >= %d "
"but found %d\n", DM2S_DEF_MTU, dm2sp->ms_mtu);
ret = EIO;
}
if (ret != 0) {
dm2sp->ms_state &= ~DM2S_MB_INITED;
(void) scf_mb_fini(dm2sp->ms_target, dm2sp->ms_key);
}
DPRINTF(DBG_MBOX, ("dm2s_mbox_init: mb_init ret=%d\n", ret));
return (ret);
//.........这里部分代码省略.........
开发者ID:andreiw,项目名称:polaris,代码行数:101,代码来源:dm2s.c
示例4: VirtioNetISR
/**
* Interrupt Service Routine for Virtio Net.
*
* @param Arg Private data (unused, will be NULL).
* @returns DDI_INTR_CLAIMED if it's our interrupt, DDI_INTR_UNCLAIMED if it isn't.
*/
static uint_t VirtioNetISR(caddr_t Arg)
{
cmn_err(CE_NOTE, "VirtioNetISR Arg=%p\n", Arg);
NOREF(Arg);
return DDI_INTR_UNCLAIMED;
}
开发者ID:Rootkitsmm,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:12,代码来源:VirtioNet-solaris.c
示例5: dr_stop_user_threads
//.........这里部分代码省略.........
mutex_enter(&p->p_lock);
thread_lock(tp);
if (tp->t_state == TS_STOPPED) {
/* add another reason to stop this thread */
tp->t_schedflag &= ~TS_RESUME;
} else {
tp->t_proc_flag |= TP_CHKPT;
thread_unlock(tp);
mutex_exit(&p->p_lock);
add_one_utstop();
mutex_enter(&p->p_lock);
thread_lock(tp);
aston(tp);
if (tp->t_state == TS_SLEEP &&
(tp->t_flag & T_WAKEABLE)) {
setrun_locked(tp);
}
}
/* grab thread if needed */
if (tp->t_state == TS_ONPROC && tp->t_cpu != CPU)
poke_cpu(tp->t_cpu->cpu_id);
thread_unlock(tp);
mutex_exit(&p->p_lock);
}
mutex_exit(&pidlock);
/* let everything catch up */
utstop_timedwait(count * count * DR_UTSTOP_WAIT);
/* now, walk the threadlist again to see if we are done */
mutex_enter(&pidlock);
for (tp = curthread->t_next, bailout = 0;
tp != curthread; tp = tp->t_next) {
proc_t *p = ttoproc(tp);
/* handle kernel threads separately */
if (p->p_as == &kas || p->p_stat == SZOMB)
continue;
/*
* If this thread didn't stop, and we don't allow
* unstopped blocked threads, bail.
*/
thread_lock(tp);
if (!CPR_ISTOPPED(tp) &&
!(dr_allow_blocked_threads &&
DR_VSTOPPED(tp))) {
bailout = 1;
if (count == DR_UTSTOP_RETRY - 1) {
/*
* save the pid for later reporting
*/
srh->sr_err_idx =
dr_add_int(srh->sr_err_ints,
srh->sr_err_idx, DR_MAX_ERR_INT,
(uint64_t)p->p_pid);
cmn_err(CE_WARN, "%s: "
"failed to stop thread: "
"process=%s, pid=%d",
f, p->p_user.u_psargs, p->p_pid);
PR_QR("%s: failed to stop thread: "
"process=%s, pid=%d, t_id=0x%p, "
"t_state=0x%x, t_proc_flag=0x%x, "
"t_schedflag=0x%x\n",
f, p->p_user.u_psargs, p->p_pid,
tp, tp->t_state, tp->t_proc_flag,
tp->t_schedflag);
}
}
thread_unlock(tp);
}
mutex_exit(&pidlock);
/* were all the threads stopped? */
if (!bailout)
break;
}
/* were we unable to stop all threads after a few tries? */
if (bailout) {
handle->h_err = drerr_int(ESBD_UTHREAD, srh->sr_err_ints,
srh->sr_err_idx, 0);
return (ESRCH);
}
return (DDI_SUCCESS);
}
开发者ID:andreiw,项目名称:polaris,代码行数:101,代码来源:dr_quiesce.c
示例6: load_platform_drivers
void
load_platform_drivers(void)
{
extern int watchdog_available;
extern int watchdog_enable;
dev_info_t *dip; /* dip of the isa driver */
int simba_present = 0;
dev_info_t *root_child_node;
major_t major;
if (ddi_install_driver("power") != DDI_SUCCESS)
cmn_err(CE_WARN, "Failed to install \"power\" driver.");
/*
* Install Isa driver. This is required for the southbridge IDE
* workaround - to reset the IDE channel during IDE bus reset.
* Panic the system in case ISA driver could not be loaded or
* any problem in accessing its pci config space. Since the register
* to reset the channel for IDE is in ISA config space!.
*/
root_child_node = ddi_get_child(ddi_root_node());
while (root_child_node != NULL) {
if (strcmp(ddi_node_name(root_child_node), "pci") == 0) {
root_child_node = ddi_get_child(root_child_node);
if (strcmp(ddi_node_name(root_child_node), "pci") == 0)
simba_present = 1;
break;
}
root_child_node = ddi_get_next_sibling(root_child_node);
}
if (simba_present)
dip = e_ddi_hold_devi_by_path(PLATFORM_ISA_PATHNAME_WITH_SIMBA,
0);
else
dip = e_ddi_hold_devi_by_path(PLATFORM_ISA_PATHNAME, 0);
if (dip == NULL) {
cmn_err(CE_PANIC, "Could not install the isa driver\n");
return;
}
if (pci_config_setup(dip, &platform_isa_handle) != DDI_SUCCESS) {
cmn_err(CE_PANIC, "Could not get the config space of isa\n");
return;
}
/*
* Load the blade support chip driver.
*
*/
if (((major = ddi_name_to_major(BSC_DRV)) == -1) ||
(ddi_hold_installed_driver(major) == NULL)) {
cmn_err(CE_WARN, "%s: failed to load", BSC_DRV);
} else {
bsc_drv_func_ptr = (void (*)(struct bscv_idi_info *))
modgetsymvalue(BSC_DRV_FUNC, 0);
if (bsc_drv_func_ptr == NULL) {
cmn_err(CE_WARN, "load_platform_defaults: %s()"
" not found; signatures will not be updated\n",
BSC_DRV_FUNC);
watchdog_available = 0;
if (watchdog_enable) {
cmn_err(CE_WARN, "load_platform_defaults: %s()"
" not found; BSC OS watchdog service not available\n",
BSC_DRV_FUNC);
}
}
}
}
开发者ID:MatiasNAmendola,项目名称:AuroraUX-SunOS,代码行数:74,代码来源:blade.c
示例7: dummy_close
static int
dummy_close(dev_t dev, int flag, int otyp, cred_t *cred)
{
cmn_err(CE_NOTE, "Inside dummy_close");
return DDI_SUCCESS;
}
开发者ID:brightsoftdev,项目名称:DeeploveProgram,代码行数:6,代码来源:dummy.c
示例8: dummy_write
static int
dummy_write(dev_t dev, struct uio *uiop, cred_t *credp)
{
cmn_err(CE_NOTE, "Inside dummy_write");
return DDI_SUCCESS;
}
开发者ID:brightsoftdev,项目名称:DeeploveProgram,代码行数:6,代码来源:dummy.c
示例9: dummy_open
static int
dummy_open(dev_t *devp, int flag, int otyp, cred_t *cred)
{
cmn_err(CE_NOTE, "Inside dummy_open");
return DDI_SUCCESS;
}
开发者ID:brightsoftdev,项目名称:DeeploveProgram,代码行数:6,代码来源:dummy.c
示例10: _fini
int
_fini(void)
{
cmn_err(CE_NOTE, "Inside _fini");
return(mod_remove(&ml));
}
开发者ID:brightsoftdev,项目名称:DeeploveProgram,代码行数:6,代码来源:dummy.c
示例11: _info
int
_info(struct modinfo *modinfop)
{
cmn_err(CE_NOTE, "Inside _info");
return(mod_info(&ml, modinfop));
}
开发者ID:brightsoftdev,项目名称:DeeploveProgram,代码行数:6,代码来源:dummy.c
示例12: fcoet_do_flogi
/* ARGSUSED */
fct_status_t
fcoet_do_flogi(fct_local_port_t *port, fct_flogi_xchg_t *fx)
{
cmn_err(CE_WARN, "FLOGI requested (not supported)");
return (FCT_FAILURE);
}
开发者ID:bahamas10,项目名称:openzfs,代码行数:7,代码来源:fcoet_fc.c
示例13: fcoet_ctl
void
fcoet_ctl(struct fct_local_port *port, int cmd, void *arg)
{
stmf_change_status_t st;
stmf_state_change_info_t *ssci = (stmf_state_change_info_t *)arg;
fcoet_soft_state_t *this_ss = PORT2SS(port);
st.st_completion_status = FCT_SUCCESS;
st.st_additional_info = NULL;
switch (cmd) {
case FCT_CMD_PORT_ONLINE:
if (this_ss->ss_state == FCT_STATE_ONLINE)
st.st_completion_status = STMF_ALREADY;
else if (this_ss->ss_state != FCT_STATE_OFFLINE)
st.st_completion_status = FCT_FAILURE;
if (st.st_completion_status == FCT_SUCCESS) {
this_ss->ss_state = FCT_STATE_ONLINING;
this_ss->ss_state_not_acked = 1;
st.st_completion_status = fcoet_enable_port(this_ss);
if (st.st_completion_status != STMF_SUCCESS) {
this_ss->ss_state = FCT_STATE_OFFLINE;
this_ss->ss_state_not_acked = 0;
} else {
this_ss->ss_state = FCT_STATE_ONLINE;
}
}
fct_ctl(port->port_lport, FCT_CMD_PORT_ONLINE_COMPLETE, &st);
this_ss->ss_change_state_flags = 0;
break;
case FCT_CMD_PORT_OFFLINE:
if (this_ss->ss_state == FCT_STATE_OFFLINE) {
st.st_completion_status = STMF_ALREADY;
} else if (this_ss->ss_state != FCT_STATE_ONLINE) {
st.st_completion_status = FCT_FAILURE;
}
if (st.st_completion_status == FCT_SUCCESS) {
this_ss->ss_state = FCT_STATE_OFFLINING;
this_ss->ss_state_not_acked = 1;
this_ss->ss_change_state_flags = ssci->st_rflags;
st.st_completion_status = fcoet_disable_port(this_ss);
if (st.st_completion_status != STMF_SUCCESS) {
this_ss->ss_state = FCT_STATE_ONLINE;
this_ss->ss_state_not_acked = 0;
} else {
this_ss->ss_state = FCT_STATE_OFFLINE;
}
}
/*
* Notify the watchdog to do clear work
*/
mutex_enter(&this_ss->ss_watch_mutex);
cv_signal(&this_ss->ss_watch_cv);
mutex_exit(&this_ss->ss_watch_mutex);
fct_ctl(port->port_lport, FCT_CMD_PORT_OFFLINE_COMPLETE, &st);
break;
case FCT_ACK_PORT_ONLINE_COMPLETE:
this_ss->ss_state_not_acked = 0;
break;
case FCT_ACK_PORT_OFFLINE_COMPLETE:
this_ss->ss_state_not_acked = 0;
if (this_ss->ss_change_state_flags & STMF_RFLAG_RESET) {
if (fct_port_initialize(port,
this_ss->ss_change_state_flags,
"fcoet_ctl FCT_ACK_PORT_OFFLINE_COMPLETE "
"with RLFLAG_RESET") != FCT_SUCCESS) {
cmn_err(CE_WARN, "fcoet_ctl: "
"fct_port_initialize %s failed",
this_ss->ss_alias);
FCOET_LOG("fcoet_ctl: fct_port_initialize "
"%s failed", this_ss->ss_alias);
}
}
break;
default:
FCOET_LOG("fcoet_ctl", "Unsupported cmd %x", cmd);
break;
}
}
开发者ID:bahamas10,项目名称:openzfs,代码行数:82,代码来源:fcoet_fc.c
示例14: getblk_common
/*
* Assign a buffer for the given block. If the appropriate
* block is already associated, return it; otherwise search
* for the oldest non-busy buffer and reassign it.
*/
struct buf *
getblk_common(void * arg, dev_t dev, daddr_t blkno, long bsize, int errflg)
{
ufsvfs_t *ufsvfsp = (struct ufsvfs *)arg;
struct buf *bp;
struct buf *dp;
struct buf *nbp = NULL;
struct buf *errbp;
uint_t index;
kmutex_t *hmp;
struct hbuf *hp;
if (getmajor(dev) >= devcnt)
cmn_err(CE_PANIC, "blkdev");
biostats.bio_lookup.value.ui32++;
index = bio_bhash(dev, blkno);
hp = &hbuf[index];
dp = (struct buf *)hp;
hmp = &hp->b_lock;
mutex_enter(hmp);
loop:
for (bp = dp->b_forw; bp != dp; bp = bp->b_forw) {
if (bp->b_blkno != blkno || bp->b_edev != dev ||
(bp->b_flags & B_STALE))
continue;
/*
* Avoid holding the hash lock in the event that
* the buffer is locked by someone. Since the hash chain
* may change when we drop the hash lock
* we have to start at the beginning of the chain if the
* buffer identity/contents aren't valid.
*/
if (!sema_tryp(&bp->b_sem)) {
biostats.bio_bufbusy.value.ui32++;
mutex_exit(hmp);
/*
* OK, we are dealing with a busy buffer.
* In the case that we are panicking and we
* got called from bread(), we have some chance
* for error recovery. So better bail out from
* here since sema_p() won't block. If we got
* called directly from ufs routines, there is
* no way to report an error yet.
*/
if (panicstr && errflg)
goto errout;
/*
* For the following line of code to work
* correctly never kmem_free the buffer "header".
*/
sema_p(&bp->b_sem);
if (bp->b_blkno != blkno || bp->b_edev != dev ||
(bp->b_flags & B_STALE)) {
sema_v(&bp->b_sem);
mutex_enter(hmp);
goto loop; /* start over */
}
mutex_enter(hmp);
}
/* Found */
biostats.bio_hit.value.ui32++;
bp->b_flags &= ~B_AGE;
/*
* Yank it off the free/delayed write lists
*/
hp->b_length--;
notavail(bp);
mutex_exit(hmp);
ASSERT((bp->b_flags & B_NOCACHE) == NULL);
if (nbp == NULL) {
/*
* Make the common path short.
*/
ASSERT(SEMA_HELD(&bp->b_sem));
return (bp);
}
biostats.bio_bufdup.value.ui32++;
/*
* The buffer must have entered during the lock upgrade
* so free the new buffer we allocated and return the
* found buffer.
*/
kmem_free(nbp->b_un.b_addr, nbp->b_bufsize);
nbp->b_un.b_addr = NULL;
/*
* Account for the memory
//.........这里部分代码省略.........
开发者ID:MatiasNAmendola,项目名称:AuroraUX-SunOS,代码行数:101,代码来源:bio.c
示例15: sdt_provide_module
/*ARGSUSED*/
static void
sdt_provide_module(void *arg, struct modctl *ctl)
{
struct module *mp = ctl->mod_mp;
char *modname = ctl->mod_modname;
int primary, nprobes = 0;
sdt_probedesc_t *sdpd;
sdt_probe_t *sdp, *old;
uint32_t *tab;
sdt_provider_t *prov;
int len;
/*
* One for all, and all for one: if we haven't yet registered all of
* our providers, we'll refuse to provide anything.
*/
for (prov = sdt_providers; prov->sdtp_name != NULL; prov++) {
if (prov->sdtp_id == DTRACE_PROVNONE)
return;
}
if (mp->sdt_nprobes != 0 || (sdpd = mp->sdt_probes) == NULL)
return;
kobj_textwin_alloc(mp);
/*
* Hack to identify unix/genunix/krtld.
*/
primary = vmem_contains(heap_arena, (void *)ctl,
sizeof (struct modctl)) == 0;
/*
* If there hasn't been an sdt table allocated, we'll do so now.
*/
if (mp->sdt_tab == NULL) {
for (; sdpd != NULL; sdpd = sdpd->sdpd_next) {
nprobes++;
}
/*
* We could (should?) determine precisely the size of the
* table -- but a reasonable maximum will suffice.
*/
mp->sdt_size = nprobes * SDT_ENTRY_SIZE;
mp->sdt_tab = kobj_texthole_alloc(mp->text, mp->sdt_size);
if (mp->sdt_tab == NULL) {
cmn_err(CE_WARN, "couldn't allocate SDT table "
"for module %s", modname);
return;
}
}
tab = (uint32_t *)mp->sdt_tab;
for (sdpd = mp->sdt_probes; sdpd != NULL; sdpd = sdpd->sdpd_next) {
char *name = sdpd->sdpd_name, *func, *nname;
int i, j;
sdt_provider_t *prov;
ulong_t offs;
dtrace_id_t id;
for (prov = sdt_providers; prov->sdtp_prefix != NULL; prov++) {
char *prefix = prov->sdtp_prefix;
if (strncmp(name, prefix, strlen(prefix)) == 0) {
name += strlen(prefix);
break;
}
}
nname = kmem_alloc(len = strlen(name) + 1, KM_SLEEP);
for (i = 0, j = 0; name[j] != '\0'; i++) {
if (name[j] == '_' && name[j + 1] == '_') {
nname[i] = '-';
j += 2;
} else {
nname[i] = name[j++];
}
}
nname[i] = '\0';
sdp = kmem_zalloc(sizeof (sdt_probe_t), KM_SLEEP);
sdp->sdp_loadcnt = ctl->mod_loadcnt;
sdp->sdp_primary = primary;
sdp->sdp_ctl = ctl;
sdp->sdp_name = nname;
sdp->sdp_namelen = len;
sdp->sdp_provider = prov;
func = kobj_searchsym(mp, sdpd->sdpd_offset +
(uintptr_t)mp->text, &offs);
if (func == NULL)
func = "<unknown>";
//.........这里部分代码省略.........
开发者ID:apprisi,项目名称:illumos-gate,代码行数:101,代码来源:sdt.c
示例16: LogFlowFunc
/**
* Virtio Net Xmit hook.
*
* @param pvArg Pointer to private data.
* @param pMsg Pointer to the message.
*
* @return Pointer to message not Xmited.
*/
static mblk_t *VirtioNetXmit(void *pvArg, mblk_t *pMsg)
{
LogFlowFunc((VIRTIOLOGNAME ":VirtioNetXmit pMsg=%p\n", pMsg));
cmn_err(CE_NOTE, "Xmit pMsg=%p\n", pMsg);
PVIRTIODEVICE pDevice = pvArg;
virtio_net_t *pNet = pDevice->pvDevice;
bool fNotify = false;
while (pMsg)
{
mblk_t *pNextMsg = pMsg->b_next;
#if 0
mblk_t *pHdr = allocb(sizeof(virtio_net_header_t), BPRI_HI);
if (RT_UNLIKELY(!pHdr))
break;
virtio_net_header_t *pNetHdr = pHdr->b_rptr;
memset(pNetHdr, 0, sizeof(virtio_net_header_t));
pNetHdr->u8Flags = VIRTIO_NET_GUEST_CSUM;
pNetHdr->u16HdrLen = sizeof(virtio_net_header_t);
pHdr->b_wptr += sizeof(virtio_net_header_t);
pHdr->b_cont = pMsg;
#endif
virtio_net_txbuf_t *pTxBuf = kmem_cache_alloc(pNet->pTxCache, KM_SLEEP);
if (!pTxBuf)
break;
ddi_dma_cookie_t DmaCookie;
uint_t cCookies;
int rc = ddi_dma_addr_bind_handle(pTxBuf->hDMA, NULL /* addrspace */, (char *)pMsg->b_rptr, MBLKL(pMsg),
DDI_DMA_WRITE | DDI_DMA_STREAMING, DDI_DMA_SLEEP, 0 /* addr */,
&DmaCookie, &cCookies);
cmn_err(CE_NOTE, "VirtioNetXmit: MBLKL pMsg=%u\n", MBLKL(pMsg));
if (rc != DDI_DMA_MAPPED)
{
LogRel((VIRTIOLOGNAME ":VirtioNetXmit failed to map address to DMA handle. rc=%d\n", rc));
kmem_cache_free(pNet->pTxCache, pTxBuf);
break;
}
/** @todo get 'cCookies' slots from the ring. */
for (uint_t i = 0; i < cCookies; i++)
{
uint16_t fFlags = 0;
if (i < cCookies - 1)
fFlags |= VIRTIO_FLAGS_RING_DESC_NEXT;
rc = VirtioRingPush(pNet->pTxQueue, DmaCookie.dmac_laddress, DmaCookie.dmac_size, fFlags);
if (RT_FAILURE(rc))
{
LogRel((VIRTIOLOGNAME ":VirtioNetXmit failed. rc=%Rrc\n", rc));
break;
}
ddi_dma_nextcookie(pTxBuf->hDMA, &DmaCookie);
}
pMsg = pNextMsg;
fNotify = true;
if (RT_FAILURE(rc))
{
ddi_dma_unbind_handle(pTxBuf->hDMA);
break;
}
}
if (fNotify)
pDevice->pHyperOps->pfnNotifyQueue(pDevice, pNet->pTxQueue);
return pMsg;
}
开发者ID:Rootkitsmm,项目名称:virtualbox-org-svn-vbox-trunk,代码行数:84,代码来源:VirtioNet-solaris.c
示例17: xfs_qm_internalqcheck
/* PRIVATE, debugging */
int
xfs_qm_internalqcheck(
xfs_mount_t *mp)
{
xfs_ino_t lastino;
int done, count;
int i;
xfs_dqtest_t *d, *e;
xfs_dqhash_t *h1;
int error;
lastino = 0;
qmtest_hashmask = 32;
count = 5;
done = 0;
qmtest_nfails = 0;
if (! XFS_IS_QUOTA_ON(mp))
return XFS_ERROR(ESRCH);
xfs_log_force(mp, XFS_LOG_SYNC);
XFS_bflush(mp->m_ddev_targp);
xfs_log_force(mp, XFS_LOG_SYNC);
XFS_bflush(mp->m_ddev_targp);
mutex_lock(&qcheck_lock);
/* There should be absolutely no quota activity while this
is going on. */
qmtest_udqtab = kmem_zalloc(qmtest_hashmask *
sizeof(xfs_dqhash_t), KM_SLEEP);
qmtest_gdqtab = kmem_zalloc(qmtest_hashmask *
sizeof(xfs_dqhash_t), KM_SLEEP);
do {
/*
* Iterate thru all the inodes in the file system,
* adjusting the corresponding dquot counters
*/
if ((error = xfs_bulkstat(mp, &lastino, &count,
xfs_qm_internalqcheck_adjust, NULL,
0, NULL, BULKSTAT_FG_IGET, &done))) {
break;
}
} while (! done);
if (error) {
cmn_err(CE_DEBUG, "Bulkstat returned error 0x%x", error);
}
cmn_err(CE_DEBUG, "Checking results against system dquots");
for (i = 0; i < qmtest_hashmask; i++) {
h1 = &qmtest_udqtab[i];
for (d = (xfs_dqtest_t *) h1->qh_next; d != NULL; ) {
xfs_dqtest_cmp(d);
e = (xfs_dqtest_t *) d->HL_NEXT;
kmem_free(d);
d = e;
}
h1 = &qmtest_gdqtab[i];
for (d = (xfs_dqtest_t *) h1->qh_next; d != NULL; ) {
xfs_dqtest_cmp(d);
e = (xfs_dqtest_t *) d->HL_NEXT;
kmem_free(d);
d = e;
}
}
if (qmtest_nfails) {
cmn_err(CE_DEBUG, "******** quotacheck failed ********");
cmn_err(CE_DEBUG, "failures = %d", qmtest_nfails);
} else {
cmn_err(CE_DEBUG, "******** quotacheck successful! ********");
}
kmem_free(qmtest_udqtab);
kmem_free(qmtest_gdqtab);
mutex_unlock(&qcheck_lock);
return (qmtest_nfails);
}
开发者ID:A2109devs,项目名称:lenovo_a2109a_kernel,代码行数:76,代码来源:xfs_qm_syscalls.c
示例18: ddi_soft_state_zalloc
/*
* Allocate a state structure of size 'size' to be associated
* with item 'item'.
*
* In this implementation, the array is extended to
* allow the requested offset, if needed.
*/
int
ddi_soft_state_zalloc(void *state, int item)
{
struct i_ddi_soft_state *ss;
void **array;
void *new_element;
if ((ss = state) == NULL || item < 0)
return (DDI_FAILURE);
mutex_enter(&ss->lock);
if (ss->size == 0) {
mutex_exit(&ss->lock);
cmn_err(CE_WARN, "ddi_soft_state_zalloc: bad handle");
return (DDI_FAILURE);
}
array = ss->array; /* NULL if ss->n_items == 0 */
ASSERT(ss->n_items != 0 && array != NULL);
/*
* refuse to tread on an existing element
*/
if (item < ss->n_items && array[item] != NULL) {
mutex_exit(&ss->lock);
return (DDI_FAILURE);
}
/*
* Allocate a new element to plug in
*/
new_element = kmem_zalloc(ss->size, KM_SLEEP);
/*
* Check if the array is big enough, if not, grow it.
*/
if (item >= ss->n_items) {
void **new_array;
size_t new_n_items;
struct i_ddi_soft_state *dirty;
/*
* Allocate a new array of the right length, copy
* all the old pointers to the new array, then
* if it exists at all, put the old array on the
* dirty list.
*
* Note that we can't kmem_free() the old array.
*
* Why -- well the 'get' operation is 'mutex-free', so we
* can't easily catch a suspended thread that is just about
* to dereference the array we just grew out of. So we
* cons up a header and put it on a list of 'dirty'
* pointer arrays. (Dirty in the sense that there may
* be suspended threads somewhere that are in the middle
* of referencing them). Fortunately, we -can- garbage
* collect it all at ddi_soft_state_fini time.
*/
new_n_items = ss->n_items;
while (new_n_items < (1 + item))
new_n_items <<= 1; /* double array size .. */
ASSERT(new_n_items >= (1 + item)); /* sanity check! */
new_array = kmem_zalloc(new_n_items * sizeof (void *),
KM_SLEEP);
/*
* Copy the pointers into the new array
*/
bcopy(array, new_array, ss->n_items * sizeof (void *));
/*
* Save the old array on the dirty list
*/
dirty = kmem_zalloc(sizeof (*dirty), KM_SLEEP);
dirty->array = ss->array;
dirty->n_items = ss->n_items;
dirty->next = ss->next;
ss->next = dirty;
ss->array = (array = new_array);
ss->n_items = new_n_items;
}
ASSERT(array != NULL && item < ss->n_items && array[item] == NULL);
array[item] = new_element;
mutex_exit(&ss->lock);
return (DDI_SUCCESS);
}
开发者ID:rottegift,项目名称:spl,代码行数:98,代码来源:spl-ddi.c
示例19: rpcbind_getaddr
//.........这里部分代码省略.........
parms.r_netid = "udp";
put_inet_port(addr, htons(PMAPPORT));
} else if (strcmp(config->knc_protofmly, NC_INET6) == 0) {
if (strcmp(config->knc_proto, NC_TCP) == 0)
parms.r_netid = "tcp6";
else
parms.r_netid = "udp6";
put_inet6_port(addr, htons(PMAPPORT));
} else if (strcmp(config->knc_protofmly, NC_LOOPBACK) == 0) {
ASSERT(strnrchr(addr->buf, '.', addr->len) != NULL);
if (config->knc_semantics == NC_TPI_COTS_ORD)
parms.r_netid = "ticotsord";
else if (config->knc_semantics == NC_TPI_COTS)
parms.r_netid = "ticots";
else
parms.r_netid = "ticlts";
put_loopback_port(addr, "rpc");
} else {
status = RPC_UNKNOWNPROTO;
goto out;
}
/*
* Mask signals for the duration of the handle creation and
* RPC calls. This allows relatively normal operation with a
* signal already posted to our thread (e.g., when we are
* sending an NLM_CANCEL in response to catching a signal).
*
* Any further exit paths from this routine must restore
* the original signal mask.
*/
sigfillset(&newmask);
sigreplace(&newmask, &oldmask);
if (clnt_tli_kcreate(config, addr, RPCBPROG,
RPCBVERS, 0, 0, CRED(), &client)) {
status = RPC_TLIERROR;
sigreplace(&oldmask, (k_sigset_t *)NULL);
goto out;
}
client->cl_nosignal = 1;
if ((status = CLNT_CALL(client, RPCBPROC_GETADDR,
xdr_rpcb, (char *)&parms,
xdr_wrapstring, (char *)&ua,
tmo)) != RPC_SUCCESS) {
sigreplace(&oldmask, (k_sigset_t *)NULL);
goto out;
}
sigreplace(&oldmask, (k_sigset_t *)NULL);
if (ua == NULL || *ua == NULL) {
status = RPC_PROGNOTREGISTERED;
goto out;
}
/*
* Convert the universal address to the transport address.
* Theoretically, we should call the local rpcbind to translate
* from the universal address to the transport address, but it gets
* complicated (e.g., there's no direct way to tell rpcbind that we
* want an IP address instead of a loopback address). Note that
* the transport address is potentially host-specific, so we can't
* just ask the remote rpcbind, because it might give us the wrong
* answer.
*/
if (strcmp(config->knc_protofmly, NC_INET) == 0) {
/* make sure that the ip address is the correct type */
if (rpc_iptype(ua, &iptype) != 0) {
status = RPC_UNKNOWNADDR;
goto out;
}
port = rpc_uaddr2port(iptype, ua);
put_inet_port(addr, ntohs(port));
} else if (strcmp(config->knc_protofmly, NC_INET6) == 0) {
/* make sure that the ip address is the correct type */
if (rpc_iptype(ua, &iptype) != 0) {
status = RPC_UNKNOWNADDR;
goto out;
}
port = rpc_uaddr2port(iptype, ua);
put_inet6_port(addr, ntohs(port));
} else if (strcmp(config->knc_protofmly, NC_LOOPBACK) == 0) {
loopb_u2t(ua, addr);
} else {
/* "can't happen" - should have been checked for above */
cmn_err(CE_PANIC, "rpcbind_getaddr: bad protocol family");
}
out:
if (client != NULL) {
auth_destroy(client->cl_auth);
clnt_destroy(client);
}
if (ua != NULL)
xdr_free(xdr_wrapstring, (char *)&ua);
return (status);
}
开发者ID:GuangmingZang,项目名称:maczfs,代码行数:101,代码来源:rpc_subr.c
示例20: sam_cancel_call
static int /* ERRNO if error, 0 if successful. */
sam_cancel_call(
void *arg, /* Pointer to arguments. */
int size,
cred_t *credp)
{
sam_handle_t *fhandle;
sam_fserror_arg_t args;
sam_mount_t *mp;
sam_node_t *ip; /* pointer to rm inode */
int error;
/*
* Validate and copyin the arguments.
*/
if (size != sizeof (args) ||
copyin(arg, (caddr_t)&args, sizeof (args))) {
return (EFAULT);
}
/*
* If the mount point is mounted, process cancel request.
*/
if ((mp = find_mount_point(args.handle.fseq)) == NULL) {
return (ECANCELED);
}
if (secpolicy_fs_config(credp, mp->mi.m_vfsp)) {
error = EINVAL;
goto cancelerror;
}
fhandle = (sam_handle_t *)&args.handle;
if ((ip = syscall_valid_ino(mp, fhandle)) == NULL) {
error = ECANCELED;
goto cancelerror;
}
TRACE(T_SAM_DAEMON_CAN, SAM_ITOV(ip), ip->di.id.ino, ip->rdev,
args.ret_err);
RW_LOCK_OS(&ip->data_rwl, RW_WRITER); /* Wait until I/O done */
RW_LOCK_OS(&ip->inode_rwl, RW_WRITER);
if (ip->rdev && (fhandle->pid == ip->rm_pid)) {
ip->rm_err = args.ret_err;
RW_UNLOCK_OS(&ip->data_rwl, RW_WRITER);
error = sam_unload_rm(ip, FWRITE, 0, 0, credp);
if (ip->rm_err == 0) {
ip->rm_err = error;
}
} else {
cmn_err(CE_NOTE,
"SAM-QFS: %s: sam_cancel_call:"
" SC_fscancel error: rdev: %d rm_pid: %d fh_pid: %d",
mp->mt.fi_name, (int)ip->rdev, ip->rm_pid, fhandle->pid);
error = ECANCELED;
RW_UNLOCK_OS(&ip->data_rwl, RW_WRITER);
}
RW_UNLOCK_OS(&ip->inode_rwl, RW_WRITER);
VN_RELE(SAM_ITOV(ip));
/*
* Decrement syscall count, the vnode count should be incremented by
* now.
*/
cancelerror:
SAM_SYSCALL_DEC(mp, 0);
return (error);
}
开发者ID:BackupTheBerlios,项目名称:samqfs,代码行数:67,代码来源:samscall.c
注:本文中的cmn_err函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论