[PATCH] C++ compatibility for some kernel headers
Sebastian Huber
sebastian.huber at embedded-brains.de
Wed Sep 17 11:23:08 UTC 2014
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
More information about the freebsd-hackers
mailing list