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:
parent
1232ea27c4
commit
fb0de0c946
|
@ -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 *));
|
||||||
|
|
Loading…
Reference in New Issue