FreeBSD Bugzilla – Attachment 147423 Details for
Bug 193733
C++ compatibility for some kernel headers
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch.
0001-C-compatibility-for-some-kernel-headers.patch (text/plain), 5.60 KB, created by
sebastian.huber
on 2014-09-18 05:46:17 UTC
(
hide
)
Description:
Patch.
Filename:
MIME Type:
Creator:
sebastian.huber
Created:
2014-09-18 05:46:17 UTC
Size:
5.60 KB
patch
obsolete
>From 364409112c09a167a7f88f636bc2b9cd99533d75 Mon Sep 17 00:00:00 2001 >From: Sebastian Huber <sebastian.huber@embedded-brains.de> >Date: Fri, 29 Aug 2014 11:05:19 +0200 >Subject: [PATCH] C++ compatibility for some kernel headers > >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 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 193733
: 147423