bc971dee6e
Dave, you were right and the sleeping locks in shaper were broken. Markus Kanet noticed this and also tested the patch below that switches locking to spinlocks. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: David S. Miller <davem@davemloft.net>
64 lines
1.5 KiB
C
64 lines
1.5 KiB
C
#ifndef __LINUX_SHAPER_H
|
|
#define __LINUX_SHAPER_H
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
#define SHAPER_QLEN 10
|
|
/*
|
|
* This is a bit speed dependent (read it shouldn't be a constant!)
|
|
*
|
|
* 5 is about right for 28.8 upwards. Below that double for every
|
|
* halving of speed or so. - ie about 20 for 9600 baud.
|
|
*/
|
|
#define SHAPER_LATENCY (5*HZ)
|
|
#define SHAPER_MAXSLIP 2
|
|
#define SHAPER_BURST (HZ/50) /* Good for >128K then */
|
|
|
|
struct shaper
|
|
{
|
|
struct sk_buff_head sendq;
|
|
__u32 bytespertick;
|
|
__u32 bitspersec;
|
|
__u32 shapelatency;
|
|
__u32 shapeclock;
|
|
unsigned long recovery; /* Time we can next clock a packet out on
|
|
an empty queue */
|
|
spinlock_t lock;
|
|
struct net_device_stats stats;
|
|
struct net_device *dev;
|
|
int (*hard_start_xmit) (struct sk_buff *skb,
|
|
struct net_device *dev);
|
|
int (*hard_header) (struct sk_buff *skb,
|
|
struct net_device *dev,
|
|
unsigned short type,
|
|
void *daddr,
|
|
void *saddr,
|
|
unsigned len);
|
|
int (*rebuild_header)(struct sk_buff *skb);
|
|
int (*hard_header_cache)(struct neighbour *neigh, struct hh_cache *hh);
|
|
void (*header_cache_update)(struct hh_cache *hh, struct net_device *dev, unsigned char * haddr);
|
|
struct net_device_stats* (*get_stats)(struct net_device *dev);
|
|
struct timer_list timer;
|
|
};
|
|
|
|
#endif
|
|
|
|
#define SHAPER_SET_DEV 0x0001
|
|
#define SHAPER_SET_SPEED 0x0002
|
|
#define SHAPER_GET_DEV 0x0003
|
|
#define SHAPER_GET_SPEED 0x0004
|
|
|
|
struct shaperconf
|
|
{
|
|
__u16 ss_cmd;
|
|
union
|
|
{
|
|
char ssu_name[14];
|
|
__u32 ssu_speed;
|
|
} ss_u;
|
|
#define ss_speed ss_u.ssu_speed
|
|
#define ss_name ss_u.ssu_name
|
|
};
|
|
|
|
#endif
|