本文整理汇总了C++中save_flags函数的典型用法代码示例。如果您正苦于以下问题:C++ save_flags函数的具体用法?C++ save_flags怎么用?C++ save_flags使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了save_flags函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: remove_sock
static void remove_sock(struct sock *sk1)
{
struct sock *sk2;
unsigned long flags;
if (!sk1->prot)
{
printk("sock.c: remove_sock: sk1->prot == NULL\n");
return;
}
/* We can't have this changing out from under us. */
save_flags(flags);
cli();
sk2 = sk1->prot->sock_array[sk1->num &(SOCK_ARRAY_SIZE -1)];
if (sk2 == sk1)
{
sk1->prot->inuse -= 1;
sk1->prot->sock_array[sk1->num &(SOCK_ARRAY_SIZE -1)] = sk1->next;
restore_flags(flags);
return;
}
while(sk2 && sk2->next != sk1)
{
sk2 = sk2->next;
}
if (sk2)
{
sk1->prot->inuse -= 1;
sk2->next = sk1->next;
restore_flags(flags);
return;
}
restore_flags(flags);
}
示例2: test_new_size
static void test_new_size() {
size_t flag_value;
save_flags();
// If NewSize is set on the command line, it should be used
// for both min and initial young size if less than min heap.
flag_value = 20 * M;
set_basic_flag_values();
FLAG_SET_CMDLINE(size_t, NewSize, flag_value);
verify_young_min(flag_value);
set_basic_flag_values();
FLAG_SET_CMDLINE(size_t, NewSize, flag_value);
verify_young_initial(flag_value);
// If NewSize is set on command line, but is larger than the min
// heap size, it should only be used for initial young size.
flag_value = 80 * M;
set_basic_flag_values();
FLAG_SET_CMDLINE(size_t, NewSize, flag_value);
verify_young_initial(flag_value);
// If NewSize has been ergonomically set, the collector policy
// should use it for min but calculate the initial young size
// using NewRatio.
flag_value = 20 * M;
set_basic_flag_values();
FLAG_SET_ERGO(size_t, NewSize, flag_value);
verify_young_min(flag_value);
set_basic_flag_values();
FLAG_SET_ERGO(size_t, NewSize, flag_value);
verify_scaled_young_initial(InitialHeapSize);
restore_flags();
}
示例3: amiga_insert_irq
static inline int amiga_insert_irq(irq_node_t **list, irq_node_t *node)
{
unsigned long flags;
irq_node_t *cur;
if (!node->dev_id)
printk("%s: Warning: dev_id of %s is zero\n",
__FUNCTION__, node->devname);
save_flags(flags);
cli();
cur = *list;
if (node->flags & SA_INTERRUPT) {
if (node->flags & SA_SHIRQ)
return -EBUSY;
/*
* There should never be more than one
*/
while (cur && cur->flags & SA_INTERRUPT) {
list = &cur->next;
cur = cur->next;
}
} else {
while (cur) {
list = &cur->next;
cur = cur->next;
}
}
node->next = cur;
*list = node;
restore_flags(flags);
return 0;
}
示例4: isac_empty_fifo
static void
isac_empty_fifo(struct IsdnCardState *sp, int count)
{
u_char *ptr;
long flags;
if ((sp->debug & L1_DEB_ISAC) && !(sp->debug & L1_DEB_ISAC_FIFO))
if (sp->debug & L1_DEB_ISAC)
debugl1(sp, "isac_empty_fifo");
if ((sp->rcvidx + count) >= MAX_DFRAME_LEN) {
if (sp->debug & L1_DEB_WARN) {
char tmp[40];
sprintf(tmp, "isac_empty_fifo overrun %d",
sp->rcvidx + count);
debugl1(sp, tmp);
}
writereg(sp->isac, ISAC_CMDR, 0x80);
sp->rcvidx = 0;
return;
}
ptr = sp->rcvbuf + sp->rcvidx;
sp->rcvidx += count;
save_flags(flags);
cli();
read_fifo(sp->isac, ptr, count);
writereg(sp->isac, ISAC_CMDR, 0x80);
restore_flags(flags);
if (sp->debug & L1_DEB_ISAC_FIFO) {
char tmp[128];
char *t = tmp;
t += sprintf(t, "isac_empty_fifo cnt %d", count);
QuickHex(t, ptr, count);
debugl1(sp, tmp);
}
}
示例5: amiga_insert_irq
void amiga_insert_irq(irq_node_t **list, irq_node_t *node)
{
unsigned long flags;
irq_node_t *cur;
if (!node->dev_id)
printk("%s: Warning: dev_id of %s is zero\n",
__FUNCTION__, node->devname);
save_flags(flags);
cli();
cur = *list;
if (node->flags & IRQ_FLG_FAST) {
node->flags &= ~IRQ_FLG_SLOW;
while (cur && cur->flags & IRQ_FLG_FAST) {
list = &cur->next;
cur = cur->next;
}
} else if (node->flags & IRQ_FLG_SLOW) {
while (cur) {
list = &cur->next;
cur = cur->next;
}
} else {
while (cur && !(cur->flags & IRQ_FLG_SLOW)) {
list = &cur->next;
cur = cur->next;
}
}
node->next = cur;
*list = node;
restore_flags(flags);
}
示例6: handle_error
/* Clean up after an error. The caller should usually call do_request()
after this function returns. It can be called from an IRQ handler or the
normal kernel context. */
void handle_error(const char *from)
{
u_long flags;
if(current_req == NULL)
return;
save_flags(flags);
cli();
kprintf("\nfd: %s (%s): Error (retry number %d)\n",
from, REQ_FD_DEV(current_req)->name, current_req->retries);
dump_stat();
fd_intr = NULL;
if(current_req->retries++ < MAX_RETRIES)
{
#if 0
if((current_req->retries % RESET_FREQ) == 0)
reset_pending = TRUE;
#endif
if((current_req->retries % RECAL_FREQ) == 0)
REQ_FD_DEV(current_req)->recalibrate = TRUE;
/* Retry the current request, this simply means stacking it on the
front of the queue and calling do_request(). */
prepend_node(&fd_reqs, ¤t_req->node);
current_req = NULL;
DB(("fd:handle_error: Retrying request %p\n", current_req));
}
else
{
#if 0
reset_pending = TRUE;
#endif
REQ_FD_DEV(current_req)->recalibrate = TRUE;
DB(("\nfd: handle_error: Request %p has no more retries available.\n",
current_req));
fd_end_request(-1);
}
load_flags(flags);
}
示例7: SelFiFo
static int
SelFiFo(struct IsdnCardState *cs, u_char FiFo)
{
u_char cip;
long flags;
if (cs->hw.hfcD.fifo == FiFo)
return(1);
save_flags(flags);
cli();
switch(FiFo) {
case 0: cip = HFCB_FIFO | HFCB_Z1 | HFCB_SEND | HFCB_B1;
break;
case 1: cip = HFCB_FIFO | HFCB_Z1 | HFCB_REC | HFCB_B1;
break;
case 2: cip = HFCB_FIFO | HFCB_Z1 | HFCB_SEND | HFCB_B2;
break;
case 3: cip = HFCB_FIFO | HFCB_Z1 | HFCB_REC | HFCB_B2;
break;
case 4: cip = HFCD_FIFO | HFCD_Z1 | HFCD_SEND;
break;
case 5: cip = HFCD_FIFO | HFCD_Z1 | HFCD_REC;
break;
default:
restore_flags(flags);
debugl1(cs, "SelFiFo Error");
return(0);
}
cs->hw.hfcD.fifo = FiFo;
WaitNoBusy(cs);
cs->BC_Write_Reg(cs, HFCD_DATA, cip, 0);
sti();
WaitForBusy(cs);
restore_flags(flags);
return(2);
}
示例8: skb_queue_tail
/*
* Insert an sk_buff at the end of a list.
*/
void skb_queue_tail(struct sk_buff_head *list_, struct sk_buff *newsk)
{
unsigned long flags;
struct sk_buff *list = (struct sk_buff *)list_;
save_flags(flags);
cli();
if (newsk->next || newsk->prev)
printk("Suspicious queue tail: sk_buff on list!\n");
IS_SKB(newsk);
IS_SKB_HEAD(list);
newsk->next = list;
newsk->prev = list->prev;
newsk->next->prev = newsk;
newsk->prev->next = newsk;
newsk->list = list_;
list_->qlen++;
restore_flags(flags);
}
示例9: NCR53c406a_dma_setup
static __inline__ int
NCR53c406a_dma_setup (unsigned char *ptr,
unsigned int count,
unsigned char mode) {
unsigned limit;
unsigned long flags = 0;
VDEB(printk("dma: before count=%d ", count));
if (dma_chan <=3) {
if (count > 65536)
count = 65536;
limit = 65536 - (((unsigned) ptr) & 0xFFFF);
} else {
if (count > (65536<<1))
count = (65536<<1);
limit = (65536<<1) - (((unsigned) ptr) & 0x1FFFF);
}
if (count > limit) count = limit;
VDEB(printk("after count=%d\n", count));
if ((count & 1) || (((unsigned) ptr) & 1))
panic ("NCR53c406a: attempted unaligned DMA transfer\n");
save_flags(flags);
cli();
disable_dma(dma_chan);
clear_dma_ff(dma_chan);
set_dma_addr(dma_chan, (long) ptr);
set_dma_count(dma_chan, count);
set_dma_mode(dma_chan, mode);
enable_dma(dma_chan);
restore_flags(flags);
return count;
}
示例10: fd_select_drive
static void fd_select_drive(int drive)
{
unsigned long flags;
#ifdef DEBUG
printk("fd_select_drive:%d\n", drive);
#endif
/* Hmm - nowhere do we seem to turn the motor on - I'm going to do it here! */
oldlatch_aupdate(LATCHA_MOTOR | LATCHA_INUSE, 0);
if (drive == SelectedDrive)
return;
save_flags(flags);
cli();
oldlatch_aupdate(LATCHA_FDSELALL, 0xf - (1 << drive));
restore_flags(flags);
/* restore track register to saved value */
FDC1772_WRITE(FDC1772REG_TRACK, unit[drive].track);
udelay(25);
SelectedDrive = drive;
}
示例11: editor_main
/* the main editor function */
void editor_main(player * p, char *str)
{
if (!p->edit_info)
{
log("error", "Editor called with no edit_info");
return;
}
if (*str == '/')
{
restore_flags(p);
match_commands(p, str + 1);
save_flags(p);
return;
}
if (*str == '.')
{
sub_command(p, str + 1, editor_list);
if (p->edit_info)
do_prompt(p, "+");
return;
}
insert_line(p, str);
do_prompt(p, "+");
}
示例12: savegame
void
savegame(struct memfile *mf)
{
int count = 0;
xchar ltmp;
/* no tag useful here as store_version adds one */
store_version(mf);
/* Place flags, player info & moves at the beginning of the save. This
makes it possible to read them in nh_get_savegame_status without parsing
all the dungeon and level data */
save_flags(mf);
save_you(mf, &u);
mwrite32(mf, moves); /* no tag useful here; you is fixed-length */
save_mon(mf, &youmonst);
/* store dungeon layout */
save_dungeon(mf);
savelevchn(mf);
/* store levels */
mtag(mf, 0, MTAG_LEVELS);
for (ltmp = 1; ltmp <= maxledgerno(); ltmp++)
if (levels[ltmp])
count++;
mwrite32(mf, count);
for (ltmp = 1; ltmp <= maxledgerno(); ltmp++) {
if (!levels[ltmp])
continue;
mtag(mf, ltmp, MTAG_LEVELS);
mwrite8(mf, ltmp); /* level number */
savelev(mf, ltmp); /* actual level */
}
savegamestate(mf);
}
示例13: ax25_listen_register
int ax25_listen_register(ax25_address *callsign, struct device *dev)
{
struct listen_struct *listen;
unsigned long flags;
if (ax25_listen_mine(callsign, dev))
return 0;
if ((listen = (struct listen_struct *)kmalloc(sizeof(*listen), GFP_ATOMIC)) == NULL)
return 0;
listen->callsign = *callsign;
listen->dev = dev;
save_flags(flags);
cli();
listen->next = listen_list;
listen_list = listen;
restore_flags(flags);
return 1;
}
示例14: reset_netjet_u
static void
reset_netjet_u(struct IsdnCardState *cs)
{
long flags;
save_flags(flags);
sti();
cs->hw.njet.ctrl_reg = 0xff; /* Reset On */
byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
cs->hw.njet.ctrl_reg = 0x40; /* Reset Off and status read clear */
/* now edge triggered for TJ320 GE 13/07/00 */
byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
set_current_state(TASK_UNINTERRUPTIBLE);
schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
restore_flags(flags);
cs->hw.njet.auxd = 0xC0;
cs->hw.njet.dmactrl = 0;
byteout(cs->hw.njet.auxa, 0);
byteout(cs->hw.njet.base + NETJET_AUXCTRL, ~NETJET_ISACIRQ);
byteout(cs->hw.njet.base + NETJET_IRQMASK1, NETJET_ISACIRQ);
byteout(cs->hw.njet.auxa, cs->hw.njet.auxd);
}
示例15: skb_append
/*
* Place a packet after a given packet in a list.
*/
void skb_append(struct sk_buff *old, struct sk_buff *newsk)
{
unsigned long flags;
IS_SKB(old);
IS_SKB(newsk);
if(!old->next || !old->prev)
printk("append before unlisted item!\n");
if(newsk->next || newsk->prev)
printk("append item is already on a list.\n");
save_flags(flags);
cli();
newsk->prev = old;
newsk->next = old->next;
newsk->next->prev = newsk;
old->next = newsk;
newsk->list = old->list;
newsk->list->qlen++;
restore_flags(flags);
}