rom: krishnamurth...@hotmail.com
To: gilles.chanteperd...@xenomai.org; jan.kis...@siemens.com
CC: xenomai-core@gna.org
Subject: RE: [Xenomai-core] MSI support in Xenomai
Date: Fri, 25 Mar 2011 17:51:06 +0530
From: krishnamurth...@hotmail.com
To: gilles.chanteperd...@xenomai.org; jan.kis...@siemens.com
Date: Tue, 22 Mar 2011 23:50:27 +0530
CC: xenomai-core@gna.org
Subject: Re: [Xenomai-core] MSI support in Xenomai
Date: Tue, 22 Mar 2011 18:03:43 +0100
From: gilles.chanteperd...@xenomai.org
To: jan.kis...@siemens.com
CC: krishnamurth...@hotmail.com; xenomai-core@gna.org
Subject: Re: MSI support in Xenomai
Jan Kiszka wrote:
On 2011-03-22 16:55, krishna m wrote:
Mar 22 21:12:47 localhost kernel: test_dev: Probe for device function=0
Mar 22 21:12:47 localhost kernel: test_dev :15:00.0: found PCI INT A
- IRQ 10
Here you get IRQ 10...
Mar 22 21:12:47 localhost kernel: pci_bar = 0xfe00
Mar 22 21:12:47 localhost kernel: Xenomai: RTDM: RT open handler is
deprecated,
driver requires update.
Mar 22 21:12:47 localhost kernel: Xenomai: RTDM: RT close handler is
deprecated,
driver requires update.
[ These messages also have a meaning, though unrelated to the crash. ]
Mar 22 21:12:47 localhost kernel: test_dev: IRQ 16 successfully assigned
to the
device.
...but here IRQ 16 is assigned. Broken output or a real inconsistency?
Also, where is the MSI? You should see log messages about MSI/MSI-X IRQ
number assignment when properly enabling the support at PCI level.
Maybe pci_enable_msi was called after request_irq ?
--
Gilles.
Just check my code:
i do enable MSI (pci_enable_msi) before rtdm_irq_request pasted the code below
part of my PCI probe function in the device driver:
..
rtdm_dev = kmalloc(sizeof(struct rtdm_device), GFP_KERNEL);
if(!rtdm_dev) {
printk(KERN_WARNING RUBICON: kmalloc failed\n);
ret = -ENOMEM; //Insufficient storage space is available.
goto fail_pci;
}
//copy the structure to the new memory
memcpy(rtdm_dev, rubicon_rtdm_driver, sizeof(struct rtdm_device));
//create filename
snprintf(rtdm_dev-device_name,
RTDM_MAX_DEVNAME_LEN, rtser%d, 0 /*i*/);
rtdm_dev-device_id = 0; //i;
//define two other members of the rtdm_device structure
rtdm_dev-proc_name = rtdm_dev-device_name;
ret = rtdm_dev_register(rtdm_dev);
if(ret 0) {
printk(KERN_WARNINGRUBICON: cannot register device\n);
goto fail_pci;
}
g_rubicon_context.xen_device = rtdm_dev;
ret = pci_enable_msi(dev);
if(ret) {
printk(RUBICON: Enabling MSI failed wuth error code: 0x%x\n, ret);
goto fail_pci;
}
g_rubicon_context.irq = dev-irq; /* save the allocated IRQ */
g_rubicon_context.dev = dev; /* Save the PCI queue h/w device ctx */
dev_set_drvdata(dev,(void *) (g_rubicon_context));
/* request the irq for the device */
ret = rtdm_irq_request(g_rubicon_context.irq_handle,
g_rubicon_context.irq,
rubicon_irq_handler,
RTDM_IRQTYPE_SHARED,
rubicon,
(void *)g_rubicon_context);
From IRQ number perspective:
Mar 22 21:12:47 localhost kernel: test_dev :15:00.0: found PCI INT A - IRQ
10 is the print from the Kernel PCI Probe and
Mar 22 21:12:47 localhost kernel: test_dev: IRQ 16 successfully assigned
is my Print after enabling MSI and registering for irq.
I get the similar print with the Plain Linux kernel with the IRQ being assigned
MSI enabled is irq 20. [Below i have pasted the kernel log of plain linux
kernel]. I have tested the MSI interrupts and they work fine.
Mar 22 23:47:49 localhost kernel: test_dev: Probe for device function=0
Mar 22 23:47:49 localhost kernel: test_dev :15:00.0: found PCI INT A - IRQ
10
Mar 22 23:47:49 localhost kernel: pci_bar = 0xfe00
Mar 22 23:47:49 localhost kernel: test_dev: IRQ 20 successfully assigned to the
device.
Mar 22 23:47:49 localhost kernel: test_dev: Probe for device function=1
Mar 22 23:47:49 localhost kernel: test_dev: Successfully added test_dev Device
Driver.
Just wanted to add 3 more questions:
1. Which versions of Linux, Adeos patch and xenomai are tested for stable MSI
functionality ? Please let me know.
2. I am using the Xenomai Version linux-2.6.37, xenomai-2.5.6 and
adeos-ipipe-2.6.37-x86-2.9-00. Is this combination fine ?
3. I looked at the /proc/interrupts and with out xenomai loaded [i.e. default
linux kernel] I see my card beaing assigned MSI-EDGE interrupt and with xenomai
kernel i don't see the entry in the /proc/interrupts but in /proc/xenomai/irq i
see this entry
IRQ CPU0
16: 0 test_drv
521: 0 [IPI]
524:869467 [timer]
525: 0 [critical sync]
546: 0 [virtual]
Hi Jan and Chanteperdrix,
Any thoughts or inputs on my updates of MSI not working ?
Thanks and