From ff4a1403a20aa84b16860ea8d3f6afcb4cf4126a Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Thu, 25 Sep 2008 12:08:51 +0000 Subject: [PATCH] Add NETISR_TO_MSGF() to convert netisr.ni_flags to lwkt_msg.ms_flags to avoid potential tranlation bugs Pointed-out-by: hsu@ --- sys/net/netisr.c | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/sys/net/netisr.c b/sys/net/netisr.c index 5d216b9f74..9cb412a435 100644 --- a/sys/net/netisr.c +++ b/sys/net/netisr.c @@ -35,7 +35,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $DragonFly: src/sys/net/netisr.c,v 1.46 2008/09/23 11:28:49 sephe Exp $ + * $DragonFly: src/sys/net/netisr.c,v 1.47 2008/09/25 12:08:51 sephe Exp $ */ #include @@ -95,6 +95,16 @@ SYSCTL_INT(_net_netisr, OID_AUTO, mpsafe_thread, CTLFLAG_RW, &netisr_mpsafe_thread, 0, "0:BGL, 1:Adaptive BGL, 2:No BGL(experimental)"); +static __inline int +NETISR_TO_MSGF(const struct netisr *ni) +{ + int msg_flags = 0; + + if (ni->ni_flags & NETISR_FLAG_MPSAFE) + msg_flags |= MSGF_MPSAFE; + return msg_flags; +} + /* * netisr_afree_rport replymsg function, only used to handle async * messages which the sender has abandoned to their fate. @@ -233,7 +243,7 @@ netmsg_service_sync(void) struct netmsg_port_registration *reg; struct netmsg smsg; - netmsg_init(&smsg, &curthread->td_msgport, 0, netmsg_sync_func); + netmsg_init(&smsg, &curthread->td_msgport, MSGF_MPSAFE, netmsg_sync_func); TAILQ_FOREACH(reg, &netreglist, npr_entry) { lwkt_domsg(reg->npr_port, &smsg.nm_lmsg, 0); @@ -362,9 +372,8 @@ netisr_queue(int num, struct mbuf *m) pmsg = &m->m_hdr.mh_netmsg; - netmsg_init(&pmsg->nm_netmsg, &netisr_apanic_rport, - (ni->ni_flags & NETISR_FLAG_MPSAFE) ? MSGF_MPSAFE : 0, - ni->ni_handler); + netmsg_init(&pmsg->nm_netmsg, &netisr_apanic_rport, NETISR_TO_MSGF(ni), + ni->ni_handler); pmsg->nm_packet = m; pmsg->nm_netmsg.nm_lmsg.u.ms_result = num; lwkt_sendmsg(port, &pmsg->nm_netmsg.nm_lmsg); @@ -375,13 +384,16 @@ void netisr_register(int num, lwkt_portfn_t mportfn, netisr_fn_t handler, uint32_t flags) { + struct netisr *ni; + KASSERT((num > 0 && num <= (sizeof(netisrs)/sizeof(netisrs[0]))), ("netisr_register: bad isr %d", num)); - netmsg_init(&netisrs[num].ni_netmsg, &netisr_adone_rport, - (flags & NETISR_FLAG_MPSAFE) ? MSGF_MPSAFE : 0, NULL); - netisrs[num].ni_mport = mportfn; - netisrs[num].ni_handler = handler; - netisrs[num].ni_flags = flags; + ni = &netisrs[num]; + + ni->ni_mport = mportfn; + ni->ni_handler = handler; + ni->ni_flags = flags; + netmsg_init(&ni->ni_netmsg, &netisr_adone_rport, NETISR_TO_MSGF(ni), NULL); } int @@ -447,7 +459,8 @@ schednetisr_remote(void *data) pmsg = &netisrs[num].ni_netmsg; crit_enter(); if (pmsg->nm_lmsg.ms_flags & MSGF_DONE) { - netmsg_init(pmsg, &netisr_adone_rport, 0, ni->ni_handler); + netmsg_init(pmsg, &netisr_adone_rport, NETISR_TO_MSGF(ni), + ni->ni_handler); pmsg->nm_lmsg.u.ms_result = num; lwkt_sendmsg(port, &pmsg->nm_lmsg); } -- 2.41.0