Re: pre-2.1.81..

ak@muc.de
Thu, 22 Jan 1998 04:19:27 +0100


On Thu, Jan 22, 1998 at 01:08:06AM +0100, Linus Torvalds wrote:
>
> I just made a pre-2.1.81 available on ftp.kernel.org.
>
> This fixes the known problems of 2.1.80, and also makes the interrupt
> routing by default look like it always used to look - everything goes
> through the traditional external 8259A-compatible logic.

With Ingo's changes in pre-2.1.81 and the appended patch HiSax works
again. Linus, could you please add the patch to 2.1.81.

Thanks,
-Andi

--- ./drivers/isdn/hisax/ix1_micro.c~ Mon Nov 3 18:54:38 1997
+++ ./drivers/isdn/hisax/ix1_micro.c Thu Jan 22 03:13:25 1998
@@ -841,7 +841,7 @@
int loop = 0;
char tmp[40];

- sp->counter = kstat.interrupts[sp->irq];
+ sp->counter = kstat_irqs(sp->irq);
sprintf(tmp, "IRQ %d count %d", sp->irq, sp->counter);
debugl1(sp, tmp);
clear_pending_ints(sp);
@@ -854,16 +854,16 @@
/* At least 1-3 irqs must happen
* (one from HSCX A, one from HSCX B, 3rd from ISAC)
*/
- if (kstat.interrupts[sp->irq] > sp->counter)
+ if (kstat_irqs(sp->irq) > sp->counter)
break;
current->state = TASK_INTERRUPTIBLE;
current->timeout = jiffies + 1;
schedule();
}
sprintf(tmp, "IRQ %d count %d", sp->irq,
- kstat.interrupts[sp->irq]);
+ kstat_irqs(sp->irq));
debugl1(sp, tmp);
- if (kstat.interrupts[sp->irq] == sp->counter) {
+ if (kstat_irqs(sp->irq) == sp->counter) {
printk(KERN_WARNING
"ix1-Micro: IRQ(%d) getting no interrupts during init\n",
sp->irq);
--- ./drivers/isdn/hisax/avm_a1.c~ Mon Nov 3 18:54:38 1997
+++ ./drivers/isdn/hisax/avm_a1.c Thu Jan 22 03:11:57 1998
@@ -772,7 +772,7 @@
int loop = 0;
char tmp[40];

- sp->counter = kstat.interrupts[sp->irq];
+ sp->counter = kstat_irqs(sp->irq);
sprintf(tmp, "IRQ %d count %d", sp->irq, sp->counter);
debugl1(sp, tmp);
clear_pending_ints(sp);
@@ -785,16 +785,16 @@
/* At least 1-3 irqs must happen
* (one from HSCX A, one from HSCX B, 3rd from ISAC)
*/
- if (kstat.interrupts[sp->irq] > sp->counter)
+ if (kstat_irqs(sp->irq) > sp->counter)
break;
current->state = TASK_INTERRUPTIBLE;
current->timeout = jiffies + 1;
schedule();
}
sprintf(tmp, "IRQ %d count %d", sp->irq,
- kstat.interrupts[sp->irq]);
+ kstat_irqs(sp->irq));
debugl1(sp, tmp);
- if (kstat.interrupts[sp->irq] == sp->counter) {
+ if (kstat_irqs(sp->irq) == sp->counter) {
printk(KERN_WARNING
"AVM A1: IRQ(%d) getting no interrupts during init\n",
sp->irq);
--- ./drivers/isdn/hisax/elsa.c~ Mon Nov 3 18:54:38 1997
+++ ./drivers/isdn/hisax/elsa.c Thu Jan 22 03:12:38 1998
@@ -1180,7 +1180,7 @@
int ret, irq_cnt, cnt = 3;
long flags;

- irq_cnt = kstat.interrupts[sp->irq];
+ irq_cnt = kstat_irqs(sp->irq);
printk(KERN_INFO "Elsa: IRQ %d count %d\n", sp->irq, irq_cnt);
ret = get_irq(sp->cardnr, &elsa_interrupt);
#ifdef CONFIG_HISAX_ELSA_PCC
@@ -1213,8 +1213,8 @@
}
#endif
printk(KERN_INFO "Elsa: IRQ %d count %d\n", sp->irq,
- kstat.interrupts[sp->irq]);
- if (kstat.interrupts[sp->irq] == irq_cnt) {
+ kstat_irqs(sp->irq));
+ if (kstat_irqs(sp->irq) == irq_cnt) {
printk(KERN_WARNING
"Elsa: IRQ(%d) getting no interrupts during init %d\n",
sp->irq, 4 - cnt);
--- ./drivers/isdn/hisax/teles0.c~ Mon Nov 3 18:54:38 1997
+++ ./drivers/isdn/hisax/teles0.c Thu Jan 22 03:14:17 1998
@@ -802,7 +802,7 @@
int loop = 0;
char tmp[40];

- sp->counter = kstat.interrupts[sp->irq];
+ sp->counter = kstat_irqs(sp->irq);
sprintf(tmp, "IRQ %d count %d", sp->irq, sp->counter);
debugl1(sp, tmp);
clear_pending_ints(sp);
@@ -815,16 +815,16 @@
/* At least 1-3 irqs must happen
* (one from HSCX A, one from HSCX B, 3rd from ISAC)
*/
- if (kstat.interrupts[sp->irq] > sp->counter)
+ if (kstat_irqs(sp->irq) > sp->counter)
break;
current->state = TASK_INTERRUPTIBLE;
current->timeout = jiffies + 1;
schedule();
}
sprintf(tmp, "IRQ %d count %d", sp->irq,
- kstat.interrupts[sp->irq]);
+ kstat_irqs(sp->irq));
debugl1(sp, tmp);
- if (kstat.interrupts[sp->irq] == sp->counter) {
+ if (kstat_irqs(sp->irq) == sp->counter) {
printk(KERN_WARNING
"Teles0: IRQ(%d) getting no interrupts during init\n",
sp->irq);
--- ./drivers/isdn/hisax/teles3.c~ Thu Jan 22 03:48:45 1998
+++ ./drivers/isdn/hisax/teles3.c Thu Jan 22 03:14:49 1998
@@ -272,7 +272,7 @@
hscx_empty_fifo(hsp, count);
if ((count = hsp->rcvidx - 1) > 0) {
if (!(skb = dev_alloc_skb(count)))
- printk(KERN_WARNING "teles3: receive out of memory\n");
+ printk(KERN_WARNING "AVM: receive out of memory\n");
else {
memcpy(skb_put(skb, count), hsp->rcvbuf, count);
skb_queue_tail(&hsp->rqueue, skb);
@@ -287,7 +287,7 @@
if (hsp->mode == 1) {
/* receive audio data */
if (!(skb = dev_alloc_skb(32)))
- printk(KERN_WARNING "teles3: receive out of memory\n");
+ printk(KERN_WARNING "AVM: receive out of memory\n");
else {
memcpy(skb_put(skb, 32), hsp->rcvbuf, 32);
skb_queue_tail(&hsp->rqueue, skb);
@@ -801,7 +801,7 @@
int loop = 0;
char tmp[40];

- sp->counter = kstat.interrupts[sp->irq];
+ sp->counter = kstat_irqs(sp->irq);
sprintf(tmp, "IRQ %d count %d", sp->irq, sp->counter);
debugl1(sp, tmp);
clear_pending_ints(sp);
@@ -816,16 +816,17 @@
/* At least 1-3 irqs must happen
* (one from HSCX A, one from HSCX B, 3rd from ISAC)
*/
- if (kstat.interrupts[sp->irq] > sp->counter)
+ if (kstat_irqs(sp->irq) > sp->counter)
break;
current->state = TASK_INTERRUPTIBLE;
current->timeout = jiffies + 1;
schedule();
}
+
sprintf(tmp, "IRQ %d count %d loop %d", sp->irq,
- kstat.interrupts[sp->irq], loop);
+ kstat_irqs(sp->irq), loop);
debugl1(sp, tmp);
- if (kstat.interrupts[sp->irq] <= sp->counter) {
+ if (kstat_irqs(sp->irq) <= sp->counter) {
printk(KERN_WARNING
"Teles3: IRQ(%d) getting no interrupts during init\n",
sp->irq);