Hi,
I suppose, one more thing was missed. intr_reg.patch is to address it.
intr_swap.patch - to be safe with xnintr_t::name in all cases. In
particular, the reported crash should disappear without other
additional patches.
--
Best regards,
Dmitry Adamushko
--- ./ksrc/skins/native/intr.c 2006-06-15 14:15:44.000000000 +0200
+++ ./ksrc/skins/native/intr-new.c 2007-01-10 14:45:26.320565000 +0100
@@ -223,6 +223,7 @@ static xnpnode_t __intr_pnode = {
*
* - Kernel module initialization/cleanup code
* - Kernel-based task
+ * - User-space task
*
* Rescheduling: possible.
*
@@ -262,11 +263,21 @@ int rt_intr_create(RT_INTR *intr,
/* <!> Since xnregister_enter() may reschedule, only register
complete objects, so that the registry cannot return handles to
half-baked objects... */
+ if (!err && name) {
+ xnpnode_t *pnode = &__intr_pnode;
- if (!err)
- err =
- xnregistry_enter(intr->name, intr, &intr->handle,
- &__intr_pnode);
+ if (!*name) {
+ /* Since this is an anonymous object (empty name on entry)
+ * from user-space, it gets registered under an unique
+ * internal name but is not exported through /proc. */
+ xnobject_create_name(intr->name, sizeof(intr->name),
+ (void *)intr);
+ pnode = NULL;
+ }
+
+ err = xnregistry_enter(intr->name, intr, &intr->handle, pnode);
+ }
+
#endif /* CONFIG_XENO_OPT_REGISTRY */
if (err)
--- ./ksrc/skins/native/intr-new.c 2007-01-10 14:45:26.320565000 +0100
+++ ./ksrc/skins/native/intr-new2.c 2007-01-10 14:46:08.319442000 +0100
@@ -242,8 +242,8 @@ int rt_intr_create(RT_INTR *intr,
if (xnpod_asynch_p())
return -EPERM;
- xnintr_init(&intr->intr_base, name, irq, isr, iack, mode);
xnobject_copy_name(intr->name, name);
+ xnintr_init(&intr->intr_base, intr->name, irq, isr, iack, mode);
#if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE)
xnsynch_init(&intr->synch_base, XNSYNCH_PRIO);
intr->pending = 0;
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help