Use atomic operations for setting ssir. Fixes problem when compiled without

optimization of losing a scheduled software interrupt and stalling the
softclock processing.
This commit is contained in:
mhitch 2006-10-07 17:31:44 +00:00
parent 1232ea27c4
commit fb0de0c946
1 changed files with 4 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: mtpr.h,v 1.17 2005/12/11 12:16:36 christos Exp $ */ /* $NetBSD: mtpr.h,v 1.18 2006/10/07 17:31:44 mhitch Exp $ */
/* /*
* Copyright (c) 1990 The Regents of the University of California. * Copyright (c) 1990 The Regents of the University of California.
@ -89,9 +89,9 @@
* <amiga/amiga/mtpr.h> ? * <amiga/amiga/mtpr.h> ?
*/ */
#include <amiga/amiga/custom.h> #include <amiga/amiga/custom.h>
#include <m68k/include/asm_single.h>
#ifdef DRACO #ifdef DRACO
#include <amiga/amiga/drcustom.h> #include <amiga/amiga/drcustom.h>
#include <m68k/include/asm_single.h>
#endif #endif
extern unsigned char ssir; extern unsigned char ssir;
@ -116,8 +116,8 @@ extern unsigned char ssir;
#define clrsoftint() do {custom.intreq = INTF_SOFTINT;} while (0) #define clrsoftint() do {custom.intreq = INTF_SOFTINT;} while (0)
#endif #endif
#define setsoftnet() do {ssir |= SIR_NET; setsoftint(); } while (0) #define setsoftnet() do {single_inst_bset_b(ssir, SIR_NET); setsoftint(); } while (0)
#define setsoftcback() do {ssir |= SIR_CBACK; setsoftint(); } while (0) #define setsoftcback() do {single_inst_bset_b(ssir, SIR_CBACK); setsoftint(); } while (0)
void softintr_schedule __P((void *)); void softintr_schedule __P((void *));
void *softintr_establish __P((int, void (*)(void *), void *)); void *softintr_establish __P((int, void (*)(void *), void *));