Hi all, I want to assign bttv irqs in order to don't share irqs between bttv cards. So, can i try to assign "statically", at least for some test, irqs in bttv code? Could I lead to some problem doing that? My idea is to assign statically as best as possibile irq for all bttv chip, inside bttv_probe() and see is it improve in performance or quality. I did a simple patch (in attachment) that implement it. Only this doen's work, as I see continuosly Dec 19 16:58:46 localhost kernel: bttv0: timeout: drop=0 irq=0/0, risc=0176f03c, irq.n=21bits: VSYNC HSYNC RISCI Dec 19 16:58:46 localhost kernel: bttv0: reset, reinitialize Dec 19 16:58:46 localhost kernel: bttv0: PLL: 28636363 => 35468950 . ok Instead interrupts are registered correctly: ~# cat /proc/interrupts CPU0 CPU1 0: 255 0 IO-APIC-edge timer 1: 10 0 IO-APIC-edge i8042 8: 0 0 IO-APIC-edge bttv0 9: 0 0 IO-APIC-fasteoi acpi, bttv1 10: 0 0 IO-APIC-edge bttv2 11: 0 0 IO-APIC-edge bttv3 12: 0 0 IO-APIC-edge bttv4 13: 0 0 IO-APIC-edge bttv5 14: 10429 0 IO-APIC-edge ide0, bttv6 15: 0 0 IO-APIC-edge bttv7 16: 100001 0 IO-APIC-fasteoi uhci_hcd:usb2, uhci_hcd:usb5, bttv8 17: 100001 0 IO-APIC-fasteoi uhci_hcd:usb4, bttv9 18: 2 0 IO-APIC-fasteoi ehci_hcd:usb1, bttv10 19: 39 0 IO-APIC-fasteoi uhci_hcd:usb3, bttv11 20: 1252 0 IO-APIC-fasteoi eth0 NMI: 0 0 LOC: 137954 137940 ERR: 0 MIS: 0 What could be the problem? It seems that the irq handler doesn't "handle at all", but it's registered correctly. Thanks. -- -gaspa- ----------------------------------------------- -------- https://launchpad.net/~gaspa --------- ------ HomePage: iogaspa.altervista.org ------- -Il lunedi'dell'arrampicatore: www.lunedi.org -
--- bttv-driver.c 2007-12-19 17:44:36.000000000 +0100 +++ ../bt8xx.copy/bttv-driver.c 2007-12-07 09:24:24.000000000 +0100 @@ -4771,48 +4743,6 @@ /* disable irqs, register irq handler */ btwrite(0, BT848_INT_MASK); - { // gas stuff: - #define IRQ_START 8 - static unsigned int bttv_last_assigned_irq = IRQ_START - 1 ; - unsigned int i = bttv_last_assigned_irq + 1 ; - unsigned long irqmask; - free_irq(btv->c.pci->irq,NULL); - printk(KERN_INFO "MARK number 7\n"); - irqmask = probe_irq_on(); - probe_irq_off(irqmask); - printk(KERN_INFO "Starting guessing of a irq number (mask= %lx)\n",irqmask); - while( i <= 22){ - unsigned int flags = 0; - printk(KERN_INFO "trying with irq number %d\n",i); - if( ( irqmask >> i ) & 0x01 ) -/* flags = IRQF_DISABLED;*/ - flags = IRQF_DISABLED | IRQF_SHARED; - else - flags = IRQF_DISABLED | IRQF_SHARED; - printk(KERN_INFO "requesting irq number %d\n",i); - result = request_irq( i , bttv_irq, flags ,btv->c.name,(void *)btv); - printk(KERN_INFO "requesting irq number %d - result: %d \n",i,result); - if ( result == 0 ){ - printk(KERN_INFO "seems ok with irq number %d - %d \n",i,btv->c.pci->irq); - bttv_last_assigned_irq = i; -/* btv->c.pci->irq = i;*/ - break; - } - printk(KERN_INFO "irq busy or request unsuccessfull\n"); - i++; - } - if ( i > 22 ){ - result = request_irq(btv->c.pci->irq, bttv_irq, - IRQF_SHARED | IRQF_DISABLED,btv->c.name,(void *)btv); - printk(KERN_INFO "No irq available... limit: %d \n",i); - if (result < 0) { - printk(KERN_ERR "bttv%d: can't get IRQ %d\n", - bttv_num,btv->c.pci->irq); - goto fail1; - } - } - } -#if 0 result = request_irq(btv->c.pci->irq, bttv_irq, IRQF_SHARED | IRQF_DISABLED,btv->c.name,(void *)btv); if (result < 0) { @@ -4820,7 +4750,6 @@ bttv_num,btv->c.pci->irq); goto fail1; } -#endif if (0 != bttv_handle_chipset(btv)) { result = -EIO;