projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix Trac #2584: Pretty printing of types with HsDocTy
[ghc-hetmet.git]
/
rts
/
Capability.h
diff --git
a/rts/Capability.h
b/rts/Capability.h
index
8954578
..
ba0695c
100644
(file)
--- a/
rts/Capability.h
+++ b/
rts/Capability.h
@@
-32,11
+32,7
@@
struct Capability_ {
// code. During STG execution, the BaseReg register always points
// to the StgRegTable of the current Capability (&cap->r).
StgFunTable f;
// code. During STG execution, the BaseReg register always points
// to the StgRegTable of the current Capability (&cap->r).
StgFunTable f;
- StgRegTable r GNU_ATTRIBUTE(packed);
- // packed eliminates any padding between f and r. Not strictly
- // necessary, but it means the negative offsets for accessing
- // the fields of f when we are in STG code are as small as
- // possible.
+ StgRegTable r;
nat no; // capability number.
nat no; // capability number.
@@
-50,6
+46,9
@@
struct Capability_ {
// catching unsafe call-ins.
rtsBool in_haskell;
// catching unsafe call-ins.
rtsBool in_haskell;
+ // true if this Capability is currently in the GC
+ rtsBool in_gc;
+
// The run queue. The Task owning this Capability has exclusive
// access to its run queue, so can wake up threads without
// taking a lock, and the common path through the scheduler is
// The run queue. The Task owning this Capability has exclusive
// access to its run queue, so can wake up threads without
// taking a lock, and the common path through the scheduler is
@@
-144,12
+143,10
@@
struct Capability_ {
// Converts a *StgRegTable into a *Capability.
//
// Converts a *StgRegTable into a *Capability.
//
-#define OFFSET(s_type, field) ((size_t)&(((s_type*)0)->field))
-
INLINE_HEADER Capability *
regTableToCapability (StgRegTable *reg)
{
INLINE_HEADER Capability *
regTableToCapability (StgRegTable *reg)
{
- return (Capability *)((void *)((unsigned char*)reg - OFFSET(Capability,r)));
+ return (Capability *)((void *)((unsigned char*)reg - FIELD_OFFSET(Capability,r)));
}
// Initialise the available capabilities.
}
// Initialise the available capabilities.
@@
-191,6
+188,8
@@
extern Capability *capabilities;
extern Capability *last_free_capability;
// GC indicator, in scope for the scheduler
extern Capability *last_free_capability;
// GC indicator, in scope for the scheduler
+#define PENDING_GC_SEQ 1
+#define PENDING_GC_PAR 2
extern volatile StgWord waiting_for_gc;
// Acquires a capability at a return point. If *cap is non-NULL, then
extern volatile StgWord waiting_for_gc;
// Acquires a capability at a return point. If *cap is non-NULL, then
@@
-237,6
+236,7
@@
void wakeupThreadOnCapability (Capability *my_cap, Capability *other_cap,
// need to service some global event.
//
void prodOneCapability (void);
// need to service some global event.
//
void prodOneCapability (void);
+void prodCapability (Capability *cap, Task *task);
// Similar to prodOneCapability(), but prods all of them.
//
// Similar to prodOneCapability(), but prods all of them.
//