boolean
arch_pseudo_atomic_atomic(os_context_t *context)
{
- /* FIXME: this foreign_function_call_active test is dubious at
- * best. If a foreign call is made in a pseudo atomic section
- * (?) or more likely a pseudo atomic section is in a foreign
- * call then an interrupt is executed immediately. Maybe it
- * has to do with C code not maintaining pseudo atomic
- * properly. MG - 2005-08-10
- *
- * The foreign_function_call_active used to live at each call-site
- * to arch_pseudo_atomic_atomic, but this seems clearer.
- * --NS 2007-05-15 */
- return (!foreign_function_call_active)
- && os_context_register(context, reg_ALLOC) & 1;
+ return os_context_register(context, reg_ALLOC) & 1;
}
void
/* Nested lisp -> C calls may have clobbered gp. */
lw gp, framesize-16(sp)
+ /* Mark us as in C land. */
+ sw reg_CSP, foreign_function_call_active
+
/* Set the pseudo-atomic flag. */
li reg_NL4, 0
addu reg_ALLOC, 1
.set reorder
- /* Mark us as in C land. */
- sw reg_CSP, foreign_function_call_active
-
/* Save LISP state. */
subu reg_NL0, reg_ALLOC, 1
sw reg_NL0, dynamic_space_free_pointer
move reg_CFP, reg_CSP
addu reg_CSP, reg_CFP, 32
+ /* Mark us as in C land. */
+ sw reg_CSP, foreign_function_call_active
+
/* Set the pseudo-atomic flag. */
.set noreorder
li reg_NL4, 0
addu reg_ALLOC, 1
.set reorder
- /* Mark us as in C land. */
- sw reg_CSP, foreign_function_call_active
-
/* Convert the return address to an offset and save it on the stack. */
subu reg_NFP, reg_LIP, reg_CODE
addu reg_NFP, OTHER_POINTER_LOWTAG
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"1.0.8.34"
+"1.0.8.35"