本文整理汇总了C++中cmpxchg函数的典型用法代码示例。如果您正苦于以下问题:C++ cmpxchg函数的具体用法?C++ cmpxchg怎么用?C++ cmpxchg使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cmpxchg函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: fscrypt_put_encryption_info
void fscrypt_put_encryption_info(struct inode *inode, struct fscrypt_info *ci)
{
struct fscrypt_info *prev;
if (ci == NULL)
ci = ACCESS_ONCE(inode->i_crypt_info);
if (ci == NULL)
return;
prev = cmpxchg(&inode->i_crypt_info, ci, NULL);
if (prev != ci)
return;
put_crypt_info(ci);
}
开发者ID:513855417,项目名称:linux,代码行数:15,代码来源:keyinfo.c
示例2: f2fs_free_encryption_info
void f2fs_free_encryption_info(struct inode *inode, struct f2fs_crypt_info *ci)
{
struct f2fs_inode_info *fi = F2FS_I(inode);
struct f2fs_crypt_info *prev;
if (ci == NULL)
ci = ACCESS_ONCE(fi->i_crypt_info);
if (ci == NULL)
return;
prev = cmpxchg(&fi->i_crypt_info, ci, NULL);
if (prev != ci)
return;
f2fs_free_crypt_info(ci);
}
开发者ID:Chong-Li,项目名称:cse522,代码行数:15,代码来源:crypto_key.c
示例3: page_nid_xchg_last
int page_nid_xchg_last(struct page *page, int nid)
{
unsigned long old_flags, flags;
int last_nid;
do {
old_flags = flags = page->flags;
last_nid = page_nid_last(page);
flags &= ~(LAST_NID_MASK << LAST_NID_PGSHIFT);
flags |= (nid & LAST_NID_MASK) << LAST_NID_PGSHIFT;
} while (unlikely(cmpxchg(&page->flags, old_flags, flags) != old_flags));
return last_nid;
}
开发者ID:Pafcholini,项目名称:Beta_TW,代码行数:15,代码来源:mmzone.c
示例4: net_secret_init
static void net_secret_init(void)
{
u32 tmp;
int i;
if (likely(net_secret[0]))
return;
for (i = NET_SECRET_SIZE; i > 0;) {
do {
get_random_bytes(&tmp, sizeof(tmp));
} while (!tmp);
cmpxchg(&net_secret[--i], 0, tmp);
}
}
开发者ID:FEDEVEL,项目名称:imx6rex-linux-3.10.17,代码行数:15,代码来源:secure_seq.c
示例5: tux3_set_bufdelta
/*
* FIXME: this is hack to save delta to linux buffer_head.
* Inefficient, and this is not atomic with dirty bit change. And this
* may not work on all arch (If set_bit() and cmpxchg() is not
* exclusive, this has race).
*/
static void tux3_set_bufdelta(struct buffer_head *buffer, int delta)
{
unsigned long state, old_state;
delta = tux3_delta(delta);
state = buffer->b_state;
for (;;) {
old_state = state;
state = tux3_bufsta_update(old_state, delta);
state = cmpxchg(&buffer->b_state, old_state, state);
if (state == old_state)
break;
}
}
开发者ID:OGAWAHirofumi,项目名称:tux3,代码行数:21,代码来源:buffer.c
示例6: mce_log
void mce_log(struct mce *mce)
{
unsigned next, entry;
int ret = 0;
/* Emit the trace record: */
trace_mce_record(mce);
ret = atomic_notifier_call_chain(&x86_mce_decoder_chain, 0, mce);
if (ret == NOTIFY_STOP)
return;
mce->finished = 0;
wmb();
for (;;) {
entry = rcu_dereference_check_mce(mcelog.next);
for (;;) {
/*
* When the buffer fills up discard new entries.
* Assume that the earlier errors are the more
* interesting ones:
*/
if (entry >= MCE_LOG_LEN) {
set_bit(MCE_OVERFLOW,
(unsigned long *)&mcelog.flags);
return;
}
/* Old left over entry. Skip: */
if (mcelog.entry[entry].finished) {
entry++;
continue;
}
break;
}
smp_rmb();
next = entry + 1;
if (cmpxchg(&mcelog.next, entry, next) == entry)
break;
}
memcpy(mcelog.entry + entry, mce, sizeof(struct mce));
wmb();
mcelog.entry[entry].finished = 1;
wmb();
mce->finished = 1;
set_bit(0, &mce_need_notify);
}
开发者ID:Huanglihan,项目名称:linux,代码行数:48,代码来源:mce.c
示例7: ext4_free_encryption_info
void ext4_free_encryption_info(struct inode *inode,
struct ext4_crypt_info *ci)
{
struct ext4_inode_info *ei = EXT4_I(inode);
struct ext4_crypt_info *prev;
if (ci == NULL)
ci = ACCESS_ONCE(ei->i_crypt_info);
if (ci == NULL)
return;
prev = cmpxchg(&ei->i_crypt_info, ci, NULL);
if (prev != ci)
return;
ext4_free_crypt_info(ci);
}
开发者ID:ammubhave,项目名称:bargud,代码行数:16,代码来源:crypto_key.c
示例8: check_lock
static void check_lock(struct lock_debug *debug)
{
int irq_safe = !local_irq_is_enabled();
if ( unlikely(atomic_read(&spin_debug) <= 0) )
return;
/* A few places take liberties with this. */
/* BUG_ON(in_irq() && !irq_safe); */
if ( unlikely(debug->irq_safe != irq_safe) )
{
int seen = cmpxchg(&debug->irq_safe, -1, irq_safe);
BUG_ON(seen == !irq_safe);
}
}
开发者ID:a2k2,项目名称:xen-unstable,代码行数:16,代码来源:spinlock.c
示例9: bbgl_mutex_lock
int bbgl_mutex_lock(bbgl_mutex_t *mutex) {
int c;
for (int i = 0; i < 100; i++) {
c = cmpxchg(mutex, 0, 1);
if (c == 0)
return 0;
__asm__ __volatile__("pause" ::: "memory");
}
if (c == 1)
c = xchg(mutex, 2);
while (c) {
futex(mutex, FUTEX_WAIT, 2, NULL, NULL, 0);
c = xchg(mutex, 2);
}
return 0;
}
开发者ID:graphitemaster,项目名称:bbgl,代码行数:16,代码来源:mutex.c
示例10: j2_send_ipi
static void j2_send_ipi(unsigned int cpu, unsigned int message)
{
volatile unsigned *pmsg;
unsigned old;
unsigned long val;
/* There is only one IPI interrupt shared by all messages, so
* we keep a separate interrupt flag per message type in sw. */
pmsg = &per_cpu(j2_ipi_messages, cpu);
do old = *pmsg;
while (cmpxchg(pmsg, old, old|(1U<<message)) != old);
/* Generate the actual interrupt by writing to CCRn bit 28. */
val = __raw_readl(j2_ipi_trigger + cpu);
__raw_writel(val | (1U<<28), j2_ipi_trigger + cpu);
}
开发者ID:01org,项目名称:thunderbolt-software-kernel-tree,代码行数:16,代码来源:smp-j2.c
示例11: gre_del_protocol
int gre_del_protocol(const struct gre_protocol *proto, u8 version)
{
int ret;
if (version >= GREPROTO_MAX)
return -EINVAL;
ret = (cmpxchg((const struct gre_protocol **)&gre_proto[version], proto, NULL) == proto) ?
0 : -EBUSY;
if (ret)
return ret;
synchronize_rcu();
return 0;
}
开发者ID:AeroGirl,项目名称:VAR-SOM-AM33-SDK7-Kernel,代码行数:16,代码来源:gre_demux.c
示例12: irq_work_claim
/*
* Claim the entry so that no one else will poke at it.
*/
static bool irq_work_claim(struct irq_work *work)
{
unsigned long flags, nflags;
for (;;) {
flags = work->flags;
if (flags & IRQ_WORK_PENDING)
return false;
nflags = flags | IRQ_WORK_FLAGS;
if (cmpxchg(&work->flags, flags, nflags) == flags)
break;
cpu_relax();
}
return true;
}
开发者ID:openube,项目名称:android_kernel_sony_c2305,代码行数:19,代码来源:irq_work.c
示例13: uisqueue_interlocked_and
unsigned long long
uisqueue_interlocked_and(unsigned long long __iomem *tgt,
unsigned long long set)
{
unsigned long long i;
unsigned long long j;
j = readq(tgt);
do {
i = j;
j = cmpxchg((__force unsigned long long *)tgt, i, i & set);
} while (i != j);
return j;
}
开发者ID:383530895,项目名称:linux,代码行数:16,代码来源:uisqueue.c
示例14: ip_tunnel_encap_del_ops
int ip_tunnel_encap_del_ops(const struct ip_tunnel_encap_ops *ops,
unsigned int num)
{
int ret;
if (num >= MAX_IPTUN_ENCAP_OPS)
return -ERANGE;
ret = (cmpxchg((const struct ip_tunnel_encap_ops **)
&iptun_encaps[num],
ops, NULL) == ops) ? 0 : -1;
synchronize_net();
return ret;
}
开发者ID:ki-project,项目名称:ki_os_with_linux_header,代码行数:16,代码来源:ip_tunnel.c
示例15: nvmet_install_queue
static u16 nvmet_install_queue(struct nvmet_ctrl *ctrl, struct nvmet_req *req)
{
struct nvmf_connect_command *c = &req->cmd->connect;
u16 qid = le16_to_cpu(c->qid);
u16 sqsize = le16_to_cpu(c->sqsize);
struct nvmet_ctrl *old;
old = cmpxchg(&req->sq->ctrl, NULL, ctrl);
if (old) {
pr_warn("queue already connected!\n");
return NVME_SC_CONNECT_CTRL_BUSY | NVME_SC_DNR;
}
nvmet_cq_setup(ctrl, req->cq, qid, sqsize);
nvmet_sq_setup(ctrl, req->sq, qid, sqsize);
return 0;
}
开发者ID:forgivemyheart,项目名称:linux,代码行数:17,代码来源:fabrics-cmd.c
示例16: amd_put_event_constraints
static void amd_put_event_constraints(struct cpu_hw_events *cpuc,
struct perf_event *event)
{
struct hw_perf_event *hwc = &event->hw;
struct amd_nb *nb = cpuc->amd_nb;
int i;
if (!(amd_has_nb(cpuc) && amd_is_nb_event(hwc)))
return;
for (i = 0; i < x86_pmu.num_counters; i++) {
if (nb->owners[i] == event) {
cmpxchg(nb->owners+i, event, NULL);
break;
}
}
}
开发者ID:DirtyDroidX,项目名称:android_kernel_htc_m8ul,代码行数:17,代码来源:perf_event_amd.c
示例17: j2_ipi_interrupt_handler
static irqreturn_t j2_ipi_interrupt_handler(int irq, void *arg)
{
unsigned cpu = hard_smp_processor_id();
volatile unsigned *pmsg = &per_cpu(j2_ipi_messages, cpu);
unsigned messages, i;
do messages = *pmsg;
while (cmpxchg(pmsg, messages, 0) != messages);
if (!messages) return IRQ_NONE;
for (i=0; i<SMP_MSG_NR; i++)
if (messages & (1U<<i))
smp_message_recv(i);
return IRQ_HANDLED;
}
开发者ID:01org,项目名称:thunderbolt-software-kernel-tree,代码行数:17,代码来源:smp-j2.c
示例18: lwtunnel_encap_del_ops
int lwtunnel_encap_del_ops(const struct lwtunnel_encap_ops *ops,
unsigned int encap_type)
{
int ret;
if (encap_type == LWTUNNEL_ENCAP_NONE ||
encap_type > LWTUNNEL_ENCAP_MAX)
return -ERANGE;
ret = (cmpxchg((const struct lwtunnel_encap_ops **)
&lwtun_encaps[encap_type],
ops, NULL) == ops) ? 0 : -1;
synchronize_net();
return ret;
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:17,代码来源:lwtunnel.c
示例19: mspin_unlock
static void mspin_unlock(struct mspin_node **lock, struct mspin_node *node)
{
struct mspin_node *next = ACCESS_ONCE(node->next);
if (likely(!next)) {
/*
* Release the lock by setting it to NULL
*/
if (cmpxchg(lock, node, NULL) == node)
return;
/* Wait until the next pointer is set */
while (!(next = cpu_relaxed_read_long(&(node->next))))
cpu_read_relax();
}
ACCESS_ONCE(next->locked) = 1;
smp_wmb();
}
开发者ID:FrozenCow,项目名称:FIRE-ICE,代码行数:17,代码来源:mutex.c
示例20: __irq_work_run
static void __irq_work_run(void)
{
unsigned long flags;
struct irq_work *work;
struct llist_head *this_list;
struct llist_node *llnode;
/*
* Reset the "raised" state right before we check the list because
* an NMI may enqueue after we find the list empty from the runner.
*/
__this_cpu_write(irq_work_raised, 0);
barrier();
this_list = &__get_cpu_var(irq_work_list);
if (llist_empty_relaxed(this_list))
return;
BUG_ON(!irqs_disabled());
llnode = llist_del_all(this_list);
while (llnode != NULL) {
work = llist_entry(llnode, struct irq_work, llnode);
llnode = llist_next(llnode);
/*
* Clear the PENDING bit, after this point the @work
* can be re-used.
* Make it immediately visible so that other CPUs trying
* to claim that work don't rely on us to handle their data
* while we are in the middle of the func.
*/
flags = work->flags & ~IRQ_WORK_PENDING;
xchg(&work->flags, flags);
work->func(work);
/*
* Clear the BUSY bit and return to the free state if
* no-one else claimed it meanwhile.
*/
(void)cmpxchg(&work->flags, flags, flags & ~IRQ_WORK_BUSY);
}
}
开发者ID:gundal,项目名称:nobleltehk,代码行数:45,代码来源:irq_work.c
注:本文中的cmpxchg函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论