Date: Wed, 17 Sep 2014 14:47:00 -0400 From: Eric van Gyzen <eric@vangyzen.net> To: Adrian Chadd <adrian@freebsd.org>, Sebastian Huber <sebastian.huber@embedded-brains.de> Cc: "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org> Subject: Re: [PATCH] C++ compatibility for some kernel headers Message-ID: <5419D724.6000601@vangyzen.net> In-Reply-To: <CAJ-VmokaTMVV8ESjvsea=caAqXvvLSVchc4jNZJMex_GePAkaQ@mail.gmail.com> References: <1410952389-30368-1-git-send-email-sebastian.huber@embedded-brains.de> <CAJ-VmokaTMVV8ESjvsea=caAqXvvLSVchc4jNZJMex_GePAkaQ@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
While we're on the topic, I'd like to see the definition of struct prf_ra moved outside the definition of struct in6_prflags in netinet6/in6_var.h, in order to play nicely with C++ scoping. I'll whip up a patch, if anyone would like. Eric On 09/17/2014 13:37, Adrian Chadd wrote: > Hi! > > This is of interest to me at ${WORK}. > > So please do file a PR (https://bugs.freebsd.org/submit/) and I'll > make sure we fix -HEAD up to do this. > > Thanks! > > -a > > > On 17 September 2014 04:13, Sebastian Huber > <sebastian.huber@embedded-brains.de> wrote: >> We ported the FreeBSD network stack to RTEMS. Some users want to write >> network interface drivers in C++. It would be nice if we can make some >> FreeBSD kernel headers C++ compatible. >> >> sys/buf_ring.h: >> >> Mabye it is better to fix the integer type of br_cons_head to be able to >> use it in atomic_cmpset_int(). >> >> sys/mbuf.h: >> >> Maybe it is better to fix the integer type of ext_cnt to be able to use >> it for uma_find_refcnt(). >> --- >> sys/net/ifq.h | 16 ++++++++-------- >> sys/sys/buf_ring.h | 9 +++++---- >> sys/sys/mbuf.h | 17 +++++++++-------- >> 3 files changed, 22 insertions(+), 20 deletions(-) >> >> diff --git a/sys/net/ifq.h b/sys/net/ifq.h >> index cf0c506..c970443 100644 >> --- a/sys/net/ifq.h >> +++ b/sys/net/ifq.h >> @@ -332,7 +332,7 @@ drbr_enqueue(struct ifnet *ifp, struct buf_ring *br, struct mbuf *m) >> } >> >> static __inline void >> -drbr_putback(struct ifnet *ifp, struct buf_ring *br, struct mbuf *new) >> +drbr_putback(struct ifnet *ifp, struct buf_ring *br, struct mbuf *new_mbuf) >> { >> /* >> * The top of the list needs to be swapped >> @@ -344,11 +344,11 @@ drbr_putback(struct ifnet *ifp, struct buf_ring *br, struct mbuf *new) >> * Peek in altq case dequeued it >> * so put it back. >> */ >> - IFQ_DRV_PREPEND(&ifp->if_snd, new); >> + IFQ_DRV_PREPEND(&ifp->if_snd, new_mbuf); >> return; >> } >> #endif >> - buf_ring_putback_sc(br, new); >> + buf_ring_putback_sc(br, new_mbuf); >> } >> >> static __inline struct mbuf * >> @@ -367,7 +367,7 @@ drbr_peek(struct ifnet *ifp, struct buf_ring *br) >> return (m); >> } >> #endif >> - return(buf_ring_peek(br)); >> + return ((struct mbuf *)buf_ring_peek(br)); >> } >> >> static __inline void >> @@ -379,7 +379,7 @@ drbr_flush(struct ifnet *ifp, struct buf_ring *br) >> if (ifp != NULL && ALTQ_IS_ENABLED(&ifp->if_snd)) >> IFQ_PURGE(&ifp->if_snd); >> #endif >> - while ((m = buf_ring_dequeue_sc(br)) != NULL) >> + while ((m = (struct mbuf *)buf_ring_dequeue_sc(br)) != NULL) >> m_freem(m); >> } >> >> @@ -402,7 +402,7 @@ drbr_dequeue(struct ifnet *ifp, struct buf_ring *br) >> return (m); >> } >> #endif >> - return (buf_ring_dequeue_sc(br)); >> + return ((struct mbuf *)buf_ring_dequeue_sc(br)); >> } >> >> static __inline void >> @@ -435,11 +435,11 @@ drbr_dequeue_cond(struct ifnet *ifp, struct buf_ring *br, >> return (m); >> } >> #endif >> - m = buf_ring_peek(br); >> + m = (struct mbuf *)buf_ring_peek(br); >> if (m == NULL || func(m, arg) == 0) >> return (NULL); >> >> - return (buf_ring_dequeue_sc(br)); >> + return ((struct mbuf *)buf_ring_dequeue_sc(br)); >> } >> >> static __inline int >> diff --git a/sys/sys/buf_ring.h b/sys/sys/buf_ring.h >> index a46aa2d..934f1a7 100644 >> --- a/sys/sys/buf_ring.h >> +++ b/sys/sys/buf_ring.h >> @@ -86,7 +86,8 @@ buf_ring_enqueue(struct buf_ring *br, void *buf) >> critical_exit(); >> return (ENOBUFS); >> } >> - } while (!atomic_cmpset_int(&br->br_prod_head, prod_head, prod_next)); >> + } while (!atomic_cmpset_int((volatile int *)&br->br_prod_head, >> + prod_head, prod_next)); >> #ifdef DEBUG_BUFRING >> if (br->br_ring[prod_head] != NULL) >> panic("dangling value in enqueue"); >> @@ -135,7 +136,7 @@ buf_ring_dequeue_mc(struct buf_ring *br) >> return (NULL); >> } >> >> - success = atomic_cmpset_int(&br->br_cons_head, cons_head, >> + success = atomic_cmpset_int((volatile int *)&br->br_cons_head, cons_head, >> cons_next); >> } while (success == 0); >> >> @@ -253,11 +254,11 @@ buf_ring_advance_sc(struct buf_ring *br) >> * the compare and an atomic. >> */ >> static __inline void >> -buf_ring_putback_sc(struct buf_ring *br, void *new) >> +buf_ring_putback_sc(struct buf_ring *br, void *new_item) >> { >> KASSERT(br->br_cons_head != br->br_prod_tail, >> ("Buf-Ring has none in putback")) ; >> - br->br_ring[br->br_cons_head] = new; >> + br->br_ring[br->br_cons_head] = new_item; >> } >> >> /* >> diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h >> index d3e6ce0..960636b 100644 >> --- a/sys/sys/mbuf.h >> +++ b/sys/sys/mbuf.h >> @@ -627,7 +627,7 @@ m_get(int how, short type) >> >> args.flags = 0; >> args.type = type; >> - return (uma_zalloc_arg(zone_mbuf, &args, how)); >> + return ((struct mbuf *)uma_zalloc_arg(zone_mbuf, &args, how)); >> } >> >> /* >> @@ -641,7 +641,7 @@ m_getclr(int how, short type) >> >> args.flags = 0; >> args.type = type; >> - m = uma_zalloc_arg(zone_mbuf, &args, how); >> + m = (struct mbuf *)uma_zalloc_arg(zone_mbuf, &args, how); >> if (m != NULL) >> bzero(m->m_data, MLEN); >> return (m); >> @@ -654,7 +654,7 @@ m_gethdr(int how, short type) >> >> args.flags = M_PKTHDR; >> args.type = type; >> - return (uma_zalloc_arg(zone_mbuf, &args, how)); >> + return ((struct mbuf *)uma_zalloc_arg(zone_mbuf, &args, how)); >> } >> >> static __inline struct mbuf * >> @@ -664,7 +664,7 @@ m_getcl(int how, short type, int flags) >> >> args.flags = flags; >> args.type = type; >> - return (uma_zalloc_arg(zone_pack, &args, how)); >> + return ((struct mbuf *)uma_zalloc_arg(zone_pack, &args, how)); >> } >> >> static __inline void >> @@ -703,7 +703,7 @@ m_cljget(struct mbuf *m, int how, int size) >> m->m_ext.ext_buf = NULL; >> >> zone = m_getzone(size); >> - return (uma_zalloc_arg(zone, m, how)); >> + return ((struct mbuf *)uma_zalloc_arg(zone, m, how)); >> } >> >> static __inline void >> @@ -736,12 +736,13 @@ m_cljset(struct mbuf *m, void *cl, int type) >> break; >> } >> >> - m->m_data = m->m_ext.ext_buf = cl; >> - m->m_ext.ext_free = m->m_ext.ext_arg1 = m->m_ext.ext_arg2 = NULL; >> + m->m_data = m->m_ext.ext_buf = (caddr_t)cl; >> + m->m_ext.ext_free = NULL; >> + m->m_ext.ext_arg1 = m->m_ext.ext_arg2 = NULL; >> m->m_ext.ext_size = size; >> m->m_ext.ext_type = type; >> m->m_ext.ext_flags = 0; >> - m->m_ext.ext_cnt = uma_find_refcnt(zone, cl); >> + m->m_ext.ext_cnt = (u_int *)uma_find_refcnt(zone, cl); >> m->m_flags |= M_EXT; >> >> } >> -- >> 1.8.4.5 >> >> _______________________________________________ >> freebsd-hackers@freebsd.org mailing list >> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers >> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" > _______________________________________________ > freebsd-hackers@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-hackers > To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org" >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5419D724.6000601>