On Fri, 2009-11-27 at 01:43 +0100, Alexis Berlemont wrote:
> Hi Philippe,
> 
> Philippe Gerum wrote:
> > On Thu, 2009-11-26 at 10:34 +0100, Alexis Berlemont wrote:
> >> On Thu, Nov 26, 2009 at 9:22 AM, Ettore Pedretti <epedr...@gmail.com> 
> >> wrote:
> >>> Hi Alexis,
> >>>
> >>> I applied the patch to my local git repository:
> >>>
> >>> fangorn:/usr/src#
> >>> cd xenomai-head/
> >>> fangorn:/usr/src/xenomai-head# git apply ../patch_debug_1.diff
> >>> patch_debug_1.diff
> >>> fangorn:/usr/src/xenomai-head# git apply ../patch_debug_1.diff
> >>> ../patch_debug_1.diff:14: trailing whitespace.
> >>>       rtdm_printk("\t handler=%p, irq=%d, cookie=%p\n",
> >>> warning: 1 line adds whitespace errors.
> >>>
> >>> Then created a debian package:
> >>>
> >>> git-buildpackage -us -uc -rfakeroot --git-debian-branch=master
> >>> --git-upstream-branch=origin/master --git-ignore-new
> >>>
> >>> built a new kernel package:
> >>>
> >>> fakeroot make-kpkg --initrd --added-patches xenomai
> >>> --revision=ipipeComedi.2.4.06 --config menuconfig binary-arch
> >>>
> >>> and installed the Debian package with dpkg -i
> >>>
> >>> This is what happens when i insert the module into the kernel:
> >>>
> >>> fangorn:~/control/CHAMP/irqTest# insmod irqTest.ko
> >>> Killed
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:Oops: 0000 [#1] PREEMPT SMP
> >>> fangorn:~/control/CHAMP/irqTest#
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:last sysfs file: /sys/class/net/lo/operstate
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:Process insmod (pid: 3566, ti=f6c02000 task=f78634b0 
> >>> task.ti=f6c02000)
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:I-pipe domain Linux
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:Stack:
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:Call Trace:
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:Code:  Bad EIP value.
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:EIP: [<00000000>] 0x0 SS:ESP 0068:f6c03f18
> >>>
> >>> Message from sysl...@fangorn at Nov 26 00:09:52 ...
> >>>  kernel:CR2: 0000000000000000
> >>>
> >>> dmesg after insmod:
> >>>
> >>> irq_test: before rtdm_irq_request
> >>> BUG: unable to handle kernel NULL pointer dereference at (null)
> >>> IP: [<(null)>] (null)
> >>> *pde = 00000000
> >>> Oops: 0000 [#1] PREEMPT SMP
> >>> last sysfs file: /sys/class/net/lo/operstate
> >>> Modules linked in: irqTest(+) xeno_native analogy_ni_pcimio
> >>> analogy_ni_mio analogy_ni_tio analogy_8255 analogy_ni_mite
> >>> xeno_analogy xeno_rtdm astropci ext3 jbd mbcache ide_pci_generic
> >>> ide_core ata_piix sata_mv e1000 libata unix [last unloaded:
> >>> scsi_wait_scan]
> >>>
> >>> Pid: 3566, comm: insmod Not tainted (2.6.31.1 #1) X6DA8
> >>> EIP: 0060:[<00000000>] EFLAGS: 00010246 CPU: 1
> >>> EIP is at 0x0
> >>> EAX: 00000030
> > 
> > This is likely IRQ 48, with rthal_irq_enable jumping to address zero.
> > 
> >>  EBX: 00000000 ECX: 00000030 EDX: c1250b80
> >>> ESI: f8e24500 EDI: 00000000 EBP: f6c03f1c ESP: f6c03f18
> >>>  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
> >>> Process insmod (pid: 3566, ti=f6c02000 task=f78634b0 task.ti=f6c02000)
> >>> I-pipe domain Linux
> >>> Stack:
> >>>  c1154166 f6c03f24 c105abf7 f6c03f40 f8a0ea5d f8e24000 00000000 00000000
> >>> <0> f8e27000 00000000 f6c03f58 f8e2703e 00000000 f8e24066 00000000 
> >>> f8e27000
> >>> <0> f6c03f84 c1001028 f8e243c0 00000001 fffffffc f8e243c0 00000000 
> >>> f6c03f84
> >>> Call Trace:
> >>>  [<c1154166>] ? rthal_irq_enable+0x2d/0x31
> >>>  [<c105abf7>] ? xnintr_enable+0xb/0xd
> >>>  [<f8a0ea5d>] ? rtdm_irq_request+0x48/0x5e [xeno_rtdm]
> >>>  [<f8e24000>] ? test_handler+0x0/0x1c [irqTest]
> >>>  [<f8e27000>] ? __test_init+0x0/0x7e [irqTest]
> >>>  [<f8e2703e>] ? __test_init+0x3e/0x7e [irqTest]
> >>>  [<f8e27000>] ? __test_init+0x0/0x7e [irqTest]
> >>>  [<c1001028>] ? do_one_initcall+0x23/0x183
> >>>  [<c103a825>] ? blocking_notifier_call_chain+0x1a/0x1c
> >>>  [<c10481e9>] ? sys_init_module+0xad/0x1ec
> >>>  [<c1092cc5>] ? sys_close+0x71/0xb5
> >>>  [<c1002c25>] ? sysenter_do_call+0x12/0x16
> >>> Code:  Bad EIP value.
> >>> EIP: [<00000000>] 0x0 SS:ESP 0068:f6c03f18
> >>> CR2: 0000000000000000
> >>> ---[ end trace ac2616367ecf94b2 ]---
> >>>
> >>> I hope this is what you wanted me to try. Please let me know.
> >> So if I understand well, you "insmoded" the little test module which
> >> does nothing but calling rtdm_irq_request() and the NULL pointer bug
> >> occured.
> >>
> >> This bug occurred before calling analogy_config, you did not tried to
> >> attach the ni_pcimio driver, right ?
> >>
> >> If I am right, it seems like the bug is not located in analogy but
> >> between Xenomai's nucleus and Ipipe, which is ... weird.
> >>
> > 
> > The IRQ requested does not seem to have been associated with any chip
> > controller, which is likely the basic issue.
> 
> I had a look at arch/x86/kernel/apic/io_apic.c and the only controllers 
> which seem left unhandled by ipipe are the remapped ones (and the hpet 
> but I doubt it could be the hpet). Do you see any other possibility ?
> 

What needs to be assessed is whether irq48 gets registered through
ioapic_register_intr() because a routing was found, or not. Likely not.

> Do you think that writing a little test module which requests the irq 
> (through Linux API) is a good idea ?
> 
> After having loaded this module, the problematic controller should be 
> listed in /proc/interrupts...
> 

/proc/interrupts only lists Linux requested interrupts, not necessarily
all registered ones. So this won't do, since you likely don't want some
Linux driver to request an interrupt an RTDM driver wants to handle
(i.e. no IRQ sharing between domains).

> >> What is your kernel configuration ? no IO_APIC ?
> >> Which irq did you try to request ? 48 or 5 ?
> >>
> >> Which CPU are you using ?
> >>
> > 
> > Looks like something being used in x86_32 mode.
> > 
> >> Thank you for your time.
> >>
> >>> Cheers
> >>> Ettore
> >>>
> >>>
> >>> 2009/11/24 Alexis Berlemont <berlemont.h...@free.fr>:
> >>>> On Tuesday 24 November 2009 22:34:33 Ettore Pedretti wrote:
> >>>>> Hi,
> >>>>>
> >>>>> Would it help at this stage if I re-enable IO APIC, run your program
> >>>>> and send you the call-stack dump? I am willing to test your patch on
> >>>>> our hardware as soon as you got one ready, if that can be of help.
> >>>> Sorry, I did not answer your question. The bug occurs in both 
> >>>> configurations;
> >>>> so, do not bother changing your configuration for the moment.
> >>>>
> >>>>> Cheers
> >>>>> Ettore
> >>>>>
> >>>>> 2009/11/23 Alexis Berlemont <berlemont.h...@free.fr>:
> >>>>>> Hi,
> >>>>>>
> >>>>>> On Monday 23 November 2009 18:26:15 Ettore Pedretti wrote:
> >>>>>>> Hi,
> >>>>>>>
> >>>>>>> It is finally working. here is the dmesg after I insert a module:
> >>>>>>>
> >>>>>>> irq_test: before rtdm_irq_request
> >>>>>>> irq_test: after rtdm_irq_request (err = -22)
> >>>>>>> irq_test: before rtdm_irq_enable
> >>>>>>> irq_test: after rtdm_irq_enable (err = -22)
> >>>>>> rtdm_irq_request() returns -EINVAL because the IO APIC is disabled. So,
> >>>>>> the irq 48 turns into the irq 5;
> >>>>>>
> >>>>>>> Attached are a complete call-stack dump and my present kernel
> >>>>>>>  configuration.
> >>>>>> With the fact that there is still a NULL pointer bug without IO APIC, 
> >>>>>> the
> >>>>>> bug is bound to be located in analogy. There may be some wrong write
> >>>>>> access on the interrupt structure.
> >>>>>>
> >>>>>> I will come back with a patch which dumps the structure's content at
> >>>>>> various locations in the attach code.
> >>>>>>
> >>>>>>> Cheers
> >>>>>>> Ettore
> >>>>>>>
> >>>>>>> 2009/11/23 Alexis Berlemont <berlemont.h...@free.fr>:
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> On Mon, Nov 23, 2009 at 9:28 AM, Ettore Pedretti <e...@st-and.ac.uk>
> >>>>>> wrote:
> >>>>>>>>> Hi,
> >>>>>>>>>
> >>>>>>>>> I have compiled the module using this makefile:
> >>>>>>>>>
> >>>>>>>>> prefix := $(shell /usr/bin/xeno-config --prefix)
> >>>>>>>>> obj-m   := irqTest.o
> >>>>>>>>>
> >>>>>>>>> ifeq ($(prefix),)
> >>>>>>>>> $(error Please add <xeno-install>/bin to your PATH variable)
> >>>>>>>>> endif
> >>>>>>>>>
> >>>>>>>>> KDIR    := /lib/modules/$(shell uname -r)/build
> >>>>>>>>> PWD     := $(shell pwd)
> >>>>>>>>> EXTRA_CFLAGS := -I/usr/include/xenomai -I/usr/include/
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> all: default
> >>>>>>>>>
> >>>>>>>>> default:
> >>>>>>>>>        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
> >>>>>>>>>
> >>>>>>>>> install:
> >>>>>>>>>        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules_install
> >>>>>>>>>
> >>>>>>>>> clean:
> >>>>>>>>>        rm -fr *.mod.c *.o *.ko irqTest *~ .irqTest* .tmp_versions
> >>>>>>>>>
> >>>>>>>>> The module seems to compiles fine:
> >>>>>>>>>
> >>>>>>>>> make -C /lib/modules/2.6.31.1/build
> >>>>>>>>> SUBDIRS=/home/ep41/control/CHAMP/irqTest modules
> >>>>>>>>> make[1]: Entering directory `/usr/src/linux-2.6.31.1'
> >>>>>>>>>  CC [M]  /home/ep41/control/CHAMP/irqTest/irqTest.o
> >>>>>>>>>  Building modules, stage 2.
> >>>>>>>>>  MODPOST 1 modules
> >>>>>>>>>  CC      /home/ep41/control/CHAMP/irqTest/irqTest.mod.o
> >>>>>>>>>  LD [M]  /home/ep41/control/CHAMP/irqTest/irqTest.ko
> >>>>>>>>> make[1]: Leaving directory `/usr/src/linux-2.6.31.1'
> >>>>>>>>>
> >>>>>>>>> To make sure module dependencies are in place I modprobe irqbench
> >>>>>>>>> (probably not necessary).
> >>>>>>>>>
> >>>>>>>>> modprobe xeno_irqbench
> >>>>>>>>>
> >>>>>>>>> All the loaded modules:
> >>>>>>>>>
> >>>>>>>>> fangorn:~# lsmod
> >>>>>>>>> Module                  Size  Used by
> >>>>>>>>> xeno_irqbench           5152  0
> >>>>>>>>> xeno_native            83296  0
> >>>>>>>>> analogy_ni_pcimio      15676  0
> >>>>>>>>> analogy_ni_mio         41596  1 analogy_ni_pcimio
> >>>>>>>>> analogy_ni_tio         21724  1 analogy_ni_mio
> >>>>>>>>> analogy_8255            4060  1 analogy_ni_mio
> >>>>>>>>> analogy_ni_mite         9980  3
> >>>>>>>>> analogy_ni_pcimio,analogy_ni_mio,analogy_ni_tio xeno_analogy
> >>>>>>>>> 38876  5
> >>>>>>>>> analogy_ni_pcimio,analogy_ni_mio,analogy_ni_tio,analogy_8255,analogy_
> >>>>>>>>> ni_ mite xeno_rtdm              24244  3
> >>>>>>>>> xeno_irqbench,analogy_ni_mio,xeno_analogy astropci
> >>>>>>>>> 10968 0
> >>>>>>>>> ext3                  112900  1
> >>>>>>>>> jbd                    44016  1 ext3
> >>>>>>>>> mbcache                 6652  1 ext3
> >>>>>>>>> ide_pci_generic         3712  0
> >>>>>>>>> ide_core               79388  1 ide_pci_generic
> >>>>>>>>> e1000                 118204  0
> >>>>>>>>> ata_piix               15968  2
> >>>>>>>>> sata_mv                27632  0
> >>>>>>>>> libata                151468  2 ata_piix,sata_mv
> >>>>>>>>> unix                   24460  10
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> When I insert the module it complains about missing symbols:
> >>>>>>>>>
> >>>>>>>>> insmod irqTest.ko
> >>>>>>>>>
> >>>>>>>>> insmod: error inserting 'irqTest.ko': -1 Unknown symbol in module
> >>>>>>>>>
> >>>>>>>>> dmesg:
> >>>>>>>>>
> >>>>>>>>> irqTest: module license 'unspecified' taints kernel.
> >>>>>>>>> Disabling lock debugging due to kernel taint
> >>>>>>>>> irqTest: Unknown symbol xnintr_enable
> >>>>>>>>> irqTest: Unknown symbol xnintr_detach
> >>>>>>>>>
> >>>>>>>>> What am I doing wrong?
> >>>>>>>> It's me who did wrong. I just tested the compilation inside the
> >>>>>>>> kernel.
> >>>>>>>>
> >>>>>>>> xnintr_* symbols are only exported for GPL compliant modules. So,
> >>>>>>>> could you add the following line in the test module:
> >>>>>>>> MODULE_LICENSE("GPL");
> >>>>>>>>
> >>>>>>>> With that, the insmod operation should work.
> >>>>>>>>
> >>>>>>>>> BTW, I disabled  CONFIG_X86_IO_APIC and  the SMP option: same
> >>>>>>>>> problem.
> >>>>>>>> Could you send the call-stack dump ? Maybe, that will unveil a clue.
> >>>>>>>>
> >>>>>>>>> Cheers
> >>>>>>>>> Ettore
> >>>>>>>>>
> >>>>>>>>> 2009/11/22 Alexis Berlemont <alexis.berlem...@gmail.com>:
> >>>>>>>>>> Hi,
> >>>>>>>>>>
> >>>>>>>>>> On Sunday 22 November 2009 20:35:51 Ettore Pedretti wrote:
> >>>>>>>>>>> Hello,
> >>>>>>>>>>>
> >>>>>>>>>>> I downloaded Xenomai 2.5-rc4 from the xenomai-head.git. I need to
> >>>>>>>>>>> use the comedi drivers for Xenomai for a NI PCI-6711 function
> >>>>>>>>>>> generator board.
> >>>>>>>>>>>
> >>>>>>>>>>> When I try to use the test program cmd_write (or cmd-read) I 
> >>>>>>>>>>> obtain
> >>>>>>>>>>> the following:
> >>>>>>>>>>>
> >>>>>>>>>>> fangorn:~# cmd_write -vcmd_write: device analogy0 opened (fd=0)
> >>>>>>>>>>> cmd_write: basic descriptor retrieved
> >>>>>>>>>>>        subdevices count = 0
> >>>>>>>>>>>        read subdevice index = 0
> >>>>>>>>>>>        write subdevice index = 0
> >>>>>>>>>>> cmd_write: a4l_get_desc failed (ret=-22)
> >>>>>>>>>>> *** glibc detected *** cmd_write: free(): invalid next size 
> >>>>>>>>>>> (fast):
> >>>>>>>>>>> 0x0804d008 ***
> >>>>>>>>>>> ======= Backtrace: =========
> >>>>>>>>>>> /lib/i686/cmov/libc.so.6[0xb7e52624]
> >>>>>>>>>>> /lib/i686/cmov/libc.so.6(cfree+0x96)[0xb7e54826]
> >>>>>>>>>>> cmd_write[0x804927c]
> >>>>>>>>>>> /lib/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7dfa455]
> >>>>>>>>>>> cmd_write[0x8048b01]
> >>>>>>>>>>> ======= Memory map: ========
> >>>>>>>>>>> 08048000-0804a000 r-xp 00000000 08:01 10855303   
> >>>>>>>>>>> /usr/bin/cmd_write
> >>>>>>>>>>> 0804a000-0804b000 rw-p 00002000 08:01 10855303   
> >>>>>>>>>>> /usr/bin/cmd_write
> >>>>>>>>>>> 0804b000-0806e000 rw-p 00000000 00:00 0          [heap]
> >>>>>>>>>>> b7c00000-b7c21000 rw-p 00000000 00:00 0
> >>>>>>>>>>> b7c21000-b7d00000 ---p 00000000 00:00 0
> >>>>>>>>>>> b7dce000-b7dda000 r-xp 00000000 08:01 6127619    
> >>>>>>>>>>> /lib/libgcc_s.so.1
> >>>>>>>>>>> b7dda000-b7ddb000 rw-p 0000b000 08:01 6127619    
> >>>>>>>>>>> /lib/libgcc_s.so.1
> >>>>>>>>>>> b7de0000-b7de3000 rw-s 00000000 00:0b 426        /dev/rtheap
> >>>>>>>>>>> b7de3000-b7de4000 rw-p 00000000 00:00 0
> >>>>>>>>>>> b7de4000-b7f39000 r-xp 00000000 08:01 6144250
> >>>>>>>>>>>  /lib/i686/cmov/libc-2.7.so b7f39000-b7f3a000 r--p 00155000 08:01
> >>>>>>>>>>> 6144250    /lib/i686/cmov/libc-2.7.so b7f3a000-b7f3c000 rw-p
> >>>>>>>>>>> 00156000 08:01 6144250    /lib/i686/cmov/libc-2.7.so
> >>>>>>>>>>> b7f3c000-b7f3f000 rw-p 00000000 00:00 0
> >>>>>>>>>>> b7f3f000-b7f54000 r-xp 00000000 08:01 6144264
> >>>>>>>>>>> /lib/i686/cmov/libpthread-2.7.so
> >>>>>>>>>>> b7f54000-b7f56000 rw-p 00014000 08:01 6144264
> >>>>>>>>>>> /lib/i686/cmov/libpthread-2.7.so
> >>>>>>>>>>> b7f56000-b7f58000 rw-p 00000000 00:00 0
> >>>>>>>>>>> b7f58000-b7f5a000 r-xp 00000000 08:01 10808118
> >>>>>>>>>>> /usr/lib/librtdm.so.1.0.0 b7f5a000-b7f5b000 rw-p 00001000 08:01
> >>>>>>>>>>> 10808118   /usr/lib/librtdm.so.1.0.0 b7f5b000-b7f5c000 rw-p
> >>>>>>>>>>> 00000000 00:00 0
> >>>>>>>>>>> b7f5c000-b7f63000 r-xp 00000000 08:01 10808119
> >>>>>>>>>>>  /usr/lib/libnative.so.3.0.0 b7f63000-b7f64000 rw-p 00006000 08:01
> >>>>>>>>>>> 10808119 /usr/lib/libnative.so.3.0.0 b7f64000-b7f67000 r-xp
> >>>>>>>>>>> 00000000 08:01 10808112   /usr/lib/libanalogy.so.1.0.0
> >>>>>>>>>>> b7f67000-b7f68000 rw-p 00002000 08:01 10808112
> >>>>>>>>>>> /usr/lib/libanalogy.so.1.0.0
> >>>>>>>>>>> b7f69000-b7f6a000 rw-p 00000000 00:00 0
> >>>>>>>>>>> b7f6a000-b7f6d000 rw-s 00000000 00:0b 426        /dev/rtheap
> >>>>>>>>>>> b7f6d000-b7f6f000 rw-p 00000000 00:00 0
> >>>>>>>>>>> b7f6f000-b7f89000 r-xp 00000000 08:01 6127618    /lib/ld-2.7.so
> >>>>>>>>>>> b7f89000-b7f8b000 rw-p 0001a000 08:01 6127618    /lib/ld-2.7.so
> >>>>>>>>>>> bfab1000-bfac6000 rw-p 00000000 00:00 0          [stack]
> >>>>>>>>>>> ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
> >>>>>>>>>>> Aborted
> >>>>>>>>>>>
> >>>>>>>>>>> This is probably because the device /dev/analogy0 does not exist.
> >>>>>>>>>>>
> >>>>>>>>>>> This is the output of uname -a
> >>>>>>>>>>>
> >>>>>>>>>>> Linux fangorn 2.6.31.1 #1 SMP PREEMPT Fri Nov 20 20:42:26 PST 2009
> >>>>>>>>>>> i686 GNU/Linux
> >>>>>>>>>>>
> >>>>>>>>>>> And these are the relevant entries in dmesg
> >>>>>>>>>>>
> >>>>>>>>>>> dmesg:
> >>>>>>>>>>>
> >>>>>>>>>>> I-pipe 2.4-06: pipeline enabled.
> >>>>>>>>>>> I-pipe: Domain Xenomai registered.
> >>>>>>>>>>>
> >>>>>>>>>>> Xenomai: hal/i386 started.
> >>>>>>>>>>> Xenomai: scheduling class idle registered.
> >>>>>>>>>>> Xenomai: scheduling class rt registered.
> >>>>>>>>>>> Xenomai: real-time nucleus v2.5-rc4 (Flying In A Blue Dream)
> >>>>>>>>>>> loaded. Xenomai: SMI-enabled chipset found
> >>>>>>>>>>> Xenomai: SMI workaround enabled
> >>>>>>>>>>> Xenomai: starting RTDM services.
> >>>>>>>>>>> Xenomai: starting native API services.
> >>>>>>>>>>> Analogy: MITE: Available NI device IDs: 0x1880
> >>>>>>>>>>>
> >>>>>>>>>>> result of lspci for the relevant board:
> >>>>>>>>>>>
> >>>>>>>>>>> 04:01.0 Class ff00: National Instruments PCI-6711
> >>>>>>>>>>>
> >>>>>>>>>>> And lsmod:
> >>>>>>>>>>>
> >>>>>>>>>>> Module                  Size  Used by
> >>>>>>>>>>> xeno_native           105088  0
> >>>>>>>>>>> analogy_ni_pcimio      15644  0
> >>>>>>>>>>> analogy_ni_mio         44860  1 analogy_ni_pcimio
> >>>>>>>>>>> analogy_ni_tio         24956  1 analogy_ni_mio
> >>>>>>>>>>> analogy_8255            3900  1 analogy_ni_mio
> >>>>>>>>>>> analogy_ni_mite        10140  3
> >>>>>>>>>>>  analogy_ni_pcimio,analogy_ni_mio,analogy_ni_tio xeno_analogy
> >>>>>>>>>>>  40220  5
> >>>>>>>>>>> analogy_ni_pcimio,analogy_ni_mio,analogy_ni_tio,analogy_8255,analog
> >>>>>>>>>>> y_n i_mit e xeno_rtdm              28436  2
> >>>>>>>>>>> analogy_ni_mio,xeno_analogy astropci               10944  0
> >>>>>>>>>>> ext3                  109636  1
> >>>>>>>>>>> jbd                    43920  1 ext3
> >>>>>>>>>>> mbcache                 6272  1 ext3
> >>>>>>>>>>> ide_pci_generic         3712  0
> >>>>>>>>>>> ide_core               74204  1 ide_pci_generic
> >>>>>>>>>>> ata_piix               15748  2
> >>>>>>>>>>> sata_mv                26448  0
> >>>>>>>>>>> e1000                 114208  0
> >>>>>>>>>>> libata                142156  2 ata_piix,sata_mv
> >>>>>>>>>>> unix                   22992  10
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> According to this post:
> >>>>>>>>>>> http://www.mail-archive.com/xenomai-help@gna.org/msg09595.html
> >>>>>>>>>>>
> >>>>>>>>>>>> The analogy driver "a4l_pcimio" will be registered with your last
> >>>>>>>>>>>> insmod (analogy_ni_pcimio). You can check that by typing "cat
> >>>>>>>>>>>> /proc/analogy/drivers", you will see only one entry: a4l_pcimio.
> >>>>>>>>>>> fangorn:~# cat /proc/analogy/drivers
> >>>>>>>>>>> --  Analogy drivers --
> >>>>>>>>>>>
> >>>>>>>>>>> | idx | driver name
> >>>>>>>>>>> |  00 | analogy_ni_pcimio
> >>>>>>>>>>> |  01 | analogy_8255
> >>>>>>>>>>>
> >>>>>>>>>>> There are two entries and the drivers are not attached:
> >>>>>>>>>>>
> >>>>>>>>>>> fangorn:~# cat /proc/analogy/devices
> >>>>>>>>>>> --  Analogy devices --
> >>>>>>>>>>>
> >>>>>>>>>>> | idx | status | driver
> >>>>>>>>>>> |  00 | Unused | No driver
> >>>>>>>>>>> |  01 | Unused | No driver
> >>>>>>>>>>> |  02 | Unused | No driver
> >>>>>>>>>>> |  03 | Unused | No driver
> >>>>>>>>>>> |  04 | Unused | No driver
> >>>>>>>>>>> |  05 | Unused | No driver
> >>>>>>>>>>> |  06 | Unused | No driver
> >>>>>>>>>>> |  07 | Unused | No driver
> >>>>>>>>>>> |  08 | Unused | No driver
> >>>>>>>>>>> |  09 | Unused | No driver
> >>>>>>>>>>>
> >>>>>>>>>>> I'm aware of the name change of the drivers:
> >>>>>>>>>>> http://www.mail-archive.com/xenomai-...@gna.org/msg00741.html
> >>>>>>>>>>>
> >>>>>>>>>>>> - a4l_pcimio becomes analogy_ni_pcimio
> >>>>>>>>>>>> - 8255 becomes analogy_8255.
> >>>>>>>>>>>> Consequently, the command line to attach these drivers has
> >>>>>>>>>>>> changed. Starting from now, we have to type:
> >>>>>>>>>>>> - analogy_config analogyX analogy_ni_pcimio (instead of
> >>>>>>>>>>>> a4l_pcimio)
> >>>>>>>>>>> This is what happens when I try to attach the driver to de device:
> >>>>>>>>>>>
> >>>>>>>>>>> fangorn:~# analogy_config analogy0 analogy_ni_pcimio
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:Oops: 0000 [#1] PREEMPT SMP
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:last sysfs file:
> >>>>>>>>>>>  /sys/devices/pci0000:00/0000:00:1e.0/0000:06:02.0/class
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:Process analogy_config (pid: 3409, ti=f64cc000
> >>>>>>>>>>> task=f79013b0 task.ti=f64cc000)
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:I-pipe domain Linux
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:Stack:
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:Call Trace:
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:Code: 8b 45 9c e8 f2 f1 fa ff 89 c2 83 f8 01 0f 85 d4 fe 
> >>>>>>>>>>> ff
> >>>>>>>>>>> ff 8b 55 9c 8b 82 74 01 00 00 8b 00 f6 40 3c 06 0f 84 22 01 00 00
> >>>>>>>>>>> 8b 42 18 <8b> 40 04 89 45 b0 8b 40 14 8b 40 04 85 c0 0f 84 0b 01 
> >>>>>>>>>>> 00
> >>>>>>>>>>> 00 31
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:EIP: [<f8c7d029>] ni_E_init+0x267/0xff1 [analogy_ni_mio]
> >>>>>>>>>>> SS:ESP 0068:f64cddc8
> >>>>>>>>>>>
> >>>>>>>>>>> Message from sysl...@fangorn at Nov 21 23:22:37 ...
> >>>>>>>>>>>  kernel:CR2: 0000000000000004
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> relevant dmeg:
> >>>>>>>>>>>
> >>>>>>>>>>> a4l: analogy_ni_pcimio: pcimio_attach: found pci-6711 board
> >>>>>>>>>>> mite 0000:04:01.0: PCI->APIC IRQ transform: INT A -> IRQ 48
> >>>>>>>>>>> mite 0000:04:01.0: setting latency timer to 64
> >>>>>>>>>>> a4l: MITE: 0xd0801000 mapped to f8e26000
> >>>>>>>>>>> a4l: DAQ: 0xd0800000 mapped to f8e2a000
> >>>>>>>>>>> a4l: MITE: version = 1, type = 1, mite mode = 1, interface mode = 
> >>>>>>>>>>> 3
> >>>>>>>>>>> a4l: MITE: num channels = 3, write post fifo depth = 1, wins = 0,
> >>>>>>>>>>> iowins = 2 a4l: analogy_ni_pcimio: pcimio_attach: found irq 48
> >>>>>>>>>>> BUG: unable to handle kernel NULL pointer dereference at 00000004
> >>>>>>>>>>> IP: [<f8c7d029>] ni_E_init+0x267/0xff1 [analogy_ni_mio]
> >>>>>>>>>>> *pde = 00000000
> >>>>>>>>>>> Oops: 0000 [#1] PREEMPT SMP
> >>>>>>>>>>> last sysfs file:
> >>>>>>>>>>> /sys/devices/pci0000:00/0000:00:1e.0/0000:06:02.0/class Modules
> >>>>>>>>>>> linked in: xeno_native analogy_ni_pcimio analogy_ni_mio
> >>>>>>>>>>> analogy_ni_tio analogy_8255 analogy_ni_mite xeno_analogy xeno_rtdm
> >>>>>>>>>>> astropci ext3 jbd mbcache ide_pci_generic ide_core ata_piix 
> >>>>>>>>>>> sata_mv
> >>>>>>>>>>> e1000 libata unix [last unloaded: scsi_wait_scan]
> >>>>>>>>>>>
> >>>>>>>>>>> Pid: 3409, comm: analogy_config Not tainted (2.6.31.1 #1) X6DA8
> >>>>>>>>>>> EIP: 0060:[<f8c7d029>] EFLAGS: 00010202 CPU: 1
> >>>>>>>>>>> EIP is at ni_E_init+0x267/0xff1 [analogy_ni_mio]
> >>>>>>>>>>> EAX: 00000000 EBX: f8a22280 ECX: f8c31e6c EDX: f8c31e60
> >>>>>>>>>>> ESI: 00000000 EDI: f8c31e60 EBP: f64cde38 ESP: f64cddc8
> >>>>>>>>>>>  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
> >>>>>>>>>>> Process analogy_config (pid: 3409, ti=f64cc000 task=f79013b0
> >>>>>>>>>>>  task.ti=f64cc000) I-pipe domain Linux
> >>>>>>>>>>> Stack:
> >>>>>>>>>>>  f64cddd0 c10142b6 f64cddd8 f8c31e60 f64cdde0 c105abf7 f64cddfc
> >>>>>>>>>>> f8a0ea5d <0> f8c2be00 00000000 00000001 f8c31e94 fffffff0 f64cde14
> >>>>>>>>>>> f8c2c118 00000001 <0> f8c2ed0d f8c31e88 f8c31e60 f64cde38 f8c2cccf
> >>>>>>>>>>> 00000001 f8c31e60 00000030 Call Trace:
> >>>>>>>>>>>  [<c10142b6>] ? unmask_IO_APIC_irq+0xd/0xf
> >>>>>>>>>>>  [<c105abf7>] ? xnintr_enable+0xb/0xd
> >>>>>>>>>>>  [<f8a0ea5d>] ? rtdm_irq_request+0x48/0x5e [xeno_rtdm]
> >>>>>>>>>>>  [<f8c2be00>] ? a4l_handle_irq+0x0/0x1a [xeno_analogy]
> >>>>>>>>>>>  [<f8c2c118>] ? __a4l_request_irq+0x33/0x39 [xeno_analogy]
> >>>>>>>>>>>  [<f8c2cccf>] ? a4l_request_irq+0x98/0xaf [xeno_analogy]
> >>>>>>>>>>>  [<f8c8bd8a>] ? pcimio_attach+0x54d/0x664 [analogy_ni_pcimio]
> >>>>>>>>>>>  [<f8c2afef>] ? a4l_assign_driver+0x61/0x134 [xeno_analogy]
> >>>>>>>>>>>  [<f8c2b2ba>] ? a4l_device_attach+0x54/0x6d [xeno_analogy]
> >>>>>>>>>>>  [<c10662ea>] ? xnshadow_ppd_get+0x4f/0x58
> >>>>>>>>>>>  [<f8c2b54f>] ? a4l_ioctl_devcfg+0x57/0x104 [xeno_analogy]
> >>>>>>>>>>>  [<f8c2d36f>] ? a4l_rt_ioctl+0x33/0x3a [xeno_analogy]
> >>>>>>>>>>>  [<f8a0d3e6>] ? __rt_dev_ioctl+0xd1/0xd8 [xeno_rtdm]
> >>>>>>>>>>>  [<f8a0fe77>] ? sys_rtdm_open+0x5c/0x64 [xeno_rtdm]
> >>>>>>>>>>>  [<f8a0fdde>] ? sys_rtdm_ioctl+0x29/0x2b [xeno_rtdm]
> >>>>>>>>>>>  [<c10699ae>] ? losyscall_event+0xa9/0x190
> >>>>>>>>>>>  [<c10566ce>] ? __ipipe_dispatch_event+0xdf/0x201
> >>>>>>>>>>>  [<c1069905>] ? losyscall_event+0x0/0x190
> >>>>>>>>>>>  [<c10166a1>] ? __ipipe_syscall_root+0x3b/0xc4
> >>>>>>>>>>>  [<c1002cfd>] ? system_call+0x2d/0x4f
> >>>>>>>>>>> Code: 8b 45 9c e8 f2 f1 fa ff 89 c2 83 f8 01 0f 85 d4 fe ff ff 8b
> >>>>>>>>>>> 55 9c 8b 82 74 01 00 00 8b 00 f6 40 3c 06 0f 84 22 01 00 00 8b 42
> >>>>>>>>>>> 18 <8b> 40 04 89 45 b0 8b 40 14 8b 40 04 85 c0 0f 84 0b 01 00 00 
> >>>>>>>>>>> 31
> >>>>>>>>>>> EIP: [<f8c7d029>] ni_E_init+0x267/0xff1 [analogy_ni_mio] SS:ESP
> >>>>>>>>>>> 0068:f64cddc8 CR2: 0000000000000004
> >>>>>>>>>>> ---[ end trace c887d49bb5e86cf4 ]---
> >>>>>>>>>> Thanks for such a great report.
> >>>>>>>>>>
> >>>>>>>>>> I keep two things in mind:
> >>>>>>>>>> - cmd_write's error handling path is not buggy (that was already in
> >>>>>>>>>> my todo list). I will fix that as soon as possible.
> >>>>>>>>>>
> >>>>>>>>>> - according to the call-stack dump you made, the irq handler
> >>>>>>>>>> registering seems to be the source of the trouble. What strikes me
> >>>>>>>>>> is that the oops occurred very low (unmask_IO_APIC_irq: we are no
> >>>>>>>>>> more in the analogy layer).
> >>>>>>>>>>
> >>>>>>>>>> In order to be sure that the problem is located in analogy, it 
> >>>>>>>>>> would
> >>>>>>>>>> be great to test that calling rtdm_request_irq(... , 48, ...) does
> >>>>>>>>>> not trigger the bug.
> >>>>>>>>>>
> >>>>>>>>>> Here is a little test module you could try to insmod. If you do not
> >>>>>>>>>> want to bother finding out how to compile it, you can replace the
> >>>>>>>>>> code of an existing rtdm driver (for example:
> >>>>>>>>>> xenomai/ksrc/drivers/testing/irqbench.c) with the source below.
> >>>>>>>>>>
> >>>>>>>>>> Another interesting test would be to disable CONFIG_X86_IO_APIC in
> >>>>>>>>>> your kernel configuration (in "Processor type and features", 
> >>>>>>>>>> disable
> >>>>>>>>>> the SMP option and disable "IO APIC" under "Local APIC").
> >>>>>>>>>>
> >>>>>>>>>> #include <linux/version.h>
> >>>>>>>>>> #include <linux/module.h>
> >>>>>>>>>> #include <linux/ioport.h>
> >>>>>>>>>>
> >>>>>>>>>> #include <rtdm/rtdm_driver.h>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> int test_handler(rtdm_irq_t *irq_handle)
> >>>>>>>>>> {
> >>>>>>>>>>
> >>>>>>>>>>        rtdm_printk("irq_test: INTERRUPT!\n");
> >>>>>>>>>>
> >>>>>>>>>>        return RTDM_IRQ_HANDLED;
> >>>>>>>>>> }
> >>>>>>>>>>
> >>>>>>>>>> static rtdm_irq_t handle;
> >>>>>>>>>>
> >>>>>>>>>> static int __init __test_init(void)
> >>>>>>>>>> {
> >>>>>>>>>>
> >>>>>>>>>>        int err;
> >>>>>>>>>>
> >>>>>>>>>>        rtdm_printk("irq_test: before rtdm_irq_request\n");
> >>>>>>>>>>
> >>>>>>>>>>        err = rtdm_irq_request(&handle, 48, test_handler, 0,
> >>>>>>>>>> "test_irq", NULL);
> >>>>>>>>>>
> >>>>>>>>>>        rtdm_printk("irq_test: after rtdm_irq_request (err = %d)\n",
> >>>>>>>>>> err);
> >>>>>>>>>>
> >>>>>>>>>>        rtdm_printk("irq_test: before rtdm_irq_enable\n");
> >>>>>>>>>>
> >>>>>>>>>>        err = rtdm_irq_enable(&handle);
> >>>>>>>>>>
> >>>>>>>>>>        rtdm_printk("irq_test: after rtdm_irq_enable (err = %d)\n",
> >>>>>>>>>> err);
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>        return err;
> >>>>>>>>>> }
> >>>>>>>>>>
> >>>>>>>>>> static void __exit __test_exit(void)
> >>>>>>>>>> {
> >>>>>>>>>>
> >>>>>>>>>>        rtdm_irq_free(&handle);
> >>>>>>>>>>
> >>>>>>>>>> }
> >>>>>>>>>>
> >>>>>>>>>> module_init(__test_init);
> >>>>>>>>>> module_exit(__test_exit);
> >>>>>>>>>>
> >>>>>>>>>>> Can anyone help?
> >>>>>>>>>>>
> >>>>>>>>>>> Best regards
> >>>>>>>>>>> Ettore Pedretti
> >>>>>>>> Alexis.
> >>>>>> Alexis.
> >>>> _______________________________________________
> >>>> Xenomai-help mailing list
> >>>> Xenomai-help@gna.org
> >>>> https://mail.gna.org/listinfo/xenomai-help
> >>>>
> >>>
> >>>
> >>> --
> >>> Ettore Pedretti, SUPA
> >>> School of Physics and Astronomy
> >>> University of St Andrews, North Haugh,
> >>> St Andrews, Fife, KY16 9SS, Scotland
> >>> Ph: +44 1334 461669, Fax: +44-1334-463104
> >>> The University of St Andrews is a charity registered in Scotland : No 
> >>> SC013532
> >>>
> >>>
> >> Alexis.
> >>
> >> _______________________________________________
> >> Xenomai-help mailing list
> >> Xenomai-help@gna.org
> >> https://mail.gna.org/listinfo/xenomai-help
> > 
> > 
> 


-- 
Philippe.



_______________________________________________
Xenomai-help mailing list
Xenomai-help@gna.org
https://mail.gna.org/listinfo/xenomai-help

Reply via email to