From owner-freebsd-hackers@FreeBSD.ORG Wed Sep 17 17:37:26 2014 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 455B6815 for ; Wed, 17 Sep 2014 17:37:26 +0000 (UTC) Received: from mail-wg0-x231.google.com (mail-wg0-x231.google.com [IPv6:2a00:1450:400c:c00::231]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id C7D0DD76 for ; Wed, 17 Sep 2014 17:37:25 +0000 (UTC) Received: by mail-wg0-f49.google.com with SMTP id m15so1759236wgh.8 for ; Wed, 17 Sep 2014 10:37:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=hjbAXen3BqFPlbNKaHysvdMV3Xbf6FbxFEjnsTAYJJQ=; b=drDx/vHzXfJx06AJMRvGe58hBAvfJZYD9MZU+z6bqFIt3UHMmRtkS853NwCtVwrE++ GwJ9Vi0qkLAHhWu9ijknuGHAnSsKcCoy+7pXCppA4eRtufqDPWN35io7Y41RgqJzbZy4 uPg9v48gtr0IQKOosoGu9ifNcYy7p8xyNRdPNvMemPbZ6x30Dc7JoPgcoI0TS1zUKXxL RhcsFXAvheQaFZ+fnTACHSmDYSLK8LI01lRI1hnjfbm3ircrD3DPuLhvNz4EJ1G8cEwi rkBTDX3ISv1LtecUBcvEPu9gkT8+n1RTTQgJsZup4TWKB+SFryBBlJZQjj9wWrRiFNWz k3xA== MIME-Version: 1.0 X-Received: by 10.194.58.41 with SMTP id n9mr4301057wjq.20.1410975444033; Wed, 17 Sep 2014 10:37:24 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.216.106.199 with HTTP; Wed, 17 Sep 2014 10:37:23 -0700 (PDT) In-Reply-To: <1410952389-30368-1-git-send-email-sebastian.huber@embedded-brains.de> References: <1410952389-30368-1-git-send-email-sebastian.huber@embedded-brains.de> Date: Wed, 17 Sep 2014 10:37:23 -0700 X-Google-Sender-Auth: e0MraDof6qw9DsPj_r-UxLS9188 Message-ID: Subject: Re: [PATCH] C++ compatibility for some kernel headers From: Adrian Chadd To: Sebastian Huber Content-Type: text/plain; charset=UTF-8 Cc: "freebsd-hackers@freebsd.org" X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 17 Sep 2014 17:37:26 -0000 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 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"