|
@@ -2,37 +2,35 @@
|
|
|
|
|
|
/* Written 1995-2000 by Werner Almesberger, EPFL ICA */
|
|
/* Written 1995-2000 by Werner Almesberger, EPFL ICA */
|
|
|
|
|
|
-
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
#include <linux/atm.h>
|
|
#include <linux/atm.h>
|
|
#include <linux/atmdev.h>
|
|
#include <linux/atmdev.h>
|
|
#include <linux/skbuff.h>
|
|
#include <linux/skbuff.h>
|
|
#include <linux/sonet.h>
|
|
#include <linux/sonet.h>
|
|
#include <linux/bitops.h>
|
|
#include <linux/bitops.h>
|
|
|
|
+#include <linux/errno.h>
|
|
#include <asm/atomic.h>
|
|
#include <asm/atomic.h>
|
|
-#include <asm/errno.h>
|
|
|
|
-
|
|
|
|
|
|
|
|
-int atm_charge(struct atm_vcc *vcc,int truesize)
|
|
|
|
|
|
+int atm_charge(struct atm_vcc *vcc, int truesize)
|
|
{
|
|
{
|
|
- atm_force_charge(vcc,truesize);
|
|
|
|
|
|
+ atm_force_charge(vcc, truesize);
|
|
if (atomic_read(&sk_atm(vcc)->sk_rmem_alloc) <= sk_atm(vcc)->sk_rcvbuf)
|
|
if (atomic_read(&sk_atm(vcc)->sk_rmem_alloc) <= sk_atm(vcc)->sk_rcvbuf)
|
|
return 1;
|
|
return 1;
|
|
- atm_return(vcc,truesize);
|
|
|
|
|
|
+ atm_return(vcc, truesize);
|
|
atomic_inc(&vcc->stats->rx_drop);
|
|
atomic_inc(&vcc->stats->rx_drop);
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(atm_charge);
|
|
|
|
|
|
-
|
|
|
|
-struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size,
|
|
|
|
- gfp_t gfp_flags)
|
|
|
|
|
|
+struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc, int pdu_size,
|
|
|
|
+ gfp_t gfp_flags)
|
|
{
|
|
{
|
|
struct sock *sk = sk_atm(vcc);
|
|
struct sock *sk = sk_atm(vcc);
|
|
int guess = atm_guess_pdu2truesize(pdu_size);
|
|
int guess = atm_guess_pdu2truesize(pdu_size);
|
|
|
|
|
|
- atm_force_charge(vcc,guess);
|
|
|
|
|
|
+ atm_force_charge(vcc, guess);
|
|
if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf) {
|
|
if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf) {
|
|
- struct sk_buff *skb = alloc_skb(pdu_size,gfp_flags);
|
|
|
|
|
|
+ struct sk_buff *skb = alloc_skb(pdu_size, gfp_flags);
|
|
|
|
|
|
if (skb) {
|
|
if (skb) {
|
|
atomic_add(skb->truesize-guess,
|
|
atomic_add(skb->truesize-guess,
|
|
@@ -40,10 +38,11 @@ struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size,
|
|
return skb;
|
|
return skb;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- atm_return(vcc,guess);
|
|
|
|
|
|
+ atm_return(vcc, guess);
|
|
atomic_inc(&vcc->stats->rx_drop);
|
|
atomic_inc(&vcc->stats->rx_drop);
|
|
return NULL;
|
|
return NULL;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(atm_alloc_charge);
|
|
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -73,7 +72,6 @@ struct sk_buff *atm_alloc_charge(struct atm_vcc *vcc,int pdu_size,
|
|
* else *
|
|
* else *
|
|
*/
|
|
*/
|
|
|
|
|
|
-
|
|
|
|
int atm_pcr_goal(const struct atm_trafprm *tp)
|
|
int atm_pcr_goal(const struct atm_trafprm *tp)
|
|
{
|
|
{
|
|
if (tp->pcr && tp->pcr != ATM_MAX_PCR)
|
|
if (tp->pcr && tp->pcr != ATM_MAX_PCR)
|
|
@@ -84,26 +82,20 @@ int atm_pcr_goal(const struct atm_trafprm *tp)
|
|
return -tp->max_pcr;
|
|
return -tp->max_pcr;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(atm_pcr_goal);
|
|
|
|
|
|
-
|
|
|
|
-void sonet_copy_stats(struct k_sonet_stats *from,struct sonet_stats *to)
|
|
|
|
|
|
+void sonet_copy_stats(struct k_sonet_stats *from, struct sonet_stats *to)
|
|
{
|
|
{
|
|
#define __HANDLE_ITEM(i) to->i = atomic_read(&from->i)
|
|
#define __HANDLE_ITEM(i) to->i = atomic_read(&from->i)
|
|
__SONET_ITEMS
|
|
__SONET_ITEMS
|
|
#undef __HANDLE_ITEM
|
|
#undef __HANDLE_ITEM
|
|
}
|
|
}
|
|
|
|
+EXPORT_SYMBOL(sonet_copy_stats);
|
|
|
|
|
|
-
|
|
|
|
-void sonet_subtract_stats(struct k_sonet_stats *from,struct sonet_stats *to)
|
|
|
|
|
|
+void sonet_subtract_stats(struct k_sonet_stats *from, struct sonet_stats *to)
|
|
{
|
|
{
|
|
-#define __HANDLE_ITEM(i) atomic_sub(to->i,&from->i)
|
|
|
|
|
|
+#define __HANDLE_ITEM(i) atomic_sub(to->i, &from->i)
|
|
__SONET_ITEMS
|
|
__SONET_ITEMS
|
|
#undef __HANDLE_ITEM
|
|
#undef __HANDLE_ITEM
|
|
}
|
|
}
|
|
-
|
|
|
|
-
|
|
|
|
-EXPORT_SYMBOL(atm_charge);
|
|
|
|
-EXPORT_SYMBOL(atm_alloc_charge);
|
|
|
|
-EXPORT_SYMBOL(atm_pcr_goal);
|
|
|
|
-EXPORT_SYMBOL(sonet_copy_stats);
|
|
|
|
EXPORT_SYMBOL(sonet_subtract_stats);
|
|
EXPORT_SYMBOL(sonet_subtract_stats);
|