43b81f85eb
Presently the b43legacy build fails on an sh randconfig: In file included from include/net/dst.h:12, from drivers/net/wireless/b43legacy/xmit.c:32: include/net/dst_ops.h:28: error: expected ':', ',', ';', '}' or '__attribute__' before '____cacheline_aligned_in_smp' include/net/dst_ops.h: In function 'dst_entries_get_fast': include/net/dst_ops.h:33: error: 'struct dst_ops' has no member named 'pcpuc_entries' include/net/dst_ops.h: In function 'dst_entries_get_slow': include/net/dst_ops.h:41: error: 'struct dst_ops' has no member named 'pcpuc_entries' include/net/dst_ops.h: In function 'dst_entries_add': include/net/dst_ops.h:49: error: 'struct dst_ops' has no member named 'pcpuc_entries' include/net/dst_ops.h: In function 'dst_entries_init': include/net/dst_ops.h:55: error: 'struct dst_ops' has no member named 'pcpuc_entries' include/net/dst_ops.h: In function 'dst_entries_destroy': include/net/dst_ops.h:60: error: 'struct dst_ops' has no member named 'pcpuc_entries' make[5]: *** [drivers/net/wireless/b43legacy/xmit.o] Error 1 make[5]: *** Waiting for unfinished jobs.... Signed-off-by: Paul Mundt <lethal@linux-sh.org> Signed-off-by: David S. Miller <davem@davemloft.net>
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
#ifndef _NET_DST_OPS_H
|
|
#define _NET_DST_OPS_H
|
|
#include <linux/types.h>
|
|
#include <linux/percpu_counter.h>
|
|
#include <linux/cache.h>
|
|
|
|
struct dst_entry;
|
|
struct kmem_cachep;
|
|
struct net_device;
|
|
struct sk_buff;
|
|
|
|
struct dst_ops {
|
|
unsigned short family;
|
|
__be16 protocol;
|
|
unsigned gc_thresh;
|
|
|
|
int (*gc)(struct dst_ops *ops);
|
|
struct dst_entry * (*check)(struct dst_entry *, __u32 cookie);
|
|
void (*destroy)(struct dst_entry *);
|
|
void (*ifdown)(struct dst_entry *,
|
|
struct net_device *dev, int how);
|
|
struct dst_entry * (*negative_advice)(struct dst_entry *);
|
|
void (*link_failure)(struct sk_buff *);
|
|
void (*update_pmtu)(struct dst_entry *dst, u32 mtu);
|
|
int (*local_out)(struct sk_buff *skb);
|
|
|
|
struct kmem_cache *kmem_cachep;
|
|
|
|
struct percpu_counter pcpuc_entries ____cacheline_aligned_in_smp;
|
|
};
|
|
|
|
static inline int dst_entries_get_fast(struct dst_ops *dst)
|
|
{
|
|
return percpu_counter_read_positive(&dst->pcpuc_entries);
|
|
}
|
|
|
|
static inline int dst_entries_get_slow(struct dst_ops *dst)
|
|
{
|
|
int res;
|
|
|
|
local_bh_disable();
|
|
res = percpu_counter_sum_positive(&dst->pcpuc_entries);
|
|
local_bh_enable();
|
|
return res;
|
|
}
|
|
|
|
static inline void dst_entries_add(struct dst_ops *dst, int val)
|
|
{
|
|
local_bh_disable();
|
|
percpu_counter_add(&dst->pcpuc_entries, val);
|
|
local_bh_enable();
|
|
}
|
|
|
|
static inline int dst_entries_init(struct dst_ops *dst)
|
|
{
|
|
return percpu_counter_init(&dst->pcpuc_entries, 0);
|
|
}
|
|
|
|
static inline void dst_entries_destroy(struct dst_ops *dst)
|
|
{
|
|
percpu_counter_destroy(&dst->pcpuc_entries);
|
|
}
|
|
|
|
#endif
|