您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ write_unlock_bh函数代码示例

51自学网 2021-06-03 10:07:19
  C++
这篇教程C++ write_unlock_bh函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中write_unlock_bh函数的典型用法代码示例。如果您正苦于以下问题:C++ write_unlock_bh函数的具体用法?C++ write_unlock_bh怎么用?C++ write_unlock_bh使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了write_unlock_bh函数的26个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: iscsi_sw_tcp_conn_set_callbacks

static void iscsi_sw_tcp_conn_set_callbacks(struct iscsi_conn *conn){	struct iscsi_tcp_conn *tcp_conn = conn->dd_data;	struct iscsi_sw_tcp_conn *tcp_sw_conn = tcp_conn->dd_data;	struct sock *sk = tcp_sw_conn->sock->sk;	/* assign new callbacks */	write_lock_bh(&sk->sk_callback_lock);	sk->sk_user_data = conn;	tcp_sw_conn->old_data_ready = sk->sk_data_ready;	tcp_sw_conn->old_state_change = sk->sk_state_change;	tcp_sw_conn->old_write_space = sk->sk_write_space;	sk->sk_data_ready = iscsi_sw_tcp_data_ready;	sk->sk_state_change = iscsi_sw_tcp_state_change;	sk->sk_write_space = iscsi_sw_tcp_write_space;	write_unlock_bh(&sk->sk_callback_lock);}
开发者ID:AdrianHuang,项目名称:uclinux-robutest,代码行数:17,


示例2: rxrpc_remove_user_ID

/* * removal a call's user ID from the socket tree to make the user ID available * again and so that it won't be seen again in association with that call */void rxrpc_remove_user_ID(struct rxrpc_sock *rx, struct rxrpc_call *call){	_debug("RELEASE CALL %d", call->debug_id);	if (test_bit(RXRPC_CALL_HAS_USERID, &call->flags)) {		write_lock_bh(&rx->call_lock);		rb_erase(&call->sock_node, &call->socket->calls);		clear_bit(RXRPC_CALL_HAS_USERID, &call->flags);		write_unlock_bh(&rx->call_lock);	}	read_lock_bh(&call->state_lock);	if (!test_bit(RXRPC_CALL_RELEASED, &call->flags) &&	    !test_and_set_bit(RXRPC_CALL_RELEASE, &call->events))		rxrpc_queue_call(call);	read_unlock_bh(&call->state_lock);}
开发者ID:AICP,项目名称:kernel_moto_shamu,代码行数:21,


示例3: ip6_tnl_dev_uninit

static voidip6_tnl_dev_uninit(struct net_device *dev){	struct ip6_tnl *t = netdev_priv(dev);	struct net *net = dev_net(dev);	struct ip6_tnl_net *ip6n = net_generic(net, ip6_tnl_net_id);	if (dev == ip6n->fb_tnl_dev) {		write_lock_bh(&ip6_tnl_lock);		ip6n->tnls_wc[0] = NULL;		write_unlock_bh(&ip6_tnl_lock);	} else {		ip6_tnl_unlink(ip6n, t);	}	ip6_tnl_dst_reset(t);	dev_put(dev);}
开发者ID:johnny,项目名称:CobraDroidBeta,代码行数:17,


示例4: dp_bfd_timer_send_callback

void dp_bfd_timer_send_callback(unsigned long mydis){        dp_bfd_session_s *session;       session = dp_bfd_find_session_simple(mydis);    if(NULL == session)    {        if(dp_bfd_debug & DEBUG_BFD_TIMER)            printk("dp_bfd_timer_send_callback session not found/n");        return;    }        session->flag &= (~DP_BFD_SEND_TIMER_ON);    if(session->bfd_cyc_switch)    {        session->bfd_cyc_handshake_time++;        if(session->bfd_cyc_handshake_time >= BFD_CYC_HANDSHAKE_TIMEOUT)        {            session->bfd_cyc_switch = 0;            session->fail = 1;            dp_bfd_send_event(session, EVENT_BFD_CYC_HANDSHAKE_TIMEOUT, BFD_EVENT_CRUCIAL);        }    }            if(!(session->flag & DP_BFD_SEND_TIMER_ON))    {        session->send_timer.expires = jiffies + session->send_interval;        session->send_timer.data = mydis;        session->send_timer.function = dp_bfd_timer_send_callback;        add_timer_on(&session->send_timer, 1);        session->flag |= DP_BFD_SEND_TIMER_ON;                if(dp_bfd_debug & DEBUG_BFD_TIMER)            printk("dp_bfd_timer_send_callback add send_timer/n");    }    else    {        mod_timer(&session->send_timer, jiffies + session->send_interval);                if(dp_bfd_debug & DEBUG_BFD_TIMER)            printk("dp_bfd_timer_send_callback mod send_timer/n");    }    dp_bfd_send_msg(session, DP_BFD_SEND_CONTROL_PACKET);    write_unlock_bh(&g_session_cask[session->packet.my_discriminator%256].session_lock);}
开发者ID:millken,项目名称:zhuxianB30,代码行数:46,


示例5: rxrpc_send_abort

/* * abort a call, sending an ABORT packet to the peer */static void rxrpc_send_abort(struct rxrpc_call *call, u32 abort_code){	write_lock_bh(&call->state_lock);	if (call->state <= RXRPC_CALL_COMPLETE) {		call->state = RXRPC_CALL_LOCALLY_ABORTED;		call->abort_code = abort_code;		set_bit(RXRPC_CALL_ABORT, &call->events);		del_timer_sync(&call->resend_timer);		del_timer_sync(&call->ack_timer);		clear_bit(RXRPC_CALL_RESEND_TIMER, &call->events);		clear_bit(RXRPC_CALL_ACK, &call->events);		clear_bit(RXRPC_CALL_RUN_RTIMER, &call->flags);		rxrpc_queue_call(call);	}	write_unlock_bh(&call->state_lock);}
开发者ID:325116067,项目名称:semc-qsd8x50,代码行数:21,


示例6: tipc_net_start

int tipc_net_start(u32 addr){	char addr_string[16];	write_lock_bh(&tipc_net_lock);	tipc_own_addr = addr;	tipc_named_reinit();	tipc_port_reinit();	tipc_bclink_init();	write_unlock_bh(&tipc_net_lock);	tipc_cfg_reinit();	pr_info("Started in network mode/n");	pr_info("Own node address %s, network identity %u/n",		tipc_addr_string_fill(addr_string, tipc_own_addr), tipc_net_id);	return 0;}
开发者ID:ARMWorks,项目名称:FA_2451_Linux_Kernel,代码行数:18,


示例7: aarp_expire_timeout

/* Handle the timer event */static void aarp_expire_timeout(unsigned long unused){	int ct;	write_lock_bh(&aarp_lock);	for (ct = 0; ct < AARP_HASH_SIZE; ct++) {		__aarp_expire_timer(&resolved[ct]);		__aarp_kick(&unresolved[ct]);		__aarp_expire_timer(&unresolved[ct]);		__aarp_expire_timer(&proxies[ct]);	}	write_unlock_bh(&aarp_lock);	mod_timer(&aarp_timer, jiffies +			       (unresolved_count ? sysctl_aarp_tick_time :				sysctl_aarp_expiry_time));}
开发者ID:3sOx,项目名称:asuswrt-merlin,代码行数:19,


示例8: tcf_hash_destroy

void tcf_hash_destroy(struct tcf_common *p, struct tcf_hashinfo *hinfo){	unsigned int h = tcf_hash(p->tcfc_index, hinfo->hmask);	struct tcf_common **p1p;	for (p1p = &hinfo->htab[h]; *p1p; p1p = &(*p1p)->tcfc_next) {		if (*p1p == p) {			write_lock_bh(hinfo->lock);			*p1p = p->tcfc_next;			write_unlock_bh(hinfo->lock);			gen_kill_estimator(&p->tcfc_bstats,					   &p->tcfc_rate_est);			kfree(p);			return;		}	}	WARN_ON(1);}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:18,


示例9: ipv6_add_dev

static struct inet6_dev * ipv6_add_dev(struct net_device *dev){	struct inet6_dev *ndev;	ASSERT_RTNL();	if (dev->mtu < IPV6_MIN_MTU)		return NULL;	ndev = kmalloc(sizeof(struct inet6_dev), GFP_KERNEL);	if (ndev) {		memset(ndev, 0, sizeof(struct inet6_dev));		ndev->lock = RW_LOCK_UNLOCKED;		ndev->dev = dev;		memcpy(&ndev->cnf, &ipv6_devconf_dflt, sizeof(ndev->cnf));		ndev->cnf.mtu6 = dev->mtu;		ndev->cnf.sysctl = NULL;		ndev->nd_parms = neigh_parms_alloc(dev, &nd_tbl);		if (ndev->nd_parms == NULL) {			kfree(ndev);			return NULL;		}		inet6_dev_count++;		/* We refer to the device */		dev_hold(dev);		write_lock_bh(&addrconf_lock);		dev->ip6_ptr = ndev;		/* One reference from device */		in6_dev_hold(ndev);		write_unlock_bh(&addrconf_lock);		ipv6_mc_init_dev(ndev);#ifdef CONFIG_SYSCTL		neigh_sysctl_register(dev, ndev->nd_parms, NET_IPV6, NET_IPV6_NEIGH, "ipv6");		addrconf_sysctl_register(ndev, &ndev->cnf);#endif	}	return ndev;}
开发者ID:hugh712,项目名称:Jollen,代码行数:43,


示例10: xfrm_unregister_type

int xfrm_unregister_type(struct xfrm_type *type, unsigned short family){	struct xfrm_policy_afinfo *afinfo = xfrm_policy_get_afinfo(family);	struct xfrm_type_map *typemap;	int err = 0;	if (unlikely(afinfo == NULL))		return -EAFNOSUPPORT;	typemap = afinfo->type_map;	write_lock_bh(&typemap->lock);	if (unlikely(typemap->map[type->proto] != type))		err = -ENOENT;	else		typemap->map[type->proto] = NULL;	write_unlock_bh(&typemap->lock);	xfrm_policy_put_afinfo(afinfo);	return err;}
开发者ID:BackupTheBerlios,项目名称:arp2-svn,代码行数:19,


示例11: L2DATA

struct l2t_entry *t3_l2t_get(struct t3cdev *cdev, struct neighbour *neigh,			     struct net_device *dev){	struct l2t_entry *e;	struct l2t_data *d = L2DATA(cdev);	u32 addr = *(u32 *) neigh->primary_key;	int ifidx = neigh->dev->ifindex;	int hash = arp_hash(addr, ifidx, d);	struct port_info *p = netdev_priv(dev);	int smt_idx = p->port_id;	write_lock_bh(&d->lock);	for (e = d->l2tab[hash].first; e; e = e->next)		if (e->addr == addr && e->ifindex == ifidx &&		    e->smt_idx == smt_idx) {			l2t_hold(d, e);			if (atomic_read(&e->refcnt) == 1)				reuse_entry(e, neigh);			goto done;		}	/* Need to allocate a new entry */	e = alloc_l2e(d);	if (e) {		spin_lock(&e->lock);	/* avoid race with t3_l2t_free */		e->next = d->l2tab[hash].first;		d->l2tab[hash].first = e;		e->state = L2T_STATE_RESOLVING;		e->addr = addr;		e->ifindex = ifidx;		e->smt_idx = smt_idx;		atomic_set(&e->refcnt, 1);		neigh_replace(e, neigh);		if (neigh->dev->priv_flags & IFF_802_1Q_VLAN)			e->vlan = vlan_dev_vlan_id(neigh->dev);		else			e->vlan = VLAN_NONE;		spin_unlock(&e->lock);	}done:	write_unlock_bh(&d->lock);	return e;}
开发者ID:LouZiffer,项目名称:m900_kernel_cupcake-SDX,代码行数:43,


示例12: arp_invalidate

static int arp_invalidate(struct net_device *dev, __be32 ip){	struct neighbour *neigh = neigh_lookup(&arp_tbl, &ip, dev);	int err = -ENXIO;	struct neigh_table *tbl = &arp_tbl;	if (neigh) {		if (neigh->nud_state & ~NUD_NOARP)			err = neigh_update(neigh, NULL, NUD_FAILED,					   NEIGH_UPDATE_F_OVERRIDE|					   NEIGH_UPDATE_F_ADMIN, 0);		write_lock_bh(&tbl->lock);		neigh_release(neigh);		neigh_remove_one(neigh, tbl);		write_unlock_bh(&tbl->lock);	}	return err;}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:19,


示例13: dp_bfd_timer_echo_receive_callback

void dp_bfd_timer_echo_receive_callback(unsigned long mydis){    dp_bfd_session_s *session;          session = dp_bfd_find_session_simple(mydis);    if(NULL == session)    {        if(dp_bfd_debug & DEBUG_BFD_TIMER)            printk("dp_bfd_timer_echo_receive_callback session not found/n");        return;    }        session->flag &= (~DP_BFD_ECHORECV_TIMER_ON);    session->packet.sta = DOWN;    session->packet.diag = ECHO_FUNCTION_FAILED;        if(session->flag & DP_BFD_ECHOSEND_TIMER_ON)    {        del_timer_sync(&session->echo_send_timer);        session->flag &= (~DP_BFD_ECHOSEND_TIMER_ON);    }        if(session->flag & DP_BFD_SEND_TIMER_ON)    {        del_timer_sync(&session->send_timer);        session->flag &= (~DP_BFD_SEND_TIMER_ON);    }    if(session->flag & DP_BFD_RECEIVE_TIMER_ON)    {        del_timer_sync(&session->receive_timer);        session->flag &= (~DP_BFD_RECEIVE_TIMER_ON);    }        dp_bfd_send_msg(session, DP_BFD_SEND_CONTROL_PACKET);        session->packet.your_discriminator = 0;    if(DP_BFD_INITIATIVE_MODE == session->session_mode)    {        dp_bfd_timer_cyc_handshake_add(session);    }        write_unlock_bh(&g_session_cask[session->packet.my_discriminator%256].session_lock);}
开发者ID:millken,项目名称:zhuxianB30,代码行数:43,


示例14: ip_mc_inc_group

void ip_mc_inc_group(struct in_device *in_dev, u32 addr){    struct ip_mc_list *im;    ASSERT_RTNL();    for (im=in_dev->mc_list; im; im=im->next) {        if (im->multiaddr == addr) {            im->users++;            goto out;        }    }    im = (struct ip_mc_list *)kmalloc(sizeof(*im), GFP_KERNEL);    if (!im)        goto out;    im->users=1;    im->interface=in_dev;    in_dev_hold(in_dev);    im->multiaddr=addr;    atomic_set(&im->refcnt, 1);    spin_lock_init(&im->lock);#ifdef  CONFIG_IP_MULTICAST    im->tm_running=0;    init_timer(&im->timer);    im->timer.data=(unsigned long)im;    im->timer.function=&igmp_timer_expire;    im->unsolicit_count = IGMP_Unsolicited_Report_Count;    im->reporter = 0;#endif    im->loaded = 0;    write_lock_bh(&in_dev->lock);    im->next=in_dev->mc_list;    in_dev->mc_list=im;    write_unlock_bh(&in_dev->lock);    igmp_group_added(im);    if (in_dev->dev->flags & IFF_UP)        ip_rt_multicast_event(in_dev);out:    return;}
开发者ID:jhbsz,项目名称:actiontec_opensource_mi424wr-rev-acd-56-0-10-14-4,代码行数:42,


示例15: ip6mr_mfc_delete

static int ip6mr_mfc_delete(struct mf6cctl *mfc){	int line;	struct mfc6_cache *c, **cp;	line = MFC6_HASH(&mfc->mf6cc_mcastgrp.sin6_addr, &mfc->mf6cc_origin.sin6_addr);	for (cp = &mfc6_cache_array[line]; (c = *cp) != NULL; cp = &c->next) {		if (ipv6_addr_equal(&c->mf6c_origin, &mfc->mf6cc_origin.sin6_addr) &&		    ipv6_addr_equal(&c->mf6c_mcastgrp, &mfc->mf6cc_mcastgrp.sin6_addr)) {			write_lock_bh(&mrt_lock);			*cp = c->next;			write_unlock_bh(&mrt_lock);			kmem_cache_free(mrt_cachep, c);			return 0;		}	}	return -ENOENT;}
开发者ID:IgnasD,项目名称:Tomato-RAF,代码行数:20,


示例16: add_free_chan

static void add_free_chan(struct pppox_sock *po){	static __u16 call_id=0;	struct pppox_sock *p;	write_lock_bh(&chan_lock);	while (1) {		if (++call_id==0) continue;		for(p=chans[HASH(call_id)]; p; p=p->next)			if (p->proto.pptp.src_addr.call_id==call_id)				break;		if (!p){			po->proto.pptp.src_addr.call_id=call_id;			po->next=chans[HASH(call_id)];			chans[HASH(call_id)]=po;			break;		}	}	write_unlock_bh(&chan_lock);}
开发者ID:BackupTheBerlios,项目名称:tew632-brp-svn,代码行数:20,


示例17: spd_proc_poll

static unsigned intspd_proc_poll(        struct file *file,        struct poll_table_struct *table){    unsigned int mask = 0;    poll_wait(file, &wait_queue, table);    write_lock_bh(&spd_proc_lock);    if (bypass_packet_set == true)    {        mask |= (POLLIN | POLLRDNORM);    }    write_unlock_bh(&spd_proc_lock);    return mask;}
开发者ID:GAXUSXX,项目名称:G935FGaXusKernel2,代码行数:20,


示例18: tcf_hash_destroy

void tcf_hash_destroy(struct tcf_common *p, struct tcf_hashinfo *hinfo){	unsigned int h = tcf_hash(p->tcfc_index, hinfo->hmask);	struct tcf_common **p1p;	for (p1p = &hinfo->htab[h]; *p1p; p1p = &(*p1p)->tcfc_next) {		if (*p1p == p) {			write_lock_bh(hinfo->lock);			*p1p = p->tcfc_next;			write_unlock_bh(hinfo->lock);#ifdef CONFIG_NET_ESTIMATOR			gen_kill_estimator(&p->tcfc_bstats,					   &p->tcfc_rate_est);#endif			kfree(p);			return;		}	}	BUG_TRAP(0);}
开发者ID:Voskrese,项目名称:mipsonqemu,代码行数:20,


示例19: ipxrtr_add_route

/* * Caller must hold a reference to intrfc */int ipxrtr_add_route(__be32 network, struct ipx_interface *intrfc,		     unsigned char *node){	struct ipx_route *rt;	int rc;	/* Get a route structure; either existing or create */	rt = ipxrtr_lookup(network);	if (!rt) {		rt = kmalloc(sizeof(*rt), GFP_ATOMIC);		rc = -EAGAIN;		if (!rt)			goto out;		atomic_set(&rt->refcnt, 1);		ipxrtr_hold(rt);		write_lock_bh(&ipx_routes_lock);		list_add(&rt->node, &ipx_routes);		write_unlock_bh(&ipx_routes_lock);	} else {		rc = -EEXIST;		if (intrfc == ipx_internal_net)			goto out_put;	}	rt->ir_net 	= network;	rt->ir_intrfc 	= intrfc;	if (!node) {		memset(rt->ir_router_node, '/0', IPX_NODE_LEN);		rt->ir_routed = 0;	} else {		memcpy(rt->ir_router_node, node, IPX_NODE_LEN);		rt->ir_routed = 1;	}	rc = 0;out_put:	ipxrtr_put(rt);out:	return rc;}
开发者ID:7799,项目名称:linux,代码行数:44,


示例20: ASSERT_RTNL

struct in_device *inetdev_init(struct net_device *dev){	struct in_device *in_dev;	ASSERT_RTNL();	in_dev = kmalloc(sizeof(*in_dev), GFP_KERNEL);	if (!in_dev)		goto out;	memset(in_dev, 0, sizeof(*in_dev));	in_dev->lock = RW_LOCK_UNLOCKED;	memcpy(&in_dev->cnf, &ipv4_devconf_dflt, sizeof(in_dev->cnf));	in_dev->cnf.sysctl = NULL;	in_dev->dev = dev;	if ((in_dev->arp_parms = neigh_parms_alloc(dev, &arp_tbl)) == NULL)		goto out_kfree;	inet_dev_count++;	/* Reference in_dev->dev */	dev_hold(dev);#ifdef CONFIG_SYSCTL	neigh_sysctl_register(dev, in_dev->arp_parms, NET_IPV4,			      NET_IPV4_NEIGH, "ipv4", NULL);#endif	write_lock_bh(&inetdev_lock);	dev->ip_ptr = in_dev;	/* Account for reference dev->ip_ptr */	in_dev_hold(in_dev);	write_unlock_bh(&inetdev_lock);#ifdef CONFIG_SYSCTL	devinet_sysctl_register(in_dev, &in_dev->cnf);#endif	ip_mc_init_dev(in_dev);	if (dev->flags & IFF_UP)		ip_mc_up(in_dev);out:	return in_dev;out_kfree:	kfree(in_dev);	in_dev = NULL;	goto out;}
开发者ID:FelipeFernandes1988,项目名称:Alice-1121-Modem,代码行数:41,


示例21: sco_sock_dump

/* ----- Proc fs support ------ */static int sco_sock_dump(char *buf, struct bluez_sock_list *list){	struct sco_pinfo *pi;	struct sock *sk;	char *ptr = buf;	write_lock_bh(&list->lock);	for (sk = list->head; sk; sk = sk->next) {		pi = sco_pi(sk);		ptr += sprintf(ptr, "%s %s %d/n",				batostr(&bluez_pi(sk)->src), batostr(&bluez_pi(sk)->dst),				sk->state); 	}	write_unlock_bh(&list->lock);	ptr += sprintf(ptr, "/n");	return ptr - buf;}
开发者ID:niubl,项目名称:camera_project,代码行数:22,


示例22: nf_conntrack_l4proto_unregister

void nf_conntrack_l4proto_unregister(struct nf_conntrack_l4proto *l4proto){	BUG_ON(l4proto->l3proto >= PF_MAX);	if (l4proto == &nf_conntrack_l4proto_generic) {		nf_ct_l4proto_unregister_sysctl(l4proto);		return;	}	write_lock_bh(&nf_conntrack_lock);	BUG_ON(nf_ct_protos[l4proto->l3proto][l4proto->l4proto] != l4proto);	rcu_assign_pointer(nf_ct_protos[l4proto->l3proto][l4proto->l4proto],			   &nf_conntrack_l4proto_generic);	write_unlock_bh(&nf_conntrack_lock);	synchronize_rcu();	nf_ct_l4proto_unregister_sysctl(l4proto);	/* Remove all contrack entries for this protocol */	nf_ct_iterate_cleanup(kill_l4proto, l4proto);}
开发者ID:StephenMacras,项目名称:dsl-n55u-bender,代码行数:21,


示例23: fl_release

static void fl_release(struct ip6_flowlabel *fl){	write_lock_bh(&ip6_fl_lock);	fl->lastuse = jiffies;	if (atomic_dec_and_test(&fl->users)) {		unsigned long ttd = fl->lastuse + fl->linger;		if (time_after(ttd, fl->expires))			fl->expires = ttd;		ttd = fl->expires;		if (fl->opt && fl->share == IPV6_FL_S_EXCL) {			struct ipv6_txoptions *opt = fl->opt;			fl->opt = NULL;			kfree(opt);		}		if (!timer_pending(&ip6_fl_gc_timer) ||		    time_after(ip6_fl_gc_timer.expires, ttd))			mod_timer(&ip6_fl_gc_timer, ttd);	}	write_unlock_bh(&ip6_fl_lock);}
开发者ID:0xroot,项目名称:Blackphone-BP1-Kernel,代码行数:21,


示例24: int

/** *	llc_sap_open - open interface to the upper layers. *	@lsap: SAP number. *	@func: rcv func for datalink protos * *	Interface function to upper layer. Each one who wants to get a SAP *	(for example NetBEUI) should call this function. Returns the opened *	SAP for success, NULL for failure. */struct llc_sap *llc_sap_open(unsigned char lsap,			     int (*func)(struct sk_buff *skb,					 struct net_device *dev,					 struct packet_type *pt,					 struct net_device *orig_dev)){	struct llc_sap *sap = NULL;	write_lock_bh(&llc_sap_list_lock);	if (__llc_sap_find(lsap)) /* SAP already exists */		goto out;	sap = llc_sap_alloc();	if (!sap)		goto out;	sap->laddr.lsap = lsap;	sap->rcv_func	= func;	llc_add_sap(sap);out:	write_unlock_bh(&llc_sap_list_lock);	return sap;}
开发者ID:325116067,项目名称:semc-qsd8x50,代码行数:30,


示例25: smc_lgr_unregister_conn

/* Unregister connection and trigger lgr freeing if applicable */static void smc_lgr_unregister_conn(struct smc_connection *conn){	struct smc_link_group *lgr = conn->lgr;	int reduced = 0;	write_lock_bh(&lgr->conns_lock);	if (conn->alert_token_local) {		reduced = 1;		__smc_lgr_unregister_conn(conn);	}	write_unlock_bh(&lgr->conns_lock);	if (!reduced || lgr->conns_num)		return;	/* client link group creation always follows the server link group	 * creation. For client use a somewhat higher removal delay time,	 * otherwise there is a risk of out-of-sync link groups.	 */	mod_delayed_work(system_wq, &lgr->free_work,			 lgr->role == SMC_CLNT ? SMC_LGR_FREE_DELAY_CLNT :						 SMC_LGR_FREE_DELAY_SERV);}
开发者ID:ReneNyffenegger,项目名称:linux,代码行数:23,


示例26: ax25_rt_opt

static int ax25_rt_opt(struct ax25_route_opt_struct *rt_option){	ax25_route *ax25_rt;	ax25_dev *ax25_dev;	int err = 0;	if ((ax25_dev = ax25_addr_ax25dev(&rt_option->port_addr)) == NULL)		return -EINVAL;	write_lock_bh(&ax25_route_lock);	ax25_rt = ax25_route_list;	while (ax25_rt != NULL) {		if (ax25_rt->dev == ax25_dev->dev &&		    ax25cmp(&rt_option->dest_addr, &ax25_rt->callsign) == 0) {			switch (rt_option->cmd) {			case AX25_SET_RT_IPMODE:				switch (rt_option->arg) {				case ' ':				case 'D':				case 'V':					ax25_rt->ip_mode = rt_option->arg;					break;				default:					err = -EINVAL;					goto out;				}				break;			default:				err = -EINVAL;				goto out;			}		}		ax25_rt = ax25_rt->next;	}out:	write_unlock_bh(&ax25_route_lock);	return err;}
开发者ID:ReneNyffenegger,项目名称:linux,代码行数:40,



注:本文中的write_unlock_bh函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ write_unlock_irq函数代码示例
C++ write_unlock函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。