diff options
-rw-r--r-- | open_issues/dde.mdwn | 23 | ||||
-rw-r--r-- | open_issues/dde/137784 | 43 |
2 files changed, 3 insertions, 63 deletions
diff --git a/open_issues/dde.mdwn b/open_issues/dde.mdwn index 9e2ec742..e2cff94f 100644 --- a/open_issues/dde.mdwn +++ b/open_issues/dde.mdwn @@ -8,25 +8,8 @@ Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] -[[General Information|/dde]]. - - -# IRC, freenode, #hurd, 2011-10-18 +[[!tag open_issue_hurd open_issue_gnumach]] -[[!tag open_issue_hurd]] - - [DDE crash, or similar] - <youpi> it's fake_local_irq_disable_flags(), then raw_local_irq_disable(), - then raw_local_irq_restore(), which *does not* release the cli_lock - <youpi> the "prove it" comment is (as I expected) completely wrong - <youpi> npnth: http://paste.debian.net/137784/ - -[[137784]] +[[General Information|/dde]]. - <youpi> could you try this patch ? - <youpi> (I've not even tried to build it) - <npnth> youpi: speaking of which, it still seems to hang :/ I'll 1) double - check it applied correctly and 2) get a gdb output if it did - <youpi> npnth: could you add printing the value of unlock_refcnt? - <youpi> so we can check what's happening - <npnth> unlock_refcnt is at 0, interesting +Still waiting for interface finalization and proper integration. diff --git a/open_issues/dde/137784 b/open_issues/dde/137784 deleted file mode 100644 index 1529465b..00000000 --- a/open_issues/dde/137784 +++ /dev/null @@ -1,43 +0,0 @@ -diff --git a/libdde_linux26/lib/src/arch/l4/cli_sti.c b/libdde_linux26/lib/src/arch/l4/cli_sti.c -index 051f259..6a8c460 100644 ---- a/libdde_linux26/lib/src/arch/l4/cli_sti.c -+++ b/libdde_linux26/lib/src/arch/l4/cli_sti.c -@@ -4,6 +4,8 @@ - - /* IRQ lock reference counter */ - static atomic_t _refcnt = ATOMIC_INIT(0); -+/* Refcnt value at which unlocking the cli_lock (it's not always 0) */ -+static int unlock_refcnt; - static ddekit_lock_t cli_lock; - - /* Check whether IRQs are currently disabled. -@@ -57,9 +59,6 @@ void fake_local_irq_restore(unsigned long flags) - /* Store the current flags state. - * - * This is done by returning the current refcnt. -- * -- * XXX: Up to now, flags was always 0 at this point and -- * I assume that this is always the case. Prove? - */ - unsigned long __raw_local_save_flags(void) - { -@@ -82,7 +81,7 @@ void raw_local_irq_restore(unsigned long flags) - { - Assert(cli_lock != NULL); - atomic_set(&_refcnt, flags); -- if (flags == 0) -+ if (flags == unlock_refcnt) - ddekit_lock_unlock(&cli_lock); - } - -@@ -95,7 +94,9 @@ void raw_local_irq_disable(void) - if (cli_lock == NULL) - ddekit_lock_init_unlocked(&cli_lock); - -- nested_lock(cli_lock); -+ if (nested_lock(cli_lock)) -+ /* Tell the corresponding restorer to release cli_lock */ -+ unlock_refcnt = atomic_read(&_refcnt); - atomic_inc(&_refcnt); - } - |