Problem in yenta.c, 2nd edition

From: Jan Marek (jmarek@jcu.cz)
Date: Fri Nov 02 2001 - 03:39:35 EST


Hallo l-k,

the first: I'm very sorry for old post about PCMCIA: function
yenta_config_init() is called the first time from yenta_open()
and not from yenta_init(), as I think... It was my error...

I explored yenta.c through printk() function and I found the last
point, where kernel freeze: This point is here:

--- function yenta_open_bh() from drivers/pcmcia/yenta.c
/*
 * 'Bottom half' for the yenta_open routine. Allocate the interrupt line
 * and register the socket with the upper layers.
 */
static void yenta_open_bh(void * data)
{
        pci_socket_t * socket = (pci_socket_t *) data;

        /* It's OK to overwrite this now */
        socket->tq_task.routine = yenta_bh;
        printk("yenta_open_bh: socket->tq_task.routine\n");

        if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, (SA_SHIRQ | SA_INTERRUPT), socket->dev->name, socket)) {
                /* No IRQ or request_irq failed. Poll */
                printk("yenta_open_bh: in the if block\n");
                socket->cb_irq = 0; /* But zero is a valid IRQ number. */
                socket->poll_timer.function = yenta_interrupt_wrapper;
                socket->poll_timer.data = (unsigned long)socket;
                socket->poll_timer.expires = jiffies + HZ;
                printk("yenta_open_bh: before add_timer\n");
                add_timer(&socket->poll_timer);
                printk("yenta_open_bh: add_timer\n");
        }

        printk("yenta_open_bh: after if(!socket->cb_irq...\n");
        /* Figure out what the dang thing can do for the PCMCIA layer... */
        yenta_get_socket_capabilities(socket, isa_interrupts);
        printk("yenta_open_bh: after yenta_get_socket_capabilities\n");
        printk("Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));

        /* Register it with the pcmcia layer.. */
        cardbus_register(socket);
        printk("yenta_open_bh: cardbus_register()\n");

        MOD_DEC_USE_COUNT;
}
--- end of function

Last message from kernel is:
yenta_open_bh: socket->tq_task.routine

Then I mean, that problem is in the calling of request_irq(). As
you see, I tried call this function with flags (SA_SHIRQ |
SA_INTERRUPT), but this is not the right way too...

I wrote, that my Compaq has IRQ 11 shared between PCMCIA
controller and VGA card...

Please, can you cc any follow-ups to me? Thank you very much...

Sincerely
Jan Marek

-- 
Ing. Jan Marek
University of South Bohemia
Academic Computer Centre
Phone: +420-38-7772080
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Nov 07 2001 - 21:00:18 EST