Hello,

you program does not use Xenomai services and is therefore off-topic here, nevertheless...

mani bhatti wrote:
Hi
I have attached a kernel module parint.c.When i insert parint.ko into kernel i get the following message from kernel .

Request_irq returns 0
Interrupt generated. You should see the handler-message
Badness in enable_irq at kernel/irq/manage.c:126
 [<c012da81>] enable_irq+0x68/0xdf
 [<c80be033>] init_module+0x22/0x52 [parint]
 [<c80be000>] handler+0x0/0x11 [parint]
 [<c012c78a>] sys_init_module+0xb5/0x221
 [<c0102898>] syscall_call+0x7/0xb



Please if some one can point out the mistake i would be very helpful.
Thanks.

------------------------------------------------------------------------
Get your own web address. <http://us.rd.yahoo.com/evt=49678/*http://smallbusiness.yahoo.com/domains/?p=BESTDEAL> Have a HUGE year through Yahoo! Small Business. < http://us.rd.yahoo.com/evt=49678/*http://smallbusiness.yahoo.com/domains/?p=BESTDEAL>


------------------------------------------------------------------------

#include <linux/module.h>
#include <linux/interrupt.h>
#include <asm/io.h>

#define BASEPORT 0x378

static int handler(void)
{
        // do stuff
        printk(">>> PARALLEL PORT INT HANDLED\n");
        return IRQ_HANDLED;
}

int xinit_module(void)
{
        int ret;
        ret = request_irq(7, handler, SA_INTERRUPT, "parallelport", NULL);
        enable_irq(7);

I think that's the reason for the oops. Remove the unbalanced enable_irq() and disable_irq() from you code example. request_irq() and disable_irq() already enabled/disable the interrupts.

        printk("\nRequest_irq returns %d \n",ret);

        //set port to interrupt mode; pins are output
outb_p(0x10, BASEPORT + 2);
//      printk("Generating interrupt now on all output pins (intr/ACK = pin 
10)\n");
        
        //generate interrupt
        outb_p(0, BASEPORT);
        outb_p(255, BASEPORT);
        outb_p(0, BASEPORT);
//      printk("Interrupt generated. You should see the handler-message\n");
        return 0;
}

void xcleanup_module(void)
{
        disable_irq(7);
        free_irq(7, NULL);
}

module_init(xinit_module);
module_exit(xcleanup_module);
MODULE_LICENSE("GPL");

In gerneral, you should use RTDM services in a Xenomai driver module.

Wolfgang.

_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to