FreeSkb(skb); 
dev_kfree_skb(skb); 
isdnl2_l1l2(struct PStack *st, int pr, void *arg){	struct sk_buff *skb = arg;	u_char *datap;	int ret = 1, len;	int c = 0;	switch (pr) {		case (PH_DATA | INDICATION):			datap = skb->data;			len = l2addrsize(&st->l2);			if (skb->len > len)				datap += len;			else {				FsmEvent(&st->l2.l2m, EV_L2_FRAME_ERROR, (void *) 'N');				FreeSkb(skb);				return;			}			if (!(*datap & 1)) {	/* I-Frame */				if(!(c = iframe_error(st, skb)))					ret = FsmEvent(&st->l2.l2m, EV_L2_I, skb);			} else if (IsSFrame(datap, st)) {	/* S-Frame */				if(!(c = super_error(st, skb)))					ret = FsmEvent(&st->l2.l2m, EV_L2_SUPER, skb);			} else if (IsUI(datap)) {				if(!(c = UI_error(st, skb)))					ret = FsmEvent(&st->l2.l2m, EV_L2_UI, skb);			} else if (IsSABME(datap, st)) {				if(!(c = unnum_error(st, skb, CMD)))					ret = FsmEvent(&st->l2.l2m, EV_L2_SABME, skb);			} else if (IsUA(datap)) {				if(!(c = unnum_error(st, skb, RSP)))					ret = FsmEvent(&st->l2.l2m, EV_L2_UA, skb);			} else if (IsDISC(datap)) {				if(!(c = unnum_error(st, skb, CMD)))					ret = FsmEvent(&st->l2.l2m, EV_L2_DISC, skb);			} else if (IsDM(datap)) {				if(!(c = unnum_error(st, skb, RSP)))					ret = FsmEvent(&st->l2.l2m, EV_L2_DM, skb);			} else if (IsFRMR(datap)) {				if(!(c = FRMR_error(st,skb)))					ret = FsmEvent(&st->l2.l2m, EV_L2_FRMR, skb);			} else {				FsmEvent(&st->l2.l2m, EV_L2_FRAME_ERROR, (void *) 'L');				FreeSkb(skb);				ret = 0;			}			if(c) {				FreeSkb(skb);				FsmEvent(&st->l2.l2m, EV_L2_FRAME_ERROR, (void *)(long)c);				ret = 0;			}			if (ret)				FreeSkb(skb);			break;		case (PH_PULL | CONFIRM):			FsmEvent(&st->l2.l2m, EV_L2_ACK_PULL, arg);			break;		case (PH_PAUSE | INDICATION):			test_and_set_bit(FLG_DCHAN_BUSY, &st->l2.flag);			break;		case (PH_PAUSE | CONFIRM):			test_and_clear_bit(FLG_DCHAN_BUSY, &st->l2.flag);			break;		case (PH_ACTIVATE | CONFIRM):		case (PH_ACTIVATE | INDICATION):			test_and_set_bit(FLG_L1_ACTIV, &st->l2.flag);			if (test_and_clear_bit(FLG_ESTAB_PEND, &st->l2.flag))				FsmEvent(&st->l2.l2m, EV_L2_DL_ESTABLISH_REQ, arg);			break;		case (PH_DEACTIVATE | INDICATION):		case (PH_DEACTIVATE | CONFIRM):			test_and_clear_bit(FLG_L1_ACTIV, &st->l2.flag);			FsmEvent(&st->l2.l2m, EV_L1_DEACTIVATE, arg);			break;		default:			l2m_debug(&st->l2.l2m, "l2 unknown pr %04x", pr);			break;	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/672c3fd9069e5a138f9d4afc9aeb5aa34aacce32/isdnl2.c/buggy/drivers/isdn/hisax/isdnl2.c