* [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ
@ 2007-12-10 10:01 Thomas Wiedemann
2007-12-10 20:37 ` Wolfgang Grandegger
0 siblings, 1 reply; 5+ messages in thread
From: Thomas Wiedemann @ 2007-12-10 10:01 UTC (permalink / raw)
To: xenomai-core
[-- Attachment #1: Type: text/plain, Size: 304 bytes --]
Hi,
we had a problem compiling the CAN-Driver for the last release candidate
when
shared interrupts had been enabled, because of the re-named option
"CONFIG_XENO_OPT_SHIRQ_LEVEL.". After a quick look, version 2.4.0 still
doesn't fix this. A patch is included (for ksrc/drivers/can).
Greets,
Thomas
[-- Attachment #2: patch.txt --]
[-- Type: text/plain, Size: 1507 bytes --]
diff -urN sja1000.orig/rtcan_ems_pci.c sja1000/rtcan_ems_pci.c
--- sja1000.orig/rtcan_ems_pci.c 2007-09-16 19:20:45.000000000 +0200
+++ sja1000/rtcan_ems_pci.c 2007-12-10 10:14:58.000000000 +0100
@@ -272,7 +272,7 @@
if ((err = rtcan_ems_pci_add_chan(pdev, EMS_PCI_MASTER,
&master_dev)))
goto failure_cleanup;
-#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
+#ifdef CONFIG_XENO_OPT_SHIRQ
if ((err = rtcan_ems_pci_add_chan(pdev, EMS_PCI_SLAVE,
&master_dev)))
goto failure_cleanup;
diff -urN sja1000.orig/rtcan_ixxat_pci.c sja1000/rtcan_ixxat_pci.c
--- sja1000.orig/rtcan_ixxat_pci.c 2007-09-16 19:20:45.000000000 +0200
+++ sja1000/rtcan_ixxat_pci.c 2007-12-10 10:14:54.000000000 +0100
@@ -254,7 +254,7 @@
goto failure_iounmap;
if (channel != CHANNEL_SINGLE) {
-#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
+#ifdef CONFIG_XENO_OPT_SHIRQ
channel = CHANNEL_SLAVE;
if ((ret = rtcan_ixxat_pci_add_chan(pdev, channel,
&master_dev, conf_addr,
diff -urN sja1000.orig/rtcan_peak_pci.c sja1000/rtcan_peak_pci.c
--- sja1000.orig/rtcan_peak_pci.c 2007-09-16 19:20:45.000000000 +0200
+++ sja1000/rtcan_peak_pci.c 2007-12-10 10:14:51.000000000 +0100
@@ -292,7 +292,7 @@
if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_MASTER,
&master_dev)))
goto failure_cleanup;
-#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
+#ifdef CONFIG_XENO_OPT_SHIRQ
if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_SLAVE,
&master_dev)))
goto failure_cleanup;
=
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ
2007-12-10 10:01 [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ Thomas Wiedemann
@ 2007-12-10 20:37 ` Wolfgang Grandegger
2007-12-17 11:37 ` Wolfgang Grandegger
0 siblings, 1 reply; 5+ messages in thread
From: Wolfgang Grandegger @ 2007-12-10 20:37 UTC (permalink / raw)
To: Thomas Wiedemann; +Cc: xenomai-core
Thomas Wiedemann wrote:
> Hi,
>
> we had a problem compiling the CAN-Driver for the last release candidate
> when
> shared interrupts had been enabled, because of the re-named option
> "CONFIG_XENO_OPT_SHIRQ_LEVEL.". After a quick look, version 2.4.0 still
> doesn't fix this. A patch is included (for ksrc/drivers/can).
Ah, thanks for reporting. I'm going to remove these #ifdefs a.s.a.p.
It's sufficient to print an appropriate error messsage in case interrupt
registration fails with -EBUSY.
Wolfgang.
> ------------------------------------------------------------------------
>
> diff -urN sja1000.orig/rtcan_ems_pci.c sja1000/rtcan_ems_pci.c
> --- sja1000.orig/rtcan_ems_pci.c 2007-09-16 19:20:45.000000000 +0200
> +++ sja1000/rtcan_ems_pci.c 2007-12-10 10:14:58.000000000 +0100
> @@ -272,7 +272,7 @@
> if ((err = rtcan_ems_pci_add_chan(pdev, EMS_PCI_MASTER,
> &master_dev)))
> goto failure_cleanup;
> -#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
> +#ifdef CONFIG_XENO_OPT_SHIRQ
> if ((err = rtcan_ems_pci_add_chan(pdev, EMS_PCI_SLAVE,
> &master_dev)))
> goto failure_cleanup;
> diff -urN sja1000.orig/rtcan_ixxat_pci.c sja1000/rtcan_ixxat_pci.c
> --- sja1000.orig/rtcan_ixxat_pci.c 2007-09-16 19:20:45.000000000 +0200
> +++ sja1000/rtcan_ixxat_pci.c 2007-12-10 10:14:54.000000000 +0100
> @@ -254,7 +254,7 @@
> goto failure_iounmap;
>
> if (channel != CHANNEL_SINGLE) {
> -#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
> +#ifdef CONFIG_XENO_OPT_SHIRQ
> channel = CHANNEL_SLAVE;
> if ((ret = rtcan_ixxat_pci_add_chan(pdev, channel,
> &master_dev, conf_addr,
> diff -urN sja1000.orig/rtcan_peak_pci.c sja1000/rtcan_peak_pci.c
> --- sja1000.orig/rtcan_peak_pci.c 2007-09-16 19:20:45.000000000 +0200
> +++ sja1000/rtcan_peak_pci.c 2007-12-10 10:14:51.000000000 +0100
> @@ -292,7 +292,7 @@
> if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_MASTER,
> &master_dev)))
> goto failure_cleanup;
> -#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
> +#ifdef CONFIG_XENO_OPT_SHIRQ
> if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_SLAVE,
> &master_dev)))
> goto failure_cleanup;
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@domain.hid
> https://mail.gna.org/listinfo/xenomai-core
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ
2007-12-10 20:37 ` Wolfgang Grandegger
@ 2007-12-17 11:37 ` Wolfgang Grandegger
2007-12-22 18:58 ` Philippe Gerum
0 siblings, 1 reply; 5+ messages in thread
From: Wolfgang Grandegger @ 2007-12-17 11:37 UTC (permalink / raw)
To: Thomas Wiedemann; +Cc: xenomai-core
[-- Attachment #1: Type: text/plain, Size: 1169 bytes --]
Wolfgang Grandegger wrote:
> Thomas Wiedemann wrote:
>> Hi,
>>
>> we had a problem compiling the CAN-Driver for the last release candidate
>> when
>> shared interrupts had been enabled, because of the re-named option
>> "CONFIG_XENO_OPT_SHIRQ_LEVEL.". After a quick look, version 2.4.0 still
>> doesn't fix this. A patch is included (for ksrc/drivers/can).
>
> Ah, thanks for reporting. I'm going to remove these #ifdefs a.s.a.p.
> It's sufficient to print an appropriate error messsage in case interrupt
> registration fails with -EBUSY.
The attached patch fixes this issue. Here is the ChangeLog entry:
2007-12-17 Wolfgang Grandegger <wg@domain.hid>
* ksrc/drivers/can/sja1000/{rtcan_sja1000.c, rtcan_*_pci.c}: Remove
CONFIG_XENO_OPT_SHIRQ* ifdefs to fix build problems with recent
versions of Xenomai. If rtdm_irq_request() now fails with -EBUSY, an
error message reminds the user to check for shared interrupt support.
* ksrc/drivers/can/rtcan_dev.c (rtcan_dev_unregister): unregister
devices properly in case refcounts are disabled.
If there are no objections, I'm going to apply this patch to Xenomai
v2.3.x, v2.4.x and the trunk.
Wolfgang.
[-- Attachment #2: xenomai-rtcan-shirq-fix.patch --]
[-- Type: text/x-patch, Size: 6263 bytes --]
Index: ChangeLog
===================================================================
--- ChangeLog (revision 3274)
+++ ChangeLog (working copy)
@@ -1,3 +1,13 @@
+2007-12-17 Wolfgang Grandegger <wg@domain.hid>
+
+ * ksrc/drivers/can/sja1000/{rtcan_sja1000.c, rtcan_*_pci.c}: Remove
+ CONFIG_XENO_OPT_SHIRQ* ifdefs to fix build problems with recent
+ versions of Xenomai. If rtdm_irq_request() now fails with -EBUSY, an
+ error message reminds the user to check for shared interrupt support.
+
+ * ksrc/drivers/can/rtcan_dev.c (rtcan_dev_unregister): unregister
+ devices properly in case refcounts are disabled.
+
2007-12-09 Philippe Gerum <rpm@xenomai.org>
* include/native/misc.h: Do not run the auto-cleanup code for I/O
Index: ksrc/drivers/can/rtcan_dev.c
===================================================================
--- ksrc/drivers/can/rtcan_dev.c (revision 3274)
+++ ksrc/drivers/can/rtcan_dev.c (working copy)
@@ -260,7 +260,6 @@ int rtcan_dev_register(struct rtcan_devi
int rtcan_dev_unregister(struct rtcan_device *dev)
{
-#ifdef RTCAN_USE_REFCOUNT
rtdm_lockctx_t context;
@@ -278,6 +277,7 @@ int rtcan_dev_unregister(struct rtcan_de
rtdm_lock_get_irqsave(&rtcan_devices_rt_lock, context);
+#ifdef RTCAN_USE_REFCOUNT
while (atomic_read(&dev->refcount) > 0) {
rtdm_lock_put_irqrestore(&rtcan_devices_rt_lock, context);
up(&rtcan_devices_nrt_lock);
@@ -290,21 +290,20 @@ int rtcan_dev_unregister(struct rtcan_de
down(&rtcan_devices_nrt_lock);
rtdm_lock_get_irqsave(&rtcan_devices_rt_lock, context);
}
+#endif
rtcan_devices[dev->ifindex - 1] = NULL;
rtdm_lock_put_irqrestore(&rtcan_devices_rt_lock, context);
up(&rtcan_devices_nrt_lock);
+#ifdef RTCAN_USE_REFCOUNT
RTCAN_ASSERT(atomic_read(&dev->refcount) == 0,
printk("RTCAN: dev reference counter < 0!\n"););
+#endif
printk("RTCAN: unregistered %s\n", dev->name);
return 0;
-#else
- printk("RTCAN: Oops, unexpected call of rtcan_dev_unregister()\n");
- return -EINVAL;
-#endif
}
Index: ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c
===================================================================
--- ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c (revision 3274)
+++ ksrc/drivers/can/sja1000/rtcan_ixxat_pci.c (working copy)
@@ -186,7 +186,7 @@ static int rtcan_ixxat_pci_add_chan(stru
/* Register SJA1000 device */
ret = rtcan_sja1000_register(dev);
if (ret) {
- printk(KERN_ERR "ERROR while trying to register SJA1000 device %d!\n",
+ printk(KERN_ERR "ERROR %d while trying to register SJA1000 device!\n",
ret);
goto failure;
}
@@ -254,15 +254,11 @@ static int __devinit ixxat_pci_init_one
goto failure_iounmap;
if (channel != CHANNEL_SINGLE) {
-#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
channel = CHANNEL_SLAVE;
if ((ret = rtcan_ixxat_pci_add_chan(pdev, channel,
&master_dev, conf_addr,
base_addr + CHANNEL_OFFSET)))
goto failure_iounmap;
-#else
- printk("Shared interrupts not enabled, using single channel!\n");
-#endif
}
pci_set_drvdata(pdev, master_dev);
Index: ksrc/drivers/can/sja1000/rtcan_peak_pci.c
===================================================================
--- ksrc/drivers/can/sja1000/rtcan_peak_pci.c (revision 3274)
+++ ksrc/drivers/can/sja1000/rtcan_peak_pci.c (working copy)
@@ -247,10 +247,10 @@ static int rtcan_peak_pci_add_chan(struc
/* Register SJA1000 device */
ret = rtcan_sja1000_register(dev);
if (ret) {
- printk(KERN_ERR "ERROR while trying to register SJA1000 device %d!\n",
- ret);
+ printk(KERN_ERR
+ "ERROR %d while trying to register SJA1000 device!\n", ret);
goto failure;
- }
+ }
if (channel != CHANNEL_SLAVE)
*master_dev = dev;
@@ -292,13 +292,9 @@ static int __devinit peak_pci_init_one (
if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_MASTER,
&master_dev)))
goto failure_cleanup;
-#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_SLAVE,
&master_dev)))
goto failure_cleanup;
-#else
- printk("Shared interrupts not enabled, using single channel!\n");
-#endif
} else {
if ((ret = rtcan_peak_pci_add_chan(pdev, CHANNEL_SINGLE,
&master_dev)))
Index: ksrc/drivers/can/sja1000/rtcan_sja1000.c
===================================================================
--- ksrc/drivers/can/sja1000/rtcan_sja1000.c (revision 3274)
+++ ksrc/drivers/can/sja1000/rtcan_sja1000.c (working copy)
@@ -763,7 +763,9 @@ int rtcan_sja1000_register(struct rtcan_
chip->irq_num, rtcan_sja_interrupt,
chip->irq_flags, sja_ctrl_name, dev);
if (ret) {
- printk("ERROR! IRQ %d busy or invalid (code=%d)!\n", chip->irq_num, ret);
+ printk(KERN_ERR "ERROR %d: IRQ %d is %s!\n",
+ ret, chip->irq_num, ret == -EBUSY ?
+ "busy, check shared interrupt support" : "invalid");
return ret;
}
@@ -772,7 +774,8 @@ int rtcan_sja1000_register(struct rtcan_
/* Register RTDM device */
ret = rtcan_dev_register(dev);
if (ret) {
- printk(KERN_ERR "ERROR while trying to register RTCAN device!\n");
+ printk(KERN_ERR
+ "ERROR %d while trying to register RTCAN device!\n", ret);
goto out_irq_free;
}
Index: ksrc/drivers/can/sja1000/rtcan_ems_pci.c
===================================================================
--- ksrc/drivers/can/sja1000/rtcan_ems_pci.c (revision 3274)
+++ ksrc/drivers/can/sja1000/rtcan_ems_pci.c (working copy)
@@ -236,7 +236,7 @@ static int rtcan_ems_pci_add_chan(struct
err = rtcan_sja1000_register(dev);
if (err) {
printk(KERN_ERR
- "ERROR while trying to register SJA1000 device %d!\n",
+ "ERROR %d while trying to register SJA1000 device!\n",
err);
goto failure;
}
@@ -272,13 +272,9 @@ static int __devinit ems_pci_init_one (s
if ((err = rtcan_ems_pci_add_chan(pdev, EMS_PCI_MASTER,
&master_dev)))
goto failure_cleanup;
-#ifdef CONFIG_XENO_OPT_SHIRQ_LEVEL
if ((err = rtcan_ems_pci_add_chan(pdev, EMS_PCI_SLAVE,
&master_dev)))
goto failure_cleanup;
-#else
- printk("Shared interrupts not enabled, using single channel!\n");
-#endif
pci_set_drvdata(pdev, master_dev);
return 0;
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ
2007-12-17 11:37 ` Wolfgang Grandegger
@ 2007-12-22 18:58 ` Philippe Gerum
2007-12-22 20:52 ` Wolfgang Grandegger
0 siblings, 1 reply; 5+ messages in thread
From: Philippe Gerum @ 2007-12-22 18:58 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: Thomas Wiedemann, xenomai-core
Wolfgang Grandegger wrote:
> Wolfgang Grandegger wrote:
>> Thomas Wiedemann wrote:
>>> Hi,
>>>
>>> we had a problem compiling the CAN-Driver for the last release candidate
>>> when
>>> shared interrupts had been enabled, because of the re-named option
>>> "CONFIG_XENO_OPT_SHIRQ_LEVEL.". After a quick look, version 2.4.0 still
>>> doesn't fix this. A patch is included (for ksrc/drivers/can).
>> Ah, thanks for reporting. I'm going to remove these #ifdefs a.s.a.p.
>> It's sufficient to print an appropriate error messsage in case interrupt
>> registration fails with -EBUSY.
>
> The attached patch fixes this issue. Here is the ChangeLog entry:
>
> 2007-12-17 Wolfgang Grandegger <wg@domain.hid>
>
> * ksrc/drivers/can/sja1000/{rtcan_sja1000.c, rtcan_*_pci.c}: Remove
> CONFIG_XENO_OPT_SHIRQ* ifdefs to fix build problems with recent
> versions of Xenomai. If rtdm_irq_request() now fails with -EBUSY, an
> error message reminds the user to check for shared interrupt support.
>
> * ksrc/drivers/can/rtcan_dev.c (rtcan_dev_unregister): unregister
> devices properly in case refcounts are disabled.
>
> If there are no objections, I'm going to apply this patch to Xenomai
> v2.3.x, v2.4.x and the trunk.
>
Please merge. TIA,
--
Philippe.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ
2007-12-22 18:58 ` Philippe Gerum
@ 2007-12-22 20:52 ` Wolfgang Grandegger
0 siblings, 0 replies; 5+ messages in thread
From: Wolfgang Grandegger @ 2007-12-22 20:52 UTC (permalink / raw)
To: rpm; +Cc: Thomas Wiedemann, xenomai-core
Philippe Gerum wrote:
> Wolfgang Grandegger wrote:
>> Wolfgang Grandegger wrote:
>>> Thomas Wiedemann wrote:
>>>> Hi,
>>>>
>>>> we had a problem compiling the CAN-Driver for the last release candidate
>>>> when
>>>> shared interrupts had been enabled, because of the re-named option
>>>> "CONFIG_XENO_OPT_SHIRQ_LEVEL.". After a quick look, version 2.4.0 still
>>>> doesn't fix this. A patch is included (for ksrc/drivers/can).
>>> Ah, thanks for reporting. I'm going to remove these #ifdefs a.s.a.p.
>>> It's sufficient to print an appropriate error messsage in case interrupt
>>> registration fails with -EBUSY.
>> The attached patch fixes this issue. Here is the ChangeLog entry:
>>
>> 2007-12-17 Wolfgang Grandegger <wg@domain.hid>
>>
>> * ksrc/drivers/can/sja1000/{rtcan_sja1000.c, rtcan_*_pci.c}: Remove
>> CONFIG_XENO_OPT_SHIRQ* ifdefs to fix build problems with recent
>> versions of Xenomai. If rtdm_irq_request() now fails with -EBUSY, an
>> error message reminds the user to check for shared interrupt support.
>>
>> * ksrc/drivers/can/rtcan_dev.c (rtcan_dev_unregister): unregister
>> devices properly in case refcounts are disabled.
>>
>> If there are no objections, I'm going to apply this patch to Xenomai
>> v2.3.x, v2.4.x and the trunk.
>>
>
> Please merge. TIA,
Done.
Wolfgang.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2007-12-22 20:52 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-12-10 10:01 [Xenomai-core] Antwort: Xenomai v2.4.0: CONFIG_XENO_OPT_SHIRQ_LEVEL vs. CONFIG_XENO_OPT_SHIRQ Thomas Wiedemann
2007-12-10 20:37 ` Wolfgang Grandegger
2007-12-17 11:37 ` Wolfgang Grandegger
2007-12-22 18:58 ` Philippe Gerum
2007-12-22 20:52 ` Wolfgang Grandegger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.