calling statcallb with ISDN_STAT_BSENT in hard-IRQ context is now

officially allowed. writebuf_skb() will never be called in hard-IRQ context
anymore.
This commit is contained in:
Kai Germaschewski 2000-03-17 12:49:42 +00:00
parent 10f9c57517
commit eb13d25d81
2 changed files with 35 additions and 11 deletions

View File

@ -21,6 +21,11 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.114 2000/03/16 16:37:41 kai
* Allow phone numbers starting with "*" as outgoing numbers for
* networking interface. Some PBX's need this to allow dialing internal
* numbers (mine, for example ;-)
*
* Revision 1.113 2000/03/16 15:46:37 kai
* a little bugfix and cosmetic changes
*
@ -917,16 +922,7 @@ isdn_net_stat_callback(int idx, isdn_ctrl *c)
frame is sent will not occur.
*/
if (lp->p_encap == ISDN_NET_ENCAP_SYNCPPP && lp->sav_skb) {
struct net_device *mdev;
if (lp->master)
mdev = lp->master;
else
mdev = &lp->netdev->dev;
if (!isdn_net_send_skb(mdev, lp, lp->sav_skb)) {
lp->sav_skb = NULL;
} else {
return 1;
}
queue_task(&lp->tqueue, &tq_immediate);
}
isdn_net_lp_xon(lp);
}
@ -3416,6 +3412,27 @@ isdn_net_force_dial(char *name)
}
/*
* called from tq_immediate
*/
static void
isdn_net_send_sav_skb(void *private)
{
isdn_net_local *lp = private;
struct net_device *mdev;
unsigned long flags;
if (lp->master)
mdev = lp->master;
else
mdev = &lp->netdev->dev;
save_flags(flags);
cli();
if (!isdn_net_send_skb(mdev, lp, lp->sav_skb))
lp->sav_skb = 0;
restore_flags(flags);
}
/*
* Allocate a new network-interface and initialize its data structures.
*/
char *
@ -3486,6 +3503,10 @@ isdn_net_new(char *name, struct net_device *master)
netdev->local->netdev = netdev;
netdev->local->next = netdev->local;
memset(&netdev->local->tqueue, 0, sizeof(struct tq_struct));
netdev->local->tqueue.routine = isdn_net_send_sav_skb;
netdev->local->tqueue.data = netdev->local;
netdev->local->isdn_device = -1;
netdev->local->isdn_channel = -1;
netdev->local->pre_device = -1;
@ -4031,7 +4052,6 @@ isdn_net_realrm(isdn_net_dev * p, isdn_net_dev * q)
save_flags(flags);
cli();
if (isdn_net_started(p)) {
restore_flags(flags);
return -EBUSY;

View File

@ -21,6 +21,9 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* $Log$
* Revision 1.95 2000/03/04 16:20:42 detabc
* copy frames before rewriting frame's saddr
*
* Revision 1.94 2000/02/26 00:29:40 keil
* more softnet changes
*
@ -774,6 +777,7 @@ typedef struct isdn_net_local_s {
int cisco_loop; /* Loop counter for Cisco-SLARP */
ulong cisco_myseq; /* Local keepalive seq. for Cisco */
ulong cisco_yourseq; /* Remote keepalive seq. for Cisco */
struct tq_struct tqueue;
#ifdef CONFIG_ISDN_WITH_ABC
ulong dw_abc_flags;
ulong dw_abc_if_flags;